declare sz1 number(5):=&请输入数字1; sz2 number(3):=&请输入数字2; begin dbms_output.put_line(sz1/sz2); exception when ZERO_DIVIDE then dbms_output.put_line('除法运算时分母为0!'); when VALUE_ERROR then dbms_output.put_line('数据超出规定范围!'); when others then dbms_output.put_line('其他异常!'); end;输入123456不会运行
时间: 2024-03-05 09:54:54 浏览: 16
这是因为在 PL/SQL 中,使用 `&` 符号来提示用户输入值时,需要将其包含在双引号中,例如:
```
DECLARE
sz1 NUMBER(5):="&请输入数字1";
sz2 NUMBER(3):="&请输入数字2";
BEGIN
DBMS_OUTPUT.PUT_LINE(sz1/sz2);
EXCEPTION
WHEN ZERO_DIVIDE THEN
DBMS_OUTPUT.PUT_LINE('除法运算时分母为0!');
WHEN VALUE_ERROR THEN
DBMS_OUTPUT.PUT_LINE('数据超出规定范围!');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('其他异常!');
END;
```
在这个例子中,输入 `123456` 是可以正常运行的。
相关问题
declare a number(4):= '&编号'; begin execute immediate 'delete from emp2 where empno = a'; end;报错标识符无效
你的代码中 `a` 是一个变量,但在 SQL 语句中你没有将其替换成对应的值,导致 SQL 语句无法正确执行。你需要使用 `USING` 关键字来将变量传递给 SQL 语句。
以下是修改后的代码:
```
DECLARE
a NUMBER(4) := '&编号';
BEGIN
EXECUTE IMMEDIATE 'DELETE FROM emp2 WHERE empno = :emp_no' USING a;
END;
```
在这个代码中,我们使用了 `USING` 关键字将 `a` 传递给了 SQL 语句中的 `:emp_no` 参数。这样,当 SQL 语句被执行时,`a` 的值会被替换到 `:emp_no` 中,从而正确地删除指定编号的数据行。
declare a sc.s#%type; b char(16); c sc.c#%type; begin c:=&x; select s# into a from sc where c#=c; IF a=20200001 then b:=2; elsif a=20200002 then b:=3; elsif a=20200003 then b:=4; else b:=5; end if; update sc set GRADE=GRADE+b where c#=c; end;
这是一段 PL/SQL 代码,它的作用是根据输入的学生编号和课程编号,在数据库中查询该学生的成绩,并给该学生加上相应的分数。具体的逻辑是:
1. 声明一个名为 sc.s#%type 的变量。
2. 声明一个名为 b 的 char(16) 类型的变量。
3. 声明一个名为 sc.c#%type 的变量 c,并将输入的 x 赋值给 c。
4. 在 sc 表中查询 c# 等于 c 的记录,并将查询结果中的 s# 赋值给变量 a。
5. 如果 a 等于 20200001,则将 b 赋值为 2;如果 a 等于 20200002,则将 b 赋值为 3;如果 a 等于 20200003,则将 b 赋值为 4;否则将 b 赋值为 5。
6. 在 sc 表中更新 c# 等于 c 的记录的 GRADE 字段,将原来的值加上 b。
需要注意的是,该段代码中的 &x 是一个占位符,实际使用时需要替换成具体的值。另外,该段代码涉及到数据库操作,需要在数据库环境中运行。