cobol基本语法_第1页
cobol基本语法_第2页
cobol基本语法_第3页
cobol基本语法_第4页
cobol基本语法_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、基本語法COBOL 基本語法cobol 的书写格式(每行)1 、 前 6 列为序号区(一般不编辑)2 、 第 7 列为标示列,仅可以写如下几个标示符。a. “ ”注释符 (注释当前行的代码)b“ “字符串连接符3、第8 列 -11 列为 A 区,包括以下内容。a 部、节名。b 层号 014、第12 列 -72 列为 B 区,过程部的程序必须写在B 区中。5、第72 以后部分不能编辑。cobol 的语法结构(几大部分)1 、 标示部 (IDENTIFICATION DIVISION):提供程序的一般性文档说明。2 、 环境部 (ENVIRONMENT DIVISION):提供程序外部有关的项目。

2、a. 配置节 (CONFIGURATION SECTION) . 指定源计算机(SOURCE-COMPUTE). . 目标计算机(OBJECT-COMPUTE).b. 输入输出节(INPUT-OUTPUT SECTION).文件的物理路径的定义。方法二:(过程部中动态指定文件)SELECT FILE-LOG ASSIGN TOSELECT-FILEORGANIZATION IS LINE SEQUENTIAL .在数据部定义字符串变量SELECT-FILE, 在文件 FILE-LOG 打开前动态指定文件路径。3 、数据部(DATA DIVISION) 。程序中的变量都在数据部中定义,Cobol

3、 中没有全局变量和局部之分。(变量的类型结构参照5.变量类型)a. 文件节 (FILE SECTION)给环境部定义的文件指定一个RECORD 变量,读写文件用:FD FILE-LOG.01 RECORD-LOGPIC X(2000).b. 工作存储节定义程序中用到的临时变量。a) COBOL 变量定义需要加层号(表示层次关系),· 层号从 01 开始如 : 01IPIC X(10).· 组合项如 : 01 WORK-AREA.05 NUM-1 PIC 9(09).1705 STR-1PIC X(10).b) 层号依次排列顺序为:01 ,05,10,15,20,30

4、3; · · · · · ·c. 连接节子程序的参数的定义。4 、 过程部 (PROCEDUREDIVISION)程序的主体:程序的逻辑运算在此操作。a、 每个程序分为四大节(模块),· 前处理 (初始化变量,设定初始值等)· 主处理 ( 程序业务处理部分)· 后处理 ( 程序正常结束时的出口)· 错误处理( 程序异常结束时的出口)b、 对于子程序,PROCEDURE DIVISION 后应列出LINK 节中定义的参数。如 : PROCEDURE DIVISION USING LINK-INPU

