有没有方法在plpgsql函数中声明变量,在参数上设置了哪种数据类型?
例如:
create or replace function test(datatype text)<br> returns void as $$
declare
data datatype; -- data type is stored in the text string, for example int
begin
raise notice '%', (select pg_typeof(data));
end;
$$ language plpgsql;
换句话说,我试图编写一个函数,在这个函数中我需要一个变量,而变量数据类型必须在另一个输入参数中定义。
有什么想法吗?
致以最诚挚的问候
最佳答案
有一种方法-你可以使用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是为静态严格的业务流程而设计的,在这些流程中,使用太多动态代码通常是错误的。
关于postgresql - 在plpgsql中创建具有动态数据类型的变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41295283/