问题描述
大家好,我需要一些有关此问题的帮助。我在plsql中使用此查询:
INSERT INTO HS_CPQ_COSTCHANNELdisCOUNT (CREATED_BY,UPDATED_BY,ORIGIN,PART_ID,CHANNEL_ID,disCOUNTPERCENTAGE,EFFECTIVEDATE)
Select M.CREATED_BY,M.UPDATED_BY,M.ORIGIN,P.ID,C.ID,M.disCOUNTPERCENTAGE,M.EFFECTIVEDATE
from (
select 'APEX_APP' CREATED_BY,'APEX_APP' UPDATED_BY,part,channelid,REPLACE(disCOUNTPERCENTAGE,'.',',') disCOUNTPERCENTAGE,to_date(EFFECTIVEDATE,'YYYY-MM-DD HH24:MI:SS') EFFECTIVEDATE
from local_test_table
where id = :tmp_ID
) m
left outer join hs_mib_part p on (m.part = p.part)
left outer join hs_mib_channel c on (m.channelid = c.CHANNELID)
RETURNING id INTO new_id;
Informe de error -
ORA-06550: línea 128,columna 21:
PL/sql: ORA-00933: comando sql no terminado correctamente
ORA-06550: línea 113,columna 21:
PL/sql: sql Statement ignored
为什么我不能从此插入中返回ID?
我该如何解决这一部分? -我需要创建新的ID
最诚挚的问候
解决方法
returning into
仅支持单行DML(insert values
,不支持insert select
):
您也许可以将insert
拆分为
-
select ... bulk collect into collection
-
forall i in collection.first .. collection.last insert into hs_cpq_costchanneldiscount
其中collection
是本地声明的关联数组或与插入的列匹配的嵌套表变量。
或者对于单行,在插入之前将所需的值检索到PL / SQL记录中。
,在旧版本的Oracle中,您不能直接将NEXTVAL / CURRVAL读入var,而必须这样做:
SELECT some_tab_seq.CURRVAL
INTO your_var
FROM DUAL;
但是在新版本中,您可以通过以下方式获取序列的当前值
temp_val := tab_seq.CURRVAL