cobol基本语法教学内容.docx

上传人:b****7 文档编号:26054965 上传时间:2023-06-17 格式:DOCX 页数:20 大小:23.38KB
下载 相关 举报
cobol基本语法教学内容.docx_第1页
第1页 / 共20页
cobol基本语法教学内容.docx_第2页
第2页 / 共20页
cobol基本语法教学内容.docx_第3页
第3页 / 共20页
cobol基本语法教学内容.docx_第4页
第4页 / 共20页
cobol基本语法教学内容.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

cobol基本语法教学内容.docx

《cobol基本语法教学内容.docx》由会员分享,可在线阅读,更多相关《cobol基本语法教学内容.docx(20页珍藏版)》请在冰豆网上搜索。

cobol基本语法教学内容.docx

cobol基本语法教学内容

 

cobol基本语法

基本語法

一、COBOL基本語法

一、cobol的书写格式(每行)

1、前6列为序号区(一般不编辑)

2、第7列为标示列,仅可以写如下几个标示符。

a.“*”注释符(注释当前行的代码)

b“-“字符串连接符

3、第8列---11列为A区,包括以下内容。

a部、节名。

b层号01

4、第12列---72列为B区,过程部的程序必须写在B区中。

5、第72以后部分不能编辑。

二、cobol的语法结构(几大部分)

1、标示部(IDENTIFICATIONDIVISION):

提供程序的一般性文档说明。

2、环境部(ENVIRONMENTDIVISION):

提供程序外部有关的项目。

a.配置节(CONFIGURATIONSECTION)

①.指定源计算机(SOURCE-COMPUTE).

②.目标计算机(OBJECT-COMPUTE).

b.输入输出节(INPUT-OUTPUTSECTION).

文件的物理路径的定义。

方法二:

(过程部中动态指定文件)

SELECTFILE-LOGASSIGNTOSELECT-FILE

ORGANIZATIONISLINESEQUENTIAL.

在数据部定义字符串变量SELECT-FILE,在文件FILE-LOG打开前动态指定文件路径。

3、数据部(DATADIVISION)。

程序中的变量都在数据部中定义,Cobol中没有全局变量和局部之分。

(变量的类型结构参照5.变量类型)

a.文件节(FILESECTION)

给环境部定义的文件指定一个RECORD变量,读写文件用:

FDFILE-LOG.

01RECORD-LOGPICX(2000).

b.工作存储节

定义程序中用到的临时变量。

a)COBOL变量定义需要加层号(表示层次关系),

·层号从01开始

如:

01IPICX(10).

·组合项

如:

01WORK-AREA.

05NUM-1PIC9(09).

05STR-1PICX(10).

b)层号依次排列顺序为:

01,05,10,15,20,30·······

c.连接节

子程序的参数的定义。

4、过程部(PROCEDUREDIVISION)

程序的主体:

程序的逻辑运算在此操作。

a、每个程序分为四大节(模块),

·前处理(初始化变量,设定初始值等)

·主处理(程序业务处理部分)

·后处理(程序正常结束时的出口)

·错误处理(程序异常结束时的出口)

b、对于子程序,PROCEDUREDIVISION后应列出LINK节中定义的参数。

如:

PROCEDUREDIVISIONUSINGLINK-INPUT-DATALINK-OUTPUT-DATA.

c、程序结束。

·主程序STOPRUN.

·子程序GOBACK.

5、变量类型

COBOL程序的基本变量类型分为两大类字符串型(X)、数值型(9)。

a字符串型

01STRING-APICX(100).

