--为特定的员工加工资,同时输出新工资。
declare
salary number(6,2);
sql_sta varchar2(100);
begin
sql_sta := 'update employee set sal = sal *(1 + :percent/100)' ||
' where employeeno = :eno
returning sal into :salary';
execute immediate sql_sta using &1,&2 returning into salary;
dbms_output.put_line('新工资:'||salary);
end;
/
输入1的值:5
输入2的值:‘1990-001’
当我输完后:出现
第一行出现错误:
数字或值错误:字符串缓冲区太小。
哪位好心人帮我检查下错误并纠正。
declare
salary number(6,2);
sql_sta varchar2(100);
begin
sql_sta := 'update employee set sal = sal *(1 + :percent/100)' ||
' where employeeno = :eno
returning sal into :salary';
execute immediate sql_sta using &1,&2 returning into salary;
dbms_output.put_line('新工资:'||salary);
end;
/
输入1的值:5
输入2的值:‘1990-001’
当我输完后:出现
第一行出现错误:
数字或值错误:字符串缓冲区太小。
哪位好心人帮我检查下错误并纠正。
dbms_output.put_line('新工资:'||salary);
这句的问题,
put_line()输出的字符是不是太长?先注释掉再执行试试。
SQL>
SQL> DECLARE
2 salary NUMBER(6, 2);
3 sql_sta VARCHAR2(2000);
4 BEGIN
5 sql_sta := 'update employee set sal = sal *(1 + :percent/100)' ||
6 ' where employeeno = :eno
7 returning sal into :salary';
8 EXECUTE IMMEDIATE sql_sta
9 USING &1, &2
10 RETURNING INTO salary;
11 dbms_output.put_line('新工资:' || salary);
12 COMMIT;
13 END;
14 /
输入 1 的值: 10
输入 2 的值: 7369
原值 9: USING &1, &2
新值 9: USING 10, 7369
新工资:880PL/SQL 过程已成功完成。SQL>