我正在回圈一個陳述句并提取 ID 并將其放入一個變數中:
declare
l_id NUMBER;
BEGIN
FOR i IN 1..l_row_count
loop
l_id := to_number(apex_json.get_varchar2(p_path => 'rows[%d].id',
p0 => i, p_values => l_values
)
);
end loop:
我正在嘗試獲取所有 ID,然后運行一個 select 陳述句,該 ID 串列將在 where 陳述句中使用。所以完整的代碼看起來像這樣:
declare
l_id NUMBER;
l_id_list [SOME_TYPE_NOT_SURE];
BEGIN
FOR i IN 1..l_row_count
loop
l_id := to_number(apex_json.get_varchar2(p_path => 'rows[%d].id',
p0 => i, p_values => l_values
)
);
//somehow add l_id to the l_id_list
end loop:
SELECT * FROM mytable WHERE someid IN (l_id_list);
END;
我無法讓它作業。我不是 PLSQL 方面的專家,但我嘗試使用陣列或嘗試將 l_id_list 連接為字串,但我無法讓它作業。基本上我要做的就是創建一個所有 ID 的串列,然后運行一個 select 陳述句來查看這些 ID 是否存在于另一個表中。
uj5u.com熱心網友回復:
全域宣告型別:
CREATE TYPE number_list IS TABLE OF NUMBER;
然后您可以初始化串列,然后在回圈的每次迭代中,EXTEND串列并分配值,最后,使用MEMBER OF運算子或IN子查詢和表集合運算式:
DECLARE
l_id_list NUMBER_LIST := NUMBER_LIST();
BEGIN
FOR i IN 1..l_row_count
LOOP
l_id_list.EXTEND;
l_id_list(l_id_list.COUNT) := to_number(
apex_json.get_varchar2(
p_path => 'rows[%d].id',
p0 => i,
p_values => l_values
)
);
END LOOP;
SELECT *
-- BULK COLLECT INTO ...
FROM mytable
WHERE someid MEMBER OF l_id_list;
-- or
SELECT *
-- BULK COLLECT INTO ...
FROM mytable
WHERE someid IN (SELECT COLUMN_VALUE FROM TABLE(l_id_list));
END;
uj5u.com熱心網友回復:
在您的情況下,您l_id_list的型別必須在全域范圍內宣告為集合型別。本地定義的型別不能用作集合,因此不能在in-clause 中使用。
declare
l_id NUMBER;
l_id_list [SOME_GLOBAL_COLLECTION_TYPE];
BEGIN
FOR i IN 1..l_row_count
loop
l_id := to_number(apex_json.get_varchar2(p_path => 'rows[%d].id',
p0 => i, p_values => l_values
)
);
//somehow add l_id to the l_id_list
end loop:
SELECT * FROM mytable WHERE someid IN (select * from table(l_id_list));
END;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/457339.html
上一篇:如何在OracleSQL中生成DDL和DML(可撰寫腳本)
下一篇:從默認子磁區移動值
