cobol学习之十数据库的增删改查模板

Wesley13
• 阅读 322

这次连接数据库使用的是ODBC连接access数据库,里面主要是一个增删改查的模板备份,方便以后查询。

000001 IDENTIFICATION                        DIVISION.
000002 PROGRAM-ID.                           SAMPLEDB2.  
000003*>****************************************************************
000004*>  ALL RIGHTS RESERVED. COPYRIGHT (C) 2003, HITACHI, LTD.
000005*>  LICENSED MATERIAL OF HITACHI, LTD.
000006*>****************************************************************
000007*>このサンプルプログラムは、COBOLプログラムの ODBCインタフェース
000008*>機能を使用してのプログラムコーディング例を示します。
000009*>
000010 ENVIRONMENT                           DIVISION.
000011 DATA                                  DIVISION.
000012 WORKING-STORAGE                       SECTION.
000013*>データ部は、EXEC SQL BEGIN .... END-EXEC.と
000014*>EXEC SQL END .... END-EXEC.で囲んだ埋め込みSQL宣言節中の
000015*>データ名のみ手続部の SQL文で、使用可能です。
000016*>
000017 EXEC SQL BEGIN DECLARE SECTION END-EXEC.
000018*>
000019*>[ODBC Administrator]を使用して"サンプル"という名称の
000020*>データべースを作成しておいてください。
000021*>
000022*>ODBC連絡名
000023 01 ODBC-DSN                      PIC X(10) VALUE 'COTEST'.
000024*>連絡データベースユーザID
000025 01 ODBC-UID                      PIC X(10) VALUE 'SYSTEM'.
000026*>連絡データベースパスワード
000027 01 ODBC-PWD                      PIC X(10) VALUE 'SYS'.
000028*>データべースの表の列に対応するデータ定義を[ODBCレコード定義生成]
000029*>ツールを使用して作成しておいてください。
000030*>例えば、"SAMPLESC.cbl"ファイルに生成したなら次の様に
000031*>COPY文を記述してコピー展開してください。
000032*>
000033*> COPY SAMPLESC.
000034*>
000035*>例えば、SQL Serverで次のような表から生成したならば
000036*>CREATE TABLE pmbm ( bm varchar(1),
000037*>                    mc varchar(10),
000038*>                    bz varchar(10))
000039*>================================================================
000040 01 PMBM-REC.
000041   02 PMBM-BM                     PIC X(1).
000042   02 PMBM-MC                     PIC X(10).
000043   02 PMBM-BZ                     PIC X(10).
000044*>================================================================
000045*>このようなデータ定義となる。
000046 EXEC SQL END DECLARE SECTION END-EXEC.
000047 77 STMT-PROC                     PIC X(20).
000048 77 F-CUR-FLG                     PIC X(1).
000049 PROCEDURE                             DIVISION.
000050*===============================================================* 
000051* メイン処理(0.0)                                               * 
000052*===============================================================* 
000053 MAIN-SEC                              SECTION.
000054* 初期化処理
000055 PERFORM                               INIT-SEC.
000056* 業務主処理
000057 PERFORM                               PROC-SEC.
000058* 終了処理
000059 PERFORM                               END-SEC.
000060 MAIN-EXT.
000061     STOP RUN.
000062*===============================================================* 
000063* 初期化処理                                                    * 
000064*===============================================================* 
000065 INIT-SEC                              SECTION.
000066*>****************************************************************
000067*>制御系とする埋め込みSQL文は、例えば以下のように記述します。
000068*>****************************************************************
000069*>
000070*>接続/切断できたかどうかを<埋め込み例外宣言>にて判断します。
000071*>
000072     EXEC SQL
000073          WHENEVER SQLERROR PERFORM :ERROR-REC
000074     END-EXEC.
000075*>
000076*>データベースに接続する。
000077*>
000078     MOVE 'データベースへの接続'  TO   STMT-PROC.
000079     EXEC SQL
000080          CONNECT :ODBC-UID IDENTIFIED BY :ODBC-PWD
000081              USING :ODBC-DSN
000082     END-EXEC.
000083 INIT-EXT.
000084     EXIT.
000085*===============================================================* 
000086* 業務主処理                                                    * 
000087*===============================================================* 
000088 PROC-SEC                                SECTION.
000089     PERFORM                           DELETE-REC.
000090     PERFORM                           INSERT-REC.
000091     PERFORM                           SELECT-REC.
000092     PERFORM                           UPDATE-REC.
000093     PERFORM                           CURSOR-REC.
000094 PROC-EXT.
000095     EXIT.
000096*>****************************************************************
000097*>表中のデータを全て削除する。
000098*>****************************************************************
000099 DELETE-REC                            SECTION.
000100*>削除できたかどうかを<埋め込み例外宣言>にて判断します。
000101*>
000102     EXEC SQL
000103          WHENEVER SQLERROR PERFORM :ERROR-REC
000104     END-EXEC.
000105*>
000106     MOVE '表中の全データの削除'  TO   STMT-PROC.
000107     EXEC SQL
000108          DELETE FROM pmbm
000109     END-EXEC.
000110     PERFORM                           COMMIT-REC.
000111 DELETE-EXT.
000112     EXIT. 
000113*>****************************************************************
000114*>表中にデータを挿入する。
000115*>****************************************************************
000116 INSERT-REC                            SECTION.
000117*>挿入できたかどうかを<埋め込み例外宣言>にて判断します。
000118*>
000119     EXEC SQL
000120          WHENEVER SQLERROR PERFORM :ERROR-REC
000121     END-EXEC.
000122*>
000123     MOVE 'サン一郎のデータ挿入1' TO   STMT-PROC.
000124     MOVE 'a'                     TO   PMBM-BM.
000125     MOVE 'Dong Jing'             TO   PMBM-MC.
000126     MOVE 'INSERT 1'              TO   PMBM-BZ.
000127     EXEC SQL
000128          INSERT 
000129              INTO pmbm  ( bm
000130                         , mc
000131                         , bz
000132                         )
000133              VALUES   ( :PMBM-BM
000134                       , :PMBM-MC
000135                       , :PMBM-BZ
000136                        )
000137     END-EXEC.
000138     PERFORM                           COMMIT-REC.
000139*>
000140     MOVE 'サン一郎のデータ挿入2' TO   STMT-PROC.
000141     MOVE 'b'                     TO   PMBM-BM.
000142     MOVE 'Da Ban'                TO   PMBM-MC.
000143     MOVE 'INSERT 2'              TO   PMBM-BZ.
000144     EXEC SQL
000145          INSERT 
000146              INTO pmbm  ( bm
000147                         , mc
000148                         , bz
000149                         )
000150              VALUES   ( :PMBM-BM
000151                       , :PMBM-MC
000152                       , :PMBM-BZ
000153                        )
000154     END-EXEC.
000155     PERFORM                           COMMIT-REC.
000156*>
000157     MOVE 'サン一郎のデータ挿入3' TO   STMT-PROC.
000158     MOVE 'c'                     TO   PMBM-BM.
000159     MOVE 'Fu Gang'               TO   PMBM-MC.
000160     MOVE 'INSERT 3'              TO   PMBM-BZ.
000161     EXEC SQL
000162          INSERT 
000163              INTO pmbm  ( bm
000164                         , mc
000165                         , bz
000166                         )
000167              VALUES   ( :PMBM-BM
000168                       , :PMBM-MC
000169                       , :PMBM-BZ
000170                        )
000171     END-EXEC.
000172     PERFORM                           COMMIT-REC.
000173 INSERT-EXT.
000174     EXIT.
000175*>****************************************************************
000176*>表中のデータを参照する。
000177*>****************************************************************
000178 SELECT-REC                            SECTION.
000179*>データを取得できたかどうかを<埋め込み例外宣言>にて判断します。
000180     EXEC SQL
000181          WHENEVER NOT FOUND PERFORM :NOTFOUND-REC
000182     END-EXEC.
000183*>
000184     MOVE 'サン一郎のデータ参照'  TO   STMT-PROC.
000185     DISPLAY '参照のデータBM: '.
000186     ACCEPT                            PMBM-BM.
000187     EXEC SQL
000188         SELECT mc
000189         INTO  :PMBM-MC
000190         FROM   pmbm
000191         WHERE  bm = :PMBM-BM
000192     END-EXEC.
000193     DISPLAY 'サン 一郎のMC:'     PMBM-MC.
000194 SELECT-EXT.
000195     EXIT.
000196*>****************************************************************
000197*>表中のデータを更新する。
000198*>****************************************************************
000199 UPDATE-REC                            SECTION.
000200*>更新できたかどうかを<埋め込み例外宣言>にて判断します。
000201*>
000202     EXEC SQL
000203          WHENEVER SQLERROR PERFORM :ERROR-REC
000204     END-EXEC.
000205*>
000206     MOVE 'サン太郎のデータ更新'  TO   STMT-PROC.
000207     MOVE 'Bei Hai Dao'            TO   PMBM-MC.
000208     DISPLAY '更新のデータBM: '.
000209     ACCEPT                            PMBM-BM.
000210     EXEC SQL
000211          UPDATE  pmbm
000212              SET mc = :PMBM-MC
000213          WHERE   bm = :PMBM-BM
000214     END-EXEC.
000215     PERFORM                           COMMIT-REC.
000216 UPDATE-EXT.
000217     EXIT.
000218*>****************************************************************
000219*>表中の全データを参照する。
000220*>****************************************************************
000221 CURSOR-REC                            SECTION.
000222     MOVE '表中の全データの参照'  TO   STMT-PROC.
000223     PERFORM                           CRS00-REC.
000224     PERFORM                           OPEN-REC.
000225     PERFORM FETCH-REC UNTIL F-CUR-FLG  = '1'.
000226     PERFORM                           CLOSE-REC.
000227 CURSOR-EXT.
000228     EXIT.
000229*>****************************************************************
000230*>CRS00カーソルを宣言します。
000231*>****************************************************************
000232 CRS00-REC                              SECTION.
000233*>CRS00を宣言できたかどうかを<埋め込み例外宣言>にて判断します。
000234*>
000235     EXEC SQL
000236          WHENEVER SQLERROR PERFORM :ERROR-REC
000237     END-EXEC.
000238*>
000239     MOVE 'CRS00カーソルの宣言'   TO   STMT-PROC.
000240     EXEC SQL
000241          DECLARE CRS00
000242          CURSOR FOR
000243          SELECT bm
000244               , mc
000245               , bz
000246          FROM pmbm
000247     END-EXEC.
000248 CRS00-EXT.
000249     EXIT.
000250*>****************************************************************
000251*>OPEN文にてカーソルを開く。
000252*>****************************************************************
000253 OPEN-REC                              SECTION.
000254*>CRS00を開くできたかどうかを<埋め込み例外宣言>にて判断します。
000255*>
000256     EXEC SQL
000257          WHENEVER SQLERROR PERFORM :ERROR-REC
000258     END-EXEC.
000259*>
000260     MOVE 'CRS00カーソルを開く'   TO   STMT-PROC.
000261     EXEC SQL
000262          OPEN CRS00
000263     END-EXEC.
000264 OPEN-EXT.
000265     EXIT.
000266*>****************************************************************
000267*>FETCH文にて値を取り出す。
000268*>****************************************************************
000269 FETCH-REC                            SECTION.
000270     EXEC SQL
000271          WHENEVER NOT FOUND PERFORM :NOTFOUND-REC
000272     END-EXEC.
000273     INITIALIZE                        PMBM-REC.
000274     EXEC SQL
000275          FETCH CRS00
000276              INTO :PMBM-BM
000277                 , :PMBM-MC
000278                 , :PMBM-BZ
000279     END-EXEC.
000280     IF  F-CUR-FLG                NOT = '1'
000281         DISPLAY 'bm:', PMBM-BM
000282         DISPLAY 'mc:', PMBM-MC
000283         DISPLAY 'bz:', PMBM-BZ
000284     ELSE
000285        CONTINUE
000286     END-IF.
000287 FETCH-EXT.
000288     EXIT.
000289*>****************************************************************
000290*>CLOSE文にてカーソルを閉じる。
000291*>****************************************************************
000292 CLOSE-REC SECTION.
000293*>CRS00を閉じできたかどうかを<埋め込み例外宣言>にて判断します。
000294*>
000295     EXEC SQL
000296          WHENEVER SQLERROR PERFORM :ERROR-REC
000297     END-EXEC.
000298*>
000299     MOVE 'CRS00カーソルを閉じ'   TO   STMT-PROC.
000300     EXEC SQL
000301          CLOSE CRS00
000302     END-EXEC.
000303 CLOSE-EXT.
000304     EXIT.
000305*===============================================================* 
000306* 終了処理                                                      * 
000307*===============================================================* 
000308 END-SEC               SECTION.
000309*>データべースから切断する。
000310*>
000311     MOVE 'データべースから切断'  TO   STMT-PROC.
000312     EXEC SQL
000313          DISCONNECT
000314     END-EXEC.
000315*>
000316*>上記の<埋め込み例外宣言>の有効範囲の終わりを指示します。
000317*>
000318     EXEC SQL
000319          WHENEVER SQLERROR CONTINUE
000320     END-EXEC.
000321 END-EXT.
000322     EXIT.
000323*>****************************************************************
000324*>ERROR文にてコミットする。
000325*>****************************************************************
000326 ERROR-REC SECTION.
000327     DISPLAY STMT-PROC 'に失敗しました。'
000328     PERFORM                           ROLLBACK-REC.
000329     STOP RUN.
000330 ERROR-EXT.
000331     EXIT.
000332*>****************************************************************
000333*>NOT FOUND文にてコミットする。
000334*>****************************************************************
000335 NOTFOUND-REC SECTION.
000336     MOVE '1'                     TO   F-CUR-FLG.
000337 NOTFOUND-EXT.
000338     EXIT.
000339*>****************************************************************
000340*>COMMIT文にてコミットする。
000341*>****************************************************************
000342 COMMIT-REC SECTION.
000343     EXEC SQL
000344          COMMIT WORK
000345     END-EXEC.
000346 COMMIT-EXT.
000347     EXIT.
000348*>****************************************************************
000349*>ROLLBACK文にてロールバックして、接続を解除する。
000350*>****************************************************************
000351 ROLLBACK-REC SECTION.
000352     EXEC SQL
000353          ROLLBACK WORK
000354     END-EXEC.
000355     EXEC SQL
000356          DISCONNECT
000357     END-EXEC.
000358 ROLLBACK-EXT.
000359     EXIT.

