dbms_output в функции из пакета не показывает - PullRequest
1 голос
/ 26 марта 2019

Мне нужно знать, какие employee_ids были обновлены в функции из пакета для схемы Oracle Oracle. Для этого я попытался выполнить функцию dbms_output внутри другой функции в этом пакете, но выходные данные показывают только возвращаемое значение функции, а не выходные данные.

Какая форма подходит для этого? Вот код из пакета и его функции:

create or replace package body pac_busqueda_empleados7 as
function f_cambia_datos_empl( p_nom in employees.first_name%TYPE)
return number is 
i NUMBER := 0;
v_val_nom employees.first_name%type;
ids dbms_sql.number_table;
begin
v_val_nom := p_nom;
update employees set first_name = 'NN' where employees.first_name=v_val_nom return employees.employee_id bulk collect into ids;
return 1;
for i in ids.first .. ids.last loop
    dbms_output.put_line('Updated: ' || ids(i));
  end loop;
exception when others then
return 0;
end;
end pac_busqueda_empleados7;

И это блок выполнения из этой функции пакета.

declare
v_nombre employees.first_name%type;
v_resultado number;
begin
v_nombre := 'Nombre';
v_resultado:=pac_busqueda_empleados7.f_cambia_datos_empl(v_nombre);
dbms_output.put_line(v_resultado);
end;

ожидаемый результат должен быть:

1
Updated: 100
Updated: 101
Updated: 102
Updated: 103
.
.
.
etc.

Но пока только:

1

PL/SQL procedure successfully completed.

1 Ответ

3 голосов
/ 26 марта 2019

Внимательно посмотрите на эту часть вашего кода:

begin
v_val_nom := p_nom;
update employees set first_name = 'NN' where employees.first_name=v_val_nom return employees.employee_id bulk collect into ids;
return 1;
for i in ids.first .. ids.last loop
    dbms_output.put_line('Updated: ' || ids(i));
end loop;

Вы вернетесь из функции до запуска цикла.
Поместите оператор return после цикла, и вы должны получить желаемый результат.

...