iT邦幫忙

0

oracle plsql cursor loop問題

請教各位前輩~以下plsql ,有3個cursor,分別於不同情形下執行,若是loop裡做的事情都一樣,該如何簡化程式碼呢???

CURSOR c1 IS ---情形A
SELECT *
FROM itemC;
CURSOR c2 IS
SELECT *
FROM itemB ---情形B
CURSOR c3 IS
SELECT *
FROM itemA ---情形C
BEGIN
if 情形A then
FOR i IN c1 LOOP
dbms_output.put_line('ITEM.ITEM_TITLE ['||i.title||']');
END LOOP;
elseif 情形B then
FOR i IN c2 LOOP
dbms_output.put_line('ITEM.ITEM_TITLE ['||i.title||']');
END LOOP;
else 情形C
FOR i IN c3 LOOP
dbms_output.put_line('ITEM.ITEM_TITLE ['||i.title||']');
END LOOP;
end if;

1 個回答

3
Albert
iT邦高手 1 級 ‧ 2012-11-06 21:20:04

我們在全台灣最大電腦公司
有最優秀的 Oracle EBS R12 ERP 調校成績

技術轉移顧問
Skype: Adempiere/Compiere
Albert

以下是[動態]cursor 採 [DML] 宣告方式
你參考後功力就會大增

SQL> CREATE OR REPLACE PROCEDURE showemps (where_in IN VARCHAR2 := NULL)
2 IS
3 TYPE cv_typ IS REF CURSOR;
4 cv cv_typ;
5 v_nm emp.ename%TYPE;
6 BEGIN
7 OPEN cv FOR
8 'SELECT ename FROM emp WHERE ' || NVL (where_in, '1=1');
9 LOOP
10 FETCH cv INTO v_nm;
11 EXIT WHEN cv%NOTFOUND;
12 DBMS_OUTPUT.PUT_LINE (v_nm);
13 END LOOP;
14 CLOSE cv;
15 END;

dondonyen iT邦新手 4 級 ‧ 2012-11-06 21:44:08 檢舉

太棒了~
感謝...我再測試一下~

我要發表回答

立即登入回答