oracle - 语句未在 Oracle 中使用 Execute Immediate 执行
问题描述
以下语句在正常执行中执行,但使用时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
解决方案
如果 dynamic_sql_statement 是 SELECT 语句,并且您同时省略了 into_clause 和 bulk_collect_into_clause,则 execute_immediate_statement 永远不会执行。
SELECT INTO
如果您想查看EXECUTE IMMEDIATE
选择值的结果,您可以使用 use子句并将值分配给某个变量。如果您的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;
推荐阅读
- ios - 仅在 IOS 上的 StateError (Bad state: No element)
- hive - MetaException(消息:在 Metastore Hive 3.1.1 中找不到版本信息
- javascript - 如何使用两个var制作json键值对
- java - 确保此方法调用中使用的正则表达式不会导致拒绝服务
- python - 将 24 小时值转换为 HHMMSS - 时间
- azure - 使用逻辑应用程序将多个文件夹下的文件从 sftp 传输到 sharepoint 文档库
- java - 使用 Mapping Model 将 Smooks 生成的 XML 转换为 EDI
- php - 为什么 file_put_contents 将 2 行插入 json 文件?
- python - Docker 构建映像返回错误:lambci/lambda:术语“lambci/lambda”未被识别为 cmdlet、函数、脚本文件的名称
- python - 抓取列表问题