由于无效字符

时间:2016-02-24 18:46:33

标签: sql oracle dynamic oracle-sqldeveloper

我在包中创建了一个动态查询,如:

 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';

1 个答案:

答案 0 :(得分:0)

问题解决了。我写过“;”在动态查询结束时。哪种情况确实如此