问题描述
嗨,伙计们,
迁移到11.2.0.4版本后,我遇到了一些错误。
在旧版本11.2.0.2中,每当应用程序尝试为特定SQL执行许多内联游标表达式时,我都会收到 “ORA-00604: 递归SQL级别1游标表达式不允许出现错误” 错误
喜欢
选择seq_no,光标 (选择。... 从 ....),光标 (选择。... 从 ....) 从 .........
我被建议升级到11.2.0.4,所以我做到了。
现在... ORA-00604: 在递归SQL级别1发生错误,ORA-01006以下SQL的Bind变量不存在。
它与bind varible窥视有关吗 (在谷歌搜索时刚刚听到这个词:-P)
我能够在QA中成功运行相同的查询。(已经是11.2.0.4) ..
附加说明:
过去,当我们的一个dba尝试实现优化器建议的SQL配置文件时,我们遇到了一个smilar错误,并且导致了everythng中断并绑定变量错误。回应来自DBA
“当作业执行时,它启动了主查询,由于游标,它产生了许多子查询。这些子查询中的每一个都需要适度的时间。我不记得细节了,但我认为大约是一分钟。
我在游标内部的查询上运行了sql调优,认为如果我们减少查询时间,它将大大减少整个事物的查询时间。”
并进一步删除了配置文件,并要求我们在没有太多内联游标表达式的情况下重组SQL (这是不可行的)
对不起,书中的家伙... 试图提供尽可能多的信息... :-)
迁移到11.2.0.4版本后,我遇到了一些错误。
在旧版本11.2.0.2中,每当应用程序尝试为特定SQL执行许多内联游标表达式时,我都会收到 “ORA-00604: 递归SQL级别1游标表达式不允许出现错误” 错误
喜欢
选择seq_no,光标 (选择。... 从 ....),光标 (选择。... 从 ....) 从 .........
我被建议升级到11.2.0.4,所以我做到了。
现在... ORA-00604: 在递归SQL级别1发生错误,ORA-01006以下SQL的Bind变量不存在。
它与bind varible窥视有关吗 (在谷歌搜索时刚刚听到这个词:-P)
我能够在QA中成功运行相同的查询。(已经是11.2.0.4) ..
附加说明:
过去,当我们的一个dba尝试实现优化器建议的SQL配置文件时,我们遇到了一个smilar错误,并且导致了everythng中断并绑定变量错误。回应来自DBA
“当作业执行时,它启动了主查询,由于游标,它产生了许多子查询。这些子查询中的每一个都需要适度的时间。我不记得细节了,但我认为大约是一分钟。
我在游标内部的查询上运行了sql调优,认为如果我们减少查询时间,它将大大减少整个事物的查询时间。”
并进一步删除了配置文件,并要求我们在没有太多内联游标表达式的情况下重组SQL (这是不可行的)
PROCEDURE rtetget ( i_n_Sub_SEC_SEQ_NO IN LSDB202_MDL_SUBSEC.LS202_SUBSEC_SEQ_NO %TYPE ,i_n_SEC_SEQ_NO IN LSDB201_MDL_SEC.LS201_SEC_SEQ_NO%TYPE ,i_n_Order_Key IN LSDB400_ORDR.LS400_ORDR_KEY %TYPE ,i_s_Data_Loc IN LSDB400_ORDR.LS150_DATA_LOC_TYPE_CODE %TYPE ,i_n_Rev_Input IN NUMBER ,i_n_Spec IN LSDB090_FILE_TYPE.LS090_FILE_TYPE_CODE%TYPE ,i_s_UserId IN LSDB010_EMD_USERS.LS010_USER_ID%TYPE ,o_cur_Disp OUT OUT_CURSOR ,o_n_LSDBErrorID OUT NUMBER ,o_s_OracleCode OUT VARCHAR2 ,o_s_ErrorMessage OUT VARCHAR2 ) IS l_cla_desc_chng_flag VARCHAR2(1):=NULL; l_s_Sys_Marker_Desc VARCHAR2(100):=NULL; l_s_Dyn_Clause_Flag VARCHAR2(1) :=NULL; BEGIN /************************************************************ | Variable Initialization done here. |************************************************************/ o_n_LSDBErrorID := Pk_Lsdb_Constants.con_n_Zero; o_s_OracleCode := Pk_Lsdb_Constants.con_n_Zero; o_s_ErrorMessage := Pk_Lsdb_Constants.con_n_Space; OPEN o_cur_Disp FOR SELECT G.LS300_CLA_SEQ_NO,G.LS301_VERSION_NO,G.LS202_SUBSEC_SEQ_NO ,G.LS406_CPY_IND,G.MODEL_INDICATOR ,(SELECT NVL( (SELECT Distinct Pk_Lsdb_Constants.con_s_flag_YES FROM LSDB418_ORDR_DEL_CLA_STAGING Z WHERE Z.LS300_CLA_SEQ_NO = G.LS300_CLA_SEQ_NO AND Z.LS400_ORDR_NO = (SELECT DISTINCT LS400_ORDR_NO FROM LSDB400_ORDR WHERE LS400_ORDR_KEY = i_n_Order_Key)),Pk_Lsdb_Constants.con_s_flag_NO) FROM DUAL) CLA_EXISTS_FLAG ,CURSOR( SELECT DECODE(Q.LS080_SPEC_STATUS_CODE,1,'DRFT',2,'PRPSL',3,'BSLNE','REV.'||Q.LS408_SPEC_REV_CODE) || DECODE(Q.LS408_SPEC_SUBLVL_REV_CODE,NULL, ' ','.'||Q.LS408_SPEC_SUBLVL_REV_CODE) REVISION_NUM FROM LSDB408_ORDR_CLA_REV Q WHERE Q.LS406_CLA_NUM = G.LS414_CLA_NO AND Q.LS300_CLA_SEQ_NO=G.LS300_CLA_SEQ_NO AND Q.LS400_ORDR_KEY=i_n_Order_Key AND Q.LS150_DATA_LOC_TYPE_CODE=i_s_Data_Loc AND Q.LS408_CLA_DESC_CHNG_FLAG=NVL(l_cla_desc_chng_flag,Q.LS408_CLA_DESC_CHNG_FLAG) AND DECODE(Q.LS080_SPEC_STATUS_CODE, 1,'DRFT', 2,'PRPSL', 3,'BSLNE', Q.LS408_SPEC_REV_CODE)||'.'||Q.LS408_SPEC_SUBLVL_REV_CODE= CASE i_n_Rev_Input WHEN 1 THEN NULL WHEN 2 THEN (SELECT DECODE(V.LS080_SPEC_STATUS_CODE, 1,'DRFT', 2,'PRPSL', 3,'BSLNE', V.LS408_SPEC_REV_CODE)||'.'||V.LS408_SPEC_SUBLVL_REV_CODE FROM LSDB408_ORDR_CLA_REV v, LSDB400_ORDR w WHERE V.LS406_CLA_NUM = G.LS414_CLA_NO AND V.LS300_CLA_SEQ_NO=G.LS300_CLA_SEQ_NO AND V.LS400_ORDR_KEY=i_n_Order_Key AND V.LS150_DATA_LOC_TYPE_CODE='S' AND V.LS080_SPEC_STATUS_CODE =W.LS080_SPEC_STATUS_CODE AND NVL(V.LS408_SPEC_REV_CODE,0)=NVL(W.LS400_SPEC_REV_CODE,0) AND NVL(V.LS408_SPEC_SUBLVL_REV_CODE,0)= NVL(W.LS400_SPEC_SUBLVL_REV_CODE,0) AND V.LS150_DATA_LOC_TYPE_CODE=W.LS150_DATA_LOC_TYPE_CODE AND V.LS400_ORDR_KEY=W.LS400_ORDR_KEY) WHEN 3 THEN DECODE(Q.LS080_SPEC_STATUS_CODE, 1,'DRFT', 2,'PRPSL', 3,'BSLNE', Q.LS408_SPEC_REV_CODE)||'.'||Q.LS408_SPEC_SUBLVL_REV_CODE --Added For CR_92 WHEN 4 THEN Q.LS408_SPEC_REV_CODE||'.'||Q.LS408_SPEC_SUBLVL_REV_CODE --Ends here END ORDER BY Q.LS080_SPEC_STATUS_CODE,REVISION_NUM )REVISION_NUMBER, CURSOR( SELECT DECODE(Q.LS080_SPEC_STATUS_CODE,1,'DRFT',2,'PRPSL',3,'BSLNE','REV.'||Q.LS408_SPEC_REV_CODE) ||DECODE(Q.LS408_SPEC_SUBLVL_REV_CODE,NULL,' ','.'||Q.LS408_SPEC_SUBLVL_REV_CODE) REVISION_NUM FROM LSDB408_ORDR_CLA_REV Q WHERE Q.LS406_CLA_NUM = G.LS414_CLA_NO AND Q.LS300_CLA_SEQ_NO=G.LS300_CLA_SEQ_NO AND Q.LS400_ORDR_KEY=i_n_Order_Key AND Q.LS150_DATA_LOC_TYPE_CODE=i_s_Data_Loc AND Q.LS408_CLA_DESC_CHNG_FLAG=NVL(l_cla_desc_chng_flag,Q.LS408_CLA_DESC_CHNG_FLAG) AND DECODE(Q.LS080_SPEC_STATUS_CODE, 1,'DRFT', 2,'PRPSL', 3,'BSLNE',Q.LS408_SPEC_REV_CODE)||'.'||Q.LS408_SPEC_SUBLVL_REV_CODE =(SELECT DECODE(V.LS080_SPEC_STATUS_CODE,1,'DRFT',2,'PRPSL',3,'BSLNE', V.LS408_SPEC_REV_CODE)||'.'||V.LS408_SPEC_SUBLVL_REV_CODE FROM LSDB408_ORDR_CLA_REV v, LSDB400_ORDR w WHERE V.LS406_CLA_NUM =G.LS414_CLA_NO AND V.LS300_CLA_SEQ_NO=G.LS300_CLA_SEQ_NO AND V.LS400_ORDR_KEY=i_n_Order_Key AND V.LS150_DATA_LOC_TYPE_CODE='S' AND V.LS080_SPEC_STATUS_CODE =W.LS080_SPEC_STATUS_CODE AND NVL(V.LS408_SPEC_REV_CODE,0)=NVL(W.LS400_SPEC_REV_CODE,0) AND NVL(V.LS408_SPEC_SUBLVL_REV_CODE,0) =NVL(W.LS400_SPEC_SUBLVL_REV_CODE,0) AND V.LS150_DATA_LOC_TYPE_CODE=W.LS150_DATA_LOC_TYPE_CODE AND V.LS400_ORDR_KEY=W.LS400_ORDR_KEY) ORDER BY Q.LS080_SPEC_STATUS_CODE,REVISION_NUM ) LATEST_REVISION_MARKER FROM LSDB307_CLA_HRCHY H, ( SELECT A.LS300_CLA_SEQ_NO,A.LS301_VERSION_NO,A.LS406_ORDR_BY_CODE,X.LS202_SUBSEC_CODE ,X.LS202_SUBSEC_SEQ_NO,A.LS193_CLA_HRCHY_SEQ_NO ,DECODE(A.LS301_VERSION_NO,A.LS406_CPY_FROM_VERSION_NO,PK_LSDB_CONSTANTS.con_s_flag_NO ,PK_LSDB_CONSTANTS.con_s_flag_YES) LS406_CPY_IND ,NVL( (SELECT DISTINCT Pk_Lsdb_Constants.con_s_flag_YES MODELINDICATOR FROM LSDB406_ORDR_CLA W,LSDB301_CLA_VER Y ,LSDB300_CLA X WHERE W.LS300_CLA_SEQ_NO=Y.LS300_CLA_SEQ_NO AND W.LS301_VERSION_NO<>Y.LS301_VERSION_NO AND Y.LS301_DEFAULT_FLAG=Pk_Lsdb_Constants.con_s_flag_YES AND W.LS300_CLA_SEQ_NO=A.LS300_CLA_SEQ_NO AND W.LS406_VERSION_UPDT_DATEPk_Lsdb_Constants.con_s_Cla_Source_Delete ),Pk_Lsdb_Constants.con_s_flag_NO) MODEL_INDICATOR ,A.LS406_CLA_NUM LS414_CLA_NO ,B.LS301_PRICE_BOOK_NUMBER ,B.LS301_CLA_DESC ,B.LS301_DWO_NUMBER,B.LS301_PART_NUMBER,B.LS301_ENGG_DATA_COMMENTS ,Y.LS170_IMG_SEQ_NO, W.LS415_IMG_NAME, W.LS415_IMG_DESC ,DECODE(P.LS300_CLA_SEQ_NO,NULL,PK_LSDB_CONSTANTS.con_s_flag_NO ,DECODE( (SELECT PK_LSDB_CONSTANTS.con_s_flag_YES FROM LSDB417_ORDR_DEL_CLA B WHERE b.LS300_CLA_SEQ_NO=( SELECT A.LS300_PARENT_CLA_SEQ_NO FROM LSDB307_CLA_HRCHY A WHERE A.LS300_CHILD_CLA_SEQ_NO=P.LS300_CLA_SEQ_NO) AND b.LS400_ORDR_KEY=i_n_Order_Key) ,NULL,PK_LSDB_CONSTANTS.con_s_flag_YES,PK_LSDB_CONSTANTS.con_s_flag_NO) ) DEL_IND ,C.LS190_CLA_SOURCE_CODE ,B.LS301_DELETE_FLAG ,A.LS406_USR_MARKER ,A.LS406_SYS_MARKER ,A.LS406_CLA_DEL_FLAG --Modified For CR_92 System Marker has three Values Y, N, H ,DECODE(A.LS406_SYS_MARKER,PK_LSDB_CONSTANTS.con_s_flag_NO ,NULL,l_s_Sys_Marker_Desc) SYS_MARKER_DESC ,C.LS300_LEAD_COMP_GRP_SEQ_NO ,A.LS406_SALES_SYS_MARKER ,C.LS300_CHAR_GRP_FLAG ,NVL( (SELECT PK_LSDB_CONSTANTS.con_s_flag_YES FROM LSDB429_ORDR_CLA_EDL_STAGING A WHERE A.LS300_CLA_SEQ_NO = C.LS300_CLA_SEQ_NO AND A.LS400_ORDR_KEY = i_n_Order_Key ),PK_LSDB_CONSTANTS.con_s_flag_NO) EDLINDICATOR ,A.LS406_CLA_RENUMBRD_FLAG ,A.LS406_USR_MARKED_REASON FROM LSDB406_ORDR_CLA A ,LSDB301_CLA_VER B ,LSDB300_CLA C ,LSDB202_MDL_SUBSEC X ,LSDB416_ORDR_CLA_APNDX_IMG Y ,LSDB415_ORDR_APNDX_IMG W ,LSDB417_ORDR_DEL_CLA P WHERE A.LS400_ORDR_KEY=i_n_Order_Key AND A.LS150_DATA_LOC_TYPE_CODE=i_s_Data_Loc AND A.LS300_CLA_SEQ_NO=B.LS300_CLA_SEQ_NO AND A.LS301_VERSION_NO=B.LS301_VERSION_NO AND X.LS202_SUBSEC_SEQ_NO=C.LS202_SUBSEC_SEQ_NO AND X.LS201_SEC_SEQ_NO =i_n_SEC_SEQ_NO AND C.LS202_SUBSEC_SEQ_NO=NVL(i_n_Sub_SEC_SEQ_NO,C.LS202_SUBSEC_SEQ_NO) AND B.LS300_CLA_SEQ_NO=C.LS300_CLA_SEQ_NO AND A.LS300_CLA_SEQ_NO=Y.LS300_CLA_SEQ_NO(+) AND A.LS301_VERSION_NO=Y.LS301_VERSION_NO(+) AND A.LS400_ORDR_KEY=Y.LS400_ORDR_KEY(+) AND A.LS150_DATA_LOC_TYPE_CODE=Y.LS150_DATA_LOC_TYPE_CODE(+) AND Y.LS400_ORDR_KEY=W.LS400_ORDR_KEY(+) AND Y.LS150_DATA_LOC_TYPE_CODE=W.LS150_DATA_LOC_TYPE_CODE(+) AND DECODE(Y.LS170_IMG_SEQ_NO,NULL,1,W.LS170_IMG_SEQ_NO) =DECODE(Y.LS170_IMG_SEQ_NO,NULL,1,Y.LS170_IMG_SEQ_NO) AND A.LS300_CLA_SEQ_NO=P.LS300_CLA_SEQ_NO(+) AND A.LS301_VERSION_NO=P.LS301_VERSION_NO(+) AND A.LS400_ORDR_KEY=P.LS400_ORDR_KEY(+) AND DECODE(l_s_Dyn_Clause_Flag,PK_LSDB_CONSTANTS.con_s_flag_NO, 'A',A.LS406_CLA_DEL_FLAG) = DECODE(l_s_Dyn_Clause_Flag,PK_LSDB_CONSTANTS.con_s_flag_NO, 'A', PK_LSDB_CONSTANTS.con_s_flag_NO) )G WHERE H.LS300_CHILD_CLA_SEQ_NO=G.LS300_CLA_SEQ_NO START WITH H.LS300_PARENT_CLA_SEQ_NO IS NULL CONNECT BY H.LS300_PARENT_CLA_SEQ_NO=PRIOR H.LS300_CHILD_CLA_SEQ_NO ORDER SIBLINGS BY G.LS202_SUBSEC_CODE,G.LS193_CLA_HRCHY_SEQ_NO,G.LS406_ORDR_BY_CODE; 复制
对不起,书中的家伙... 试图提供尽可能多的信息... :-)
专家解答
良好的... 这是一个强大的大sql :-)
我建议尝试大块地解决这个问题
1) 删除 * 每个 * 游标表达式,查看sql是否可以在简单的测试工具中工作,即
可变rc refcursor
变量out1数
等等
exec rtetget([parms],: rc,: out1,: out2,: out3)
2) 如果可行,则一次选择性地将每个光标表达式加回一个,然后重复测试线束。
缩小范围,以便找到错误的确切原因。
从那里工作。
我建议尝试大块地解决这个问题
1) 删除 * 每个 * 游标表达式,查看sql是否可以在简单的测试工具中工作,即
可变rc refcursor
变量out1数
等等
exec rtetget([parms],: rc,: out1,: out2,: out3)
2) 如果可行,则一次选择性地将每个光标表达式加回一个,然后重复测试线束。
缩小范围,以便找到错误的确切原因。
从那里工作。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
Oracle RAC ASM 磁盘组满了,无法扩容怎么在线处理?
Lucifer三思而后行
988次阅读
2025-03-17 11:33:53
Oracle DataGuard高可用性解决方案详解
孙莹
426次阅读
2025-03-26 23:27:33
Oracle RAC 一键安装翻车?手把手教你如何排错!
Lucifer三思而后行
383次阅读
2025-04-15 17:24:06
墨天轮个人数说知识点合集
JiekeXu
363次阅读
2025-04-01 15:56:03
XTTS跨版本迁移升级方案(11g to 19c RAC for Linux)
zwtian
357次阅读
2025-04-08 09:12:48
Oracle SQL 执行计划分析与优化指南
Digital Observer
326次阅读
2025-04-01 11:08:44
Oracle 19c RAC更换IP实战,运维必看!
szrsu
294次阅读
2025-04-08 23:57:08
风口浪尖!诚通证券扩容采购Oracle 793万...
Roger的数据库专栏
293次阅读
2025-03-24 09:42:53
切换Oracle归档路径后,不能正常删除原归档路径上的归档文件
dbaking
287次阅读
2025-03-19 14:41:51
oracle定时任务常用攻略
virvle
286次阅读
2025-03-25 16:05:19