0

バグを手伝ってもらえますか?
pl/sql にバグがありますが、彼が見つかりません! 変数 ast に問題があると思います!

ORA-06502: PL/SQL: 数値または値のエラー: 文字列バッファが小さすぎます。

declare 

ast varchar2(50);
slr emp.salary%type;
max1 emp.employee_id%type;
min1 emp.employee_id%type;

begin 
select min (employee_id)
into min1
from employees;

select max (employee_id)
into max1
from employees;

for   i in min1..max1 
 loop
         select (round (salary /1000))      
    into slr
    from employees
    where employee_id = i ;

      for i in 1..slr loop
        ast := ast || '*' ;
        end loop;
        update emp set stars = ast
        where employee_id=i;
        commit;
end loop;
end;
4

2 に答える 2

2

なぜこのようなことをするのか理解できません。そもそも、これは:

select min (employee_id)
into min1
from employees;

select max (employee_id)
into max1
from employees;

単一のクエリになる可能性があります。

SELECT MIN(employee_id), MAX(employee_id) INTO min1, max1
  FROM employees;

しかし、ここで PL/SQL を使用する理由はまったくありません。なぜこれをしないのですか?

UPDATE emp
   SET stars = TRIM(RPAD(' ', ROUND(salary/1000) + 1, '*'));
于 2015-03-13T20:31:11.170 に答える
1

内側のループの外側で ast を空の文字列に設定する必要があります。

 for   i in min1..max1 
   loop
   ast:='';
   ...
于 2015-03-13T20:23:08.190 に答える