100个字符长的变量,程序可以局部操作一个变量(STRING-A(start:

length)如:

MOVEALL“X”TOSTRING-A(2:

10)

(将变量STRING-A第2位开始10长度的内容全赋为”X”字符)

b数值型

种类

类型

说明

备注

DISPLAY

9(m)

无符号整数,每位占用一个字节,显示或输出到文件时,为零的数位显示”0”

(1<=m<=18)

例如:

01IPIC9(8).

变量I占用8个字节。

I=1时,输出显示时为00000001

S9(m)

带符号整数,每位占用一个字节,符号位不占位,显示时,为零的数位显示”0”,符号显示在最后,输出到文件时,为零的数位显示”0”,符号丢失。

(1<=m<=18)

例如:

01IPIC9(8).

变量I占用8个字节。

I=1时,显示时为00000001+

输出到文件时为00000001

DISPLAY

9(m)V9(n)

无符号小数(小数点不显示,不占位)每位占用一个字节,显示或输出到文件时,为零的数位显示”0”

(1<=m+n<=18)

例如:

01IPIC9(4)V9

(2).

变量I占用6个字节,整数位4位,小数位2位。

I=1.1时,输出显示时为000110

 

S9(m)V9(n)

带符号小数(小数点不显示,不占位)每位占用一个字节,符号位不占位,显示时,为零的数位显示”0”,符号显示在最后,输出到文件时,为零的数位显示”0”,符号丢失。

(1<=m+n<=18)

例如:

01IPIC9(4)V9

(2).

变量I占用6个字节,整数位4位,小数位2位。

I=1.1时,显示时为000110+

输出到文件时为000110

Comp,comp-5,comp-3

9(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<=m+n<=18)

注:

1、对于出力型数值变量,可以用9代替Z,它们的区别是:

结果为零的整数部高位,小数部低位:

Z型变量用空格显示,9型变量用零显示

2、COBOL语言中数值型变量种类很多,针对不同的要求有不同的数值类型。

c、在COBOL变量定义时,可以加入格式字符串字符。

d、不同类型变量间赋值。

整数

1、字符串中数值部分可以作为对应长度的DISPLAY型变量给其它各种数值型变量。

2、DISPLAY型变量(包括出力型变量)被赋值时,超出它表示范围的数可以被接受,但截去超出的高位。

3、COMP型变量被赋值时,超出它表示范围的数不能被接受。

小数

1、DISPLAY型变量(包括出力型变量)被赋值时,超出它表示范围的数可以被接受,但整数部截去超出的高位,小数部截去低位。

2、COMP型变量被赋值时,整数部超出它表示范围的数不能被接受,小数部超出它表示范围的数可以被接受,但小数部截去低位

注:

以上所述赋值变量为任何类型的数值型变量(经过严格测试得出结论)。

e、字符型比较。

·字符串比较时,系统自动截去尾部空格(如“a“=“a”)。

·数字的数值形式和数字字符形式相等(如“1234567890”=1234567890)

·综合以上两点,有“12“=12

二、基本语法:

1、赋值语句MOVE。

a、将一个变量赋给另个变量

moveatob.

b、将一个变量同时赋给另外两个变量。

Moveatobc.

c、将一个变量全部赋为某个字符

moveall“x”toa.

d、对于赋值溢出,截取的方式为.

·字符型变量截去左边的溢出部分。

·数值型变量截去整数部高位、小数部低位的溢出部分。

e、组和项传送,它们的数据结构必须相同

f、对于组合项成员的局部引用,应该如下:

01A-AREA.

  05STR-1PICX(10).

  05STR-2PICX(10).

01B-AREA.

  05STR-1PICX(20).

  05STR-2PICX(10).

MOVESTR-1OFA-AREA(1:

4)TOSTR-1OFB-AREA(1:

4).

3、四则运算

原则上,四则运算不用助记符语句,但对于简单运算(++,--),可采用助记符语句。

a、加法(ADD1TONUM-1)

b、减法(SUBTRACT1FROMNUM-1)

c、其它所有运算均采用COMPUTE语句

COMPUTENUM-1=NUM-2+NUM3*10

运算符如下:

+加

-减

*乘

/除

**指数

在COMPUTE语句中,变量和运算符间至少留有一个空格。

 

4、重定义语句REDEFINES(数据部中使用)

01APICX(10)VALUESPACE.

01BREDEFINESAPIC9(10).

变量A,B使用同一个空间,重定义时,重定义变量必须紧跟着被重定义变量后面,并且在字符串同数值一起重定义时,如果对变量进行初始化,变量会初始化为空格。

5、数组关键词OCCURS

OCCURS整数TIMES.

a.简单数组

01AOCCURS10PICX(30).

b.组合项数组

01A.

05BOCCURS10.

10CPICX(10).

10DPICX(20).

注意:

引用数组中某一元素如下

DISPLAYCOFBOFA

(1)“@@”.

6、连结语句STRING

STRINGA,B,CDELIMITEDBYSIZEINTOD.

·将字符串A,B,C按它们定义长度连接赋给变量D.

STRINGA,B,CDELIMITEDBYSPACEINTOD.

·将字符串A,B,C连接赋给变量D,去掉中间所有的空格.

STRING“AAAAAAA”DELIMITEDBYSIZE

“BBBBBBB”DELIMITEDBYSIZE

BDELIMITEDBYSIZE

INTOD.

·将字符串和字符串变量连接赋给变量D.

7、IF语句

·IF条件

THEN

语句(无“.”结束)

ELSE

语句(无“.”结束)

END-IF.

.

注:

IF语句最多只能使用三层嵌套,条件用括号括起来。

10关系运算符

运算符

含义

>

大于

<

小于

=

等于

<=

>=

NOT=

不等于

注:

判断字符串能否转换为数字。

NUMERICNOTNUMERIC

ISNOTNUMERIC

11、PERFORM语句

PERFORMXXX-RTN.

·调用子节,直到遇到第一个只包含EXIT语句的段中止,回到该调用语句的下一条语句。

EXIT只与它搭配有效。

所以节的定义规定如下:

XXX-RTNSECTION.

语句块········

XXX-EXT.

EXIT.

PERFORMXXX-RTNNTIMES.

·循环调用子节N次

PERFORMXXX-RTNUNTILN>30.

·循环调用子节,直到N大于30。

PERFORMUNTIL表达式

语句·······

END-PERFORM.

·循环调用语句块,表达式判断在语句块前进行。

PERFORMVARYINGXFROMABYBUNTILX>12

语句·······

END-PERFORM.

·循环调用语句块,相当于FOR循环。

12、EVALUATE语句

EVALUATE变量、常量、表达式

WHENANY

TRUE

FALSE

(NOT)常量1THRU(THROUGH)常量2

WHENOTHER.

END–EVALUATE

·ANY:

任何变量、常量值

·TRUE、FALSE:

关系表达式的结果

·(NOT)常量1THRU(THROUGH)常量2:

值(不)在常量1和常量2构成的闭区间

·另外,在WHEN后面可以包含简单的关系表达式。

如:

EVALUATEA

WHEN=>10

EVALUATEB

WHEN=1OR=2OR=3

语句····

WHENOTHER

语句····

END-EVALUATE

WHENOTHER

语句····

END-EVALUATE.

13、另外,不同的COBOL系统提供了不同内部函数,建议少用内部函数,以下提供几个通用的内部函数

·ORD取得字符的ASICII码如:

MOVEFUNCTIONORD(“A”)TONUMBER.

•UPPER-CASE字母小写转换成大写如:

MOVEFUNCTIONUPPER-CASE(STRING(START:

1))TOSTRING(START:

1)

·LOWER-CASE字母小写转换成大写如:

MOVEFUNCTIONLOWER-CASE(STRING(START:

1))TOSTRING(START:

1)

·REVERSE对字符串中所有字符进行倒序如:

MOVEFUNCTIONREVERSE(STRING-1)TOSTRING

·LENGTH取得变量的定义长度,如:

COMPUTELEN=FUNCTIONLENGTH(STRING)

二、PRO*COBOL基本語法

COMPLA使用的PRO*COBOL是ORACLE公司提供的在COBOL程序中嵌入SQL语句的一种方法,使得程序方便地访问操作ORACLE数据库;PRO*COBOL程序经过ORACLE提供的预编译器预编译生成中间COBOL程序后,程序中所有的SQL语句直接调用ORACLE库函数,再经过COBOL编译器同一般COBOL程序一样编译生成各种可执行模块,由于程序中直接调用ORACLE库函数,所以它们访问操作ORACLE数据库的速度很快,基本语法如下。

一、特点。

·所有的SQL或数据库操作相关语句均被括在”EXECSQL”和“END-EXEC”之间,并且它们只能包含一条语句,如:

EXECSQL

SQL语句

END-EXEC.

·所有访问操作数据库的变量都必须是主变量。

·“EXECSQL”,”END-EXEC’及其包含的语句都必须从12列或12列以后开始。

三、数据部内容。

·引用两个对象SQLCA,ORACA.

EXECSQLINCLUDESQLCAEND-EXEC.

EXECSQLINCLUDEORACAEND-EXEC.

·主变量定义。

EXECSQLBEGINDECLARESECTIONEND-EXEC.(主变量定义开始)

EXECSQLENDDECLARESECTIONEND-EXEC.(主变量定义结束)

··主变量都必须定义在这里,具体定义和一般的COBOL变量一样。

··VARCHAR型变量(可变长度).

该变量定义就是在X型变量后加关键字VARYING.如:

05STRINGPICX(100)VARYING.

它实际包含两部分(预编译后的中间COBOL程序可见)

05STRING.

06STRING-LENPICS9(4)COMP.

06STRING-ARRPICX(100).

STRING-LEN表示字符串的实际长度,STRING-ARR表示字符串的实际内容。

SQL语句中,只能用STRING.

从表中得到值时,STRING-LEN自动被赋值。

向表中写入值时,STRING-LEN需要手工指定长度,SQL将STRING(1:

STRING-LEN)部分有效字符串写到表中。

定义主变量时,引用COPY句:

EXECSQLINCLUDEWSIT1101.cpyEND-EXEC.

·游标的定义可以放在数据中。

四、数据部中SQL语句的基本语法

1)、错误扑获