数据库异常处理语句:

000270     EXEC SQL
000271          WHENEVER NOT FOUND PERFORM :NOTFOUND-REC
000272     END-EXEC.
点赞
收藏
评论区
推荐文章
浅梦一笑 浅梦一笑
1个月前
初学 Python 需要安装哪些软件?超级实用,小白必看!
编程这个东西是真的奇妙。对于懂得的人来说,会觉得这个工具是多么的好用、有趣,而对于小白来说,就如同大山一样。其实这个都可以理解,大家都是这样过来的。那么接下来就说一下python相关的东西吧,并说一下我对编程的理解。本人也是小白一名,如有不对的地方,还请各位大神指出01名词解释:如果在编程方面接触的比较少,那么对于软件这一块,有几个名词一定要了解,比如开发环
技术小男生 技术小男生
1个月前
linux环境jdk环境变量配置
1:编辑系统配置文件vi /etc/profile2:按字母键i进入编辑模式,在最底部添加内容: JAVAHOME/opt/jdk1.8.0152 CLASSPATH.:$JAVAHOME/lib/dt.jar:$JAVAHOME/lib/tools.jar PATH$JAVAHOME/bin:$PATH3:生效配置
光头强的博客 光头强的博客
1个月前
Java面向对象试题
1、 请创建一个Animal动物类,要求有方法eat()方法,方法输出一条语句“吃东西”。 创建一个接口A,接口里有一个抽象方法fly()。创建一个Bird类继承Animal类并实现 接口A里的方法输出一条有语句“鸟儿飞翔”,重写eat()方法输出一条语句“鸟儿 吃虫”。在Test类中向上转型创建b对象,调用eat方法。然后向下转型调用eat()方
刚刚好 刚刚好
1个月前
css问题
1、 在IOS中图片不显示(给图片加了圆角或者img没有父级) <div<img src""/</div div {width: 20px; height: 20px; borderradius: 20px; overflow: h
blmius blmius
1年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录 问题 用navicat导入数据时,报错: 原因这是因为当前的MySQL不支持datetime为0的情况。 解决修改sql\mode: sql\mode:SQL Mode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。 全局s
小森森 小森森
1个月前
校园表白墙微信小程序V1.0 SayLove -基于微信云开发-一键快速搭建,开箱即用
后续会继续更新,敬请期待2.0全新版本 欢迎添加左边的微信一起探讨!项目地址:](https://www.aliyun.com/activity/daily/bestoffer?userCodesskuuw5n) \2. Bug修复更新日历 2. 情侣脸功能大家不要使用了,现在阿里云的接口已经要收费了(土豪请随意), \ \ 和 注意
晴空闲云 晴空闲云
1个月前
css中box-sizing解放盒子实际宽高计算
我们知道传统的盒子模型,如果增加内边距padding和边框border,那么会撑大整个盒子,造成盒子的宽度不好计算,在实务中特别不方便。boxsizing可以设置盒模型的方式,可以很好的设置固定宽高的盒模型。 盒子宽高计算假如我们设置如下盒子:宽度和高度均为200px,那么这会这个盒子实际的宽高就都是200px。但是当我们设置这个盒子的边框和内间距的时候,那
艾木酱 艾木酱
1个月前
快速入门|使用MemFire Cloud构建React Native应用程序
> MemFire Cloud是一款提供云数据库,用户可以创建云数据库,并对数据库进行管理,还可以对数据库进行备份操作。它还提供后端即服务,用户可以在1分钟内新建一个应用,使用自动生成的API和SDK,访问云数据库、对象存储、用户认证与授权等功能,可专
Wesley13 Wesley13
1年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
#### 背景描述 # Time: 2019-01-24T00:08:14.705724+08:00 # User@Host: **[**] @ [**] Id: ** # Schema: sentrymeta Last_errno: 0 Killed: 0 # Query_time: 0.315758 Lock_
helloworld_28799839 helloworld_28799839
1个月前
常用知识整理
# Javascript ## 判断对象是否为空 ```js Object.keys(myObject).length === 0 ``` ## 经常使用的三元运算 > 我们经常遇到处理表格列状态字段如 `status` 的时候可以用到 ``` vue