我正在与 SQL 开发人员一起玩,在这里遇到了一个问题...我想传递一个 ID 数组并选择这些 ID 指向的所有行。
要传递数组并在 Oracle 中带有
SELECT
子句的 IN
语句中使用它,我遵循了以下步骤:
create or replace TYPE "NBR_ARRAY" as table of varchar2(30);
使用以下过程将数组作为参数传递。
DECLARE
MID varchar2(1000);
BEGIN
I_ACCOUNT_NUM := ORADBA.CUST_ACCT_NBR_ARRAY(123); -- Initialize the PL/SQL table with values
SELECT id into MID
FROM ac WHERE ID ='56' and nbr IN (SELECT COLUMN_VALUE FROM TABLE(NBR_ARRAY('123')));
DBMS_OUTPUT.PUT_LINE('MID::'||MID);
END;
我看到结果集为
Error report:
ORA-01403: no data found
ORA-06512: at line 10
01403. 00000 - "no data found"
当我运行以下查询本身时,我有一条记录。
select ID from ORADBA.AC where ID ='56' and NBR='123'; -- able to see 56 in resultset
鉴于设置:
CREATE TYPE NBR_ARRAY as table of varchar2(30);
CREATE TABLE ac (id, nbr) AS
SELECT '56', '123' FROM DUAL;
然后你可以使用:
DECLARE
mid VARCHAR2(1000);
I_ACCOUNT_NUM NBR_ARRAY;
BEGIN
I_ACCOUNT_NUM := NBR_ARRAY(123); -- Initialize the PL/SQL array with values
SELECT id
into MID
FROM ac
WHERE ID ='56'
AND nbr IN (SELECT COLUMN_VALUE FROM TABLE(i_account_num));
DBMS_OUTPUT.PUT_LINE('MID::'||MID);
END;
/
哪个输出:
MID::56
或者更简单地说:
SELECT id
FROM ac
WHERE ID ='56'
AND nbr MEMBER OF NBR_ARRAY(123);
哪个输出:
身份证 |
---|
56 |
为什么当我使用以逗号分隔的字符串引用值时我没有得到它
声明 中 VARCHAR2(1000); I_ACCOUNT_NUM NBR_ARRAY; 逗号分隔字符串 VARCHAR2(200):=''; 开始 I_ACCOUNT_NUM := NBR_ARRAY(123); -- 用值初始化 PL/SQL 数组
FOR i IN 1..I_ACCOUNT_NUM.COUNT LOOP
DBMS_OUTPUT.PUT_LINE('Element ' || i || ': ' || I_ACCOUNT_NUM(i));
IF i = 1 THEN
comma_separated_string := comma_separated_string || '''' || I_ACCOUNT_NUM(i) || '''';
ELSE
comma_separated_string := comma_separated_string || ',' || '''' || I_ACCOUNT_NUM(i) || '''';
END IF;
END LOOP;
DBMS_OUTPUT.PUT_LINE('comma_separated_string ' ||comma_separated_string);
SELECT id
进入MID 来自交流 其中ID='56' AND nbr IN(逗号分隔字符串);
DBMS_OUTPUT.PUT_LINE('MID::'||MID); 结尾; /