(“ << unnamed portal =”“ 9 =”“>”)在EDBPOSTGRESQL中的调用过程

时间:2018-12-10 12:43:38

标签: postgresql stored-procedures postgresql-11 postgres-plus

我这里有个情况, 我们正在从Oracle迁移到EDB POSTGRES ADVANCED SERVER(兼容ORACLE)。 我将分享一个示例过程(我们的组织过程中到处都使用相同的方法)。

CREATE OR REPLACE PROCEDURE get_emp(
OUT dataset refcursor,
jb character varying)
LANGUAGE 'edbspl'

AS $BODY$

STR VARCHAR2(32000) ;
BEGIN
STR := 'SELECT * FROM EMP WHERE JOB='''||JB||'''  ';

DBMS_OUTPUT.PUT_LINE ( STR ) ;
OPEN DATASET FOR STR ;

END GET_EMP$BODY$;

此过程已成功编译。但是当我调用程序

SELECT GET_EMP('CLERK');

结果就像

"<unnamed portal 1>"

在这之后我要做的是

begin;
SELECT GET_EMP('CLERK');
fetch all in "<unnamed portal 1>";

这一次,我得到了所需的输出。是否有任何方法可以通过调用以下过程来获取记录

SELECT GET_EMP('CLERK');

1 个答案:

答案 0 :(得分:0)

您的过程容易受到SQL注入的攻击。此外,如果只想加上refcursors的庞然大物,为什么:

CREATE FUNCTION get_emp(jb text) RETURNS SETOF emp
   LANGUAGE sql AS
'SELECT * FROM emp WHERE job = jb';