'Can not safely replay call when trying to assign and use a variable in procedure
I am trying use the data from a column in one table as column aliases of another table.
DECLARE
var1 VARCHAR(20),
var2 VARCHAR(20);
BEGIN
WITH
TABLE1 AS (SELECT ROWNUM RN, * FROM TABLE)
,A1 AS (SELECT TO_CHAR(VALUE) INTO var1 FROM TABLE1 WHERE RN = 1)
,A2 AS (SELECT TO_CHAR(VALUE) INTO var2 FROM TABLE1 WHERE RN = 2)
SELECT
COL1 AS var1,
COL2 AS var2
FROM TABLE2;
END;
/
This is obviously a simplified version of my actual procedure, but is there a chance I can get some help in understanding why I am receiving the following error from this:
ORA-25408: can not safely replay call
If there is an easier way to go about this task to begin with, suggestions are more than welcome as well!
Solution 1:[1]
Your query does not give that error.
- There is a typo as line 2 should end with
;
and not,
- Then
TABLE
is a keyword used for table collection expressions and not for an identifier for a table. - Then you cannot use
*
with other columns without prefixing it with a table alias. - If you fix all that then you get the exeception
PL/SQL: ORA-01744: inappropriate INTO
From Oracle 12, you can select the first and second values from a table with the name TABLE_NAME
into the variables using:
DECLARE
var1 VARCHAR(20);
var2 VARCHAR(20);
BEGIN
SELECT TO_CHAR(VALUE)
INTO var1
FROM table_name
-- ORDER BY value
OFFSET 0 ROWS FETCH NEXT 1 ROW ONLY;
SELECT TO_CHAR(VALUE)
INTO var2
FROM table_name
-- ORDER BY value
OFFSET 1 ROWS FETCH NEXT 1 ROW ONLY;
DBMS_OUTPUT.PUT_LINE(var1);
DBMS_OUTPUT.PUT_LINE(var2);
END;
/
However, you would normally also use an ORDER BY
clause rather than taking the rows in whatever order they are read from the data files.
db<>fiddle here
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 |