有没有办法在plpgsql函数中声明一个变量,哪个数据类型是在参数上设置的?
例如:
subprocess.call(["ssh","host.example.com","getent", "passwd","dev"], shell=False)
换句话说,我正在尝试编写一个函数,并且在该函数内部我需要一个变量,并且该变量数据类型必须在另一个输入参数中定义。 有任何想法吗? 最重要的是
答案 0 :(得分:2)
有一种方法 - 您可以使用polymorphic parameters。 PLpgSQL在这个领域受到限制 - 语言被设计为非常静态 - 所以你可以做一些动态的工作,但通常这项工作很难(有时它是设计不愉快的信号)。该变量应在函数参数外声明:
CREATE OR REPLACE FUNCTION public.foo(anyelement)
RETURNS void
LANGUAGE plpgsql
AS $function$
BEGIN
RAISE NOTICE '<<%>>', pg_typeof($1);
END;
$function$
postgres=# SELECT foo(NULL::int), foo(NULL::text);
NOTICE: <<integer>>
NOTICE: <<text>>
┌─────┬─────┐
│ foo │ foo │
╞═════╪═════╡
│ │ │
└─────┴─────┘
(1 row)
C语言 - C函数支持完整的环境,你可以在PLpgSQL中做更多的事情。 PLpgSQL专为静态严格的业务流程而设计 - 使用过于动态的代码通常是错误的。