oracle中怎么自定义函数,oracle 可否在 自定义函数中 使用 update?

测试结果,自治事务并且加了commit的函数可以在Sql和pl/sql中执行

SQL> create table dual1 as select * from dual;

表已创建。

SQL> create or replace function f1(a varchar)

2  return int

3  is

4  begin

5  update dual1 set dummy=a;

6  return 0;

7  end;

8  /

函数已创建。

SQL> select * from dual1;

DU

--

X

SQL> select f1('o')from dual;

select f1('o')from dual

*

第 1 行出现错误:

ORA-14551: 无法在查询中执行 DML 操作

ORA-06512: 在 "HR.F1", line 5

SQL> create or replace function f2(a varchar)

2  return int

3  is

4  begin

5  execute immediate 'update dual1 set dummy=:x'using a;

6  return 0;

7  end;

8  /

函数已创建。

SQL> select f2('o')from dual;

select f2('o')from dual

*

第 1 行出现错误:

ORA-14551: 无法在查询中执行 DML 操作

ORA-06512: 在 "HR.F2", line 5

SQL> create or replace function f3(a varchar)

2  return int

3  is

4  PRAGMA AUTONOMOUS_TRANSACTION ;

5  begin

6  execute immediate 'update dual1 set dummy=:x'using a;

7  return 0;

8  end;

9  /

函数已创建。

SQL> select f3('o')from dual;

select f3('o')from dual

*

第 1 行出现错误:

ORA-06519: 检测到活动的独立的事务处理, 已经回退

ORA-06512: 在 "HR.F3", line 8

SQL> select * from dual1;

DU

--

X

SQL> begin f1('o'); end;

2  /

begin f1('o'); end;

*

第 1 行出现错误:

ORA-06550: 第 1 行, 第 7 列:

PLS-00221: 'F1' 不是过程或尚未定义

ORA-06550: 第 1 行, 第 7 列:

PL/SQL: Statement ignored

SQL> declare x int;begin x:=f1('o'); end;

2  /

PL/SQL 过程已成功完成。

SQL> select * from dual1;

DU

--

o

SQL>

SQL> declare x int;begin x:=f2('j'); end;

2  /

PL/SQL 过程已成功完成。

SQL> select * from dual1;

DU

--

j

SQL> declare x int;begin x:=f3('3'); end;

2  /

declare x int;begin x:=f3('3'); end;

*

第 1 行出现错误:

ORA-00060: 等待资源时检测到死锁

ORA-06512: 在 "HR.F3", line 6

ORA-06512: 在 line 1

SQL> commit;

提交完成。

SQL> declare x int;begin x:=f3('3'); end;

2  /

declare x int;begin x:=f3('3'); end;

*

第 1 行出现错误:

ORA-06519: 检测到活动的独立的事务处理, 已经回退

ORA-06512: 在 "HR.F3", line 8

ORA-06512: 在 line 1

SQL> declare x int;begin x:=f3('3'); end;

2  /

declare x int;begin x:=f3('3'); end;

*

第 1 行出现错误:

ORA-06519: 检测到活动的独立的事务处理, 已经回退

ORA-06512: 在 "HR.F3", line 8

ORA-06512: 在 line 1

SQL> create or replace function f4(a varchar)

2  return int

3  is

4  PRAGMA AUTONOMOUS_TRANSACTION ;

5  begin

6  execute immediate 'update dual1 set dummy=:x'using a;

7  commit;

8  return 0;

9  end;

10  /

函数已创建。

SQL> declare x int;begin x:=f4('4'); end;

2  /

PL/SQL 过程已成功完成。

SQL> select * from dual1;

DU

--

4

SQL> select f4('8')from dual;

F4('8')

----------

0

SQL> select * from dual1;

DU

--

8

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值