我这里有个情况, 我们正在从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');
答案 0 :(得分:0)
您的过程容易受到SQL注入的攻击。此外,如果只想加上refcursors
的庞然大物,为什么:
CREATE FUNCTION get_emp(jb text) RETURNS SETOF emp
LANGUAGE sql AS
'SELECT * FROM emp WHERE job = jb';