`

oracle function执行dml语句的方法

 
阅读更多
create or replace function F_DEALWITH_LSBD(YDYF varchar2) return varchar2 is
    TYPE ref_type IS REF CURSOR;
    P_YDYF varchar2(8);--年度月份
    V_SQL_QUERY CLOB;--查询未返写的数据的sql
    V_NSRDZDAH varchar2(30);
    V_FKJG_BH varchar2(32);
    V_SQL_UPDATE CLOB;--返写更新sql
    cur ref_type;--动态游标
    pragma autonomous_transaction;
begin
    P_YDYF := YDYF;
    V_SQL_QUERY := 'select mx.nsrdzdah,nvl(k.fkjg_bh,'''') from LDMT04_LSBDDZ_HZ h,fxyd_rwmx mx,fxyd_ydjgfk k 
                           where h.dsnsrzhdah = mx.nsrdzdah
                           and mx.rwpc_bh is not null 
                           and mx.rwtczt_dm = ''YXF'' 
                           and mx.hxcl_dm = ''YDCZ'' 
                           and mx.xxly_dm = ''00'' 
                           and exists(select 1 from fxfx_smmx m,FXGL_FXSB_MXKZSX kz
                           where m.fxmx_bh = mx.fxxx_bh and kz.mx_dm = m.mxdm and kz.tsfx_lx = ''02'') 
                           and h.sfczcy is null 
                           and mx.fxxx_bh = k.fxxx_bh(+) 
                           and h.ydyf = '''||P_YDYF||'''';
    
    open cur for V_SQL_QUERY;
    FETCH cur into V_NSRDZDAH,V_FKJG_BH;
    while cur%FOUND LOOP
      
    if V_FKJG_BH='' THEN
       
      
       V_SQL_UPDATE:='update LDMT04_LSBDDZ_HZ set sfczcy=''Y'',sfycl=''N'' 
                      where dsnsrzhdah='''||V_NSRDZDAH||''' and ydyf='''||P_YDYF||'''';
    ELSE
       
       V_SQL_UPDATE:='update LDMT04_LSBDDZ_HZ set (sfczcy,sfycl,BJCJS,BJCJSZNJ,
                BJJYFFJ,BJJYFFJZNJ,BJDFJYFJ,BJDFJYFJZNJ,BJFK,CYYY,FKLRRY,FKRQ,BZ) = 
                          (select ''Y'',
                                  ''Y'',
                                  sum(decode(z.zsxm_dm,
                                                ''10109'',decode(z.zspm_dm,''101099900'',null,''101099901'',null,''101099961'',null,z.rksk),null)), 
                                  sum(decode(z.zsxm_dm,
                                                ''10109'',decode(z.zspm_dm,''101099900'',z.rksk,null),null)),
                                  sum(decode(z.zsxm_dm,
                                                ''10381'',decode(z.zspm_dm,''103819900'',null,''103819901'',null,''103819961'',null,z.rksk),null)),
                                  sum(decode(z.zsxm_dm,
                                                ''10381'',decode(z.zspm_dm,''103819900'',z.rksk,null),null)),
                                  sum(decode(z.zsxm_dm,
                                                ''10386'',decode(z.zspm_dm,''103869900'',null,''103869901'',null,z.rksk),null)),           
                                  sum(decode(z.zsxm_dm,''10386'',decode(z.zspm_dm,''103869900'',z.rksk,null),null)),
                                  sum(decode(z.zsxm_dm||''!''||z.zspm_dm,
                                                ''10109!101099901'',z.rksk,''10109!101099961'',z.rksk,
                                                ''10381!103819901'',z.rksk,''10109!103819961'',z.rksk, 
                                                ''10386!103869901'',z.rksk, null)),
                                  '''',
                                  max(k.YDCZRY_MC),
                                  to_char(max(k.FKSJ),''yyyy-mm-dd''), 
                                  ''''
                           from fxyd_ydjgfk_zs z, fxyd_ydjgfk k 
                           where k.fkjg_bh = z.fkjg_bh(+) 
                           and k.fkjg_bh = '''||V_FKJG_BH||'''
                           group by k.fkjg_bh)
                     where dsnsrzhdah='''||V_NSRDZDAH||''' and ydyf='''||P_YDYF||'''';
    END IF;
    --执行更新
    EXECUTE IMMEDIATE V_SQL_UPDATE;
    commit; 
    FETCH cur into V_NSRDZDAH,V_FKJG_BH;
    END LOOP;
    CLOSE cur;
    
    return '';
end;

 

 

pragma autonomous_transaction;是关键加了这个提供了一个自治事物就可以在执行function时执行dml语句了

select f_dealwith_lsbd('?') from dual;
分享到:
评论

相关推荐

    彻底搞清楚library cache lock的成因和解决方法

    还有一种情况,当我们使用create or replace procedure/function等语句修改Procedure和Function的时候,会话也会hang住,这是为什么呢? 当出现上述情况的时候,我们可以通过v$session_wait查询等待事件,当然,...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

     数据操作语言Data Manipulation Language(DML),用来插入、修改、删除、查询,可以修改数据库中的数据。例如:INSERT(插入)、UPDATE(修改)、DELETE(删除)语句  数据查询语言 (Data Query Language, DQL)...

    最全的oracle常用命令大全.txt

    下面按类别列出一些ORACLE用户常用数据字典的查询使用方法。 1、用户 查看当前用户的缺省表空间 SQL>select username,default_tablespace from user_users; 查看当前用户的角色 SQL>select * from user_...

    Oracle8i_9i数据库基础

    第一部分 Oracle SQL*PLUS基础 23 第一章 Oracle数据库基础 23 §1.1 理解关系数据库系统(RDBMS) 23 §1.1.1 关系模型 23 §1.1.2 Codd十二法则 24 §1.2 关系数据库系统(RDBMS)的组成 24 §1.2.1 RDBMS 内核 24...

    oracle10g课堂练习I(2)

    审计的 DML 语句:注意事项 10-23 FGA 准则 10-24 DBA 审计 10-25 维护审计线索 10-26 安全更新 10-27 应用安全补丁程序 10-28 小结 10-29 练习概览:实施 Oracle 数据库安全性 10-30 11 配置 Oracle 网络...

    Oracle 10g 开发与管理

    本文是由笔者2012年学习oracle数据库时编写的学习札记,其中的题目 多数为老师留下的思考题目。 我相信本文会对初学者使用oracle有一个初步的使用印象。右图为我所参 考的书籍。 目录 第一讲 Oacle关系数据库 ...

    精通SQL 结构化查询语言详解

    2.1.3 使用查询分析器执行SQL语句  2.2 Transact-SQL  2.2.1 Transact-SQL 概述  2.2.2 Transact-SQL的主要组成  2.2.3 Transact-SQL的一些重要命令  2.3 Oracle数据库  2.3.1 Oracle数据库软件组成 ...

    精通SQL--结构化查询语言详解

    2.1.3 使用查询分析器执行sql语句 22 2.2 transact-sql 24 2.2.1 transact-sql 概述 24 2.2.2 transact-sql的主要组成 25 2.2.3 transact-sql的一些重要命令 26 2.3 oracle数据库 29 2.3.1 oracle数据库软件...

    orcale常用命令

    下面按类别列出一些ORACLE用户常用数据字典的查询使用方法。 1、用户 查看当前用户的缺省表空间 SQL>select username,default_tablespace from user_users; 查看当前用户的角色 SQL>select * from user_...

    PL/SQL Developer8.04官网程序_keygen_汉化

     函数:Create or replace function funcname(参数列表) return 返回值 as PL/SQL语句块  为便于理解,举例如下:  问题:假设有一张表t1,有f1和f2两个字段,f1为number类型,f2为varchar2类型,要往t1里写两条...

    PLSQLDeveloper下载

     结构化查询语言(Structured Query Language,简称SQL)是用来访问关系型数据库一种通用语言,属于第四代语言(4GL),其执行特点是非过程化,即不用指明执行的具体方法和途径,而是简单地调用相应语句来直接取得...

    mysql数据库的基本操作语法

    Ø DML语句 DML主要针对数据库表对象的数据而言的,一般DML完成: 插入新数据 修改已添加的数据 删除不需要的数据 1、 insert into 插入语句 insert into temp values(null, ‘jack’, 25); 主键自增可以不插入,...

    Java学习笔记-个人整理的

    {12.13}DML语句}{175}{section.12.13} {12.13.1}insert}{175}{subsection.12.13.1} {12.13.2}create}{175}{subsection.12.13.2} {12.13.3}rownum}{175}{subsection.12.13.3} {12.13.4}update}{176}{subsection....

Global site tag (gtag.js) - Google Analytics