2016-12-23 4 views
1


Есть ли способ объявить переменную в функции plpgsql, какой тип данных задан для параметра?
Например:

создать переменную с динамическим типом данных в 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; 

Другими словами, я пытаюсь написать функцию, так и внутри этой функции я нужна переменная, и этот тип переменных данных должен быть определен в другом входном параметре. Любые идеи? Лидеры нет

ответ

1

Есть один способ - вы можете использовать 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 предназначен для статических строгих бизнес-процессов, где использование слишком динамического кода обычно неверно.

 Смежные вопросы

  • Нет связанных вопросов^_^