【发布时间】:2013-12-11 16:47:12
【问题描述】:
我是 PL/SQL 新手,我一直在为这个问题苦苦挣扎太久,所以我想我会在这里问:
我想要达到的目标:
- 我想使用 pl/sql 将新员工插入到我的“emp”表中 块。
- 我希望从键盘输入数据。
- 然后使用异常检查数据是否正确。
- 之后,我希望用户确认它写“是”或“否”。
什么不起作用:
即使我输入了无效数据,也不会引发异常。
现在它要求用户在要求数据的同时进行确认。我希望它在输入和检查后询问 正确性
我的代码:
DECLARE
empno NUMBER;
ename Varchar2(30);
job Varchar2(30);
mgr NUMBER;
hiredate DATE;
sal NUMBER;
comm NUMBER;
deptno NUMBER;
confirm VARCHAR2(3);
negative_number EXCEPTION;
invalid_date EXCEPTION;
BEGIN
INSERT INTO emp
VALUES (&empno, '&ename', '&job', &mgr, '&hiredate', &sal, &comm, &deptno);
IF empno < 0 OR mgr < 0 OR sal < 0 OR comm < 0 OR deptno < 0 THEN
RAISE negative_number;
ELSIF hiredate > SYSDATE THEN
RAISE invalid_date;
END IF;
IF '&confirm' = 'yes' THEN commit;
ELSE rollback;
END IF;
EXCEPTION
WHEN negative_number THEN
dbms_output.put_line('number cannot be negative');
WHEN invalid_date THEN
dbms_output.put_line('cannot be future date');
END;
【问题讨论】:
-
您在
exception块中处理异常。如果你想让它们被加注给调用者,你需要重新加注它们 -
@a_horse_with_no_name swalling 是什么意思?我如何重新提高它们?
-
对不起,我的意思是“吞下”。有关引发异常的详细信息,请参阅手册:docs.oracle.com/cd/E11882_01/appdev.112/e25519/…
-
我不明白,我正在按照它说的那样做:1. 声明 2.raise 3. 处理
-
你从什么运行这个 - sqlplus?你设置 serveroutput 了吗?