2014-01-24 75 views
1

我是這個組的新手。我試圖想到帶有條件選擇語句的遊標。 一些如何這樣的僞代碼 -帶有條件Select語句的Oracle遊標

​​

其實,我碰到一個地方需要與同一DDL兩個不同的表工作的場景。 基於某些用戶輸入,需要從表中獲取數據並在過程中進一步操作。正如我所說的這兩個表是相同的DDL 所以不想創建兩個不同的光標。這種相同業務邏輯的原因將應用於兩個表數據。它只是決定哪個表需要獲取數據的用戶輸入。一些人可以將此視爲最新的數據和歷史數據以及DB的設計方式。

希望我清楚我的情況。

謝謝, Arfeen。

+1

那麼你的問題是什麼? –

+0

使用動態SQL。請參閱http://docs.oracle.com/cd/E11882_01/appdev.112/e25519/dynamic.htm#LNPLS011 – Rachcha

+0

使用ref遊標可以解決您的問題,根據用戶輸入可以打開該遊標所需的表。 – San

回答

1

遊標可以聲明爲如下所述的聯合。根據變量condition的內容,遊標將基於Test1或Test2。

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

您試圖實現的目標看起來好像可以通過更好的表或視圖設計或使用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;