2014-05-15 78 views
0

我開始學習PL/SQL,目前無法訪問數據庫(所以無法檢查我的代碼是否正確)。我試圖根據他們的身份證號碼打印出學生的姓名。到目前爲止,我有:初學者PL/SQL腳本。這段代碼看起來是否正確?

SET SERVEROUTPUT ON 
DECLARE 
    VNAME STUDENT.NAME%TYPE; 
BEGIN 
    SELECT NAME INTO VNAME 
    FROM STUDENT 
    WHERE ID = '0123'; 
    IF SQL%FOUND THEN 
    DBMS_OUTPUT.PUT_LINE('Student with ID "0123" has the name ' || VNAME); 
    END IF; 
END; 
/

語法看起來是否正確?它應該生成輸出「ID爲0123的學生的名稱爲____」

+2

看起來正確,但如果沒有id ='123'或多於一個的記錄,它將失敗。更好地添加'異常時'條款和捕獲異常 –

+0

好吧,將添加在,謝謝。 – JKL

+0

您可以下載並安裝免費版本的Oracle數據庫:[Oracle Express版](http://www.oracle.com/technetwork/database/database-technologies/express-edition/overview/index.html)。 – user272735

回答

2

嘗試使用異常處理程序,如註釋中所指出的那樣,您的IF將無法按預期工作。

http://docs.oracle.com/cd/E11882_01/appdev.112/e25519/errors.htm#LNPLS856

SET SERVEROUTPUT ON 
DECLARE 
    VNAME STUDENT.NAME%TYPE; 
BEGIN 
SELECT NAME INTO VNAME 
FROM STUDENT 
WHERE ID = ’0123’; 
DBMS_OUTPUT.PUT_LINE('Student with ID "0123" has the name ' || VNAME); 
EXCEPTION 
WHEN NO_DATA_FOUND THEN 
    DBMS_OUTPUT.PUT_LINE ('No student record found for that id '); 
END; 
/

既然你沒有訪問DB,這裏是你的原始腳本會做什麼:

DECLARE 
* 
ERROR at line 1: 
ORA-01403: no data found 
ORA-06512: at line 4 

隨着異常處理程序,在sqlplus你會得到:

No student record found for that id 

PL/SQL procedure successfully completed. 

SQL> 
1

如果您無法訪問數據庫,請嘗試SQLFiddle。 您可以在線查看您的查詢。

+0

感謝您的提示! – JKL

相關問題