今天在调用Oracle Function遇到一个异常

这是我的函数(为了再现随手写的)

create or replace function test_f(id varchar2)   return varchar2 is
    Result   varchar2(100);
begin

insert into sfcs_temp_17109
  (sn)values(id);

commit;
  return result;
end test_f;

解决方法:增加PRAGMA AUTONOMOUS_TRANSACTION自治事务介绍

create or replace function test_f(id varchar2)   return varchar2 is
    Result   varchar2(100);
   PRAGMA AUTONOMOUS_TRANSACTION;
begin
  insert into sfcs_temp_17109
  (sn)values(id);

commit;
  return result;
end test_f;

然后又遇到第二个问题

function如下:

create or replace function test_f(id varchar2) return varchar2 is
  Result varchar2(100);
  PRAGMA AUTONOMOUS_TRANSACTION;
  MSD_PN VARCHAR2(50);
begin
  BEGIN
    select didbar into MSD_PN from t_did where diddid = ID;
    IF MSD_PN IS NOT NULL THEN
      RESULT := 'ERROR:' || ID || '在系統中不存在!';
      RETURN RESULT;
    END IF;
  END;
  insert into sfcs_temp_17109 (sn) values (id);
  commit;
  return result;
end;

Return Result commit或者Rollback

create or replace function test_f(id varchar2) return varchar2 is
  Result varchar2(100);
  PRAGMA AUTONOMOUS_TRANSACTION;
  MSD_PN VARCHAR2(50);
begin
  BEGIN
    select didbar into MSD_PN from t_did where diddid = ID;
    IF MSD_PN IS NOT NULL THEN
      RESULT := 'ERROR:' || ID || '在系統中不存在!';
      commit;
      RETURN RESULT;
    END IF;
  END;
  insert into sfcs_temp_17109 (sn) values (id);
  commit;
  return result;
end;

增加commit后即可正常使用。

Oracle——无法在查询中执行 DML 操作的更多相关文章

  1. Oracle中 “ORA-14551: 无法在查询中执行 DML 操作” 如何解决

    在编写一个数据库函数时,方法实现需要查询后进行修改,出现ora-14551的错误 create or replace function fun_DxcBillSn(tabType integer,ta ...

  2. PL/SQL“ ORA-14551: 无法在查询中执行 DML 操作”解决

    环境 Oracle 11.2.0 + SQL Plus 问题 根据以下要求编写函数:将scott.emp表中工资低于平均工资的职工工资加上200,并返回修改了工资的总人数.PL/SQL中有更新的操作, ...

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

    编写了一个oracle函数,函数体内实现一系列数据库的逻辑处理,涉及到数据的增删等操作,返回NCLOB类型. 然后通过查询方式调用函数: SELECT PKG.MY_FUN('A') FROM DUA ...

  4. 利用sqoop对mysql执行DML操作

    业务背景 利用Sqoop对MySQL进行查询.添加.删除等操作. 业务实现 select操作: sqoop eval \ --connect jdbc:mysql://127.0.0.1:3306/m ...

  5. CountDownLatch,一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。

    CountDownLatch,一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待. 主要方法 public CountDownLatch(int count); pu ...

  6. Oracle DBLINK 抽数以及DDL、DML操作

    DB :  11.2.0.3.0 原库实例orcl:SQL> select instance_name from v$instance; INSTANCE_NAME--------------- ...

  7. mysql、sql server、oracle数据库分页查询及分析(操作手册)

    1.mysql分页查询 方式1: select * from table order by id limit m, n; 该语句的意思为,查询m+n条记录,去掉前m条,返回后n条记录.无疑该查询能够实 ...

  8. Oracle入门之对表内容的dml操作

    oracle表的管理--添加数据 使用insert语句向表中插入数据 插入数据基本语法: insert into table[(column [,column...])] values(value [ ...

  9. C# Winform中执行post操作并获取返回的XML类型的数据

    /// <summary> /// 返回指定日期的订单数据 /// </summary> /// <param name="StartDate"> ...

随机推荐

  1. (9)Go指针

    区别于C/C++中的指针,Go语言中的指针不能进行偏移和运算,是安全指针. 要搞明白Go语言中的指针需要先知道3个概念:指针地址.指针类型和指针取值. Go语言中的指针 任何程序数据载入内存后,在内存 ...

  2. mysql 修改字段名称以及长度

    //修改字段长度 alter table table1 modify name ); //修改字段名称以及长度 alter table table1 change name name_new ); a ...

  3. 「ZJOI2019」开关

    传送门 Description 有一些一开始全都是关的开关,每次随机选择一个(每个开关概率不同)开关并改变它的状态,问达到目标状态的期望步数 Solution  \(P=\sum_{i=1}^{n}p ...

  4. 更改matlab默认精度

    我使用的是R2018a 1.打开预设 2.命令行窗口 3.变量

  5. Sql注入基本思路

    Sql注入基本思路 利用mysql自己动手 登录 使用show databases;查看数据库,sql注入主要用到的是information_schema这个库(mysql中大小写不敏感) infor ...

  6. spring @Transactional 事务注解的坑

    1. 在需要事务管理的地方加@Transactional 注解.@Transactional 注解可以被应用于接口定义和接口方法.类定义和类的 public 方法上. 2. @Transactiona ...

  7. uniapp - 如何申请阿里云存储

    长话短说,简略表述 1. 登录阿里云,选择 oos对象云存储 https://oss.console.aliyun.com/overview 2. 新建“Bucket”,名称是唯一的(建议用公司或者个 ...

  8. Nginx系列 | [转]Nginx 上传文件:client_max_body_size 、client_body_buffer_size

    原文:http://php-note.com/article/detail/488 client_max_body_size client_max_body_size 默认 1M,表示 客户端请求服务 ...

  9. Win10提示“无法打开此计算机上的组策略对象”如何解决

    为了更好地管理电脑,很多朋友都会去编辑Windows10的组策略.不过,有部分用户反馈自己在打开组策略的时候,遇到了“无法打开此计算机上的组策略对象”提示,无法打开组策略,这是怎么回事呢?下面,小编就 ...

  10. sci会议和sci期刊区别是什么

    sci会议和sci期刊区别是什么?从名称上来看就很明显了,一个是学术会议,一个是学术期刊,是不同的学术研究载体,不论是会议论文还是期刊论文,都是受认可的,就目前来看,发表期刊论文的作者要偏多一些,主要 ...