("<неназванный портал 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';