(»") о вызове процедур в EDBPOSTGRESQL - PullRequest
0 голосов
/ 10 декабря 2018

У меня есть ситуация здесь, мы мигрируем с 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 голосов
/ 10 декабря 2018

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

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