Прямой перевод будет использовать массив типа таблицы.
CREATE OR REPLACE function temp_n_bulk_load()
returns void
as
$$
declare
v_t t[]; -- t is the table name and at the same time a data type
l_count bigint;
BEGIN
SELECT array_agg(t)
into v_t
FROM t;
l_count := cardinality(v_t);
raise notice 'Retrieved % rows', l_count;
INSERT INTO T1 (EMPNO, ENAME)
select r.*
from unnest(v_t) as r;
-- you can't COMMIT in a function
END;
language plpgsql;
Но весь подход излишне сложен и не будет масштабироваться - это также верно для решения Oracle. Использование одного insert into .. select
является способом более эффективным - как в Postgres, так и в Oracle.
Вся процедура должна быть заменена на:
insert into t1 (empno, ename)
select empno, ename
from t1;
Если вы хотите, вы можете поместить это в функцию:
CREATE OR REPLACE function temp_n_bulk_load()
returns void
as $$
insert into t1 (empno, ename)
select empno, ename
from t1;
$$
language sql;