Из Oracle Docs
Если dynamic_sql_statement является оператором SELECT, и вы опускаете оба параметра: в__клаве и в_темном_объекте, то execute_immediate_statement никогда не выполняется.
Вы используете предложение SELECT INTO
и присваиваете значения некоторой переменной, если хотите увидеть результаты EXECUTE IMMEDIATE
select values. Если ваш оператор select
возвращает только одну строку, вы можете использовать следующую процедуру.
DECLARE P_CRDBY NUMBER := 1;
V_ID VARCHAR2(20);
V_QID VARCHAR2(20);
BEGIN
EXECUTE IMMEDIATE 'SELECT DISTINCT FEEDBACKQUESTIONS.FEEDBACKQUESTIONID AS ID,
FEEDBACKQUESTIONS.FEEDBACKQUESTIONID FROM FEEDBACKQUESTIONS
LEFT JOIN LANGUAGES ON FEEDBACKQUESTIONS.LANGUAGEID = LANGUAGES.LANGUAGEID
WHERE 1=1 AND FEEDBACKQUESTIONS.CRDBY = 1
ORDER BY FEEDBACKQUESTIONS.FEEDBACKQUESTIONID DESC
OFFSET 10 * (1 - 1) ROWS FETCH NEXT 10 ROWS ONLY'
INTO V_ID,V_QID ;
--USING P_CRDBY; DBMS_OUTPUT.PUT_LINE(P_CRDBY);
DBMS_OUTPUT.PUT_LINE('ID=' || V_ID ||', ID2=' || V_QID);
END;
Для нескольких строк вы можете использовать FOR LOOP CURSOR
для циклического просмотра набора результатов.
DECLARE P_CRDBY NUMBER := 1;
V_ID VARCHAR2(20);
V_QID VARCHAR2(20);
BEGIN
FOR MYROW IN (SELECT DISTINCT FEEDBACKQUESTIONS.FEEDBACKQUESTIONID AS ID,
FEEDBACKQUESTIONS.FEEDBACKQUESTIONID AS ID2 FROM FEEDBACKQUESTIONS
LEFT JOIN LANGUAGES ON FEEDBACKQUESTIONS.LANGUAGEID = LANGUAGES.LANGUAGEID
WHERE 1=1 AND FEEDBACKQUESTIONS.CRDBY = 1
ORDER BY FEEDBACKQUESTIONS.FEEDBACKQUESTIONID DESC
OFFSET 10 * (1 - 1) ROWS FETCH NEXT 10 ROWS ONLY)
--USING P_CRDBY; DBMS_OUTPUT.PUT_LINE(P_CRDBY);
LOOP
DBMS_OUTPUT.PUT_LINE('ID=' || MYROW.ID||', ID2=' || MYROW.ID2);
END LOOP;
END;