Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
函数Oracle中的返回表_Oracle - Fatal编程技术网

函数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”,它对我也很有用。