【发布时间】:2020-05-15 19:22:58
【问题描述】:
在一个函数中,我试图检查一个变量是否在一个列表中(这个列表来自EXECUTE IMMEDIATE),但是没有成功,我找不到正确的语法。
我还在PL/SQL - Use “List” Variable in Where In Clause、How to pass varchar with single quotes to Stored Proc in Oracle [duplicate] 和How to add values to a VARRAY using a loop 上尝试了这种解决方案,但没有成功。
我创建了如下的 TABLE TYPE,但我不知道这样做是否正确。
CREATE OR REPLACE TYPE DS_FUNCESP.TP_BI_LIST AS TABLE OF VARCHAR2(4000)
我尝试了什么:
CREATE OR REPLACE FUNCTION DS_FUNCESP.FNBIGB_CheckDataMissing2
(pOwn IN VARCHAR2, pTab IN VARCHAR2, pCol IN VARCHAR2) RETURN NUMBER IS
v_str VARCHAR2(2000);
BEGIN
v_Results := DS_FUNCESP.TP_BI_LIST();
v_Qtd := 1;
v_str := ' SELECT ''TEST1'' AS NM_COLUMN FROM DUAL UNION ALL
SELECT ''TEST2'' AS NM_COLUMN FROM DUAL UNION ALL
SELECT ''TEST3'' AS NM_COLUMN FROM DUAL';
EXECUTE IMMEDIATE v_str into v_Results;
-- I tried to show the TABLE TYPE to check if I was in the right way
DBMS_OUTPUT.PUT_LINE('Total rows: '||v_Results.COUNT);
-- Check if variable is in a table/array/list (which one is the right one?)
IF pCol IN (v_Results) THEN dbms_output.put_line('YES'); ELSE dbms_output.put_line('NO');
END IF;
EXCEPTION WHEN OTHERS THEN
RETURN 0;
END FNBIGB_CheckDataMissing2;
上面的代码不起作用,它给出了错误:
PLS-00383:在 IN 或 NOT IN 子句内的“PCOL”处发现类型不匹配
我该怎么做?最好的方法是什么?
【问题讨论】:
-
DBMS_OUTPUT.PUT_LINE('Total rows: '||v_Colunas.COUNT);如果注释异常处理之前的语句,这不会出错吗
-
v_Colunas的定义是什么?
-
@WoAiNii 对不起,这是 v_Results。我已经更新了帖子。该变量不存在。