[英]Dynamic sql with for loop PL/SQL
下面的查詢需要轉換成動態的SQL無硬編碼cursor SQL,使用l_query,我不知道l_query它會作為一個參數來。 在循環內部,我需要執行另一個插入查詢 (l_insert_query),它也作為參數出現。
您的建議將不勝感激
DECLARE
CURSOR cust
IS
SELECT *
FROM customer
WHERE id < 500;
BEGIN
l_query := 'SELECT * FROM customer WHERE id < 5';
l_insert_query :=
'insert into data ( name, mobile) values ( cust.name,cust.mobile)';
FOR r_cust IN cust
LOOP
EXECUTE IMMEDIATE l_insert_query;
END LOOP;
END;
您可以使用動態 PL/SQL 塊來執行此操作:
declare
l_query varchar2(100) := 'SELECT * FROM customer WHERE id < 5';
l_insert varchar2(100) := 'insert into data ( name, mobile) values ( cust.name,cust.mobile)';
l_plsql varchar2(4000);
begin
l_plsql := '
begin
for cust in (' || l_query || ') loop
' || l_insert || ';
end loop;
end;
';
dbms_output.put_line(l_plsql);
execute immediate l_plsql;
end;
/
l_plsql
語句最終作為使用 cursor 查詢和插入語句生成的 PL/SQL 塊:
begin
for cust in (SELECT * FROM customer WHERE id < 5) loop
insert into data ( name, mobile) values ( cust.name,cust.mobile);
end loop;
end;
但你能做到這一點並不意味着你應該這樣做。 這很容易受到 SQL 注入的影響,並且似乎不是一種非常安全、明智或有效的方法來處理系統中的數據操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.