("<неназванный портал 9>") о вызове процедур в EDBPOSTGRESQL

У меня есть ситуация здесь, мы мигрируем с Oracle на EDB POSTGRES ADVANCED SERVER(ORACLE Compatible). Я поделюсь примером процедуры (один и тот же метод используется везде в нашей организационной процедуре).

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 ответ

Ваша процедура уязвима для внедрения SQL. Кроме того, почему фетиш с refcursors если все, что вы хотите, это:

CREATE FUNCTION get_emp(jb text) RETURNS SETOF emp
   LANGUAGE sql AS
'SELECT * FROM emp WHERE job = jb';
Другие вопросы по тегам