簡體   English   中英

具有條件Select語句的Oracle Cursor

[英]Oracle Cursor with conditional Select statement

我是這個小組的新手。 我試圖考慮使用帶有條件選擇語句的游標。 有些像這樣的偽代碼-

[B]cursor test_cursor is
  if condition == 't11'
  then 
    select * from test1;
  else 
    select * from test1;
  end if;[/B]
begin

  for cursorVal in test_cursor loop
    //Doing the actual task on cursor data.
  end loop;

commit;
end;

實際上,我遇到了一種情況,需要使用相同的DDL處理兩個不同的表。 根據一些用戶輸入,需要從任何一個表中獲取數據並進一步進行操作。 正如我所說的,兩個表都具有相同的DDL,所以不想創建兩個不同的游標。 相同的業務邏輯的原因將應用於兩個表數據。 它只是決定哪個表需要獲取數據的用戶輸入。 人們如何將其視為最新數據和歷史數據以及DB的設計方式。

希望我對我的情況很清楚。

謝謝,阿芬。

可以將游標聲明為並集,如下所述。 根據變量condition的內容,光標將基於Test1或Test2。

SELECT * FROM Test1 WHERE condition = 't1'
UNION ALL
SELECT * FROM Test2 WHERE condition = 't2'

您試圖實現的目標看起來可能是通過更好的表或視圖設計或通過使用BULK COLLECT來實現的。 如果可以-始終首先考慮數據庫設計而不是代碼。

BEGIN

if condition == 't11' then
 SELECT XXXXXX
 BULK COLLECT INTO bulk_collect_ids
 FROM your_table1;
else
 SELECT XXXXXX
 BULK COLLECT INTO bulk_collect_ids
 FROM your_table2;
end if;

FOR indx IN 1 .. bulk_collect_ids.COUNT
LOOP
 .
 //Doing the actual task on bulk_collect_ids data.
 .
END LOOP;

END;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM