Returning clause issue
drop table mytest
create table mytest(sid number, sname varchar2(40),source_id number, flag varchar2(1));
insert into mytest (SNAME,SOURCE_ID, FLAG) values ('kd',null,null);
insert into mytest (SNAME,SOURCE_ID,FLAG) values ('kd',null,null);
commit;
create sequence seq_t
start with 1
increment by 1
CREATE OR REPLACE TRIGGER TBIU_MYTEST
BEFORE INSERT OR UPDATE ON MYTEST
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
BEGIN
IF inserting THEN
IF :new.SID IS NULL THEN
SELECT SEQ_T.NEXTVAL
INTO :new.SID
FROM DUAL;
END IF ;
END IF ;
END ;
I wrote a procedure, given an sid, we create new record with source_id will be stored as sid (input param) and flag is Y,
But I want to see the new sid in the output param using returning
CREATE OR REPLACE PROCEDURE copy_sid
( in_sid IN mytest.sid%TYPE, out_sid OUT mytest.sid%type
IS
BEGIN
INSERT INTO mytest (sname, source_id, flag)
SELECT sname, sid, 'Y'
FROM MYTEST
WHERE sid = in_sid
returning sid into out_sid;
END copy_sid;
what is wrong with above syntax ? it gives command not
propely ended in the returning cluase
Check out this demo that uses sequence_name.CURRVAL
SQL > SELECT * FROM V$VERSION;
BANNER
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
PL/SQL Release 11.2.0.1.0 - Production
CORE 11.2.0.1.0 Production
TNS for 32-bit Windows: Version 11.2.0.1.0 - Production
NLSRTL Version 11.2.0.1.0 - Production
SQL > CREATE TABLE MYTEST(id NUMBER, txt VARCHAR2(10));
Table created.
SQL > INSERT INTO MYTEST VALUES(1,'A');
1 row created.
SQL > CREATE SEQUENCE mytest_seq START WITH 2 INCREMENT BY 1;
Sequence created.
SQL > CREATE OR REPLACE TRIGGER mytest_trg
2 BEFORE INSERT OR UPDATE ON mytest
3 FOR EACH ROW
4 BEGIN
5 IF INSERTING AND :new.ID IS NULL THEN
6 SELECT mytest_seq.NEXTVAL
7 INTO :new.ID
8 FROM dual
9 ;
10 END IF;
11 END;
12 /
Trigger created.
SQL > CREATE OR REPLACE PROCEDURE mytest_copy
2 ( p_sid IN mytest.id%TYPE
3 , p_sid_out OUT mytest.id%TYPE
4 )
5 AS
6 BEGIN
7 INSERT INTO mytest
8 ( txt
9 )
10 SELECT txt
11 FROM mytest
12 WHERE id = p_sid
13 ;
14
15 SELECT mytest_seq.CURRVAL
16 INTO p_sid_out
17 FROM dual
18 ;
19 END;
20 /
SP2-0804: Procedure created with compilation warnings
SQL > var sid NUMBER
SQL > exec mytest_copy(1,:sid);
PL/SQL procedure successfully completed.
SQL > print sid
SID
2
Similar Messages
-
ORA-22816: unsupported feature with RETURNING clause
My database is: 10g 10.2.0.3.0
Sorry this is a little long but I need some help!
The insert is being done in PLSQL with SQL.
I am trying to Insert a row into a view the view has 3 Instead of triggers. (insert, update, delete)
I have looked up this error and have seen that you cannot use a RETURNING clause on view with INSTEAD OF triggers
because it is not supported?
My issue is, I cannot find any code around this view where a RETURNING clause is being used.
Does anyone have any idea what else this could be??
1. The trigger populates old and new values based on wether it is an insert update or delete,
and then calls a procedure to do the insert, update or delete.
2. Then calls another procedure that builds an XML string to pass into oracle queueing.
They are all new triggers and procedures I have written.
I searched for "RETURNING" in all other dependent objects for this view and could not find anything.
Thats why I was wondering if it could be anything else?
Another FYI. This whole procedure is actually on some other tables as well. It works fine with no issue on the tables.
It wasn't until I started testing the VIEW that I started getting this error.
I commented out the procedure calls and I still have an issue. I disabled the trigger and the issue went away.
Another FYI to make it more interesting, The instead of update and the instead of delete triggers on this view
work just fine with the package calls and everything. They are written exactly as the instead of insert trigger.
It is only the instead of insert trigger that it is getting this error.
Can someone help??? See Instead of Insert trigger below.
{CREATE OR REPLACE TRIGGER TRIIBTF97A
INSTEAD OF INSERT ON RTI_BUS_TA_FORM97A_VW
FOR EACH ROW
DECLARE
old_rec RTI_BUS_TA_FORM97A_VW%ROWTYPE;
new_rec RTI_BUS_TA_FORM97A_VW%ROWTYPE;
v_change_type VARCHAR2(8);
v_event_source VARCHAR2(20) := 'TRIIBTF97A';
BEGIN
-- only new values on inserts
new_rec.DOC_LOC_NBR := :new.DOC_LOC_NBR ;
new_rec.TRAN_ID := :new.TRAN_ID ;
new_rec.RPTD_ADJ_SUBTOT_AMT := :new.RPTD_ADJ_SUBTOT_AMT ;
new_rec.CALC_ADJ_SUBTOT_AMT := :new.CALC_ADJ_SUBTOT_AMT ;
new_rec.RPTD_ADJ_SUBTOT2_AMT := :new.RPTD_ADJ_SUBTOT2_AMT ;
new_rec.CALC_ADJ_SUBTOT2_AMT := :new.CALC_ADJ_SUBTOT2_AMT ;
new_rec.RPTD_AGI_PRENOL_AMT := :new.RPTD_AGI_PRENOL_AMT ;
new_rec.CALC_AGI_PRENOL_AMT := :new.CALC_AGI_PRENOL_AMT ;
new_rec.RPTD_BAL_DUE_AMT := :new.RPTD_BAL_DUE_AMT ;
new_rec.CALC_BAL_DUE_AMT := :new.CALC_BAL_DUE_AMT ;
new_rec.RPTD_CC_CRED_AMT := :new.RPTD_CC_CRED_AMT ;
new_rec.CALC_CC_CRED_AMT := :new.CALC_CC_CRED_AMT ;
new_rec.RPTD_CHAR_CONTRIB_AMT := :new.RPTD_CHAR_CONTRIB_AMT ;
new_rec.CALC_CHAR_CONTRIB_AMT := :new.CALC_CHAR_CONTRIB_AMT ;
new_rec.RPTD_DIV_DEDUC_AMT := :new.RPTD_DIV_DEDUC_AMT ;
new_rec.CALC_DIV_DEDUC_AMT := :new.CALC_DIV_DEDUC_AMT ;
new_rec.RPTD_EST_PMT_AMT := :new.RPTD_EST_PMT_AMT ;
new_rec.CALC_EST_PMT_AMT := :new.CALC_EST_PMT_AMT ;
new_rec.RPTD_EZ_EMP_CRED_AMT := :new.RPTD_EZ_EMP_CRED_AMT ;
new_rec.CALC_EZ_EMP_CRED_AMT := :new.CALC_EZ_EMP_CRED_AMT ;
new_rec.RPTD_FED_INCM_AMT := :new.RPTD_FED_INCM_AMT ;
new_rec.CALC_FED_INCM_AMT := :new.CALC_FED_INCM_AMT ;
new_rec.RPTD_FRGN_GROSS_UP_AMT := :new.RPTD_FRGN_GROSS_UP_AMT ;
new_rec.CALC_FRGN_GROSS_UP_AMT := :new.CALC_FRGN_GROSS_UP_AMT ;
new_rec.RPTD_LREPT_AMT := :new.RPTD_LREPT_AMT ;
new_rec.CALC_LREPT_AMT := :new.CALC_LREPT_AMT ;
new_rec.RPTD_HRSJT_AMT := :new.RPTD_HRSJT_AMT ;
new_rec.CALC_HRSJT_AMT := :new.CALC_HRSJT_AMT ;
new_rec.RPTD_RELST_TAX_AMT := :new.RPTD_RELST_TAX_AMT ;
new_rec.CALC_RELST_TAX_AMT := :new.CALC_RELST_TAX_AMT ;
new_rec.RPTD_GOVT_INT_AMT := :new.RPTD_GOVT_INT_AMT ;
new_rec.CALC_GOVT_INT_AMT := :new.CALC_GOVT_INT_AMT ;
new_rec.RPTD_IN_AGI1_AMT := :new.RPTD_IN_AGI1_AMT ;
new_rec.CALC_IN_AGI1_AMT := :new.CALC_IN_AGI1_AMT ;
new_rec.RPTD_LRSJT_AMT := :new.RPTD_LRSJT_AMT ;
new_rec.CALC_LRSJT_AMT := :new.CALC_LRSJT_AMT ;
new_rec.RPTD_IN_NOL_AMT := :new.RPTD_IN_NOL_AMT ;
new_rec.CALC_IN_NOL_AMT := :new.CALC_IN_NOL_AMT ;
new_rec.RPTD_INCM_SUBTOT_AMT := :new.RPTD_INCM_SUBTOT_AMT ;
new_rec.CALC_INCM_SUBTOT_AMT := :new.CALC_INCM_SUBTOT_AMT ;
new_rec.RPTD_INT_DUE_AMT := :new.RPTD_INT_DUE_AMT ;
new_rec.CALC_INT_DUE_AMT := :new.CALC_INT_DUE_AMT ;
new_rec.RPTD_IRECV_CRED_AMT := :new.RPTD_IRECV_CRED_AMT ;
new_rec.CALC_IRECV_CRED_AMT := :new.CALC_IRECV_CRED_AMT ;
new_rec.RPTD_LATE_PEN_AMT := :new.RPTD_LATE_PEN_AMT ;
new_rec.CALC_LATE_PEN_AMT := :new.CALC_LATE_PEN_AMT ;
new_rec.RPTD_LIC_CRED_AMT := :new.RPTD_LIC_CRED_AMT ;
new_rec.CALC_LIC_CRED_AMT := :new.CALC_LIC_CRED_AMT ;
new_rec.RPTD_MODIF_AMT := :new.RPTD_MODIF_AMT ;
new_rec.CALC_MODIF_AMT := :new.CALC_MODIF_AMT ;
new_rec.RPTD_NAC_CRED_AMT := :new.RPTD_NAC_CRED_AMT ;
new_rec.CALC_NAC_CRED_AMT := :new.CALC_NAC_CRED_AMT ;
new_rec.RPTD_NONBUS_DISTA_AMT := :new.RPTD_NONBUS_DISTA_AMT ;
new_rec.CALC_NONBUS_DISTA_AMT := :new.CALC_NONBUS_DISTA_AMT ;
new_rec.RPTD_LTOT_AMT := :new.RPTD_LTOT_AMT ;
new_rec.CALC_LTOT_AMT := :new.CALC_LTOT_AMT ;
new_rec.RPTD_OTH_ADJ_AMT := :new.RPTD_OTH_ADJ_AMT ;
new_rec.CALC_OTH_ADJ_AMT := :new.CALC_OTH_ADJ_AMT ;
new_rec.RPTD_OTH_CRED_AMT := :new.RPTD_OTH_CRED_AMT ;
new_rec.CALC_OTH_CRED_AMT := :new.CALC_OTH_CRED_AMT ;
new_rec.RPTD_OTH_PMT_AMT := :new.RPTD_OTH_PMT_AMT ;
new_rec.CALC_OTH_PMT_AMT := :new.CALC_OTH_PMT_AMT ;
new_rec.RPTD_OVERPMT_CRED_AMT := :new.RPTD_OVERPMT_CRED_AMT ;
new_rec.CALC_OVERPMT_CRED_AMT := :new.CALC_OVERPMT_CRED_AMT ;
new_rec.RPTD_PRIOR_EXT_PMT_AMT := :new.RPTD_PRIOR_EXT_PMT_AMT ;
new_rec.CALC_PRIOR_EXT_PMT_AMT := :new.CALC_PRIOR_EXT_PMT_AMT ;
new_rec.RPTD_HRNTX_AMT := :new.RPTD_HRNTX_AMT ;
new_rec.CALC_HRNTX_AMT := :new.CALC_HRNTX_AMT ;
new_rec.RPTD_LRNTX_AMT := :new.RPTD_LRNTX_AMT ;
new_rec.CALC_LRNTX_AMT := :new.CALC_LRNTX_AMT ;
new_rec.RPTD_REFUND_DUE_AMT := :new.RPTD_REFUND_DUE_AMT ;
new_rec.CALC_REFUND_DUE_AMT := :new.CALC_REFUND_DUE_AMT ;
new_rec.RPTD_RELST_PP_TAX_AMT := :new.RPTD_RELST_PP_TAX_AMT ;
new_rec.CALC_RELST_PP_TAX_AMT := :new.CALC_RELST_PP_TAX_AMT ;
new_rec.RPTD_STATE_TAX_AMT := :new.RPTD_STATE_TAX_AMT ;
new_rec.CALC_STATE_TAX_AMT := :new.CALC_STATE_TAX_AMT ;
new_rec.RPTD_SU_TAX_AMT := :new.RPTD_SU_TAX_AMT ;
new_rec.CALC_SU_TAX_AMT := :new.CALC_SU_TAX_AMT ;
new_rec.RPTD_HREPT_AMT := :new.RPTD_HREPT_AMT ;
new_rec.CALC_HREPT_AMT := :new.CALC_HREPT_AMT ;
new_rec.RPTD_SUPP_NI_TAX1_AMT := :new.RPTD_SUPP_NI_TAX1_AMT ;
new_rec.CALC_SUPP_NI_TAX1_AMT := :new.CALC_SUPP_NI_TAX1_AMT ;
new_rec.RPTD_TAX_BUS_INC_AMT := :new.RPTD_TAX_BUS_INC_AMT ;
new_rec.CALC_TAX_BUS_INC_AMT := :new.CALC_TAX_BUS_INC_AMT ;
new_rec.RPTD_TOT_REL_TAX_AMT := :new.RPTD_TOT_REL_TAX_AMT ;
new_rec.CALC_TOT_REL_TAX_AMT := :new.CALC_TOT_REL_TAX_AMT ;
new_rec.RPTD_TAX_SUBTOT_AMT := :new.RPTD_TAX_SUBTOT_AMT ;
new_rec.CALC_TAX_SUBTOT_AMT := :new.CALC_TAX_SUBTOT_AMT ;
new_rec.RPTD_TCSP_CRED_AMT := :new.RPTD_TCSP_CRED_AMT ;
new_rec.CALC_TCSP_CRED_AMT := :new.CALC_TCSP_CRED_AMT ;
new_rec.RPTD_TOT_CRED_AMT := :new.RPTD_TOT_CRED_AMT ;
new_rec.CALC_TOT_CRED_AMT := :new.CALC_TOT_CRED_AMT ;
new_rec.RPTD_TOT_DUE_AMT := :new.RPTD_TOT_DUE_AMT ;
new_rec.CALC_TOT_DUE_AMT := :new.CALC_TOT_DUE_AMT ;
new_rec.RPTD_TOT_OVERPMT_AMT := :new.RPTD_TOT_OVERPMT_AMT ;
new_rec.CALC_TOT_OVERPMT_AMT := :new.CALC_TOT_OVERPMT_AMT ;
new_rec.RPTD_TOT_PMT_AMT := :new.RPTD_TOT_PMT_AMT ;
new_rec.CALC_TOT_PMT_AMT := :new.CALC_TOT_PMT_AMT ;
new_rec.RPTD_HTOT_AMT := :new.RPTD_HTOT_AMT ;
new_rec.CALC_HTOT_AMT := :new.CALC_HTOT_AMT ;
new_rec.RPTD_TAX_DUE_AMT := :new.RPTD_TAX_DUE_AMT ;
new_rec.CALC_TAX_DUE_AMT := :new.CALC_TAX_DUE_AMT ;
new_rec.RPTD_TAX_DUE2_AMT := :new.RPTD_TAX_DUE2_AMT ;
new_rec.CALC_TAX_DUE2_AMT := :new.CALC_TAX_DUE2_AMT ;
new_rec.RPTD_UNDERPMT_PEN_AMT := :new.RPTD_UNDERPMT_PEN_AMT ;
new_rec.CALC_UNDERPMT_PEN_AMT := :new.CALC_UNDERPMT_PEN_AMT ;
new_rec.RFND_1_INT_RATE := :new.RFND_1_INT_RATE ;
new_rec.RFND_1_AMT := :new.RFND_1_AMT ;
new_rec.RFND_2_INT_RATE := :new.RFND_2_INT_RATE ;
new_rec.RFND_2_AMT := :new.RFND_2_AMT ;
new_rec.RFND_3_INT_RATE := :new.RFND_3_INT_RATE ;
new_rec.RFND_3_AMT := :new.RFND_3_AMT ;
new_rec.RFND_4_INT_RATE := :new.RFND_4_INT_RATE ;
new_rec.RFND_4_AMT := :new.RFND_4_AMT ;
new_rec.RPTD_HRAMT_AMT := :new.RPTD_HRAMT_AMT ;
new_rec.CALC_HRAMT_AMT := :new.CALC_HRAMT_AMT ;
new_rec.RPTD_LRAMT_AMT := :new.RPTD_LRAMT_AMT ;
new_rec.CALC_LRAMT_AMT := :new.CALC_LRAMT_AMT ;
new_rec.RPTD_CMBTX_AMT := :new.RPTD_CMBTX_AMT ;
new_rec.CALC_CMBTX_AMT := :new.CALC_CMBTX_AMT ;
new_rec.RPTD_HRSUB_AMT := :new.RPTD_HRSUB_AMT ;
new_rec.CALC_HRSUB_AMT := :new.CALC_HRSUB_AMT ;
new_rec.RPTD_LRSUB_AMT := :new.RPTD_LRSUB_AMT ;
new_rec.CALC_LRSUB_AMT := :new.CALC_LRSUB_AMT ;
new_rec.RPTD_FUEL_CRED_AMT := :new.RPTD_FUEL_CRED_AMT ;
new_rec.CALC_FUEL_CRED_AMT := :new.CALC_FUEL_CRED_AMT ;
new_rec.RPTD_ADJUST_AMT := :new.RPTD_ADJUST_AMT ;
new_rec.CALC_ADJUST_AMT := :new.CALC_ADJUST_AMT ;
new_rec.RPTD_CARRY_YR_NBR := :new.RPTD_CARRY_YR_NBR ;
new_rec.CALC_CARRY_YR_NBR := :new.CALC_CARRY_YR_NBR ;
new_rec.RPTD_APPORT_PCNT := :new.RPTD_APPORT_PCNT ;
new_rec.CALC_APPORT_PCNT := :new.CALC_APPORT_PCNT ;
new_rec.RPTD_IN_APPORT_AMT := :new.RPTD_IN_APPORT_AMT ;
new_rec.CALC_IN_APPORT_AMT := :new.CALC_IN_APPORT_AMT ;
new_rec.RPTD_AGI_TAX_AMT := :new.RPTD_AGI_TAX_AMT ;
new_rec.CALC_AGI_TAX_AMT := :new.CALC_AGI_TAX_AMT ;
new_rec.RPTD_NONBUS_DISTB_AMT := :new.RPTD_NONBUS_DISTB_AMT ;
new_rec.CALC_NONBUS_DISTB_AMT := :new.CALC_NONBUS_DISTB_AMT ;
new_rec.RPTD_TOT_INC_AMT := :new.RPTD_TOT_INC_AMT ;
new_rec.CALC_TOT_INC_AMT := :new.CALC_TOT_INC_AMT ;
new_rec.REMIT_AMT := :new.REMIT_AMT ;
new_rec.RFND_1_DT := :new.RFND_1_DT ;
new_rec.PPIS_NAME := :new.PPIS_NAME ;
new_rec.RFND_2_DT := :new.RFND_2_DT ;
new_rec.EXT_FILED_INDC := :new.EXT_FILED_INDC ;
new_rec.RFND_3_DT := :new.RFND_3_DT ;
new_rec.INIT_RET_INDC := :new.INIT_RET_INDC ;
new_rec.RFND_4_DT := :new.RFND_4_DT ;
new_rec.FINAL_RET_INDC := :new.FINAL_RET_INDC ;
new_rec.INT_PD_TO_DT := :new.INT_PD_TO_DT ;
new_rec.UNITARY_COMB_INDC := :new.UNITARY_COMB_INDC ;
new_rec.PPIS_ST_3_ADDR := :new.PPIS_ST_3_ADDR ;
new_rec.PPIS_ST_1_ADDR := :new.PPIS_ST_1_ADDR ;
new_rec.PPIS_CHK_BOX := :new.PPIS_CHK_BOX ;
new_rec.PPIS_PHN_NMBR := :new.PPIS_PHN_NMBR ;
new_rec.INTERNAL_ID := :new.INTERNAL_ID ;
new_rec.PPIS_ST_2_ADDR := :new.PPIS_ST_2_ADDR ;
new_rec.PPIS_CTRY_CD := :new.PPIS_CTRY_CD ;
new_rec.PPIS_CTY_ADDR := :new.PPIS_CTY_ADDR ;
new_rec.PPIS_CTRY_OLD := :new.PPIS_CTRY_OLD ;
new_rec.PPIS_STATE_CD := :new.PPIS_STATE_CD ;
new_rec.EXT_ATT_INDC := :new.EXT_ATT_INDC ;
new_rec.PPIS_ZIP := :new.PPIS_ZIP ;
new_rec.SCORP_INDC := :new.SCORP_INDC ;
new_rec.PPIS_ID := :new.PPIS_ID ;
new_rec.PPIS_ID_TP_CD := :new.PPIS_ID_TP_CD ;
new_rec.APPORT_METHOD_CD := :new.APPORT_METHOD_CD ;
new_rec.INS_CO_INDC := :new.INS_CO_INDC ;
new_rec.PER_BEGIN_DT := :new.PER_BEGIN_DT ;
new_rec.PER_END_DT := :new.PER_END_DT ;
new_rec.FORM_DT := :new.FORM_DT ;
new_rec.FORM_TYPE_ID := :new.FORM_TYPE_ID ;
new_rec.NOL_CARRYBACK_CD := :new.NOL_CARRYBACK_CD ;
new_rec.FARM_COOP_INDC := :new.FARM_COOP_INDC ;
new_rec.ADD_DT := :new.ADD_DT ;
new_rec.ADD_ID := :new.ADD_ID ;
new_rec.UPD_DT := :new.UPD_DT ;
new_rec.UPD_ID := :new.UPD_ID ;
new_rec.VENDOR_CD := :new.VENDOR_CD ;
new_rec.RPTD_HLTHINSASN_CR_AMT := :new.RPTD_HLTHINSASN_CR_AMT ;
new_rec.CALC_HLTHINSASN_CR_AMT := :new.CALC_HLTHINSASN_CR_AMT ;
new_rec.RPTD_GIT_FINAL_AMT := :new.RPTD_GIT_FINAL_AMT ;
new_rec.CALC_GIT_FINAL_AMT := :new.CALC_GIT_FINAL_AMT ;
new_rec.FISCAL_YR_CD := :new.FISCAL_YR_CD ;
new_rec.RPTD_BONUS_DEPR_AMT := :new.RPTD_BONUS_DEPR_AMT ;
new_rec.CALC_BONUS_DEPR_AMT := :new.CALC_BONUS_DEPR_AMT ;
new_rec.RPTD_PREV_CRYFWD_AMT := :new.RPTD_PREV_CRYFWD_AMT ;
new_rec.CALC_PREV_CRYFWD_AMT := :new.CALC_PREV_CRYFWD_AMT ;
new_rec.RPTD_DOM_PROD_DED_AMT := :new.RPTD_DOM_PROD_DED_AMT ;
new_rec.CALC_DOM_PROD_DED_AMT := :new.CALC_DOM_PROD_DED_AMT ;
new_rec.RPTD_XS_IRC_DED_AMT := :new.RPTD_XS_IRC_DED_AMT ;
new_rec.CALC_XS_IRC_DED_AMT := :new.CALC_XS_IRC_DED_AMT ;
new_rec.RPTD_COAL_CR_AMT := :new.RPTD_COAL_CR_AMT ;
new_rec.CALC_COAL_CR_AMT := :new.CALC_COAL_CR_AMT ;
new_rec.SCHD_M_INDC := :new.SCHD_M_INDC ;
new_rec.INTANG_EXP_INDC := :new.INTANG_EXP_INDC ;
new_rec.RPTD_INTANGEXP_ADJ_AMT := :new.RPTD_INTANGEXP_ADJ_AMT ;
new_rec.CALC_INTANGEXP_ADJ_AMT := :new.CALC_INTANGEXP_ADJ_AMT ;
new_rec.AGIT_CONSOL_INDC := :new.AGIT_CONSOL_INDC ;
new_rec.INCRP_DT := :new.INCRP_DT ;
new_rec.INCRP_STATE_CD := :new.INCRP_STATE_CD ;
new_rec.COMMERCIAL_ST_CD := :new.COMMERCIAL_ST_CD ;
new_rec.INIT_IN_RTN_YR := :new.INIT_IN_RTN_YR ;
new_rec.REC_LOC_ADDR := :new.REC_LOC_ADDR ;
new_rec.EST_TAX_OTH_FID_INDC := :new.EST_TAX_OTH_FID_INDC ;
new_rec.FED_1120_CONSOL_INDC := :new.FED_1120_CONSOL_INDC ;
new_rec.UNTRY_MTRL_CHG_INDC := :new.UNTRY_MTRL_CHG_INDC ;
new_rec.FED_ELEC_CONF_NBRV := :new.FED_ELEC_CONF_NBRV ;
new_rec.RTN_SRC_CD := :new.RTN_SRC_CD ;
new_rec.BANKRPT_INDC := :new.BANKRPT_INDC ;
new_rec.FIT_FILER_INDC := :new.FIT_FILER_INDC ;
new_rec.NAME_CHG_INDC := :new.NAME_CHG_INDC ;
new_rec.REMIC_INDC := :new.REMIC_INDC ;
new_rec.INPUT_SRC_METH_CD := :new.INPUT_SRC_METH_CD ;
new_rec.ANNULZN_INDC := :new.ANNULZN_INDC ;
new_rec.RPTD_REIT_DIV_DED_AMT := :new.RPTD_REIT_DIV_DED_AMT ;
new_rec.CALC_REIT_DIV_DED_AMT := :new.CALC_REIT_DIV_DED_AMT ;
new_rec.RPTD_PAT_INCM_AMT := :new.RPTD_PAT_INCM_AMT ;
new_rec.CALC_PAT_INCM_AMT := :new.CALC_PAT_INCM_AMT ;
new_rec.RPTD_MDA_PROD_CR_AMT := :new.RPTD_MDA_PROD_CR_AMT ;
new_rec.CALC_MDA_PROD_CR_AMT := :new.CALC_MDA_PROD_CR_AMT ;
IF inserting THEN
v_change_type := 'INSERT';
ELSIF updating THEN
v_change_type := 'UPDATE';
ELSIF deleting THEN
v_change_type := 'DELETE';
END IF;
--call to do base table insert, update or delete
RSDGP004.bus_ta_form_97A(in_event_user => user,
in_event_source => v_event_source,
in_change_type => v_change_type,
in_old_rec => old_rec,
in_new_rec => new_rec);
-- call to build xml for rti_table_audits and queues --xdbaud
RSDGP001.bus_ta_form_97A(in_event_user => user,
in_event_source => v_event_source,
in_change_type => v_change_type,
in_old_rec => old_rec,
in_new_rec => new_rec);
END;}
Edited by: SDL on Feb 17, 2009 4:54 AM
Edited by: SDL on Feb 17, 2009 5:09 AM
Edited by: SDL on Feb 17, 2009 5:14 AMHere is the insert code that is in the package RSDGP004 that does the insert into the base table for the view.
I think maybe this is what you meant, when you asked for the code that does the insert?
{ELSIF in_change_type = 'INSERT' THEN
levent := 'INSERT';
INSERT INTO rti_bus_ta_forms(
add_dt
, add_id
, tran_id
, doc_loc_nbr
, field_009_amt
, field_01_txt
, field_010_amt
, field_015_amt
, field_016_amt
, field_02_txt
, field_029_amt
, field_03_txt
, field_030_amt
, field_039_amt
, field_04_txt
, field_040_amt
, field_041_amt
, field_042_amt
, field_05_txt
, field_053_amt
, field_054_amt
, field_06_txt
, field_063_amt
, field_064_amt
, field_067_amt
, field_068_amt
, field_07_txt
, field_079_amt
, field_08_txt
, field_080_amt
, field_085_amt
, field_086_amt
, field_09_txt
, field_091_amt
, field_092_amt
, field_095_amt
, field_096_amt
, field_10_txt
, field_101_amt
, field_102_amt
, field_103_amt
, field_104_amt
, field_105_amt
, field_106_amt
, field_11_txt
, field_111_amt
, field_112_amt
, field_12_txt
, field_125_amt
, field_126_amt
, field_127_amt
, field_128_amt
, field_13_txt
, field_131_amt
, field_132_amt
, field_137_amt
, field_138_amt
, field_139_amt
, field_14_txt
, field_140_amt
, field_141_amt
, field_142_amt
, field_143_amt
, field_144_amt
, field_147_amt
, field_148_amt
, field_149_amt
, field_15_txt
, field_150_amt
, field_151_amt
, field_152_amt
, field_153_amt
, field_154_amt
, field_16_txt
, field_165_amt
, field_166_amt
, field_167_amt
, field_168_amt
, field_169_amt
, field_170_amt
, field_171_amt
, field_172_amt
, field_181_amt
, field_182_amt
, field_175_amt
, field_176_amt
, field_177_amt
, field_178_amt
, field_179_amt
, field_180_amt
, field_193_amt
, field_194_amt
, field_195_amt
, field_196_amt
, field_197_amt
, field_198_amt
, field_199_amt
, per_begin_dt
, per_end_dt
, form_dt
, form_type_id
, field_31_txt
, field_201_amt
, upd_dt
, upd_id
, field_27_txt
, field_006_amt
, field_007_amt
, field_008_amt
, field_005_amt
, field_21_txt
, field_22_txt
, field_23_txt
, field_020_amt
, field_021_amt
, field_022_amt
, field_023_amt
, field_024_amt
, field_025_amt
, field_026_amt
, field_027_amt
, field_028_amt
, field_031_amt
, field_183_amt
, field_184_amt
, field_034_amt
, field_035_amt
, field_036_amt
, field_191_amt
, field_192_amt
, field_188_amt
, field_189_amt
, field_17_txt
, field_18_txt
, field_33_txt
, field_19_txt
, field_39_txt
, field_20_txt
, field_185_amt
, field_186_amt
, field_24_txt )
VALUES(
in_new_rec.ADD_DT,
in_new_rec.ADD_ID,
in_new_rec.TRAN_ID,
in_new_rec.DOC_LOC_NBR,
in_new_rec.RPTD_BAL_DUE_AMT,
in_new_rec.EXT_ATT_INDC,
in_new_rec.CALC_BAL_DUE_AMT,
in_new_rec.RPTD_REL_TAX_AMT,
in_new_rec.CALC_REL_TAX_AMT,
in_new_rec.EXT_FILED_INDC,
in_new_rec.RPTD_EST_PMT_AMT,
in_new_rec.PPIS_CTRY_CD,
in_new_rec.CALC_EST_PMT_AMT,
in_new_rec.RPTD_HRAMT_AMT,
in_new_rec.PPIS_ST_3_ADDR,
in_new_rec.CALC_HRAMT_AMT,
in_new_rec.RPTD_CMBTX_AMT,
in_new_rec.CALC_CMBTX_AMT,
in_new_rec.INTERNAL_ID,
in_new_rec.RPTD_LTOT_AMT,
in_new_rec.CALC_LTOT_AMT,
in_new_rec.PPIS_ID,
in_new_rec.RPTD_INT_DUE_AMT,
in_new_rec.CALC_INT_DUE_AMT,
in_new_rec.RPTD_LATE_PEN_AMT,
in_new_rec.CALC_LATE_PEN_AMT,
in_new_rec.PPIS_ID_TP_CD,
in_new_rec.RPTD_HRNTX_AMT,
in_new_rec.PPIS_NAME,
in_new_rec.CALC_HRNTX_AMT,
in_new_rec.RPTD_OTH_PMT_AMT,
in_new_rec.CALC_OTH_PMT_AMT,
in_new_rec.PPIS_ST_1_ADDR,
in_new_rec.RPTD_OVERPMT_CRED_AMT,
in_new_rec.CALC_OVERPMT_CRED_AMT,
in_new_rec.RPTD_PRIOR_EXT_PMT_AMT,
in_new_rec.CALC_PRIOR_EXT_PMT_AMT,
in_new_rec.PPIS_ST_2_ADDR,
in_new_rec.RPTD_HREPT_AMT,
in_new_rec.CALC_HREPT_AMT,
in_new_rec.RPTD_HRSUB_AMT,
in_new_rec.CALC_HRSUB_AMT,
in_new_rec.RPTD_REFUND_DUE_AMT,
in_new_rec.CALC_REFUND_DUE_AMT,
in_new_rec.PPIS_CTY_ADDR,
in_new_rec.RPTD_RENT_AMT,
in_new_rec.CALC_RENT_AMT,
in_new_rec.PPIS_STATE_CD,
in_new_rec.RPTD_SU_TAX_AMT,
in_new_rec.CALC_SU_TAX_AMT,
in_new_rec.RPTD_HRSJT_AMT,
in_new_rec.CALC_HRSJT_AMT,
in_new_rec.PPIS_ZIP,
in_new_rec.RPTD_SUPP_NI_TAX1_AMT,
in_new_rec.CALC_SUPP_NI_TAX1_AMT,
in_new_rec.RPTD_TAX_DUE_AMT,
in_new_rec.CALC_TAX_DUE_AMT,
in_new_rec.RPTD_TOT_DUE_AMT,
in_new_rec.PPIS_PHN_NMBR,
in_new_rec.CALC_TOT_DUE_AMT,
in_new_rec.RPTD_TOT_OVERPMT_AMT,
in_new_rec.CALC_TOT_OVERPMT_AMT,
in_new_rec.RPTD_TOT_PMT_AMT,
in_new_rec.CALC_TOT_PMT_AMT,
in_new_rec.RPTD_TOT_REL_TAX_AMT,
in_new_rec.CALC_TOT_REL_TAX_AMT,
in_new_rec.RPTD_UNDERPMT_PEN_AMT,
in_new_rec.PPIS_CHK_BOX,
in_new_rec.CALC_UNDERPMT_PEN_AMT,
in_new_rec.RPTD_HTOT_AMT,
in_new_rec.CALC_HTOT_AMT,
in_new_rec.RPTD_HRBAL_AMT,
in_new_rec.CALC_HRBAL_AMT,
in_new_rec.PPIS_CTRY_OLD,
in_new_rec.RPTD_LRNTX_AMT,
in_new_rec.CALC_LRNTX_AMT,
in_new_rec.RPTD_LRBAL_AMT,
in_new_rec.CALC_LRBAL_AMT,
in_new_rec.RPTD_LREPT_AMT,
in_new_rec.CALC_LREPT_AMT,
in_new_rec.RPTD_LRSUB_AMT,
in_new_rec.CALC_LRSUB_AMT,
in_new_rec.RPTD_LRSJT_AMT,
in_new_rec.CALC_LRSJT_AMT,
in_new_rec.RPTD_LRAMT_AMT,
in_new_rec.CALC_LRAMT_AMT,
in_new_rec.RPTD_AGI_TAX_AMT,
in_new_rec.CALC_AGI_TAX_AMT,
in_new_rec.RPTD_TOT_UNREL_TAX_AMT,
in_new_rec.CALC_TOT_UNREL_TAX_AMT,
in_new_rec.RPTD_GI_TAX_AMT,
in_new_rec.CALC_GI_TAX_AMT,
in_new_rec.RPTD_TAX_DUE2_AMT,
in_new_rec.CALC_TAX_DUE2_AMT,
in_new_rec.RPTD_TOT_URL_AMT,
in_new_rec.CALC_TOT_URL_AMT,
in_new_rec.REMIT_AMT,
in_new_rec.PER_BEGIN_DT,
in_new_rec.PER_END_DT,
in_new_rec.FORM_DT,
in_new_rec.FORM_TYPE_ID,
in_new_rec.NOL_CARRYBACK_CD,
in_new_rec.CALC_IN_NOL_AMT,
in_new_rec.UPD_DT,
in_new_rec.UPD_ID,
in_new_rec.VENDOR_CD,
in_new_rec.RPTD_PREV_CRYFWD_AMT,
in_new_rec.CALC_PREV_CRYFWD_AMT,
in_new_rec.RPTD_TOT_CRED_AMT,
in_new_rec.CALC_TOT_CRED_AMT,
in_new_rec.FISCAL_YR_CD,
in_new_rec.INIT_RET_INDC,
in_new_rec.FINAL_RET_INDC,
in_new_rec.RPTD_FED_INCM_AMT,
in_new_rec.CALC_FED_INCM_AMT,
in_new_rec.RPTD_BONUS_DEPR_AMT,
in_new_rec.CALC_BONUS_DEPR_AMT,
in_new_rec.RPTD_SPF_DEDUCT_AMT,
in_new_rec.CALC_SPF_DEDUCT_AMT,
in_new_rec.RPTD_GOVT_INT_AMT,
in_new_rec.CALC_GOVT_INT_AMT,
in_new_rec.RPTD_URL_SUBTOT_AMT,
in_new_rec.CALC_URL_SUBTOT_AMT,
in_new_rec.RPTD_APPORT_PCNT,
in_new_rec.CALC_APPORT_PCNT,
in_new_rec.RPTD_IN_INCM_AMT,
in_new_rec.CALC_IN_INCM_AMT,
in_new_rec.RPTD_IN_NOL_AMT,
in_new_rec.RPTD_TOT_URL_INCM_AMT,
in_new_rec.CALC_TOT_URL_INCM_AMT,
in_new_rec.RPTD_TOT_MOD_AMT,
in_new_rec.CALC_TOT_MOD_AMT,
in_new_rec.SCHD_M_INDC,
in_new_rec.FED_ELEC_CONF_NBRV,
in_new_rec.RTN_SRC_CD,
in_new_rec.BANKRPT_INDC,
in_new_rec.NAME_CHG_INDC,
in_new_rec.INPUT_SRC_METH_CD,
in_new_rec.RPTD_PAT_INCM_AMT,
in_new_rec.CALC_PAT_INCM_AMT,
in_new_rec.ANNULZN_INDC) ;} -
RETURN Clause in IF...ELSE Condition in PL/SQL Block
Hi
Could you please explain me the importance of a RETURN Clause in IF..ELSE Condition in PL/SQL Block with
an example.
Regards
Nakul.VHi,
RETURN clause permits get out of the block. For more information you can see [Using the RETURN Statement|http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14261/subprograms.htm#sthref1683]
SET SERVEROUTPUT ON
BEGIN
IF 1 = 1 THEN
dbms_output.put_line('Before return');
RETURN;
ELSE
dbms_output.put_line('Else');
END IF;
dbms_output.put_line('After if');
END;
Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.1.0
Connected as hr
SQL>
SQL> BEGIN
2 IF 1 = 1 THEN
3 dbms_output.put_line('Before return');
4 RETURN;
5 ELSE
6 dbms_output.put_line('Else');
7 END IF;
8 dbms_output.put_line('After if');
9 END;
10 /
Before return
PL/SQL procedure successfully completed
SQL> Regards,
Edited by: Walter Fernández on Dec 12, 2008 9:41 AM - Adding output
Edited by: Walter Fernández on Dec 12, 2008 9:43 AM - Adding URL... -
Error in RETURNING clause in INSERT.....SELECT query
Hi Friends
I am having an error: "SQL stmt not properly ended" when i run the below code.
Cant i fetch multiple values from the returning clause into a collection variable??
insert into consumption__C
(SITECODE, SALESORG, PRODFAM,CAMPCODE, CYEAR, MDATE, SYSENV, MTYPE, ACCOUNT__C, SUPPLIER__C,
PRODUCT_PER_UNIT__C, PRODUCT__C, UNIT__C, AMOUNT_Y__C, VOLUME_Y__C, CURRENCY__C,SUPPLYMODE__C)
select ' ' Sitecode,
' ' Salesorg,
' ' Prodfam,
' ' campcode,
' ' cyear,
pcurr_mig MDATE,
psysenv SYSENV,
'NSet' MTYPE,
c.sitecode Account__c,
' ' supplier__c,
' ' Product_per_unit__c,
c.material Product__c,
' ' unit__c,
c.Amount Amount_y__c,
' ' Volume__c,
'Euro' Currency__c,
' ' Supply_Mode__c
from load_sales_customer_site c returning c.customer_code bulk collect INTO temp;
Kindly guide...... what is the problem!!
Thanks in advancenice idea, but you can't use returning into with
insert as select:
SQL> select * from v$version;
BANNER
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bi
PL/SQL Release 10.2.0.1.0 - Production
CORE 10.2.0.1.0 Production
TNS for Linux: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 - Production
SQL> create table exm(id primary key) as select object_id from all_objects
2 where rownum <=100;
Table created.
SQL> declare
2 type num_tbl is table of number;
3 ll_num_tbl num_tbl;
4 begin
5 insert into exm(id)
6 (select object_id * 100 from all_objects where rownum
7 <=100) returning id into ll_num_tbl;
8 end;
9 /
<=100) returning id into ll_num_tbl;
ERROR at line 7:
ORA-06550: line 7, column 9:
PL/SQL: ORA-00933: SQL command not properly ended
ORA-06550: line 5, column 2:
PL/SQL: SQL Statement ignoredAmiel -
Returning clause in MERGE statement
Hi ,
I'm using Oracle 10g Version
I tried the below code using UPDATE with Returning Clause & MERGE with Returning Clause .
I found NO errors while working with UPDATE statement . The following is the code with UPDATE statement
DECLARE
TYPE empno_list IS TABLE OF emp.empno%TYPE;
vempno_list empno_list;
BEGIN
UPDATE emp
SET comm = 11
WHERE deptno IN (SELECT deptno FROM dept)
RETURNING empno
BULK COLLECT INTO vempno_list;
FOR i IN vempno_list.FIRST .. vempno_list.LAST
LOOP
DBMS_OUTPUT.put_line ('Values of EMP ' || vempno_list (i));
END LOOP;
END;
But getting the error PL/SQL: ORA-00933: SQL command not properly ended when working with MERGE Statement
declare
type empno_list is table of emp.empno%type;
vempno_list empno_list;
begin
merge into emp tgt
using dept src
on (src.deptno =tgt.deptno)
when matched then
update set tgt.comm=12
returning tgt.empno bulk collect into vempno_list ;
for i in vempno_list.first .. vempno_list.last loop
dbms_output.put_line('Values of EMP '||vempno_list(i) ) ;
end loop;
end;
Please suggest meProbably because the RETURNING INTO clause doesn't belong to MERGE statement. It's available only for INSERT, UPDATE and DELETE. Here is the quote from Oracle Documentation:
The static RETURNING INTO clause belongs to a DELETE, INSERT, or UPDATE statement. The dynamic RETURNING INTO clause belongs to an EXECUTEIMMEDIATE statement.
And here's the link.
RETURNING INTO Clause
Hope it helps.
Ishan -
Using RETURNING clause with Execute Immediate
I wrote a query to update a table and return the column in to a nested table type variable using returning clause but its not working I am getting error like
ORA-06550: line 66, column 22:
PLS-00306: wrong number or types of arguments in call to '||'
ORA-06550: line 66, column 4:
PL/SQL: Statement ignored
I am getting error in following part of my query
|| 'RETURNING if_row_status bulk collect INTO '
|| v_if_row_status;
v_if_row_status is defined as -
TYPE v_count IS TABLE OF varchar2(50) INDEX BY BINARY_INTEGER;
v_if_row_status v_count;I am trying to update a table for diffrent column if they are null and want no of column updated for each column.
I wrote following query but I am not getting the correct output.
UPDATE
Temp_Bulk_Col_POC
SET if_row_status = 'VALIDATED',
if_row_processed_date = sysdate,
if_row_error_msg =
CASE
WHEN record_type IS NULL
THEN 'RECORD_TYPE is a required column and cannot be NULL'
WHEN source_system IS NULL
THEN 'SOURCE_SYSTEM is a required column and cannot be NULL'
WHEN record_company IS NULL
THEN 'RECORD_COMPANY is a required column and cannot be NULL'
WHEN record_system IS NULL
THEN 'RECORD_SYSTEM is a required column and cannot be NULL'
WHEN txn_flag IS NULL
THEN 'TXN_FLAG is a required column and cannot be NULL'
WHEN create_date IS NULL
THEN 'CREATE_DATE is a required column and cannot be NULL'
WHEN UPDATE_date IS NULL
THEN 'UPDATE_DATE is a required column and cannot be NULL'
WHEN source_customer_id IS NULL
THEN 'SOURCE_CUSTOMER_ID is a required column and cannot be NULL'
WHEN source_product_id IS NULL
THEN 'SOURCE_PRODUCT_ID is a required column and cannot be NULL'
WHEN az_product_id IS NULL
THEN 'AZ_PRODUCT_ID is a required column and cannot be NULL'
WHEN decile IS NULL
THEN 'DECILE is a required column and cannot be NULL'
END
WHERE if_row_status IS NULL
AND (record_type IS NULL
OR source_system IS NULL
OR record_company IS NULL
OR record_system IS NULL
OR txn_flag IS NULL
OR create_date IS NULL
OR UPDATE_date IS NULL
OR source_customer_id IS NULL
OR source_product_id IS NULL
OR az_product_id IS NULL
OR decile IS NULL)
RETURNING if_row_status,record_type,source_system,record_company,record_system,
txn_flag,create_date,UPDATE_date,source_customer_id,source_product_id,az_product_id,
decile
BULK COLLECT INTO
v_if_row_status,v_record_type,v_source_system,
v_record_company,v_record_system,v_txn_flag,v_create_date,v_UPDATE_date,
v_source_customer_id,v_source_product_id,v_az_product_id,v_decile;
its showing same number for all the column.
how I can collect based on the coulmn updated -
Hi All,
I was trying to use RETURNING CLAUSE into pl/sql process but it gives error as :-
"1 error has occurred
* ORA-06550: line 12, column 13: PL/SQL: ORA-00933: SQL command not properly ended ORA-06550: line 6, column 3: PL/SQL: SQL Statement ignored"
Pl/sql process contains code as below:-
DECLARE
vID VARCHAR2(20);
BEGIN
INSERT INTO STUDENT_INFORMATION (DOB, AGE, OTHER_DATE, OTHER_AGE)
SELECT TO_DATE(C1_C002, 'MM/DD/YYYY'), C1_C003, TO_DATE(C1_C004, 'MM/DD/YYYY'), C1_C005
FROM (SELECT C1.C002 C1_C002, C1.C003 C1_C003, C1.C004 C1_C004, C1.C005 C1_C005
FROM APEX_COLLECTIONS C1
WHERE C1.COLLECTION_NAME = 'INFORMATION'
AND C1.SEQ_ID = 1)
RETURNING ID INTO vID; // IF I REMOVE THIS LINE & AND THIS INSERT STATEMENT WITH SEMICOLON(;) IN THE ABOVE LINE THE CODE WORKS FINE
// BUT THAN THE I'M GETTING ERROR WITH THE NEXT INSERT STATEMENT
INSERT INTO STUDENT_INFORMATION_GRADE (ID, GRADE_DATE, GRADE_AGE)
SELECT vID, TO_DATE(C2_C002, 'MM/DD/YYYY'), C2_C003
FROM (SELECT C2.C002 C2_C002, C2.C003 C2_C003
FROM APEX_COLLECTIONS C2, APEX_COLLECTIONS C1
WHERE C2.COLLECTION_NAME = 'GRADE'
AND C1.COLLECTION_NAME = 'INFORMATION'
AND C1.SEQ_ID = C2.SEQ_ID
AND C1.SEQ_ID = 1);
INSERT INTO STUDENT_INFORMATION_RESULT (ID, FINAL_RESULT)
SELECT vID, C3_C002
FROM (SELECT C3.C002 C3_C002
FROM APEX_COLLECTIONS C3, APEX_COLLECTIONS C1
WHERE C3.COLLECTION_NAME = 'RESULT'
AND C1.COLLECTION_NAME = 'INFORMATION'
AND C1.SEQ_ID = C3.SEQ_ID
AND C1.SEQ_ID = 1);
END;
I have trying RETURNING CLAUSE with other pl/sql process something like this :-
DECLARE
vID VARCHAR2(20;
BEGIN
INSERT INTO ..... ()
VALUES ()
RETURNING ID INTO vID;
INSERT INTO ... (ID, ....)
VALUES (vID, ..........)
END;
the above code works well with no errors, but when I'm using RETURNING CLAUSE with COLLECTIONS it gives me error.
Can anybody help me out?
Thanks
DeepDeep:
You can perform the inserts in a cursor loop as followsfor x in (SELECT C1.C002 C1_C002, C1.C003 C1_C003, C1.C004 C1_C004, C1.C005 C1_C005
FROM APEX_COLLECTIONS C1
WHERE C1.COLLECTION_NAME = 'INFORMATION'
AND C1.SEQ_ID = 1)
loop
INSERT INTO STUDENT_INFORMATION (DOB, AGE, OTHER_DATE, OTHER_AGE)
values ( TO_DATE(x.C1_C002, 'MM/DD/YYYY'),x.C1_C003, TO_DATE(x.C1_C004, 'MM/DD/YYYY'),x.C1_C005)
RETURNING ID INTO vID;
end loop;Varad -
Insert returning clause in Batch operation
I believe "insert returning" clause is not allowed in JDBC Batch operation, Is there any alternative way to achieve the same?
version: 10g release 2.
My requierment:
1. I would like to know the inserted value(sequence) after insert.
2. It is kind of mass upload, so looking at Batch operation.
Thanks,
Ravuthakumar2. It is kind of mass upload, so looking at Batch operation.That is not possible AFAIK.I'm pretty sure you could accomplish it with a callable statement that's passed a(some) collection(s) of values that are inserted en masse using an anonymous block something like this (compiled by eye) which will accumulate the returned value(s) into a(other) collection(s).
DECLARE
in_collection_1 some_collection_type := ?;
in_collection_n some_collection_type := ?;
out_collection_1 some_collection_type;
out_collection_n some_collection_type;
BEGIN
FORALL ix IN 1 .. in_collection_1.COUNT
INSERT INTO your_table(column1, ..., column _n)
VALUES (in_collection_1(ix), ..., in_collection_n(ix))
RETURNING retcolumn_1, ..., retcolumn_n
BULK COLLECT INTO out_collection_1, ... ,out_collection_n ;
? := out_collection_1;
? := out_collection_n;
EXCEPTION
END;Not sure if I've tried this exact thing myself yet, and I won't get into how to pass the collections back and forth here, but I think it can be accomplished in one shot. If your passed collections are of uncomplicated types you might even be able to do it using vanilla JDBC, but Oracle extensions may be required.
Retrieving DML Results into a Collection with the RETURNING INTO Clause
http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14261/tuning.htm#sthref2241
Working with Oracle Collections
http://download-east.oracle.com/docs/cd/B19306_01/java.102/b14355/oraarr.htm#g1072333
Accessing PL/SQL Index-by Tables
http://download-east.oracle.com/docs/cd/B19306_01/java.102/b14355/oraint.htm#BABBGDFA
Good luck!
-Rick
Edited by: tarpaw on Mar 25, 2010 1:56 PM -
I have a table that has a PK value that is generated by a sequence that fetches sys_guid() for the value via an insert trigger.
How can i insert a record and get the pk value that was generated in one statement?
I know about the RETURNING clause and how it works. There are lots of examples out on google about using the RETURNING clause in a PL/SQL block.
My problem is that i am not writing a stored proc or function. I'm just executing SQL through a client (Aqua). So i don't have variables and bindings or anything like that.
What i want is to write something like the following:
INSERT INTO CONTACTS.TBLPEOPLE(PPLKEEPCONFIDENTIAL, PPLNAMELAST, PPLNAMEFIRST, PPLNAMEPREFIX, PPLNAMEMIDDLE, PPLNAMESUFFIX, PPLNAMEPREFERRED, PPLACTIVE, ADTUSERID, ADTDATELASTUPDATE)
VALUES('1', 'Doe', 'John', 'Mr', 'Q', '', '', '1', 'kg', SYSDATE)
RETURN PPLGUID
and for the result to be - 1 record inserted, here is the PPLGUID that was generated - '12CD-23FBBD-23222'
Can this be done?My problem is that i am not writing a stored proc or functionYou don't have to. Can't you just wrap the INSERT/RETURNING into an anonymous pl/sql block?
SQL> create sequence t_seq start with 42;
Sequence created.
SQL> declare
2 l_seq number;
3 begin
4 insert into t values (t_seq.nextval)
5 returning n into l_seq;
6 dbms_output.put_line('generated ' || l_seq);
7 end;
8 /
generated 42
PL/SQL procedure successfully completed.Edited by: SomeoneElse on Jul 30, 2009 12:27 PM
(working example) -
Returning Clause out parameter not working
I have Oracle 11g (I think?) and VS2010.
I am using an insert statement with the returning clause to return an identity value that is created by a Sequence/Trigger. The problem I am having is that it is not updating the out parameter in C#. Here's some sample code. I have tested the insert statement in SQL Developer and it works. The C# statement does do the insert, but the out parameter remains null. I have tried ParameterDirection as ReturnValue, InputOutput, and Output. None of those worked. The output value remains null no matter what I try to do. I even lifted this example (Oracle Sequences), ran it, and it also errored and is not returning out parameters. (Error Msg: Unable to cast object of type 'Oracle.DataAccess.Types.OracleDecimal' to type 'System.IConvertible'.Couldn't store <null> in ID Column. Expected type is Int32.).
I have searched and searched the web over and I cannot figure out why this does not work. Any help would be most appreciated!!
MyTable
MyTable_ID Number (38)
Note Varchar2 (500 byte)
=================================================
try
if (insertCmd.Connection.State == ConnectionState.Closed)
insertCmd.Connection.Open();
int recs = insertCmd.ExecuteNonQuery();
this.Id = Convert.ToInt32(insertCmd.Parameters[":Id"].Value);
catch (Exception err) { }
finally { insertCmd.Connection.Close(); }
private OracleCommand insertCmd
get
OracleCommand insCmd = Context.DataBaseConnection.CreateCommand();
insCmd.CommandText = string.Format(
@"Insert into MyTable (Note)
Values (:Note)
Returning MyTable_ID into :Id");
insCmd.Parameters.Clear();
OracleParameter noteParam = new OracleParameter(":Note", OracleDbType.Varchar2, Note, ParameterDirection.Input);
OracleParameter idParam = new OracleParameter(":Id", OracleDbType.Int32, 38, "Calibration_Session_Id");
idParam.Direction = ParameterDirection.Output;
insCmd.Parameters.Add(idParam);
insCmd.Parameters.Add(noteParam);
insCmd.BindByName = true;
return insCmd;Okay, I changed my insert command text to this...
insCmd.CommandText = string.Format(
@"Begin
Insert into MyTable (Note)
Values (:Note)
Returning MyTable_ID into :Id;
Commit; End;");
There was no change. Am I doing an explicit transaction wrong? -
What is the role of the RETURN clause in a pipelined function?
I wrote several pipelined functions and they work just fine without the return clause. However in the oracle's documentation there are returns in the pipelined functions:
CREATE FUNCTION StockPivot(p refcur_pkg.refcur_t) RETURN TickerTypeSet
PIPELINED IS
out_rec TickerType := TickerType(NULL,NULL,NULL);
in_rec p%ROWTYPE;
BEGIN
LOOP
FETCH p INTO in_rec;
EXIT WHEN p%NOTFOUND;
-- first row
out_rec.ticker := in_rec.Ticker;
out_rec.PriceType := 'O';
out_rec.price := in_rec.OpenPrice;
PIPE ROW(out_rec);
-- second row
out_rec.PriceType := 'C';
out_rec.Price := in_rec.ClosePrice;
PIPE ROW(out_rec);
END LOOP;
CLOSE p;
RETURN;
END;
/http://docs.oracle.com/cd/E11882_01/appdev.112/e10765/pipe_paral_tbl.htm#CHDJEGHC
Moreover, at least in PL/SQL developer I recieve hints that my pipelined functions return no values, though as I said the functions work smoothly. So is there a need in the return clause in pipelined functions or it is redundant?
My oracle version is 11.2.0.2.0As already mentioned, in later versions of the database it doesn't appear to be necessary, however, it IS good programming practice (and necessary in non-pipelined functions) to always ensure a function has a RETURN statement in it. It could be a 'side effect' (read that as bug if you like) that it doesn't appear to be necessary, so you would be best to ensure you DO include a RETURN statement, as documented.
-
Urgent- returnable packaging issue
Hi guys,
am working on returnable packaging issue
Scenario:If the customer does not returns the preslings then sales order is created for presling and issued to customers with proper invoicing
am creating a sales order with order type CLN(customised for returnable packaging) and i have give material with qty 1, immediately the system is taking me to availability overview screen where it shows the following.
Confirmed quantity: 0
Dely proposal: Not possible.
i have checked for material in MMBE and see the stock is much sufficient. y am i getting this? please answer immediately.
thanks in advance.
kumar.Hi pathik,
the system is already configured and i have to give UAT to the users. i have done according to what UAT says. now plz suggest me what i should i do in this scenario? moreover, shld i use two line items i mean the main item and also the sub item? this is the first time am working on returnable packating so plz help me in as detail as possible.
u can also plz send me the doc with screen shots(if possible) to this id
[email protected]
thanks in advance.
kumar -
Hi friends,
Is there any way to restrict the values fetched using RETURNING caluse after an UPDATE?
For example, the following RETURNING caluse will fetch the new SALs of the DEPTs 10 and 20:
UPDATE EMP
SET SAL = SAL+100
WHERE DEPT IN (10,20)
RETURNING SAL BULK COLLECT INTO ARRAY_NEW_SAL;
Is it possible to fetch the new SALs of only DEPT 10? Anything like:
UPDATE EMP
SET SAL = SAL+100
WHERE DEPT IN (10,20)
RETURNING SAL BULK COLLECT INTO ARRAY_NEW_SAL WHERE DEPT = 10;
Edited by: 964559 on 30-May-2013 03:41No, you can't.
The returning clause is used to return data from all the effected rows of the update. It's a part of PL/SQL, not SQL, so you cannot apply an SQL WHERE clause to it.
The RETURNING clause and the way you can use it are detailed in the documentation (what a surprise!)...
http://docs.oracle.com/cd/E11882_01/appdev.112/e25519/returninginto_clause.htm#LNPLS01354 -
Hi,
I have configured standar process for material issues with services rule also, but I need to know the standar process
in order to returning material (issue by mistake for example).
There is an indicator in report NMCOL where it suppose used to bring canceled consumptions, but where do we
cancel consumptions? (standar only please).
Best regards.Hello Milasanz,
To be able to reverse/cancel a material consumption in IS-H, an appropriate good issue must be reversed/canceled. To cancel a good issue you must use, for example, the following MM t-code: MBST - Cancel/Reverse. It is the logic, BUT actually once you cancel a good issue, a system still issues an error message when you try to cancel a material consumption (it is wrong behavior of SAP). We've written to SAP about the mistake.
To cancel a material consumption, you must use t-code NMMC1.
Regards,
Alexander. -
ORA-32034: unsupported use of WITH clause-issue
hello all,
i am facing some issue when i use with clause and union all operator.
i have created a dummy code to solve this problem..
my code is ----------
with dept_1 as
(select deptno d1 from detp9 where deptno = 20)
select empno from emp9 e,dept_d1 where e.empno = dept_1.d1
UNION ALL
with dept_1 as
(select deptno d2 from detp9 where deptno = 30)
select empno from emp9 e,dept_d2 where e.empno = dept_2.d2.
when i ran this i gort a message-
ORA-32034: unsupported use of WITH clause.
please help me to solve this iisue..
when i ran it separatly without using union/union all it ran sucessfully..
thanks in advance..923315 wrote:
hello all,
i am facing some issue when i use with clause and union all operator.
i have created a dummy code to solve this problem..
my code is ----------
with dept_1 as
(select deptno d1 from detp9 where deptno = 20)
select empno from emp9 e,dept_d1 where e.empno = dept_1.d1
UNION ALL
with dept_1 as
(select deptno d2 from detp9 where deptno = 30)
select empno from emp9 e,dept_d2 where e.empno = dept_2.d2.
when i ran this i gort a message-
ORA-32034: unsupported use of WITH clause.
please help me to solve this iisue..
when i ran it separatly without using union/union all it ran sucessfully..
thanks in advance..Well, i don't see anything about these queries that makes sense.
You are essentially joining emp and dept on EMPNO to DEPTNO ... that doesn't usually make any sense.
How about you step back from the query which is almost certainly incorrect, and explain your tables, their data and what you need as output?
Cheers,
Maybe you are looking for
-
Problem with creation of purchase order with new implementation.
Hi Guru's of SAP MM, i got this error when i implemented a new company with all co-code, plant and storage location. i craeted the PO. even though i have assigned sloc to plant and plant to co-code. and co-code to purchasing org. it is telling in PO
-
Converting TimeStamp to usable date
I have been using this script, which seems to be all over the web, but keep getting a different date to what is in my database: <?php do { ?> <h3><?php echo $row_GetsNewsText['post_title']; ?></h3> <?php $datetime = $row_GetsNewsText[
-
More functional program error-please help help
Hi how do I install acrobat when both acrobat pro 8 and 9 say that there is a more functional program installed ....does anyone know how to solve this without reinstalling my whole system for operating system up. there must be some very clever acroba
-
Hi All, Can anybody tell the steps how to send Oracle Workflow notification Mail to a specified user. I was refering [http://apps2fusion.com/apps/13-oracle-workflows/373-workflow-notification-sender-email-address] but using this only notification is
-
AC3 audio not compressing properly
I am compressing under the DVD selection. Everything was working great, until today. The compressor audio output for the AC3 audio has changed (different icon like a itunes file) and the DVD shuts down when I try to import the asset. I cannot preview