`
尘枉_yjava
  • 浏览: 73931 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

informix 一个存储过程的实例

阅读更多
---execute procedure revisesff('PLAQ201121090000000002');


CREATE PROCEDURE sffpl3g.revisesff(in_documentno  char(22))

define  v_02pcount Integer;
define v_02f1count Integer;
define v_maxorder02no         Integer;
define v_f1flag Integer;
define v_lastorder02no Integer;
        define v_change02no             Integer;   

define v_ksdm char(8);
define v_policyno char(22);
define v_insurant varchar(120);
define v_assuredcode char(16);
define v_classescode char(6);
define v_currency char(6);
define v_documentno char(22);
define v_kindcode char(3);
define v_order02no Integer;
define v_mainamount decimal(14);
define v_foreamount decimal(14);
define v_departcode char(8);
define v_acceptdepname  char(80);
define v_mancode char(11);
define v_acceptopname char(80);
define v_agentcode char(12);
define v_refundname char(20);
define v_procflag char(1);
define v_serialno Integer;
define v_tcol1 char(30);
define v_tcol2 char(30);
define v_sendtime datetime year to second;
define v_sffid Integer;
        define v_clausetype             char(11);

select count(*) into v_02pcount from sf02p where documentno=in_documentno;
if v_02pcount > 0
    then
delete from sf02p where documentno=in_documentno;
end if;  
  
  
         select max(order02no) into v_maxorder02no from sf02 where documentno=in_documentno;

--insert into sf02p
foreach   v_sf02Cursor    for
select ksdm, policyno, insurant, assuredcode, classescode, currency,documentno, kindcode, order02no,mainamount, foreamount, departcode, acceptdeptname, mancode, acceptopname, agentcode, refundname, procflag, serialno, tcol1, tcol2, sendtime, sffid into   v_ksdm, v_policyno, v_insurant, v_assuredcode, v_classescode, v_currency, v_documentno, v_kindcode,v_order02no, v_mainamount, v_foreamount, v_departcode, v_acceptdepname, v_mancode, v_acceptopname, v_agentcode, v_refundname, v_procflag, v_serialno, v_tcol1, v_tcol2, v_sendtime, v_sffid from   sf02 where  documentno=in_documentno  order by order02no
let v_order02no=v_maxorder02no+1;  
let v_mainamount=-v_mainamount;
let v_foreamount=-v_foreamount;


if (v_kindcode ='R10' or v_kindcode='R91' or v_kindcode='R81' or v_kindcode='R82' or v_kindcode='P98' or v_kindcode='P94' or v_kindcode='P96' or v_kindcode='R18' or v_kindcode='R19' or v_kindcode='R92'or v_kindcode='R98'or v_kindcode='R96'or v_kindcode='RM0' or v_kindcode='RM1'or v_kindcode='RM2'
            or v_kindcode='RJ2'or v_kindcode='RJ3'or v_kindcode='R95'or v_kindcode='RD5'or v_kindcode='RD6'or v_kindcode='RD7'or v_kindcode='RD8'or v_kindcode='RD9'or v_kindcode='RC0'or v_kindcode='RC1'or v_kindcode='RC2'or v_kindcode='RC3'or v_kindcode='RC4'or v_kindcode='RD0'or v_kindcode='RD1'
    or v_kindcode='RD2'or v_kindcode='RD3'or v_kindcode='RD4'or v_kindcode='RJ2'or v_kindcode='RJ3'or v_kindcode='R83'or v_kindcode='R84' or (CHAR_LENGTH(v_kindcode)>=2 and substr(v_kindcode, 0, 2)='P0'))
then
let v_procflag = 'A';
else
let  v_procflag = 'N';
end if;


insert into sf02p values (v_ksdm, v_policyno, v_insurant, v_assuredcode, v_classescode, v_currency, v_documentno,v_kindcode, v_order02no, v_mainamount, v_foreamount, v_departcode, v_acceptdepname, v_mancode, v_acceptopname, v_agentcode, v_refundname, v_procflag, v_serialno,null,null, v_sendtime, '0' );

let  v_maxorder02no=v_maxorder02no+1;
end foreach;

-- insert into sf02pf
  select count(*) into v_02f1count  from  sf02f1 where documentno = in_documentno;  
  let v_f1flag ='1';
  if v_02f1count>0
     then
         foreach  v_sf02f1Cursor  for
          select ksdm, policyno, classescode, clausetype, kindcode, documentno, order02no, mainamount, foreamount,
                 tcol1, tcol2, sffid
           into  v_ksdm, v_policyno, v_classescode, v_clausetype, v_kindcode, v_documentno, v_order02no,
     v_mainamount, v_foreamount, v_tcol1, v_tcol2, v_sffid
           from  sf02f1
           where documentno=in_documentno  order by order02no
          
           if v_f1flag ='1'
then
      select max(order02no) into v_maxorder02no from sf02 where documentno=in_documentno;
      let v_lastorder02no=v_order02no;
      let v_order02no=v_maxorder02no+1; 
                                      let v_change02no=v_order02no;
           elif  v_order02no <> v_lastorder02no
then
                                       select max(order02no) into v_maxorder02no from sf02pf where documentno=in_documentno;
                                       let v_lastorder02no=v_order02no;
                                       let v_order02no=v_maxorder02no+1; 
                                       let v_change02no=v_order02no;
                            elif  v_order02no = v_lastorder02no
                                 then
                                       let v_order02no=v_change02no;
            end if;
            
let v_mainamount=-v_mainamount;
let v_foreamount=-v_foreamount;

insert into sf02pf values(v_ksdm, v_policyno, v_classescode, v_clausetype, v_kindcode,
v_documentno, v_order02no, v_mainamount, v_foreamount,null,null, '0');

        let v_f1flag = v_f1flag +1;
end foreach;
end if;
  end Procedure;                                            
分享到:
评论

相关推荐

    INFORMIX最新实用存储过程编写.doc

    首先,开发Informix存储过程之前,你需要确保有一个正确的数据库实例环境,这通常意味着INFORMIX数据库已经成功安装并运行。同时,你需要一个能够连接到数据库的用户,这个用户至少拥有CONNECT和RESOURCE权限,这样...

    INFORMIX存储过程编写[归类].pdf

    本指南主要针对INFORMIX存储过程的编写,涵盖了从环境准备到实际编写过程的基础知识。 首先,进行开发前的环境准备至关重要。确保你有一个正常运行的INFORMIX数据库实例,这意味着数据库服务已经启动并且能够接受...

    informix数据库操作实例.pdf

    5. 导出一个存储过程定义:$&gt;dbschema -d your_database_name -f your_procedure_name db.sql 6. 导出数据库中的授权信息:$&gt;dbschema -d your_database_name -p all 7. 导出数据库中的同义词:$&gt;dbschema -d your_...

    informix for windows数据库安装配置

    Informix 服务器实例管理器是一个图形化的管理工具,提供了多种管理功能,例如创建和管理数据库实例、管理数据库用户和权限、查看数据库状态等。 Informix 数据库特点 Informix 数据库具有多种特点,例如: * ...

    informix教程 informix数据库系统概述

    INFORMIX-ISQL(Interactive SQL)是Informix提供的一个数据库操纵工具,用户可以通过命令行界面执行SQL语句,进行数据查询、插入、更新和删除等操作。ISQL还支持交互式会话,方便开发者进行调试和数据管理。此外,...

    Informix数据库表空间等创建、连接

    每个表空间由一个或多个物理文件组成,这些文件可以分布在不同的磁盘上,以便于提高I/O性能和磁盘空间利用率。 #### 三、创建表空间 创建表空间是管理数据库的重要步骤之一,它决定了数据如何存储以及存储位置。...

    informix语法

    Informix 是一个高效且灵活的关系型数据库管理系统,尤其适用于处理大量实时数据,广泛应用于电信、金融、制造等行业。 1. **INFORMIX Dynamic Server 9.21 介绍** - INFORMIX Dynamic Server (IDS) 是 Informix ...

    informix入门指南v9.4

    3. **SQL基础**:Informix支持标准的SQL语言,学习如何创建数据库、表,插入、查询、更新和删除数据,以及使用视图、索引、存储过程等高级特性。 4. **事务处理**:理解事务的概念,事务的ACID属性(原子性、一致性...

    informix .net 操作源码

    3. `LibraryConsoleTest`:这可能是一个命令行应用程序,用于测试 Informix .NET 操作的库功能。 4. `Basics`:基础组件或示例代码,可能包含数据库连接和基本操作的实现。 5. `DataLibraryBuilder`:数据库相关的库...

    AIX安装informix数据库

    在AIX操作系统上安装...在AIX上安装Informix数据库是一个涉及多个层面的过程,不仅包括硬件资源的规划,还有软件的安装配置,以及后期的管理与维护。了解这些知识点有助于顺利完成数据库的部署并确保其正常运行。

    informix sdk 2.9

    总的来说,Informix SDK 2.9 是一个全面的开发工具集,为开发人员提供了无缝访问Informix数据库的能力。通过它的ODBC支持和丰富的开发资源,无论是新手还是经验丰富的开发者,都能够轻松地构建出高效、可靠的数据...

    informix使用全书(经典教材)

    《Informix使用全书》是一本经典的数据库教材,专为Informix初学者和数据库管理员提供全面的指导。这本书深入浅出地介绍了Informix数据库管理系统的基础知识、安装配置、操作使用、性能优化以及故障排查等核心内容。...

    Informix数据库设计和实现指南 V9.4

    - **物理数据库(PDB)**:在Informix中,每个数据库实例通常包含一个或多个物理数据库,它们是存储实际数据的物理单元。 - **ANSI兼容性**:文档提到了Informix与ANSI标准的兼容性问题,这表明Informix在设计时考虑了...

    informix数据库管理教程

    IDS代表Informix Dynamic Server,它是Informix Online的一个重要更新,引入了多线索机制处理请求,增强了并发处理能力。共享内存可以动态增长,提升了系统的灵活性和效率。 - **Informix Online 8.x (IDS)** ...

    数据库存储过程的写法\\连接各种数据库写法

    存储过程是一种预编译的SQL代码块,它可以存储在数据库服务器上,并通过一个名称来调用,从而提高应用程序的性能并简化复杂的数据库操作。此外,我们还将探讨使用Java语言连接多种数据库的基本方法。 #### 存储过程...

    Informix入门指南 V9.4.rar

    V9.4 版本是 Informix 的一个重要里程碑,它带来了许多性能提升和新特性,使其在企业级数据库解决方案中占据一席之地。 ### 1. Informix 数据库概述 Informix 数据库管理系统(DBMS)主要用于存储、管理和检索数据...

    如何区分Informix不同种类的长事务

    在这个过程中,我们需要注意检查数据库的状态,确保没有处于打开状态的事务。具体步骤如下: 1. **检查打开的事务**:通过执行`oninit –sv`命令来查看当前是否有处于打开状态的事务。 2. **清理事务**:如果发现...

Global site tag (gtag.js) - Google Analytics