ORACLE错误扑获是一个全局性的标志,在一个事务(在PRO*COBOL中,ORACLE事务以COMMIT或ROLLBACK为分割点)中,后一个错误扑获会覆盖前一个错误扑获设置。

·遇到SQL警告(SQLCODE>0)继续

EXECSQLWHENEVERSQLWARNINGCONTINUEEND-EXEC.

·遇到SQL错误(SQLCODE<0)继续

EXECSQLWHENEVERSQLERRORCONTINUEEND-EXEC.

·遇到SQL错误(SQLCODE<0)跳转

EXECSQLWHENEVERSQLERRORGOTOORA-ERROREND-EXEC.

2)、数据连接

数据库连接在一般的项目开发中用不到,只用于测试程序ドラバ中(不连接外部数据库)

·方式一(USERNAME和PASSWORD分开,如:

USERNAME=“OPS$LAPROC51”PASSWORD=“LAPROC”)

EXECSQL

CONNECT:

USERNAMEIDENTIFIEDBY:

PASSWD

END-EXEC.

·方式二(USERNAME和PASSWORD合并,如:

UID=“OPS$LAPROC51/LAPROC”)

EXECSQL

CONNECT:

UID

END-EXEC.

3)、静态SQL语句

·单条记录的检索

EXECSQL

