由于字符无效,动态 sql 查询错误

dynamic sql query error due to invalid character

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

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

问题已解决。我写了“;”在动态查询结束时。事实并非如此