使用函数获取视图视图引用的表
Get the tables referenced by a view view using a function
我想获取视图引用的 tables 并显示它们。
我有两个 table:test1
和 test2
我创建了一个视图,它引用了这些 tables
CREATE VIEW First_View
AS
SELECT * FROM test1
UNION
SELECT * FROM test2;
我创建了一个 table,其中包含 view id
和 view name
等视图详细信息,如下所示:
CREATE TABLE View_Details
(
view_id int,
view_name varchar
);
并在其中插入了一条记录。
INSERT INTO view_details values(1,'First_View');
现在我正在创建一个带有一个参数 v_id
的函数,即 view_id
并希望获取所有 table,它们被 view_namt
引用。
我正在执行此操作,但我在消息中没有收到任何消息:
CREATE OR REPLACE FUNCTION For_testing(v_id INT)
RETURNS VOID AS
$$
Declare
var varchar;
v_name varchar;
BEGIN
SELECT view_name INTO v_name from view_details where view_id = v_id;
FOR var IN SELECT Table_NAME from INFORMATION_SCHEMA.VIEW_TABLE_USAGE
WHERE View_Name = v_name LOOP
RAISE INFO '%',VAR;
END LOOP;
END;
$$
language plpgsql;
调用函数:
SELECT for_testing(1);
尝试SELECT lower(view_name) INTO v_name from view_details where view_id = v_id;
因为它应该用双引号引起来 First_View... 我的意思是如果您在创建视图时不使用 "First_View",字典会将 First_View 更改为 lower(First_View)。 ..
实际问题是view name
区分大小写。如您所见,view_name
已插入为 First_View
,其中 F 和 V 是大写字母。所以我知道了解决方案:
首先我们需要使用lower()
函数将大写字母转换为小写字母。
CREATE OR REPLACE FUNCTION For_testing(v_id INT)
RETURNS VOID AS
$$
Declare
var varchar;
v_name varchar;
BEGIN
SELECT view_name INTO v_name from view_details where view_id = v_id;
/* Solved here*/
v_name := lower(v_name);
FOR var IN SELECT Table_NAME from INFORMATION_SCHEMA.VIEW_TABLE_USAGE
WHERE View_Name = v_name LOOP
RAISE INFO '%',VAR;
END LOOP;
END;
$$
language plpgsql;
我想获取视图引用的 tables 并显示它们。
我有两个 table:test1
和 test2
我创建了一个视图,它引用了这些 tables
CREATE VIEW First_View
AS
SELECT * FROM test1
UNION
SELECT * FROM test2;
我创建了一个 table,其中包含 view id
和 view name
等视图详细信息,如下所示:
CREATE TABLE View_Details
(
view_id int,
view_name varchar
);
并在其中插入了一条记录。
INSERT INTO view_details values(1,'First_View');
现在我正在创建一个带有一个参数 v_id
的函数,即 view_id
并希望获取所有 table,它们被 view_namt
引用。
我正在执行此操作,但我在消息中没有收到任何消息:
CREATE OR REPLACE FUNCTION For_testing(v_id INT)
RETURNS VOID AS
$$
Declare
var varchar;
v_name varchar;
BEGIN
SELECT view_name INTO v_name from view_details where view_id = v_id;
FOR var IN SELECT Table_NAME from INFORMATION_SCHEMA.VIEW_TABLE_USAGE
WHERE View_Name = v_name LOOP
RAISE INFO '%',VAR;
END LOOP;
END;
$$
language plpgsql;
调用函数:
SELECT for_testing(1);
尝试SELECT lower(view_name) INTO v_name from view_details where view_id = v_id;
因为它应该用双引号引起来 First_View... 我的意思是如果您在创建视图时不使用 "First_View",字典会将 First_View 更改为 lower(First_View)。 ..
实际问题是view name
区分大小写。如您所见,view_name
已插入为 First_View
,其中 F 和 V 是大写字母。所以我知道了解决方案:
首先我们需要使用lower()
函数将大写字母转换为小写字母。
CREATE OR REPLACE FUNCTION For_testing(v_id INT)
RETURNS VOID AS
$$
Declare
var varchar;
v_name varchar;
BEGIN
SELECT view_name INTO v_name from view_details where view_id = v_id;
/* Solved here*/
v_name := lower(v_name);
FOR var IN SELECT Table_NAME from INFORMATION_SCHEMA.VIEW_TABLE_USAGE
WHERE View_Name = v_name LOOP
RAISE INFO '%',VAR;
END LOOP;
END;
$$
language plpgsql;