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 Go to next message
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 Go to previous message
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.
Previous Topic: how to write this simple sql statement
Next Topic: subquery: how to make non-correlated
Goto Forum:
  


Current Time: Thu Apr 25 16:48:14 CDT 2024