【发布时间】:2014-02-19 18:04:09
【问题描述】:
此代码触发错误
query_string := 'SELECT '||dbms_assert.sql_object_name(trim(both ' ' from return_field))|| ' FROM '||dbms_assert.schema_name(trim(两个 ' ' 来自 from_schema))|| '.'||dbms_assert.sql_object_name(trim(来自 from_table) 的两个'')|| ' WHERE '||dbms_assert.sql_object_name(key_field) || ' = '||key_value; 立即执行 query_string 到 return_result;无效的 sql 对象。
从文档中我觉得表中的任何对象都是 sql 对象??
这里有什么问题?
考虑 oracle 10g 中的以下函数
考虑10g上下文中的以下函数
创建或替换函数 scott.tab_lookup (key_field CHAR, 键值字符, from_schema CHAR, from_table CHAR, return_field CHAR, return_type CHAR) 返回 VARCHAR2 是 结果_a varchar2(1000); 查询字符串 VARCHAR2(4000); /*版本 0.5*/ 开始 query_string := 'SELECT '||dbms_assert.qualified_sql_name(trim(from_table||'.'||return_field))|| ' FROM '||dbms_assert.schema_name(trim(from_schema))|| '.'||dbms_assert.sql_object_name(trim(from_table))|| ' WHERE '||dbms_assert.qualified_sql_name(from_table||'.'||key_field) || ' = '||key_value; IF(return_type = 'SQL') 那么 result_a := 查询字符串; 别的 立即执行查询字符串 --使用键值 进入结果_a; 万一; 返回(结果_a); 例外 什么时候 NO_DATA_FOUND 那么 返回(空); 什么时候 TOO_MANY_ROWS THEN RETURN('**ERR_DUPLICATE**'); 当其他人 然后 /* ORA-44001 INVALID_SCHEMA_NAME ORA-44002 INVALID_OBJECT_NAME ORA-44003 INVALID_SQL_NAME ORA-44004 INVALID_QUALIFIED_SQL_NAME */ 如果 SQLCODE = -44001 那么 RETURN('*ERR_INVALID_SCHEMA*'); ELSIF SQLCODE = -44002 那么 RETURN('*ERR_INVALID_OBJECT*'); ELSIF SQLCODE = -44003 那么 RETURN('*ERR_INVALID_SQL_NAME*'); ELSIF SQLCODE = -44004 那么 RETURN('*ERR_INVALID_QALIFIED_SQLNAME*'); 万一; return ('*ERR_'||sqlcode); 结尾; /我收到 ERR_INVALID_OBJECT
--获取生成的 SQL 作为值 从对偶中选择 scott.tab_lookup('ID',1,'TEST','TEST_TABLE','TEST_DESC','SQL'); - -要么- -- 获取从数据库字段返回的值 从对偶中选择 scott.tab_lookup('ID',1,'TEST','TEST_TABLE','TEST_DESC','');我的桌子是这样的
测试表 ===================== 身份证号, TEST_DESC ===================== “11”,“测试 1” “12”,“测试 5000” '13' , '测试输入值' '14' , '垃圾值' '50' , '测试值 50'此表在“TEST”模式中,我与 SCOTT 连接 并且 SCOTT 有 'GRANT SELECT on TEST.TEST_TABLE to scott'
我还是会出错
ERR_INVALID_OBJECT
【问题讨论】:
-
一般提示:Oracle 提供了非常清晰和具体的错误消息,这些错误消息以 ORA-##### 代码开头。请不要将其视为不相关的内容。
-
表示您作为参数提供给函数的任何内容都是无效的。我猜无法以这种方式检查列名