--为特定的员工加工资,同时输出新工资。
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’
当我输完后:出现
第一行出现错误:
数字或值错误:字符串缓冲区太小。

哪位好心人帮我检查下错误并纠正。

解决方案 »

  1.   

    可能是
    dbms_output.put_line('新工资:'||salary);
    这句的问题,
    put_line()输出的字符是不是太长?先注释掉再执行试试。
      

  2.   

    SQL> set serveroutput on;
    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>