5、T-DATA LINK-OUTPUT-DATA. c、 程序结束。· 主程序STOP RUN.· 子程序GO BACK.5 、变量类型COBOL 程序的基本变量类型分为两大类字符串型(X)、数值型(9) 。a 字符串型01 STRING-APIC X(100).100 个字符长的变量,程序可以局部操作一个变量( STRING-A(start: length) 如:MOVE ALL “ X” TO STRING-A(2:10)(将变量STRING-A 第 2 位开始 10 长度的内容全赋为”X” 字符 )b 数值型种类类型说明备注DISPLAY9(m)无符号整数,每位占用一个

6、字节,显示或输出到文件时,为零的数位显示 ”0”(1<=m <=18)例如 : 01 I PIC 9(8).变量I 占用8 个字节。I = 1 时,输出显示时为00000001S9(m)带符号整数,每位占用一个字节,符号位不占位,显示时,为零的数位显示” 0”,符号显示在最后,输出到文件时,为零的数位显示” 0”,符号丢失。(1<=m <=18)例如 : 01 I PIC 9(8).变量I 占用8 个字节。I = 1 时,显示时为00000001+输出到文件时为00000001DISPLAY9(m)V9(n)无符号小数(小数点不显示,不占位)每位占用一个字节,显示或输出

7、到文件时,为零的数位显示”0”(1<=m + n <=18)例如 : 01 I PIC 9(4)V9(2).变量I 占用6 个字节,整数位4 位,小数位2 位。I = 1.1 时,输出显示时为000110S9(m)V9(n)带符号小数(小数点不显示,不占位)每位占用一个字节,符号位不占位,显示时,为零的数位显示”0”,符号显示在最后,输出到文件时,为零的数位显示” 0”,符号丢失。(1<=m + n <=18)例如 : 01 I PIC 9(4)V9(2).变量I 占用6 个字节,整数位4 位,小数位2 位。I = 1.1 时,显示时为000110+输出到文件时为000

8、110Comp,comp-5,comp-39(m) comp-5无符号整数,数据以二进制方式存贮,显示和9(m) 一样,不能出力(1<= m <=18)S9(m) comp-5有符号整数,数据以二进制方式存贮, 显示和S9(m) 类似,只是符号在前面,不能出力,(1<= m <= 18)9(m)v9(n) comp-5无符号小数,数据以二进制方式存贮,显示和9(m)v9(n) 一样,不能出力(1<= m + n <=18)S9(m)v9(n) comp-5有符号整数,数据以二进制方式存贮,显示和S9(m)v9(n) 类似,只是符号在前面,不能出力,(1<

9、;= m + n <= 18)注: 1 、对于出力型数值变量,可以用9 代替 Z, 它们的区别是:结果为零的整数部高位,小数部低位:Z 型变量用空格显示,9 型变量用零显示2 、 COBOL 语言中数值型变量种类很多,针对不同的要求有不同的数值类型。c、在COBOL 变量定义时,可以加入格式字符串字符。d、 不同类型变量间赋值。整数1 、 字符串中数值部分可以作为对应长度的DISPLAY 型变量给其它各种数值型变量。2 、 DISPLAY 型变量(包括出力型变量)被赋值时,超出它表示范围的数可以被接受,但截去超出的高位。3 、 COMP 型变量被赋值时,超出它表示范围的数不能被接受。小数

10、1 、 DISPLAY 型变量(包括出力型变量)被赋值时,超出它表示范围的数可以被接受,但整数部截去超出的高位,小数部截去低位。2 、 COMP 型变量被赋值时,整数部超出它表示范围的数不能被接受,小数部超出它表示范围的数可以被接受,但小数部截去低位注 : 以上所述赋值变量为任何类型的数值型变量( 经过严格测试得出结论) 。e、字符型比较。· 字符串比较时,系统自动截去尾部空格(如“a “= “a” ) 。· 数字的数值形式和数字字符形式相等(如“ 1234567890 ” = 1234567890 )· 综合以上两点, 有 “ 12 “ = 12基本语法:1 、

11、赋值语句MOVE 。a 、 将一个变量赋给另个变量move a to b.b 、将一个变量同时赋给另外两个变量。Move a to b c .c、将一个变量全部赋为某个字符move all “x ”to a.d、对于赋值溢出,截取的方式为.· 字符型变量截去左边的溢出部分。· 数值型变量截去整数部高位、小数部低位的溢出部分。e、 组和项传送,它们的数据结构必须相同f、 对于组合项成员的局部引用,应该如下:05STR-1PICX(10).05STR-2PICX(10).B-AREA.05STR-1PICX(20).05STR-2PICX(10).MOVESTR-1OF A-A

12、REA(1:4)TOA-AREA.STR-1 OF B-AREA(1:4).3 、 四则运算原则上,四则运算不用助记符语句,但对于简单运算( +,-), 可采用助记符语句。a、 加法 ( ADD 1 TO NUM-1)b、 减法 (SUBTRACT 1 FROM NUM-1)c、 其它所有运算均采用COMPUTE 语句COMPUTE NUM-1 = NUM-2 + NUM3 * 10运算符如下:+ 加* 减* 乘/ 除* * 指数在 COMPUTE 语句中 ,变量和运算符间至少留有一个空格。4、 重定义语句REDEFINES( 数据部中使用)01 APIC X(10) VALUE SPACE.

13、01 BREDEFINES A PIC 9(10).变量 A,B 使用同一个空间,重定义时,重定义变量必须紧跟着被重定义变量后面,并且在字符串同数值一起重定义时 , 如果对变量进行初始化,变量会初始化为空格。5、 数组关键词OCCURSOCCURS 整数 TIMES.a. 简单数组01 A OCCURS 10 PIC X(30).b. 组合项数组01 A.05 BOCCURS 10.10 C PIC X(10).11 D PIC X(20).注意:引用数组中某一元素如下DISPLAY C OF B OF A(1)“ ” .6、 连结语句STRINGSTRING A, B, C DELIMITE

14、D BY SIZE INTO D .· 将字符串 A, B, C 按它们定义长度连接赋给变量D.STRING A, B, C DELIMITED BY SPACE INTO D .· 将字符串 A, B, C 连接赋给变量D, 去掉中间所有的空格.STRING “ AAAAAA” ADELIMITED BY SIZE“ BBBBBBB ”DELIMITED BY SIZEBDELIMITED BY SIZEINTO D .· 将字符串和字符串变量连接赋给变量 D.7、 IF 语句· IF 条件THEN语句 (无 “ .结束) ”ELSE语句 (无 “ .

15、结束) ”END-IF.注 : IF 语句最多只能使用三层嵌套,条件用括号括起来。10 关系运算符运算符含义>大于<小于=等于<=>=NOT =不等于注:判断字符串能否转换为数字。NUMERICNOT NUMERICIS NOT NUMERIC11 、 PERFORM 语句PERFORM XXX-RTN.· 调用子节,直到遇到第一个只包含EXIT 语句的段中止,回到该调用语句的下一条语句。EXIT 只与它搭配有效。所以节的定义规定如下:XXX-RTNSECTION.语句块 · · · · · · &#

16、183; ·XXX-EXT.EXIT.PERFORM XXX-RTN N TIMES.· 循环调用子节N 次PERFORMXXX-RTNUNTIL N> 30.· 循环调用子节,直到N 大于 30。PERFORM UNTIL 表达式 语句 · · · · · · ·END-PERFORM.· 循环调用语句块,表达式判断在语句块前进行。PERFORM VARYINGXFROM A BY B UNTIL X > 12语句 · · · ·

17、· · ·END-PERFORM.· 循环调用语句块,相当于FOR 循环。12 、 EVALUATE 语句EVALUATE 变量、常量、表达式WHEN ANYTRUEFALSE(NOT) 常量 1 THRU (THROUGH) 常量 2WHEN OTHER .END EVALUATEANY :任何变量、常量值TRUE 、 FALSE :关系表达式的结果基本語法(NOT) 常量 1 THRU (THROUGH) 常量 2: 值 (不 )在常量1 和常量 2 构成的闭区间另外,在WHEN 后面可以包含简单的关系表达式。如:EVALUATE AWHEN =&g

18、t; 10EVALUATE BWHEN = 1 OR = 2 OR = 3语句· · · ·WHEN OTHER语句· · · ·END-EVALUATEWHEN OTHER语句 · · · ·END-EVALUATE.13 、另外, 不同的 COBOL 系统提供了不同内部函数,建议少用内部函数,以下提供几个通用的内部函数ORD 取得字符的ASICII 码 如:MOVE FUNCTION ORD (“A ”)UPPER-CASE 字母小写转换成大写如:MOVE FUNCTIO

19、N UPPER-CASE (STRING(START:1)LOWER -CASE 字母小写转换成大写如:MOVE FUNCTION LOWER-CASE (STRING(START:1)REVERSE 对字符串中所有字符进行倒序如:MOVE FUNCTION REVERSE(STRING-1)LENGTH 取得变量的定义长度,如:COMPUTE LEN = FUNCTION LENGTH(STRING)TO NUMBER.TO STRING(START:1)TO STRING(START:1)TO STRING二、 PRO*COBOL 基本語法COMPLA 使用的 PRO*COBOL 是 OR

20、ACLE 公司提供的在COBOL 程序中嵌入SQL 语句的一种方法,使得程序方便地访问操作ORACLE 数据库;PRO*COBOL 程序经过ORACLE 提供的预编译器预编译生成中间COBOL 程序后,程序中所有的SQL 语句直接调用ORACLE 库函数, 再经过 COBOL 编译器同一般COBOL 程序一样编译生成各种可执行模块 ,由于程序中直接调用ORACLE 库函数,所以它们访问操作ORACLE 数据库的速度很快,基本语法如下。一、特点。· 所有的 SQL 或数据库操作相关语句均被括在” EXEC SQL ” 和“END-EXEC ”之间, 并且它们只能包含一条语句,如 :EX

21、EC SQLSQL 语句END-EXEC.· 所有访问操作数据库的变量都必须是主变量。· “EXEC SQL ” , ” END-EXEC 及其包含的语句都必须从12 列或 12 列以后开始。数据部内容。基本語法· 引用两个对象SQLCA, ORACA.EXEC SQL INCLUDE SQLCAEND-EXEC.EXEC SQL INCLUDE ORACAEND-EXEC.· 主变量定义。EXEC SQL BEGIN DECLARE SECTION END-EXEC. (主变量定义开始)EXEC SQL END DECLARE SECTION END-

22、EXEC. (主变量定义结束)· · 主变量都必须定义在这里,具体定义和一般的COBOL变量一样。· · VARCHAR型变量(可变长度).该变量定义就是在X型变量后加关键字VARYING如. :05 STRINGPIC X(100) VARYING.它实际包含两部分( 预编译后的中间COBOL程序可见)05 STRING.06 STRING-LEN PIC S9(4) COMP.06 STRING-ARR PIC X(100).STRING-LEN 表示字符串的实际长度,STRING-ARR表示字符串的实际内容。SQL 语句中,只能用STRING.从表

23、中得到值时,STRING-LEN 自动被赋值。向表中写入值时,STRING-LEN 需要手工指定长度,SQL将 STRING(1:STRING-LEN)部分有效字符串写到表中。定义主变量时,引用COPY句 : EXEC SQL INCLUDE WSIT1101.cpy END-EXEC.· 游标的定义可以放在数据中。数据部中SQL语句的基本语法1) 、 错误扑获ORACLE 错误扑获是一个全局性的标志,在一个事务( 在 PRO*COBO中, L ORACLE事务以COMMIT或 ROLLBACK为分割点 ) 中,后一个错误扑获会覆盖前一个错误扑获设置。· 遇到SQL警告(S

24、QLCODE > 0 ) 继续EXEC SQL WHENEVER SQLWARNING CONTINUE END-EXEC.· 遇到SQL错误(SQLCODE < 0 ) 继续EXEC SQL WHENEVER SQLERROR CONTINUE END-EXEC.· 遇到SQL错误(SQLCODE < 0 ) 跳转EXEC SQL WHENEVER SQLERROR GOTO ORA-ERROR END-EXEC.2) ) 、 数据连接数据库连接在一般的项目开发中用不到,只用于测试程序 中 ( 不连接外部数据库)· 方式一(USERNAM和E

25、PASSWOR分开 D , 如:USERNAME =“ OPS$LAPROC”51 PASSWORD =“ LAPRO”C )EXEC SQLCONNECT :USERNAME IDENTIFIED BY :PASSWDEND-EXEC.· 方式二(USERNAM和E PASSWOR合并 D , 如: UID = “ OPS$LAPROC51/LAPR” OC)EXEC SQLCONNECT :UIDEND-EXEC.3) 、 静态SQL语句· 单条记录的检索EXEC SQLSELECT ENAME, SAL, COMMINTO :EMP-NAME, :SALARY, :C

