与函数中的变量连接会产生错误
Concatenation with variable in function gives an error
所以我正在尝试 运行 这个功能。
CREATE OR REPLACE FUNCTION TableIteration()
RETURNS TABLE(table_schema text, table_name text)
LANGUAGE plpgsql
AS
$$
DECLARE
tgt_schema varchar;
list text[] := ARRAY[
"text1",
"text2",
"text3",
"text4",
"text5",
"text6",
"text7",
"text8",
"text9"
];
BEGIN
FOREACH tgt_schema IN ARRAY list
LOOP
RETURN QUERY EXECUTE
'SELECT t.table_schema :: text, t.table_name::text from information_schema.tables t
WHERE t.table_schema :: text='||tgt_schema;
END LOOP;
END
$$
但不知何故,连接给了我预期的结果。
每次启动函数时都会出现错误:
'ERROR: column "text1" does not exist'
为什么 postgres 将我的变量解释为列?
对声明的数组元素使用单引号,对函数 format()
使用适当的文字占位符 %L
:
...
RETURN QUERY EXECUTE format(
'SELECT
t.table_schema :: text,
t.table_name::text
FROM information_schema.tables t
WHERE t.table_schema :: text = %L', tgt_schema);
...
所以我正在尝试 运行 这个功能。
CREATE OR REPLACE FUNCTION TableIteration()
RETURNS TABLE(table_schema text, table_name text)
LANGUAGE plpgsql
AS
$$
DECLARE
tgt_schema varchar;
list text[] := ARRAY[
"text1",
"text2",
"text3",
"text4",
"text5",
"text6",
"text7",
"text8",
"text9"
];
BEGIN
FOREACH tgt_schema IN ARRAY list
LOOP
RETURN QUERY EXECUTE
'SELECT t.table_schema :: text, t.table_name::text from information_schema.tables t
WHERE t.table_schema :: text='||tgt_schema;
END LOOP;
END
$$
但不知何故,连接给了我预期的结果。
每次启动函数时都会出现错误:
'ERROR: column "text1" does not exist'
为什么 postgres 将我的变量解释为列?
对声明的数组元素使用单引号,对函数 format()
使用适当的文字占位符 %L
:
...
RETURN QUERY EXECUTE format(
'SELECT
t.table_schema :: text,
t.table_name::text
FROM information_schema.tables t
WHERE t.table_schema :: text = %L', tgt_schema);
...