函数Oracle中的返回表
我想在选择时更新表中的一些行,然后只返回更新的行。我用过:函数Oracle中的返回表,oracle,Oracle,我想在选择时更新表中的一些行,然后只返回更新的行。我用过: UPDATE RETURNING BULK COLLECT INTO 它可以正确地用于更新行,但当我在函数中使用它返回更新的行时,就会发生Oracle异常 你能解释一下为什么第一个功能有效,而第二个功能无效吗 以下是我表格的内容: create table app.test (id number, col_to_update varchar2(20)); insert into app.test values (1, 'BOB')
UPDATE RETURNING BULK COLLECT INTO
它可以正确地用于更新行,但当我在函数中使用它返回更新的行时,就会发生Oracle异常
你能解释一下为什么第一个功能有效,而第二个功能无效吗
以下是我表格的内容:
create table app.test (id number, col_to_update varchar2(20));
insert into app.test values (1, 'BOB');
insert into app.test values (2, 'PETER');
insert into app.test values (3, 'BOB');
insert into app.test values (4, 'PETER');
insert into app.test values (5, 'BOB');
自定义类型:
create or replace type emp_dets as OBJECT (id INT,col_to_update VARCHAR2(60));
create or replace type emp_dets_nt as table of emp_dets;
和两个功能:
create or replace function get_emp_dets
return emp_dets_nt
as
return_value emp_dets_nt;
BEGIN
return_value:=emp_dets_nt();
select emp_dets(ID, col_to_update)
bulk collect into return_value
from app.TEST;
return return_value;
end;
create or replace function get_emp_dets
return emp_dets_nt
as
return_value emp_dets_nt;
BEGIN
return_value:=emp_dets_nt();
UPDATE app.TEST
SET col_to_update = 'UPDATED'
WHERE col_to_update = 'BOB'
RETURNING emp_dets(id, col_to_update)
BULK COLLECT INTO return_value;
return return_value;
end;
尝试将该函数用作pragma自治事务
create or replace function get_emp_dets
return emp_dets_nt
as
pragma autonomous_transaction;
return_value emp_dets_nt;
BEGIN
return_value:=emp_dets_nt();
UPDATE app.test
SET col_to_update = 'UPDATED'
WHERE col_to_update = 'BOB'
RETURNING emp_dets(id, col_to_update)
BULK COLLECT INTO return_value;
commit;
return return_value;
end;
“然后Oracle异常发生”-异常说明了什么?请编辑成您的问题-谢谢!您好,它说“包或函数GET_EMP_DETS处于无效状态”@SherifHuseynli-您可以查询
用户错误查看实际错误。或者在尝试编译之后,显示错误
是您的客户机支持的。这似乎是同一个函数的两个版本,而不是两个函数?如果作为单独的语句正确运行,所有这些似乎都可以编译。@SherifHuseynli-适合我。如果函数有编译错误,请将其包含在问题中。感谢您的帮助。我添加了“pragma autonomy_transaction”,它对我也很有用。