this code is firing errors
query_string := 'SELECT '||dbms_assert.sql_object_name(trim(both ' ' from return_field))|| ' FROM '||dbms_assert.schema_name(trim(both ' ' from from_schema))|| '.'||dbms_assert.sql_object_name(trim(both ' ' from from_table))|| ' WHERE '||dbms_assert.sql_object_name(key_field) || ' = '||key_value; EXECUTE IMMEDIATE query_string into return_result;
invalid sql object.
from the documentation i feel any object in table is an sql object??
whats wrong here ?
consider following function in oracle 10g
Consider the following function in 10g context
CREATE OR REPLACE FUNCTION scott.tab_lookup (key_field CHAR, key_value CHAR, from_schema CHAR, from_table CHAR, return_field CHAR, return_type CHAR) RETURN VARCHAR2 IS result_a varchar2(1000); query_string VARCHAR2(4000); /*version 0.5*/ BEGIN 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') THEN result_a := query_string; ELSE EXECUTE IMMEDIATE query_string --USING key_value into result_a; END IF; RETURN (result_a); EXCEPTION WHEN NO_DATA_FOUND THEN RETURN(NULL); WHEN TOO_MANY_ROWS THEN RETURN('**ERR_DUPLICATE**'); WHEN OTHERS THEN /* ORA-44001 INVALID_SCHEMA_NAME ORA-44002 INVALID_OBJECT_NAME ORA-44003 INVALID_SQL_NAME ORA-44004 INVALID_QUALIFIED_SQL_NAME */ IF SQLCODE = -44001 THEN RETURN('*ERR_INVALID_SCHEMA*'); ELSIF SQLCODE = -44002 THEN RETURN('*ERR_INVALID_OBJECT*'); ELSIF SQLCODE = -44003 THEN RETURN('*ERR_INVALID_SQL_NAME*'); ELSIF SQLCODE = -44004 THEN RETURN('*ERR_INVALID_QALIFIED_SQLNAME*'); end if; return ('*ERR_'||sqlcode); END; /
i am getting ERR_INVALID_OBJECT
--to get the Genrated SQL as Value Select scott.tab_lookup('ID',1,'TEST','TEST_TABLE','TEST_DESC','SQL') from dual; -- -or- -- to get the value returned from database field Select scott.tab_lookup('ID',1,'TEST','TEST_TABLE','TEST_DESC','') from dual;
my table is like
TEST_TABLE ==================== ID , TEST_DESC ==================== '11' , 'TEST 1' '12' , 'TEST 5000' '13' , 'TEST INPUT VALUE' '14' , 'JUNK VALUE' '50' , 'TEST VALUE 50'
this table is in 'TEST' schema and i am connected with SCOTT and SCOTT has 'GRANT SELECT on TEST.TEST_TABLE to scott'
still i get error
ERR_INVALID_OBJECT