我需要将所有对象从oracle迁移到postgres,但是当我尝试imoprt时,包显示了另一件事。
这是Oracle的原始包:
CREATE OR REPLACE PACKAGE DIV.div_pkg_bitacora AS
PROCEDURE registrar_bitacora( pv_origen IN VARCHAR2,
pv_id_entidad IN VARCHAR2,
pv_tipo_entidad IN VARCHAR2,
pv_par_entrada IN VARCHAR2,
pv_par_salida IN VARCHAR2,
pv_usuario IN VARCHAR2,
pd_fecha_inicio IN TIMESTAMP,
pd_fecha_fin IN TIMESTAMP);
END div_pkg_bitacora;
/
CREATE OR REPLACE PACKAGE body DIV.div_pkg_bitacora AS
PROCEDURE registrar_bitacora( pv_origen IN VARCHAR2,
pv_id_entidad IN VARCHAR2,
pv_tipo_entidad IN VARCHAR2,
pv_par_entrada IN VARCHAR2,
pv_par_salida IN VARCHAR2,
pv_usuario IN VARCHAR2,
pd_fecha_inicio IN TIMESTAMP,
pd_fecha_fin IN TIMESTAMP) IS
PRAGMA AUTONOMOUS_TRANSACTION;
vv_flag VARCHAR2(10);
BEGIN
BEGIN
SELECT es_log
INTO vv_flag
FROM div_log_procesos
WHERE upper(origen) = upper(pv_origen);
EXCEPTION
WHEN OTHERS THEN
vv_flag := 'N';
END;
--
IF vv_flag = 'S' THEN
INSERT INTO div_log_dividendos(
origen,
id_entidad,
tipo_entidad,
parametros_entrada,
parametros_salida,
fecha,
fecha_inicio,
fecha_fin,
usuario)
VALUES(pv_origen,
pv_id_entidad,
pv_tipo_entidad,
pv_par_entrada,
pv_par_salida,
SYSDATE,
pd_fecha_inicio,
pd_fecha_fin,
pv_usuario);
COMMIT;
END IF;
EXCEPTION
WHEN OTHERS THEN
NULL;
END;
END div_pkg_bitacora;
/
字符串
=这是在使用ora2pg的过程中生成的脚本=
SET client_encoding TO 'UTF8';
SET search_path = div,public;
\set ON_ERROR_STOP ON
-- Oracle package 'DIV_PKG_BITACORA' declaration, please edit to match PostgreSQL syntax.
--DROP SCHEMA IF EXISTS div_pkg_bitacora CASCADE;
CREATE SCHEMA IF NOT EXISTS div_pkg_bitacora;
--
-- dblink wrapper to call function div_pkg_bitacora.registrar_bitacora() as an autonomous transaction
--
CREATE EXTENSION IF NOT EXISTS dblink;
CREATE OR REPLACE PROCEDURE div_pkg_bitacora.registrar_bitacora ( pv_origen text, pv_id_entidad text, pv_tipo_entidad text, pv_par_entrada text, pv_par_salida text, pv_usuario text, pd_fecha_inicio TIMESTAMP, pd_fecha_fin TIMESTAMP) AS $body$
DECLARE
-- Change this to reflect the dblink connection string
v_conn_str text := format('port=%s dbname=%s user=%s', current_setting('port'), current_database(), current_user);
v_query text;
BEGIN
v_query := 'CALL div_pkg_bitacora.registrar_bitacora_atx ( ' || quote_nullable(pv_origen) || ',' || quote_nullable(pv_id_entidad) || ',' || quote_nullable(pv_tipo_entidad) || ',' || quote_nullable(pv_par_entrada) || ',' || quote_nullable(pv_par_salida) || ',' || quote_nullable(pv_usuario) || ',' || quote_nullable(pd_fecha_inicio) || ',' || quote_nullable(pd_fecha_fin) || ' )';
PERFORM * FROM dblink(v_conn_str, v_query) AS p (ret boolean);
END;
$body$ LANGUAGE plpgsql SECURITY DEFINER;
CREATE OR REPLACE PROCEDURE div_pkg_bitacora.registrar_bitacora_atx ( pv_origen text, pv_id_entidad text, pv_tipo_entidad text, pv_par_entrada text, pv_par_salida text, pv_usuario text, pd_fecha_inicio TIMESTAMP, pd_fecha_fin TIMESTAMP) AS $body$
DECLARE
vv_flag varchar(10);
BEGIN
BEGIN
SELECT es_log
INTO STRICT vv_flag
FROM div_log_procesos
WHERE upper(origen) = upper(pv_origen);
EXCEPTION
WHEN OTHERS THEN
vv_flag := 'N';
END;
--
IF vv_flag = 'S' THEN
INSERT INTO div_log_dividendos(
origen,
id_entidad,
tipo_entidad,
parametros_entrada,
parametros_salida,
fecha,
fecha_inicio,
fecha_fin,
usuario)
VALUES (pv_origen,
pv_id_entidad,
pv_tipo_entidad,
pv_par_entrada,
pv_par_salida,
clock_timestamp(),
pd_fecha_inicio,
pd_fecha_fin,
pv_usuario);
END IF;
EXCEPTION
WHEN OTHERS THEN
NULL;
END;
$body$
LANGUAGE PLPGSQL
SECURITY DEFINER
;
-- REVOKE ALL ON PROCEDURE div_pkg_bitacora.registrar_bitacora ( pv_origen text, pv_id_entidad text, pv_tipo_entidad text, pv_par_entrada text, pv_par_salida text, pv_usuario text, pd_fecha_inicio TIMESTAMP, pd_fecha_fin TIMESTAMP) FROM PUBLIC; -- REVOKE ALL ON PROCEDURE div_pkg_bitacora.registrar_bitacora_atx ( pv_origen text, pv_id_entidad text, pv_tipo_entidad text, pv_par_entrada text, pv_par_salida text, pv_usuario text, pd_fecha_inicio TIMESTAMP, pd_fecha_fin TIMESTAMP) FROM PUBLIC;
-- End of Oracle package 'DIV_PKG_BITACORA' declaration
型
在这种情况下该怎么办?
1条答案
按热度按时间twh00eeo1#
PostgreSQL
没有包,但是你可以使用模式来组织functions
和procedures
。查看下面的例子,它将Oracle package
转换为PostgreSQL
过程,调整了事务控制,异常处理和日期函数的语法以适应PostgreSQL的PL/pgSQL语言。字符串