Solved

Returning into clause for an INSERT from a SELECT statement

Posted on 2008-10-01
8
2,929 Views
Last Modified: 2013-12-19
Hi,
I have the attached insert which creates a new audit_template. How do I get the NEW AUDIT_TEMPLATE_ID?

I tried putting:
returning AUDIT_TEMPLATE_ID into lNewTemplateID ;

get this error:
ORA-06550: line 21, column 4:
PL/SQL: ORA-00933: SQL command not properly ended
ORA-06550: line 5, column 1:
PL/SQL: SQL Statement ignored1. DECLARE
2.     lNewTemplateID NUMBER;
3.      pCloneTemplateId NUMBER:=205;
4. BEGIN
 
without the
returning AUDIT_TEMPLATE_ID into lNewTemplateID ;
it inserts great!


DECLARE

    lNewTemplateID NUMBER;

     pCloneTemplateId NUMBER:=205;

BEGIN

INSERT INTO AUDIT_TEMPLATE (

   TITLE, LINE_OF_BUSINESS, 

   ACTIVE, RESPONSE_TYPE_1, 

   RESPONSE_TYPE_2, RESPONSE_TYPE_3, FILE_NBR_DISP, 

   CLIENT_DISP, CLAIMANT_DISP, OFFICE_DISP, 

   EXAMINER_DISP, SUPERVISOR_DISP, NURSE_DISP, 

   NURSE_SUPERV_DISP, TEMPL_CLIENT,cloned_from) 

select 

   TITLE||' (Copy)', LINE_OF_BUSINESS, 

   ACTIVE, RESPONSE_TYPE_1, 

   RESPONSE_TYPE_2, RESPONSE_TYPE_3, FILE_NBR_DISP, 

   CLIENT_DISP, CLAIMANT_DISP, OFFICE_DISP, 

   EXAMINER_DISP, SUPERVISOR_DISP, NURSE_DISP, 

   NURSE_SUPERV_DISP, TEMPL_CLIENT,AUDIT_TEMPLATE_ID 

   from AUDIT_TEMPLATE 

   where AUDIT_TEMPLATE_ID = pCloneTemplateId

returning AUDIT_TEMPLATE_ID into lNewTemplateID ;
 

htp.prn('Old ID['|| pCloneTemplateId||']');

htp.prn('New ID['|| lNewTemplateID||']');

END;

Open in new window

0
Comment
Question by:bcarlis
8 Comments
 
LVL 15

Expert Comment

by:Shaju Kumbalath
Comment Utility
You can't use RETURNING in combination with a subquery on an insert, only with a VALUES clause
0
 
LVL 14

Expert Comment

by:GGuzdziol
Comment Utility
You cannot use returning clause if you use insert into ... select .... You can use it only for insert into ... values ....

See this:
SQL> create table bla (id number, value number);
 

Table created.
 

SQL> var x number;

SQL> insert into bla values (1, 2) returning id into :x;
 

1 row created.
 

SQL> insert into bla select 1, 2 from dual returning id into :x;

insert into bla select 1, 2 from dual returning id into :x

                                                *

ERROR at line 1:

ORA-00933: SQL command not properly ended

Open in new window

0
 
LVL 2

Author Comment

by:bcarlis
Comment Utility
What is a solution for getting it?
0
PRTG Network Monitor: Intuitive Network Monitoring

Network Monitoring is essential to ensure that computer systems and network devices are running. Use PRTG to monitor LANs, servers, websites, applications and devices, bandwidth, virtual environments, remote systems, IoT, and many more. PRTG is easy to set up & use.

 
LVL 14

Accepted Solution

by:
GGuzdziol earned 68 total points
Comment Utility
You can fetch the row you want to insert into local variables (i.e. instead of insert into ... select ... you put select ... into ...) and then issue INSERT INTO ... VALUES ... RETURNING.
0
 
LVL 4

Assisted Solution

by:KICUSek
KICUSek earned 66 total points
Comment Utility
I believe You can BULK COLLECT into collection.
0
 
LVL 15

Assisted Solution

by:Shaju Kumbalath
Shaju Kumbalath earned 66 total points
Comment Utility

DECLARE
lNewTemplateID NUMBER;

TYPE ARRAY IS TABLE OF shaju1%ROWTYPE;
l_data ARRAY;
pCloneTemplateId NUMBER:=205;
BEGIN
 
select AUDIT_TEMPLATE_ID,
TITLE||' (Copy)', LINE_OF_BUSINESS,
ACTIVE, RESPONSE_TYPE_1,
RESPONSE_TYPE_2, RESPONSE_TYPE_3, FILE_NBR_DISP,
CLIENT_DISP, CLAIMANT_DISP, OFFICE_DISP,
EXAMINER_DISP, SUPERVISOR_DISP, NURSE_DISP,
NURSE_SUPERV_DISP, TEMPL_CLIENT,AUDIT_TEMPLATE_ID into l_data
from AUDIT_TEMPLATE
where AUDIT_TEMPLATE_ID = pCloneTemplateId
 
INSERT INTO AUDIT_TEMPLATE
values l_data(1)
returning AUDIT_TEMPLATE_ID into lNewTemplateID ;

htp.prn('Old ID['|| pCloneTemplateId||']');
htp.prn('New ID['|| lNewTemplateID||']');
END;
 
 
0

Featured Post

PRTG Network Monitor: Intuitive Network Monitoring

Network Monitoring is essential to ensure that computer systems and network devices are running. Use PRTG to monitor LANs, servers, websites, applications and devices, bandwidth, virtual environments, remote systems, IoT, and many more. PRTG is easy to set up & use.

Join & Write a Comment

Why doesn't the Oracle optimizer use my index? Querying too much data Most Oracle developers know that an index is useful when you can use it to restrict your result set to a small number of the total rows in a table. So, the obvious side…
Truncate is a DDL Command where as Delete is a DML Command. Both will delete data from table, but what is the difference between these below statements truncate table <table_name> ?? delete from <table_name> ?? The first command cannot be …
This video shows, step by step, how to configure Oracle Heterogeneous Services via the Generic Gateway Agent in order to make a connection from an Oracle session and access a remote SQL Server database table.
This video explains what a user managed backup is and shows how to take one, providing a couple of simple example scripts.

743 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

10 Experts available now in Live!

Get 1:1 Help Now