Выбор * из таблицы отлично работает в курсоре или в цикле, но не при использовании его для INSERT Oracle Database 12c Enterprise Edition, выпуск 12.1.0.2.0 - 64-битная версия PL / SQL версии 12.1.0.2.0 - Производство CORE 12.1.0.2.0 Производство TNS для Linux: Версия 12.1.0.2.0 - Производство NLSRTL Версия 12.1.0.2.0 - Производство
После тщательного повторного рассмотрения вашего запроса я обнаружил, что выбыли правильны.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;
/