SELECTENAME,SAL,COMM

INTO:

EMP-NAME,:

SALARY,:

COMMISSION:

COMM-IND

FROMEMP

WHEREEMPNO=:

EMP-NUMBER

END-EXEC.

注:

上例中的COMM-IND为指示变量,在检索操作中每个接受主变量都可指定一个指示变量(9(04)COMP型),它用来判断主变量是不是接受到一个空值(NULL)(主变量不能接受空值),当指示变量为-1时,表示对应的主变量应该接受到一个空值(主变量自己表示不出来)

·多条记录的检索(CURSOR游标)

··游标的定义

EXECSQL

DECLARECUR_NAMECURSORFOR

SELECTMSG_CD,MSG_1,MSG_2

FROMWWWTMSG1

END-EXEC.

游标的定义:

将SQL查询语句声明为一个游标,不调用ORACLE库函数,不会更新SQLCODE的值。

··游标的打开

EXECSQL

OPENCUR_NAME

END-EXEC.

游标的打开:

用游标定义的SQL语句检索数据库,将检索结果生成一个游标对象,(此时游标指针在第一条记录前一位置,无法确定游标中有没有记录)。

··游标中记录的抽取

EXECSQL

FETCHCUR_NAME

INTO:

HST-MSG-CD,:

HST-MSG-1,:

