云数据库 GAUSSDB-依赖关系记录:示例

时间:2025-06-03 09:37:32

示例

--设置如下参数:
SET ddl_invalid_mode='invalid';
SET
SET enable_force_create_obj=on;
SET

-- pkg2通过类型依赖pkg1
CREATE OR REPLACE PACKAGE pkg1 IS
TYPE rec1 IS RECORD(id INT, name VARCHAR(2));
END pkg1;
/
CREATE PACKAGE

CREATE OR REPLACE PACKAGE pkg2 IS
TYPE rec2 IS RECORD(rec1 pkg1.rec1);
END pkg2;
/
CREATE PACKAGE
SELECT DISTINCT p.pkgname AS objname, q.pkgname AS refobjname FROM pg_depend AS dp
INNER JOIN gs_package AS p ON dp.objid=p.oid
INNER JOIN gs_package AS q ON dp.refobjid=q.oid
WHERE p.pkgname='pkg2';
 objname | refobjname 
---------+------------
 pkg2    | pkg1

-- pkg2通过变量依赖pkg1
CREATE OR REPLACE PACKAGE pkg1 IS
var1 INT;
END pkg1;
/
CREATE PACKAGE

CREATE OR REPLACE PACKAGE pkg2 IS
var2 INT := pkg1.var1;
END pkg2;
/
CREATE PACKAGE

SELECT DISTINCT p.pkgname AS objname, q.pkgname AS refobjname FROM pg_depend AS dp
INNER JOIN gs_package AS p ON dp.objid=p.oid
INNER JOIN gs_package AS q ON dp.refobjid=q.oid
WHERE p.pkgname='pkg2';
 objname | refobjname 
---------+------------
 pkg2    | pkg1
(1 row)

-- pkg2通过直接调用依赖pkg1
CREATE OR REPLACE PACKAGE pkg1 IS
PROCEDURE proc1();
END pkg1;
/
CREATE PACKAGE

CREATE OR REPLACE PACKAGE BODY pkg1 IS
PROCEDURE proc1() AS
BEGIN
RAISE INFO 'proc1';
END;
END pkg1;
/
CREATE PACKAGE BODY

CREATE OR REPLACE PACKAGE pkg2 IS
PROCEDURE proc2();
END pkg2;
/
CREATE PACKAGE

CREATE OR REPLACE PACKAGE BODY pkg2 IS
PROCEDURE proc2() AS
BEGIN
RAISE INFO 'proc2';
pkg1.proc1();
END;
END pkg2;
/
CREATE PACKAGE BODY
SELECT DISTINCT p.pkgname AS objname, q.pkgname AS refobjname FROM pg_depend AS dp
INNER JOIN gs_package AS p ON dp.objid=p.oid
INNER JOIN gs_package AS q ON dp.refobjid=q.oid
WHERE p.pkgname='pkg2';
 objname | refobjname 
---------+------------
 pkg2    | pkg1
(1 row)

-- func2通过直接调用依赖func1
CREATE OR REPLACE FUNCTION func1 RETURN INT AS
BEGIN
RETURN 1;
END;
/
CREATE FUNCTION

CREATE OR REPLACE FUNCTION func2 RETURN INT AS
BEGIN
func1();
RETURN 1;
END;
/
CREATE FUNCTION

SELECT DISTINCT p.proname AS objname, q.proname AS refobjname FROM pg_depend AS dp
INNER JOIN pg_proc AS p ON dp.objid=p.oid
INNER JOIN pg_proc AS q ON dp.refobjid=q.oid
WHERE p.proname='func2' AND q.proname='func1';
 objname | refobjname 
---------+------------
 func2   | func1
(1 row)

-- func2通过perform调用func1,不记录依赖关系
CREATE OR REPLACE FUNCTION func1 RETURN INT AS
BEGIN
RETURN 1;
END;
/
CREATE FUNCTION

CREATE OR REPLACE FUNCTION func2 RETURN INT AS
BEGIN
PERFORM func1();
RETURN 1;
END;
/
CREATE FUNCTION

SELECT DISTINCT p.proname AS objname, q.proname AS refobjname FROM pg_depend AS dp
INNER JOIN pg_proc AS p ON dp.objid=p.oid
INNER JOIN pg_proc AS q ON dp.refobjid=q.oid
WHERE p.proname='func2' AND q.proname='func1';
 objname | refobjname 
---------+------------
(0 rows)
support.huaweicloud.com/centralized-devg-v8-gaussdb/gaussdb-42-1997.html
提示

您即将访问非华为云网站,请注意账号财产安全