【发布时间】:2021-11-19 16:59:28
【问题描述】:
下面有一个简单的存储过程,它返回一个 SQL 字符串:
CREATE OR REPLACE PROCEDURE dbo.select_users_test(sqlstring inout text)
LANGUAGE plpgsql
AS
$$
BEGIN
sqlstring = 'select * from dbo.user where usr_key in (1, 2);';
END;
$$;
我可以这样调用存储过程:
CALL dbo.select_users_test('')
结果是:
| sqlstring text |
|---|
| select * from dbo.user where usr_key in (1, 2); |
我想要实现的是执行从存储过程返回的 SQL 字符串。
我试过了
EXECUTE QUERY CALL dbo.select_users_test('');
和
EXECUTE CALL dbo.select_users_test('');
但两者都抛出错误:
“CALL”处或附近的语法错误
我明确地尝试使用存储过程而不是函数来实现这一点,是否可以执行返回的 SQL 字符串?
【问题讨论】:
-
如果你想返回一个函数,而不是一个过程
-
你看不到,Return from procedure。您可以 Execute 查询只是不返回它,除非您将其分解为
OUT变量,我很确定这不是您想要的。您将需要使用一个函数。 -
除了使用函数 - 使用 plpgsql - DO $$ ..... $$;
-
@MichałZaborowski,
DO也不能RETURN。 -
正如我已经提到的,我试图通过存储过程而不是函数来实现这一点,我有大约 400 个从 SQLSever 迁移过来的存储过程。将所有这些 SP 更新为函数将是一项非常繁琐的任务。
标签: postgresql stored-procedures plpgsql dynamic-sql