我需要找到一种方法来转储 PL/pgSQL 函数输入参数的键/值对:
CREATE OR REPLACE FUNCTION _test(A text, B text)
...
raise info 'Params dump: %', _x;
...
执行时:
select _text('HELLO', 'WORLD');
该函数提出如下信息:
'A = HELLO, B = WORLD'
有没有办法将输入参数键/值对转储到变量中?
我需要找到一种方法来转储 PL/pgSQL 函数输入参数的键/值对:
CREATE OR REPLACE FUNCTION _test(A text, B text)
...
raise info 'Params dump: %', _x;
...
执行时:
select _text('HELLO', 'WORLD');
该函数提出如下信息:
'A = HELLO, B = WORLD'
有没有办法将输入参数键/值对转储到变量中?
转储输入参数有一种尴尬的方式:
create or replace function _tester(
_txt text,
_int int
) returns void
language 'plpgsql' as
$$
declare
_out text = '';
_rec record;
_func_name text = '_tester';
begin
for _rec in SELECT parameters.ordinal_position as _pos, parameters.parameter_name as _nm
FROM information_schema.routines
JOIN information_schema.parameters
ON routines.specific_name=parameters.specific_name
WHERE routines.routine_name = _func_name
ORDER BY parameters.ordinal_position
loop
if _rec._pos = 1 then
_out = _out || _rec._nm || ' = ' || $1::text || chr(10);
elsif _rec._pos = 2 then
_out = _out || _rec._nm || ' = ' || $2::text || chr(10);
end if;
end loop;
raise notice '%', _out;
end;
$$;
select _tester('A','1');
NOTICE: _txt = A
_int = 1
请注意,必须添加与输入参数一样多的 if/elsif。不确定那部分是否可以更简洁。