Oracle FAQ | Your Portal to the Oracle Knowledge Grid |
![]() |
![]() |
Home -> Community -> Usenet -> c.d.o.server -> ora-4094. can you explain it?
Hello,
Problem:
I can't insert several rows in B at once like this
INSERT INTO ... SELECT ... FROM ...,
but I can do that row by row (in PL/SQL for example).
Can anybody explain it?
I attached a SQL*Plus output below.
Thank you,
Tim Ashepkov
SQL> CREATE TABLE a (
2 col NUMBER NOT NULL PRIMARY KEY
3 );
Table created.
SQL>
SQL> CREATE TABLE b (
2 col NUMBER NOT NULL REFERENCES a(col)
3 );
Table created.
SQL>
SQL> CREATE OR REPLACE TRIGGER b_bi BEFORE INSERT ON b FOR EACH ROW
2 DECLARE
3 num_rec PLS_INTEGER;
4
5 BEGIN
6 SELECT count(*) INTO num_rec FROM a WHERE col = :new.col;
7
8 IF num_rec = 0 THEN 9 INSERT INTO a(col) VALUES (:new.col); 10 END IF;
Trigger created.
SQL>
SQL> CREATE TABLE bulk (
2 col NUMBER NOT NULL
3 );
Table created.
SQL>
SQL> INSERT INTO bulk(col) VALUES (1);
1 row created.
SQL> INSERT INTO bulk(col) VALUES (1);
1 row created.
SQL> INSERT INTO bulk(col) VALUES (2);
1 row created.
SQL> INSERT INTO bulk(col) VALUES (3);
1 row created.
SQL> INSERT INTO bulk(col) VALUES (4);
1 row created.
SQL> COMMIT; Commit complete.
SQL> SQL> -- that is not going to work SQL> INSERT INTO b(col) SELECT col FROM bulk; INSERT INTO b(col) SELECT col FROM bulk *
ORA-04094: table TASHEPKOV.A is constraining, trigger may not modify it ORA-06512: at "TASHEPKOV.B_BI", line 8 ORA-04088: error during execution of trigger 'TASHEPKOV.B_BI'
SQL> ROLLBACK; Rollback complete.
SQL> SQL> -- although that will work! SQL> BEGIN 2 FOR i IN (SELECT col FROM bulk) 3 LOOP 4 INSERT INTO b(col) VALUES (i.col); 5 END LOOP;
PL/SQL procedure successfully completed.
SQL>
SQL> SELECT * FROM a;
COL
1 2 3 4
SQL>
SQL> SELECT * FROM b;
COL
1 1 2 3 4
SQL>
Sent via Deja.com http://www.deja.com/
Share what you know. Learn what you don't.
Received on Thu Jul 08 1999 - 17:09:13 CDT
![]() |
![]() |