След като прегледах внимателно вашето запитване, установих, че сте били прави. Insert
не работи. И също така изглежда правилно. Вече имаме FORALL INSERT
за да получите вмъкнати данни от колекцията в таблица. Оттук и необходимостта от допълнителен INSERT as Select Statement
е изключено. Можете обаче да използвате SELECT
израз, използващ колекция в Where
клауза на заявката. За да направите и вмъкнете, можете просто да следвате стъпките по-долу.
CREATE OR REPLACE PACKAGE BODY test123
AS
PROCEDURE 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;
/