2014-05-15 32 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

相关问题