设为首页 收藏本站
查看: 1156|回复: 0

[经验分享] cobol操作db2

[复制链接]

尚未签到

发表于 2016-11-13 09:26:07 | 显示全部楼层 |阅读模式
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 USING DSC0000.gif ARMA,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中保存的信息为访问路径相关的信息。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-299550-1-1.html 上篇帖子: db2 日志问题 下篇帖子: DB2 SQL命令小集
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表