由于字符无效,动态 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';
问题已解决。我写了“;”在动态查询结束时。事实并非如此
我在包内创建了一个动态查询,例如:
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';
问题已解决。我写了“;”在动态查询结束时。事实并非如此