PL SQL неверный номер
Не получается поменять запись таблицы
Числовые данные сформировать из двух последних цифр, добавив к ним слева десятичную точку. Указания:
использовать функцию length(строка_символов) для получения количества символов в переменной строка_символов; использовать функцию substr(строка_символов, начальная_позиция, длина_подстроки) для получения подстроки, содержащейся в переменной строка_символов; использовать конкатенацию строк вида ‘.’||строка_символов для добавления символа десятичного разделителя к переменной строка_символов слева; использовать функцию to_number(строка_символов, ‘.99’) для преобразования строковой переменной строка_символов к числовому типу данных; использовать курсорный цикл for.
DECLARE
CURSOR occupancy_cur IS
SELECT EMPLOYEE_ID, COMMISSION_PCT, PHONE_NUMBER FROM EMPLOYEES WHERE COMMISSION_PCT IS NULL;
BEGIN
FOR occupancy_rec IN occupancy_cur
LOOP
update EMPLOYEES set COMMISSION_PCT = SUBSTR(occupancy_rec.PHONE_NUMBER, 1, LENGTH(occupancy_rec.PHONE_NUMBER)) WHERE EMPLOYEE_ID = occupancy_rec.EMPLOYEE_ID;
END LOOP;
commit;
END;
Ответы (1 шт):
Убедитесь, что преобразование работает, как описано в задании:
select employee_id, phone_number,
to_number ('.'||substr (phone_number, -2),
'FMD99', 'nls_numeric_characters=''.,''') pct
from hr.employees e
where commission_pct is null
/
EMPLOYEE_ID PHONE_NUMBER PCT
----------- -------------------- ----------
100 515.123.4567 ,67
101 515.123.4568 ,68
[...]
206 515.123.8181 ,81
72 rows selected.
Потом написать анонимный блок PL/SQL не составит труда:
declare
cursor cur is
select rowid, phone_number,
to_number ('.'||substr (phone_number, -2),
'FMD99', 'nls_numeric_characters=''.,''') pct
from hr.employees
where commission_pct is null;
type currows is table of cur%rowtype;
cr currows;
begin
open cur;
fetch cur bulk collect into cr;
close cur;
forall i in indices of cr
update hr.employees set commission_pct = cr(i).pct
where rowid = cr(i).rowid;
dbms_output.put_line ('Updated '||sql%rowcount||' rows.');
end;
/
Updated 72 rows.