【发布时间】:2020-11-18 16:30:15
【问题描述】:
由于无效的关系运算符错误,我有下面的匿名块,并且在执行立即 str 字符串之前失败。
不明白为什么。
SET SERVEROUT ON ;
DECLARE
SRCE_SB_CATGRY_ID VARCHAR2 (1000);
BEGIN
FOR i
IN (SELECT ISO_CNTRY_ID, X.COLUMN_NAME
FROM iso_cntry I,
(SELECT DISTINCT COLUMN_NAME
FROM ALL_tab_cols@suplr_md_qa2
WHERE table_name = 'TEMP_ARIBA'
AND COLUMN_NAME != 'SSC_ID') x
WHERE ISO_CNTRY_DESC_TXT LIKE '' || COLUMN_NAME || '%')
LOOP
DECLARE
str1 VARCHAR2 (10000)
:= ' SELECT DISTINCT ssc_id '
|| ' FROM stddata_suplr.temp_ariba@suplr_md_qa2 '
|| ' WHERE '
|| ' '
|| i.column_name
|| ' = ''Y'' ';
x SYS_REFCURSOR;
BEGIN
OPEN x FOR str1;
LOOP
FETCH x INTO SRCE_SB_CATGRY_ID;
EXIT WHEN x%NOTFOUND;
NULL;
END LOOP;
END;
END LOOP;
END;
【问题讨论】:
-
我没有发现任何明显的问题。一种可能性是您的列名之一具有要求将其括在双引号中的字符。我建议你在打开游标之前添加
DBMS_OUTPUT.PUT_LINE(str1),这样你就可以准确地看到你正在尝试执行的SQL。 -
嗨戴夫,非常感谢您对此的回复,我已经按照您的建议进行操作,但没有结果,我使用执行立即执行相同但相同的错误。
-
嗨 Belayer,它抛出无效的关系运算符,当我在 str 中传递硬编码值而不是 i.column_name 时,它可以工作,但不能使用 i.column_name,我将此字符串放在 dbms_output 中,并且所有生成的语句都是有效的......