我有一个函数,我在其中准备了动态查询,我希望在执行它之前在输出窗口中打印它。
注意:在下面的例子中,我只添加了一个简单的select语句来理解需求。
样品表:
create table t1
(
col1 int,
col2 text
);
insert into t1 values(1,'Table T1');
insert into t1 values(2,'Table T1');
create table t2
(
col1 int,
col2 text
);
insert into t2 values(1,'Table T2');
insert into t2 values(2,'Table T2');
功能:
create or replace function fn_testing(tbl_Name text)
returns table(col1 int,col2 text) as
$$
begin
return query execute 'select col1,col2 from '||tbl_name||'';
end;
$$
language plpgsql;
函数调用:
select * from fn_testing('t2');
我想在消息窗口中打印以下内容,结果窗口中也有结果集:
select col1,col2 from t1;
您可以将RAISE NOTICE
用于消息。
CREATE OR REPLACE FUNCTION fn_testing
(_tbl_name name)
RETURNS TABLE
(col1 integer,
col2 text)
AS
$$
DECLARE
_query text;
BEGIN
_query := format('SELECT col1, col2 FROM %I;', _tbl_name);
RAISE NOTICE '%', _query;
RETURN QUERY EXECUTE _query;
END;
$$
LANGUAGE plpgsql;
注意:标识符有一个特殊的类型name
。为了防止SQL注入或错误,您应该确保动态标识符被正确引用。您可以将format()
与%I
一起使用。