Home » SQL & PL/SQL » SQL & PL/SQL » internal error code, arguments: [15212], [1], [], [], [], [], [], []
internal error code, arguments: [15212], [1], [], [], [], [], [], [] [message #39307] |
Thu, 04 July 2002 21:33 |
Rozario Mariadassou
Messages: 12 Registered: March 2002
|
Junior Member |
|
|
I AM GETTING THE ABV ERROR WHEN MY TRIGGER CALLS THE FOLLOWING PROCEDURE. ANY IDEA HOW TO OVERCOME THIS.
CREATE OR REPLACE PROCEDURE data_repl
(IN_TABLE IN VARCHAR2,
IN_FLAG IN VARCHAR2) IS
SQLSTRING VARCHAR2(500);
V_TABLE VARCHAR2(100);
V_FIELD VARCHAR2(100);
V_CTR NUMBER(3) := 0;
BEGIN
V_TABLE := 'TRNF.' || IN_TABLE;
SQLSTRING := 'INSERT INTO ' || V_TABLE || ' VALUES(' ;
FOR TNAME IN (SELECT COLUMN_NAME FROM USER_TAB_COLUMNS WHERE TABLE_NAME = IN_TABLE) LOOP
V_CTR := V_CTR +1;
IF V_CTR = 1 THEN
V_FIELD := ':NEW.' || TNAME.COLUMN_NAME;
ELSE
V_FIELD := ',:NEW.' || TNAME.COLUMN_NAME;
END IF;
SQLSTRING := SQLSTRING || V_FIELD;
END LOOP;
SQLSTRING := SQLSTRING || ',''' || in_flag || ''')';
--INSERT INTO TMP VALUES (SQLSTRING);-- THIS WORKS FINE
EXECUTE IMMEDIATE SQLSTRING; -- THIS GIVES ERROR
END;
|
|
|
Re: internal error code, arguments: [15212], [1], [], [], [], [], [], [] [message #39313 is a reply to message #39307] |
Fri, 05 July 2002 15:01 |
|
Mahesh Rajendran
Messages: 10707 Registered: March 2002 Location: oracleDocoVille
|
Senior Member Account Moderator |
|
|
YEAH. I tried to simulate this.
IT is a bug with oracle 8.1.6 EE.When SQL parses a statement that has a bind variable but a bind
is not provided, SQL returns "internal error" instead of a specific error message.
SQL> get int
1 CREATE OR REPLACE PROCEDURE data_repl
2 (IN_TABLE IN VARCHAR2,
3 IN_FLAG IN VARCHAR2)
4 IS
5 SQLSTRING VARCHAR2(500);
6 V_TABLE VARCHAR2(100);
7 V_FIELD VARCHAR2(100);
8 V_CTR NUMBER(3) := 0;
9 BEGIN
10 V_TABLE := IN_TABLE||'_BACK';
11 SQLSTRING := 'INSERT INTO ' || V_TABLE || ' VALUES(' ;
12 FOR TNAME IN (SELECT COLUMN_NAME FROM USER_TAB_COLUMNS WHERE TABLE_NAME = IN_TABLE) LOOP
13 V_CTR := V_CTR +1;
14 IF V_CTR = 1 THEN
15 V_FIELD := ':NEW.' || TNAME.COLUMN_NAME;
16 ELSE
17 V_FIELD := ',:NEW.' || TNAME.COLUMN_NAME;
18 END IF;
19 SQLSTRING := SQLSTRING || V_FIELD;
20 END LOOP;
21 SQLSTRING := SQLSTRING || ',''' || in_flag || ''')';
22 -- INSERT INTO TMP VALUES (SQLSTRING);-- THIS WORKS FINE
23 EXECUTE IMMEDIATE SQLSTRING; -- THIS GIVES ERROR
24 DBMS_OUTPUT.PUT_LINE(sqlstring);
25* END;
26 /
Procedure created.
SQL>
SQL> CREATE OR REPLACE TRIGGER TRAGA
2 AFTER INSERT ON DEPT
3 FOR EACH ROW
4 BEGIN
5 DATA_REPL('DEPT','F');
6 END;
7 /
Trigger created.
SQL> INSERT INTO DEPT VALUES
2 ('38','DD','DD');
INSERT INTO DEPT VALUES
*
ERROR at line 1:
ORA-00600: internal error code, arguments: [15212], [3], [], [], [], [], [], []
ORA-06512: at "MAG.DATA_REPL", line 23
ORA-06512: at "MAG.TRAGA", line 2
ORA-04088: error during execution of trigger 'MAG.TRAGA'.
this is proved, when i commented execute immedidate
and used dbms_output to display just sqlstring (before executing). then the output of the trigger/procedure was something like this.
SQL> INSERT INTO DEPT VALUES
2 ('38','DD','DD');
INSERT INTO DEPT_BACK VALUES(:NEW.DEPTNO,:NEW.DNAME,:NEW.LOC,'F')
1 row created.
<i>dynamic sql treats :NEW.deptno etc (pseudo records) etc as BIND VARIABLES.</i> But a regular direct insert statement works like a charm.
|
|
|
Goto Forum:
Current Time: Thu Apr 25 16:48:14 CDT 2024
|