Solved

Returning into clause for an INSERT from a SELECT statement

Posted on 2008-10-01
8
3,021 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
ID: 22614128
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
ID: 22614156
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
ID: 22614270
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
ID: 22614322
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
ID: 22623293
I believe You can BULK COLLECT into collection.
0
 
LVL 15

Assisted Solution

by:Shaju Kumbalath
Shaju Kumbalath earned 66 total points
ID: 22634402

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

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
grouping on time windows 6 43
Web Service from a stored procdure oracle 10 49
Export table into csv file in oracle 10 48
constraint check 2 20
Have you ever had to make fundamental changes to a table in Oracle, but haven't been able to get any downtime?  I'm talking things like: * Dropping columns * Shrinking allocated space * Removing chained blocks and restoring the PCTFREE * Re-or…
Using SQL Scripts we can save all the SQL queries as files that we use very frequently on our database later point of time. This is one of the feature present under SQL Workshop in Oracle Application Express.
This video shows how to Export data from an Oracle database using the Original Export Utility.  The corresponding Import utility, which works the same way is referenced, but not demonstrated.
This video explains what a user managed backup is and shows how to take one, providing a couple of simple example scripts.

863 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

21 Experts available now in Live!

Get 1:1 Help Now