`
hufhua
  • 浏览: 5064 次
社区版块
存档分类
最新评论

cobol操作db2

阅读更多


1.概念:
对数据库的处理过程是以事物为单位进行的。
          组织与管理是以表为单位进行的。
表是放在表空间(table space)中的,
表空间是放在数据库(database)中的。
Scheme:是指实体名称中的高位标识字段,该字段用于标志整个名称。
        当建立一个用户时,会产生一个同名的scheme。
如:SET CURRENT SCHEME = 'PAYROLL'
    SELECT * FROM EMPLOYEE.        ---等同于下一条语句。
    SELECT * FROM PAYROLL.EMPLOYEE.
视图:VIEW,一张虚拟表,通常将多表链接的结果
     作为视图,以方便数据查询。
索引:INDEX,直接建立在表上的,相当于一个目录,
     也是方便数据查询。
2.应用:
SQLCA:SQL通信区域,实现COBOL和DB2的交互。
             执行SQL后,会产生一个称作SQLCODE的返回码,数字组成,
             存放于SQLCA中,为0或者100时,成功,为负数时错误。
在SQLCA中,还有SQLSTATE,由字符组成。
DB2 catalog:数据字典,一张系统表,用来存放数据库所用的有关信息。
             对于用户而言,为只读的。
DB2 directory:功能相似于catalog,性能高,是以VSAM文件组织存放数据的。
二者同步时,以DB2 directory为准。

COBOL中调用SQL语句的格式:
嵌入式SQL
主变量:即可为COBOL所用,也可为SQL语句所用(前面加‘:’)。
如:DATA DIVISION.
    WORKING-STORAGE SECTION.
       EXEC SQL INCLUDE SQLCA END-EXEC. --通信区(必写)
       EXEC SQL INCLUDE COURSERCD EXEC-EXEC. --指定数据记录
    01 COURSE-DETAIL.
       03 RCODE PIC X(4).     --主变量,
       03 RNAME PIC X(20).
       03 RINST PIC X(10).
       03 RDAYS PIC 9.
    PROCEDURE DIVISION.
       MOVE '00AB' TO RCODE.
       MOVE 'GANG' TO RNAME.
       MOVE 'SICC' TO RINST.
       EXEC SQL
           INSERT INTO Q.COURSE ( CODE, NAME)
                         VALUES ( :RCODE, :RNAME)
           UPDATE Q.COURSE
                   SET INST = :RINST
                   WHERE CODE = :RCODE.
            SELECT DAYS
                   INTO :RDAYS FROM Q.COURSE
                   WHERE CODE = :RCODE.
                                   
       END-EXEC.
       ...
指示变量:在主变量之后,用于指示主变量所接收到数据是否为空。
          当为空时,指示变量为负数。
用途:测试数据是否为空值,将空值传递给DB2中的数据。
如:EXEC SQL
       SELECT NO, NAME
       INTO  :NO, :NAME:IND1   --测试空值
       FROM  TESTB
       WHERE NO = :NO
    END-EXEC.
    IF IND1 < 0 MOVE 'UNKNOW' TO TESTATTR1.
    ...
    MOVE -1 TO IND1.
    MOVE '00A1' TO NO.
    EXEC SQL
       SET NAME = :NAME:IND1   --存储空值
       WHERE NO = :NO
    ENDE-EXEC.
动态SQL:将SQL首先读入变量,通过嵌入式SQL执行变量中的SQL。
包含SELECT和非SELECT(含有参数和不含有参数)
不含有参数的SELECT:
如:01 STMT.
       49 STMT-LEN  PIC S9(4) COMP VALUE +255.
       49 STMT-TEXT PIC X(255).
    MOVE 'DELETE FROM TESTTB'.
    EXEC SQL
       EXECUTE IMMEDIATE :STMT     --执行
    END-EXEC
含有参数的SELECT:
如:01 STMT.
       49 STMT-LEN  PIC S9(4) COMP VALUE +255.
       49 STMT-TEXT PIC X(255).
    01 PARMA PIC X(5).
    01 PARMB PIC X(20).
    MOVE 'DELETE FROM TESTTB
          WHERE TESTNO = ? AND TESTNAME = ?' TO STMT.
    EXEC SQL
       PREPARE PRST FROM :STMT.           ---预执行
    END-EXEC.
    MOVE 'A0023' TO PARMA.
    MOVE 'GEORGE' TO PARMB.
    EXEC SQL
       EXECUTE PRST USINGARMA,ARMB  --执行
    END-EXEC.
   
游标:对多行数据进行处理时,以行为单位的数据记录的定位功能。
分为基本游标和回滚游标(静态和动态)。
基本游标
定义:
如:MOVE 'ADFADADF' TO HATTR1.
      EXEC SQL
       DECLARE P1 CURSOR FOR    --定义游标
       SELECT TESTNO, TESTNAME  --选择指定列(属性)
       FROM TESTTB              --指定表
       WHERE TESTATTR1 = :HATTR1 -指定匹配属性
       ORDER BY TESTNO -指定属性排序,如不指定默认数据记录的位置进行搜索
       OPTIMIZE FOR 20 ROWS      -每屏中显示的行数
       FETCH FIRST 200 ROWS ONLY -共显示的行数
    END-EXEC
用法:打开--使用--关闭。
如:01 HOST.
       05 HNO   PIC X(5).
       05 HNAME PIC X(20).
    ...
    EXEC SQL DECLARE TST CURSOR FOR
       SELECT TESTNO, TESTNAME
       FROM TESTTB
       WHERE TESTATTR1 = :HATTR1
       ORDER BY TESTNO
    END-EXEC
    ...
    EXEC SQL OPEN TST END-EXEC.
    ...
    EXEC SQL
       FETCH TST INTO :HNO, :HNAME  --主要用FETCH来操作变量传递
    END-EXEC.
    EXEC SQL
       DELETE FROM TESTTB WHERE CURRENT OF TST
    END-EXEC.
    ...
    EXEC SQL CLOSE TST END-EXEC.
       STOP RUN.
当进行UPDATE操作时,要在游标中指定更新哪一个属性。      
如:EXEC SQL DECLARE TST CURSOR FOR
       SELECT...
       ...
       FOR UPDATE OF TESTNAME   --指定属性
       ...
    END-EXEC
    ...
    EXEC SQL UPDATE TESTTB
       SET TESTNAME = :HNAME
       WHERE CURRENT OF TST
    END-EXEC.
  
利用游标处理多行记录:
利用游标处理多行记录时,相应的主变量也应定义为数组的形式。
通过OCCURS语句定义为COBOL中的表。
如:01 HOST-VARY.
       05 HOST-ID   PIC 9(5) COMP OCCURS 10 TIMES.
       05 HOST-NAME OCCURS 10 TIMES.
          49 NAME-LEN  PIC 9(2) COMP.
          49 NAME-TEXT PIC X(20).
    EXEC SQL
       DECLARE MTR SCROLL CURSOR
          WITH ROWSET POSITIONING
          FOR SELECT ID, NAME
          FROM TESTTABLE
    END-EXEC
    EXEC SQL OPEN MTR END-EXEC.
    ...
    EXEC SQL
       FETCH CURRENT ROWSET FROM C1 FOR 10 ROWS INTO ...
    END-EXEC.
    EXEC SQL
       FETCH NEXT ROWSET FROM C1 FOR 10 ROWS INTO...
    END-EXEC.
    EXEC SQL
       FETCH ROWSET STARTING AT RELATIVE -7
       FROM C1 FOR 10 ROWS INTO ...
    END-EXEC
    EXEC SQL
       FETCH FIRST ROWSET
       FROM MTR FOR 10 ROWS
       INTO :HOST-ID:INDICATE1, :HOST-NAME:INDICATE2
    END-EXEC.
    ...
    EXEC SQL CLOSE MTR END-EXEC.
       STOP RUN.

4.其他      
DB2中的锁:保证数据操作的一致性。
因素:类型,范围,时间
死锁:并发进程互相等待资源无限等待的情况。

访问路径:Access Path,决定查找访问数据的方式,对效率有直接影响。
EXPLAIN:优化工具,主要根据PLAN_TABLE实现性能优化的。
        而PLAN_TABLE中保存的信息为访问路径相关的信息。
分享到:
评论

相关推荐

    大机+COBOL+DB2+JCL

    在学习这个专题时,你需要掌握如何编写COBOL程序来处理业务逻辑,理解DB2数据库的架构和操作,以及熟练编写JCL脚本来调度和管理作业。同时,对于大机的硬件架构、操作系统(如z/OS)以及相关的管理工具也应有所了解...

    cics db2 cobol

    COBOL程序可以调用CICS服务来处理输入输出、控制流和错误处理,同时也可以通过DB2的绑定调用来执行SQL语句,实现对数据库的操作。 在“cics db2 cobol coding for mainframe”这个主题中,我们关注的是如何结合这三...

    大型机上的DB2 for the COBOL Programmer part 1

    以COBOL做为宿主语言,多个官方例子讲解了DB2在大型机Z/OS操作系统下的使用。适合有一定大型机基础的读者使用,请先看每个文件夹里面的Readme.txt。可以帮助你快速写出真正在企业中使用的COBOL例子。Part1包含13个...

    JCL.Cobol.DB2.CICS面试题.pdf

    在IT领域,尤其是在大型机(Mainframe)环境中,JCL(Job Control Language)、COBOL、DB2和CICS是核心的技术组件。这些技术在金融、保险和其他大型企业中广泛使用,因此熟悉它们对于求职者至关重要。下面我们将深入...

    大型机上的DB2 for the COBOL Programmer part 2

    以COBOL做为宿主语言,多个官方例子讲解了DB2在大型机Z/OS操作系统下的使用。适合有一定大型机基础的读者使用,请先看每个文件夹里面的Readme.txt。可以帮助你快速写出真正在企业中使用的COBOL例子。Part2包含8个...

    常用 cobol 程序操作数据库与顺序文件等

    本文将深入探讨如何使用COBOL进行数据库操作和处理顺序文件。 首先,让我们了解COBOL在数据库交互中的应用。在描述中提到的是连接DB2数据库,DB2是IBM开发的一款关系型数据库管理系统,广泛应用于金融、电信和其他...

    DB2的操作DB2的操作 DB2 CLI

    ### DB2操作与DB2 CLI知识点详解 #### 第一章 DB2开发基础 **1.1 DB2应用程序开发概述** **1.1.1 程序结构** DB2应用程序通常由以下五个主要部分组成: 1. **声明和初始化变量**:在此阶段,程序将声明所有需要...

    cobol示例程序包

    通过这些示例,用户可以学习到如何在COBOL程序中有效利用DB2的特性进行数据操作。 文件"EXT31.ALL.COBOLS"很可能包含了多个COBOL源代码文件,这些文件可能涵盖不同的业务场景,比如交易处理、报表生成、数据转换等...

    日立cobol85开发环境

    【日立COBOL85开发环境】是专为在日文Windows操作系统下进行COBOL编程设计的一款集成开发环境(IDE)。COBOL(Common Business Oriented Language)是一种古老但依然广泛应用的编程语言,主要用于商业数据处理和企业...

    cobol面试集中搜集

    COBOL程序经常需要与数据库进行交互,掌握如何使用SQL语句或DB2等数据库管理系统与COBOL代码集成,是提升程序功能的重要一环。 #### 8. 性能优化 虽然COBOL的性能通常不是问题,但了解如何优化代码以提高效率,如...

    大型机面试全集 cobol jcl vsam cics db2 sql

    大型机面试全集涵盖了几个关键的编程语言和技术,包括COBOL、JCL、VSAM、CICS、DB2以及SQL。这些技术是大型机系统中不可或缺的部分,让我们逐一深入了解一下。 1. **COBOL**(Common Business Oriented Language)...

    CobolDB2:GNU Cobol DB2 CRUD操作的示例

    【CobolDB2:GNU Cobol与DB2数据库的CRUD操作】 GNU Cobol,又称OpenCOBOL,是一种开源的COBOL编译器,它为COBOL程序员提供了一个现代的开发环境,支持现代编程特性。DB2是IBM开发的关系型数据库管理系统,广泛应用...

    cobol错误.doc

    7. **DB2数据库访问**:DB2是IBM的数据库管理系统,`DB2-CUSTINQ`可能是指数据库查询操作。在COBOL中,使用`SELECT`和`FROM`语句进行SQL操作,需要了解SQL的基础知识以及如何在COBOL程序中嵌入SQL。 8. **调试技巧*...

    cobol学习例子(包含DCL脚本

    3. **COBOL与数据库交互**: COBOL可以通过使用其内置的文件处理能力或借助于数据库访问模块(如CICS或DB2 Bindings)来访问数据库。例子中可能包含了如何使用SELECT、INSERT、UPDATE和DELETE语句来操作数据库的示例...

    COBOL语言的基础资料

    大型机通常用于处理大量并发事务,因此可能涵盖COBOL如何与IBM的大型机操作系统如MVS、z/OS交互,以及COBOL在CICS(Customer Information Control System)和DB2数据库中的应用。 8. **案例分析**:PPT文件可能包含...

    COBOL.RAR_cobol

    在IBM大型机环境中,COBOL与主机操作系统如z/OS、CICS(Customer Information Control System)和DB2数据库紧密集成,形成了一套高效的企业级解决方案。CICS提供了一个交互式的事务处理环境,而DB2则为COBOL应用程序...

    cobol的实例程序

    在IBM大型机环境下,COBOL程序通常与DB2数据库系统交互,使用DFSMS(Data Facility Storage Management System)进行文件管理,并可能集成JCL(Job Control Language)来控制作业的执行。这些组件共同构成了大型机上...

    COBOL語言(谭浩强)

    6. **数据库集成**:COBOL可以与各种数据库管理系统(如IBM的DB2,Oracle等)紧密集成,方便数据访问和管理。 7. **现代发展**:尽管COBOL是一种老语言,但随着技术进步,它也在不断更新,如COBOL 2002和COBOL 2014...

Global site tag (gtag.js) - Google Analytics