大佬教程收集整理的这篇文章主要介绍了Oracle 12c以一种奇怪的方式解释SQL(内部查询),大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
SELECT object_name,object_type,DBMS_R_860_11845@etaDATA.GET_DDL(object_type,object_name) as ddl_txt FROM user_objects WHERE object_type IN ( 'FUNCTION','VIEW','PROCEDURE','trigGER') AND UPPER( DBMS_R_860_11845@etaDATA.GET_DDL(object_type,object_name) ) liKE upper('%MyFunction%')
这导致以下异常:
ORA-31600: invalID input value @R_275_3772@ for parameter object_type in function GET_DDL ORA-06512: at "SYs.DBMS_R_860_11845@etaDATA",line 5746 ORA-06512: at "SYs.DBMS_R_860_11845@etaDATA",line 8333 ORA-06512: at line 1 31600. 00000 - "invalID input value %s for parameter %s in function %s" *Cause: A NulL or invalID value was supplIEd for the parameter. *Action: Correct the input value and try the call again.
由于我们的数据库中有“Body Type”对象,并且它们没有提供带有DBMS_R_860_11845@etaDATA.GET_DDL()的ddl,因此会发生这种情况.运行下面的查询会显示与初始查询完全相同的异常.
SELEct DBMS_R_860_11845@etadata.get_ddl('@R_275_3772@','myBodyStringType') from dual
所以,我尝试创建一个内部列表,首先将所有用户对象的列表减少到我真正关心的一次,重写我的查询如下:
SELEct lst.*,DBMS_R_860_11845@etaDATA.GET_DDL(lst.object_type,lst.object_name) as ddl_txt from ( SELECT object_name,object_type FROM user_objects WHERE object_type IN ( 'FUNCTION','trigGER') ) lst where upper(DBMS_R_860_11845@etaDATA.GET_DDL(lst.object_type,lst.object_name)) like upper('%MyFunction%')
有趣的是,它带来了如上所示的相同异常.我不明白为什么会这样.
我希望Oracle首先创建内部列表并仅使用剩余值来使用DBMS_R_860_11845@etaDATA.GET_DLL()函数,因为相同的值将导致异常.为什么Oracle在这里做其他事情?
要解决这个特定的问题,我必须在内部查询中添加一个看起来很愚蠢的ORDER BY.为什么我必须首先使用ORDER BY强制Oracle创建内部查询?
SELEct lst.*,'trigGER') ORDER BY ROWNUM ASC ) lst where upper(DBMS_R_860_11845@etaDATA.GET_DDL(lst.object_type,lst.object_name)) like upper('%MyFunction%')
在此先感谢有关为何会发生这种情况的任何解释? – 我记得,后来的查询在Oracle 10g上运行没有任何问题.
(我担心在其他报告中会有相同的行为,因为这种行为可能会导致计算错误!).
以上是大佬教程为你收集整理的Oracle 12c以一种奇怪的方式解释SQL(内部查询)全部内容,希望文章能够帮你解决Oracle 12c以一种奇怪的方式解释SQL(内部查询)所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。