PLSQL - FORALL в немедленном исполнении
Я хочу использовать execute для непосредственного синтаксиса, так как я хочу использовать переменную 'имя_схемы' вместо 'dcbhmoh1'. Спасибо
DECLARE
schemasname varchar2(25) := 'dcbhmoh1';
datet char(6) := '102024';
TYPE anames IS table of dcbhmoh1.F01131M%ROWTYPE;
ar anames;
BEGIN
EXECUTE IMMEDIATE 'SELECT * FROM ' || schemasname || '.F01131M WHERE ZMDTI >= ' || datet BULK COLLECT INTO ar;
dbms_output.put_line(ar.count);
IF ar.Count > 0 THEN
EXECUTE IMMEDIATE 'TRUNCATE TABLE ' || schemasname || '.F01131M';
FORALL i in ar.first .. ar.last INSERT INTO dcbhmoh1.F01131M VALUES ar(i);
END IF;
END;
1 ответ
Решение
Вы можете попытаться определить схему для вашей рабочей сессии с
EXECUTE IMMEDIATE 'Alter session set current_schema='|| schemasname ;
Как это:
DECLARE
schemasname varchar2(25) := 'dcbhmoh1';
datet char(6) := '102024';
TYPE anames IS table of dcbhmoh1.F01131M%ROWTYPE;
ar anames;
BEGIN
-- set schema
EXECUTE IMMEDIATE 'Alter session set current_schema='|| schemasname ;
-- do your work
EXECUTE IMMEDIATE 'SELECT * FROM F01131M WHERE ZMDTI >= ' || datet BULK COLLECT INTO ar;
dbms_output.put_line(ar.count);
IF ar.Count > 0 THEN
EXECUTE IMMEDIATE 'TRUNCATE TABLE F01131M';
FORALL i in ar.first .. ar.last INSERT INTO F01131M VALUES ar(i);
END IF;
END;
(не уверен насчет полного синтаксиса FORALL
хоть).