2012-11-25 41 views
2
CREATE OR REPLACE procedure verify_data 
IS 
cursor c1 is 
select 
    e.id 
from 
    table1 e 
where 
    id IN (select id from table1) 
    and id in (select id from table2); 
BEGIN 
FOR ed in c1 
    LOOP 
     DBMS_OUTPUT.PUT_LINE(ed.id||ed.name); 
    END LOOP; 
END; 
/

當我執行這個PL/SQL,它輸出PL/SQL遊標如果沒有數據和輸出

14Andrew R.史密斯

我想問的是讓我的如何輸出一個正常的結果,像這樣與格式化等也

下面是如果我直接與終端

 ID NAME 
---------- -------------------------------------------------- 
     14 Andrew R. Smith 
運行SELECT語句會發生什麼

第一個問題: 如何使我的DBMS_OUTPUT.PUT_LINE與終端上顯示的相同。像ID,然後下面是ID的數據,和名稱等

下一個問題:

我想問的是

我如何做一個輸出,如果遊標是空的或沒有結果,i DBMS_OUTPUT.PUT_LINE(「NO RECORDS」);

感謝您的幫助!

更新:

我這樣做

CREATE OR REPLACE procedure verify_data 
IS 
cursor c1 is 
select 
    e.id 
from 
    table1 e 
where 
    id IN (select id from table1) 
    and id in (select id from table2); 
BEGIN 
FOR ed in c1 
    LOOP 
     DBMS_OUTPUT.PUT_LINE(ed.id||ed.name); 

if c1%notfound then 
DBMS_OUTPUT.PUT_LINE('Okay'); 
    end if; 

END LOOP; 

END; 

但是當沒有記錄從PL/SQL取它不打印好的。我添加了未找到的c1%END LOOP

回答

1

如果你想看到的列命名你有你的一環更行之前添加:

DBMS_OUTPUT.PUT_LINE('col1 col2 ...'); 

我認爲這僅僅是一個這樣做的方式。

下面的代碼演示如何檢查光標:

if c1%notfound then 
    DBMS_OUTPUT.PUT_LINE('NO RECORDS'); 
end if; 

Here瞭解光標的屬性,你可以找到更多的信息。

CREATE OR REPLACE procedure verify_data 
IS 
id number; 
name varchar; 
cursor c1 is 
select 
    e.id,e.name 
from 
    table1 e 
where 
    id IN (select id from table1) 
    and id in (select id from table2); 
BEGIN 

    open c1; 
    fetch c1 into id,name; 

    if c1%notfound then 
     DBMS_OUTPUT.PUT_LINE('OK') 
     EXIT; 
    else 
     DBMS_OUTPUT.PUT_LINE(id||name) 
    end if; 

    close c1; 

END; 
+0

您好,我儘量把這個如果c1%NOTFOUND然後 DBMS_OUTPUT.PUT_LINE( '無記錄'); end if;在我的後END LOOP,它給我像* ERROR一些錯誤,在第1行: ORA-01001:無效光標 ORA-06512:在 「USER1.VERIFY_EMPLOYEE」 18行 ORA-06512:在line 1 – user1777711

+0

你必須將代碼放在循環內(在'end lopp'之前)。 – Parado

+0

我更新了我的問題與更新,我確實把內部,但它不打印任何東西。問題是如果沒有記錄提取,它甚至不會進入循環我想。但無論如何,我添加爲你提到的,它不打印消息「好」。 – user1777711

1

由於您使用的是dbms_output,因此您不會像在普通的sql select語句中那樣獲得任何標題。

所以我知道的唯一方法就是打印自己的標題。 如果你在循環之前初始化一個計數器,並在循環內部增加它,你可以在循環之後檢查是否有結果。然後,如果需要,您可以打印一條消息,如「無記錄」。