Может ли кто-нибудь сообщить мне, как преобразовать приведенный ниже исходный код оракула в хранимой процедуре в Postgresql
CURSOR DATA_PKG (iPKG varchar2)IS
SELECT REGEXP_SUBSTR(iPKG, '[^,]+', 1, LEVEL) Data_PKG FROM dual
connect BY REGEXP_SUBSTR(iPKG, '[^,]+', 1, LEVEL) IS NOT NULL;
CURSOR LEC_PKG (iPKG varchar2) IS
SELECT REGEXP_SUBSTR(iPKG, '[^,]+', 1, LEVEL) LEC_Pkg FROM dual
connect BY REGEXP_SUBSTR(iPKG, '[^,]+', 1, LEVEL) IS NOT NULL;
Мой код Postgres выглядит следующим образом:
c3 CURSOR (ipkg TEXT) FOR
WITH RECURSIVE t (pkg)
AS (SELECT
aws_oracle_ext.regexp_substr(ipkg, '[^,]+', 1, 1) AS data_pkg
UNION ALL
SELECT
aws_oracle_ext.regexp_substr(ipkg, '[^,]+', 1, t.level + 1)
FROM t
WHERE aws_oracle_ext.regexp_substr(ipkg, '[^,]+', 1, level + 1) IS NOT NULL)
SELECT
data_pkg
FROM t;
c4 CURSOR (ipkg TEXT) FOR
WITH RECURSIVE t2 (pkg)
AS (SELECT
aws_oracle_ext.regexp_substr(ipkg, '[^,]+', 1, 1) AS lec_pkg
UNION ALL
SELECT
aws_oracle_ext.regexp_substr(ipkg, '[^,]+', 1, t2.level + 1)
FROM t2
WHERE aws_oracle_ext.regexp_substr(ipkg, '[^,]+', 1, level + 1) IS NOT NULL)
SELECT
lec_pkg
FROM t2;
Но когда я выполняю эту функцию в Postgresql
, она выдает ошибку, как показано ниже,
ERROR: column t.level does not exist LINE 6: ... aws_oracle_ext.regexp_substr(ipkg, '[^,]+', 1, t.level + ...
^ QUERY: WITH RECURSIVE t (pkg)
AS (SELECT
aws_oracle_ext.regexp_substr(ipkg, '[^,]+', 1, 1) AS data_pkg
UNION ALL
SELECT
aws_oracle_ext.regexp_substr(ipkg, '[^,]+', 1, t.level + 1)
FROM t
WHERE aws_oracle_ext.regexp_substr(ipkg, '[^,]+', 1, level + 1) IS NOT NULL)
SELECT
data_pkg
FROM t CONTEXT: PL/pgSQL function "pop_bus_bundle$populate_bundle_names"() line 60 at FOR over cursor SQL state: 42703