HST-MSG-2

END-EXEC.

游标中记录的抽取:

将游标中的记录抽取到相应的主变量中,一次抽取一条。

··游标的关闭

EXECSQL

CLOSECUR_NAME

END-EXEC.

游标的关闭:

将现有的游标对象释放,游标再次打开前,必须关闭。

·更新

EXECSQL

UPDATEWWWTMSG1

SETMSG_1=:

WK-MSG-1,

MSG_2=:

WK-MSG-2

WHEREMSG_CD=:

WK-MSG-CD

END-EXEC.

·删除

EXECSQL

DELETEFROMWWWTMSG1

WHEREMSG_CD=:

WK-MSG-CD

END-EXEC

·插入

EXECSQL

INSERT

INTOWWWTMSG1(MSG_CD,

MSG_1,

MSG_2)

VALUES(:

WK-MSG-CD,

:

WK-MSG-1,

:

WK-MSG-2)

END-EXEC

·事务的提交

··方式一(释放连接)

EXECSQLCOMMITWORKRELEASEEND-EXEC.

··方式二(不释放连接)

EXECSQLCOMMITWORKEND-EXEC.

·事务的回滚

··方式一(释放连接)

EXECSQLROLLBACKWORKRELEASEEND-EXEC.

··方式二(不释放连接)

EXECSQLROLLBACKWORKEND-EXEC.

·典型的SQLCODE值

··SELECT

1403:

没有检索到记录

··FETCH(游标中记录的抽取)

1403:

游标指针FETCH到游标的尾部

··UPDATE

1403:

没有更新的记录

-60:

死锁

-2049:

由于死锁导致系统超时

··DELETE

1403:

没有删除的记录

-60:

死锁

-2049:

由于死锁导致系统超时

··INSERT

-1:

插入的记录已存在

-60:

死锁

-2049:

由于死锁导致系统超时

·典型ORACLE内部变量

SQLCODE:

SQL语句运行后得到的返回值

SQLERRMC:

SQL语句运行后得到的返回信息

SQLERRD(3):

SQL语句运行处理的记录条数

4)、动态SQL语句

·动态一(直接执行SQL字符串)

··方式一

MOVE"INSERTINTODYN1VALUES('TEST')"TODYNSTMT.

EXECSQLEXECUTEIMMEDIATE:

DYNSTMTEND-EXEC.

··方式二

EXECSQLEXECUTEIMMEDIATE

"INSERTINTODYN1VALUES('TEST')"

END-EXEC.

动态一:

只用于没有任何参数和返回结果的SQL语句操作

·动态二(用于非检索SQL语句)

··方式一(带参数)

MOVE"INSERTINTOEMP(EMPNO,DEPTNO)VALUES(:

V1,:

V2)"

TODYNSTMT-ARR.

EXECSQLPREPARESFROM:

DYNSTMTEND-EXEC.

EXECSQLEXECUTESUSING:

EMPNO,:

DEPTNO1END-EXEC.

其中V1,V2为形参,S为PREPA

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 商务科技

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1