PLSQL插入到子查询和返回子句(Oracle)
发布时间:2020-12-12 13:48:13 所属栏目:百科 来源:网络整理
导读:我找不到以下伪sql的正确语法: INSERT INTO some_table (column1,column2) SELECT col1_value,col2_value FROM other_table WHERE ... RETURNING id INTO local_var; 我想插入一些含有子查询值的东西. 插入后,我需要新的生成的ID. 什么oracle文件说: Inser
我找不到以下伪sql的正确语法:
INSERT INTO some_table (column1,column2) SELECT col1_value,col2_value FROM other_table WHERE ... RETURNING id INTO local_var; 我想插入一些含有子查询值的东西. 什么oracle文件说: Insert Statement Returning Into 好吧,我认为只有使用值子句才是可能的 这种方法可以用于更新和删除howeveer: create table test2(aa number) / insert into test2(aa) select level from dual connect by level<100 / set serveroutput on declare TYPE t_Numbers IS TABLE OF test2.aa%TYPE INDEX BY BINARY_INTEGER; v_Numbers t_Numbers; v_count number; begin update test2 set aa = aa+1 returning aa bulk collect into v_Numbers; for v_count in 1..v_Numbers.count loop dbms_output.put_line('v_Numbers := ' || v_Numbers(v_count)); end loop; end; 您可以使用几个额外的步骤(使用TREAT进行FORALL INSERT) returning with insert..select ? 利用他们创建的示例并将其应用于test2测试表 CREATE or replace TYPE ot AS OBJECT ( aa number); / CREATE TYPE ntt AS TABLE OF ot; / set serveroutput on DECLARE nt_passed_in ntt; nt_to_return ntt; FUNCTION pretend_parameter RETURN ntt IS nt ntt; BEGIN SELECT ot(level) BULK COLLECT INTO nt FROM dual CONNECT BY level <= 5; RETURN nt; END pretend_parameter; BEGIN nt_passed_in := pretend_parameter(); FORALL i IN 1 .. nt_passed_in.COUNT INSERT INTO test2(aa) VALUES ( TREAT(nt_passed_in(i) AS ot).aa ) RETURNING ot(aa) BULK COLLECT INTO nt_to_return; FOR i IN 1 .. nt_to_return.COUNT LOOP DBMS_OUTPUT.PUT_LINE( 'Sequence value = [' || TO_CHAR(nt_to_return(i).aa) || ']' ); END LOOP; END; / (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |