我在包中创建了一个动态查询,如:
QUERY_STR := 'SELECT DISTINCT :1
FROM schema_name.'|| P_TABLE_NAME||' where UPPER(:2) NOT IN (SELECT UPPER(LOOKUP_STG.LOOKUP_CODE)
from XX_LOOKUP_EXT LOOKUP_STG where UPPER(:3)=upper(LOOKUP_CODE)
and LOOKUP_STG.LOOKUP_TYPE=''' || P_LOOKUP_TYPE || ''') ;';
我试图通过
执行declare
P_TABLE_NAME varchar2(100):='XXHR_STG';
P_LOOKUP_TYPE varchar2(100):='PER_SUPERVISOR_TYPE';
p_column VARCHAR2(100):='manager_type';
begin
XX_LOOKUP_VALIDATION.XX_VALIDATION_LOOKUP(P_TABLE_NAME,P_LOOKUP_TYPE,p_column);
end;
实际上在query_str中,p_lookup_type应该用引号括起来:
SELECT DISTINCT manager_type
FROM schema_name.XXHR_STG
where UPPER(MANAGER_TYPE) NOT IN
(SELECT UPPER(LOOKUP_STG.LOOKUP_CODE)
from XX_LOOKUP_EXT LOOKUP_STG where UPPER(MANAGER_TYPE)=upper(LOOKUP_CODE)
and LOOKUP_STG.LOOKUP_TYPE='PER_SUPERVISOR_TYPE';
但是在调用包时我收到了无效的字符错误
00911. 00000 - "invalid character"
*Cause: identifiers may not start with any ASCII character other than
letters and numbers. $#_ are also allowed after the first
character. Identifiers enclosed by doublequotes may contain
any character other than a doublequote. Alternative quotes
(q'#...#') cannot use spaces, tabs, or carriage returns as
delimiters. For all other contexts, consult the SQL Language
Reference Manual.
*Action:
dbms输出:
SELECT DISTINCT :1
FROM schema_name.XXHR_STG
where UPPER(:2) NOT IN
(select UPPER(LOOKUP_STG.LOOKUP_CODE)
from XX_LOOKUP_EXT LOOKUP_STG where UPPER(:3)=UPPER(LOOKUP_CODE)
and LOOKUP_STG.LOOKUP_TYPE='PER_SUPERVISOR_TYPE';
答案 0 :(得分:0)
问题解决了。我写过“;”在动态查询结束时。哪种情况确实如此