Skip to Main Content

SQL & PL/SQL

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

How do i check for EXISTSence, on INSERT...RETURNING?

611118Apr 3 2008 — edited Apr 4 2008
I have a PROCEDURE that INSERTs a record, and returns the TRIGGER/SEQUENCE assigned id. Now i need to modify it, to INSERT...WHERE...NOT EXISTS.

The problem is, the usual way i would do this is to change the VALUES() clause into SELECT..FROM Dual..WHERE NOT EXISTS, but this invalidates the use of the RETURNING clause.

How do i check if a record already EXISTS and find out what the popped SEQUENCE value was?


SQL> CREATE TABLE A (A INT);

Table created.

SQL> CREATE SEQUENCE B;

Sequence created.

SQL> CREATE OR REPLACE TRIGGER C BEFORE INSERT ON A
2 FOR EACH ROW BEGIN SELECT B.NEXTVAL INTO :NEW.A FROM Dual; END;
3 /

Trigger created.

SQL>
SQL> VAR A NUMBER
SQL> INSERT INTO A(A) VALUES(1) RETURNING A INTO :A;

1 row created.

SQL> INSERT INTO A(A) SELECT 1 FROM Dual RETURNING A INTO :A;
INSERT INTO A(A) SELECT 1 FROM Dual RETURNING A INTO :A
*
ERROR at line 1:
ORA-00933: SQL command not properly ended


SQL>
SQL> DROP SEQUENCE B;

Sequence dropped.

SQL> DROP TABLE A;

Table dropped.
Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on May 2 2008
Added on Apr 3 2008
22 comments
2,399 views