select * from表在Cursor或for Loop中工作正常,但是当我将它用于INSERT Oracle Database
12c企业版12.1.0.2.0版-64位生产PL / SQL版本12.1.0.2.0-生产CORE
12.1时,它不能正常工作。适用于Linux的0.2.0生产TNS:版本12.1.0.2.0-生产NLSRTL版本12.1.0.2.0-生产
仔细查看您的查询后,我发现您是正确的。
Insert不起作用。而且看起来也很正确。我们已经必须
FORALLINSERT将数据从集合插入到表中。因此,排除了额外
INSERT as SelectStatement的必要性。但是,您可以使用查询
SELECT的collection
in
Where子句中的语句。要制作和插入,只需按照以下步骤操作即可。
CREATE OR REPLACE PACKAGE BODY test123 ASPROCEDURE p1 IS BEGIN SELECT c1,c2 BULK COLLECT INTO v_tab FROM tabx; ForAll rec in 1..v_tab.count INSERT INTO taby values v_tab(rec); --SELECt * FROM TABLE(v_tab); END;END;/
如果要使用
Type声明中的
PLSQL作用域下的
Select声明,可以使用以下方法:
DECLARE TYPE typ1 IS RECORd(col1 VARCHAr2(100),col2 VARCHAr2(100)); TYPE tab_typ IS TABLE OF typ1 INDEX BY BINARY_INTEGER; v_tab tab_typ;BEGIN SELECT col1,col2 BULK COLLECT INTO v_tab FROM tabx; DELETe FROM taby WHERe (col1,col2) in (Select * from table(v_tab));END;/



