内容发布更新时间 : 2024/11/13 14:48:37星期一 下面是文章的全部内容请认真阅读。
过程,plan包括程序中所有使用的SQL语句,在执行的时候,CICS程序可以通过plan访问DB2的数据。这些plan位于DB2内部,在CICS连接DB2的时候,每个线程都要指定一个相应的plan。在CICS中,定义DB2CONN的时候,在pool的线程的属性中,有相应的plan的名称;定义DB2ENTRY的时候,在entry的线程的属性中,有相应的plan的名称。
一.CICS的程序访问DB2数据的时候,需要做下面的一些准备工作。
1. 第1步,CICS的程序做DB2的预编译。在此步骤中,DB2的预编译建立DBRM(database request model),包括程序中所有的SQL语句的信息。
2. 第2步CICS的语句翻译,第3步编译,第4步链接都是CICS程序的通常步骤,无论是否访问DB2。在第4步链接的时候,如果访问DB2,会包括DSNCLI(CICS DB2 language interface module)。
3.如果访问DB2,一个附加的步骤是第5步bind,Bind过程需要DB2和第1步生成的DBRM,据此产生plan,程序就可以访问DB2了。任何 CICS的应用程序访问DB2,都需要bind过程。Bind过程是将DBRM中涉及的SQL语句放进一个操作的表格,并被翻译成DB2运行SQL语句使用的control structures。作为结果,可以放到一个package中,或者直接放到一个plan中。 二.Plans 和packages的介绍应用程序在执行的时候,访问DB2
数据是通过plan来进行的。如果由DBRM得到的可操作的SQL语句直接放入一个plan中,我们称作DBRM直接bind到plan。另外,还可以将由DBRM得到的可操作的SQL语句放入一个package中(使用BIND PACKAGE 命令),之后,将有联系的packages放入一个集合中,再把集合(或者多个package)bind到一个plan中。相应的DBRM可以是服务一个应用程序或多个应用程序。另一方面,当plan生成后,需要相应的维护。在一个应用程序或多个应用程序中,如果修改了SQL语句,就需要重新生成相应的DBRM。在plan生成时,采用的是DBRM直接bind到plan的话,就需要把此plan中所有的DBRM重新bind,包括修改的应用程序和没有修改的应用程序。当plan在 bind时,应用程序是不能通过它来访问DB2的。在plan生成时,采用的是DBRM bind到package的话,只需要把修改的应用程序的DBRM重新bind到package(和原来package的名字要求一致)中,就可以了,不用再bind到plan。Plan中其他的packages不需要做任何的操作。当package在bind时,不使用此package的应用程序可以通过plan访问DB2。在CICS环境中,定义连接DB2CONN(pool thread)和DB2ENTRY(entry thread)时,会指定使用的plan。当CICS的应用程序访问DB2的数据时,会告诉DB2要使用的plan,DB2再找到plan,对数据进行操作。entry thread指定的plan,采用的是DBRM直接bind到plan的话,当对某个程序修改后,bind时,使用此DB2ENTRY的所有CICS
交易,就不能访问DB2的数据。pool thread指定的plan,采用的是DBRM直接bind到plan的话,当对某个程序修改后,bind时,所有的CICS交易(没有指定使用entry thread),就不能访问DB2的数据,影响是比较大的。所以,避免将DBRM直接bind到plan中,而采用将各自的DBRM bind到不同的package中,是一个很好的选择。
3.SQL语句中各个子句执行的顺序。 order by 永远要写在sql语句的最后一条。 1、
FROM 子句。2、WHERE 子句。3、GROUP 子句。4、
HAVING 子句。5、SELECT 子句。6、ORDER BY 子句。 4.QSAM和VSAM的ESDS有什么区别?
在用法上基本上没有区别。QSAM是顺序数据集。VSAM的ESDS是VSAM数据集
使用上ESDS用有VSAM数据集的一些特性,如可以扩展123次,而QSAM的只可以16次。从数据访问方式上,两者基本相同,都是顺序访问。
5.CALL(Static CALL,Dynamic CALL) & LINK的区别。 Be aware that CALL does not mean the called module is part of the load module. That is only true if it is a Static call. Dynamic calls do not include the called routine in the load module.
This question must be related to CICS since COBOL does not have a LINK statement. There are distinctions as listed below:
Static CALL: Called module is part of the load module. CICS knows nothing about it and doesn't get involved with the communication between the modules.
Dynamic CALL: Called module is not part of the load module. CICS needs a PPT entry for both the called and calling program. Under the covers, CICS treats it like a LINK request. Arguments are passed as with a static call.
LINK: CICS command-level request to pass control to another module with a return back to the caller. Arguments are passed in a COMMAREA.
6.动态的 SQL和静态的SQL的区别?
dynamic SQL: sql statements that are prepared and executed within an application program while the program is executing. In dynamic SQL ,the SQL source is contained in host language variables rather than being coded into the application program.The SQL statement can change several times during the application program's execution. static SQL: SQL statements,embedded within a program, that are perpared during the program perparation process(before the program is executed )after being perpared,the SQL statement does not change(although values of host variables that are specified by the statement might chang).
7.COBOL & DB2程序的编译过程是哪几步?BIND是做什么用
的?Package & plan 如何理解的?
4部 DB2 pre-compiler (if embedded SQL used), CICS translator (if CICS program), COBOL compiler, Link editor, binding the DBRMs using the package or plan.
预编译时把SQL语句全部提出来,通过绑定放到DBRM指定的PLAN中,再把没有SQL语句的程序编译成机器语言,执行时把机器语言和PLAN连接起来。PLAN中存放的是访问路径。 a) 预编译作业步:检查SQL语句并产生数据库请求模块;检查主机变量;
b) COBOL作业步:检查COBOL程序的语法及语义; c) 连接作业步:检查CICS命令和语法,产生可执行模块; d) 绑定作业步:BIND PLAN/PACKAGE,绑定COBOL和DB2;
COBOL DB2的编译过程有预编译,编译,链接和绑定。 预编译:是DB2的预编译,对SQL语句进行处理,把源程序中的SQL语句提取出来到DBRM。
编译: 是COBOL的编译,对没有SQL语句的源程序进行正常的COBOL的编译。
连接: 对源程序进行连接,生成编译后的可执行模块。 绑定: 对产生出来的可执行程序模块和生成的PLAN进行绑定
BIND的作用是检查DB2的语法,并选择最优的路径去访问