26、OMMISSION:COMM-INDFROM EMPWHERE EMPNO = :EMP-NUMBEREND-EXEC.注 : 上例中的COMM-IND为指示变量, 在检索操作中每个接受主变量都可指定一个指示变量用来判断主变量是不是接受到一个空值(NULL)(主变量不能接受空值),当指示变量为量应该接受到一个空值(主变量自己表示不出来)· 多条记录的检索(CURSOR游标)· · 游标的定义EXEC SQLDECLARE CUR_NAME CURSOR FORSELECT MSG_CD , MSG_1,MSG_2FROM WWWTMSG1END-EXEC.游标的定

27、义:将SQL查询语句声明为一个游标,不调用ORACLE库函数,不会更新· · 游标的打开EXEC SQLOPEN CUR_NAMEEND-EXEC.游标的打开:用游标定义的SQL语句检索数据库,将检索结果生成一个游标对象,记录前一位置,无法确定游标中有没有记录) 。· · 游标中记录的抽取EXEC SQLFETCH CUR_NAMEINTO : HST-MSG-CD , : HST-MSG-1,:HST-MSG-2END-EXEC.游标中记录的抽取:将游标中的记录抽取到相应的主变量中,一次抽取一条。· · 游标的关闭EXEC SQLC

28、LOSE CUR_NAMEEND-EXEC.游标的关闭: 将现有的游标对象释放,游标再次打开前,必须关闭。· 更新EXEC SQLUPDATE WWWTMSG1(9(04) COMP型 ),它-1 时,表示对应的主变SQLCOD的值。E( 此时游标指针在第一条SET MSG_1 = : WK-MSG-1,MSG_2 = : WK-MSG-2WHERE MSG_CD = : WK-MSG-CDEND-EXEC.· 删除EXEC SQLDELETE FROM WWWTMSG1WHERE MSG_CD = : WK-MSG-CDEND-EXEC· 插入EXEC SQLI

29、NSERTINTO WWWTMSG1(MSG_CD,MSG_1,MSG_2)VALUES (:WK-MSG-CD,:WK-MSG-1,:WK-MSG-2)END-EXEC· 事务的提交· · 方式一(释放连接)EXEC SQL COMMIT WORK RELEASE END-EXEC.· · 方式二(不释放连接)EXEC SQL COMMIT WORK END-EXEC.· 事务的回滚· · 方式一(释放连接)EXEC SQL ROLLBACK WORK RELEASE END-EXEC.· ·

30、 方式二(不释放连接)EXEC SQL ROLLBACK WORK END-EXEC.· 典型的SQLCOD值 E· · SELECT1403 :没有检索到记录· · FETCH(游标中记录的抽取)1403 :游标指针FETCH到游标的尾部· · UPDATE1403 :没有更新的记录-60 :死锁-2049:由于死锁导致系统超时· · DELETE1403 :没有删除的记录-60 :死锁-2049:- · INSERT- 1 :插入的记录已存在- 60 :死锁- 2049:由于死锁导致系统超时

31、· 典型ORACLE内部变量SQLCODE : SQL 语句运行后得到的返回值SQLERRMC: SQL 语句运行后得到的返回信息SQLERRD(3): SQL 语句运行处理的记录条数4) 、动态SQL语句· 动态一(直接执行SQL字符串)· · 方式一MOVE "INSERT INTO DYN1 VALUES ('TEST')" TO DYNSTMT.EXEC SQL EXECUTE IMMEDIATE :DYNSTMT END-EXEC.· · 方式二EXEC SQL EXECUTE IMMED

32、IATE"INSERT INTO DYN1 VALUES ('TEST')"END-EXEC.动态一:只用于没有任何参数和返回结果的SQL语句操作· 动态二 ( 用于非检索SQL语句)· · 方式一 ( 带参数 )MOVE "INSERT INTO EMP (EMPNO, DEPTNO) VALUES (:V1, :V2)"TO DYNSTMT-ARR.EXEC SQL PREPARE S FROM :DYNSTMT END-EXEC.EXEC SQL EXECUTE S USING :EMPNO, :DEPTNO1 END-EXEC.其中 V1

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论