cics编程(编辑修改稿)内容摘要:
l( 8, s )。 sprintf( s, %, Call_fee )。 RsSetCol( 9, s )。 sprintf( s, %, Add_fee )。 RsSetCol( 10, s )。 RsSaveRow()。 }while(1)。 EXEC SQL CLOSE c1。 /*ifdef( SYBASE ) EXEC SQL DEALLOCATE CURSOR c1。 endif*/ sprintf(statusbuf,close cursor code=%d165。 n, )。 PrintStatus(statusbuf)。 ExitEasyCics()。 } 清单 2110 () 这是个典型的 ESQL 程序 (在 ORACLE 中叫 PROC),如果您不熟悉 ESQL编程,不用着急,本书有详细的说明。 由于后面的内容有对本程序的详细分析,这里仅简要说明一下程序的流程。 如果不特别注重程序的移植性、健壮性和调试信息,可以把清单 2110 的程序简化成下面的程序: include include define SQLNOTFOUND 100 EXEC SQL INCLUDE sqlca。 EXEC SQL BEGIN DECLARE SECTION。 char Usr_name[61]。 char Dev_no[9]。 long Call_flg。 char Called_arno[11]。 char Called_no[15]。 13 char Call_dat[21]。 double Call_dur。 double Call_rate。 double Call_fee。 double Add_fee。 char as_dev_no[9]。 EXEC SQL END DECLARE SECTION。 /* */ void main(){ char s[30]。 if( InitEasyCics() ) ExitEasyCics()。 /*Read:*/ GetValue ( NO, as_dev_no )。 /*Write:*/ BeginWrite()。 RsCreate(10)。 RsSetColNameList(Usr_name,Dev_no,Call_flg,Called_arno,Called_no, Call_dat,Call_dur,Call_rate,Call_fee,Add_fee)。 /*可省略 */ EXEC SQL DECLARE c1 CURSOR FOR SELECT , , , , , , , , , FROM auto10a_list, bas_infot WHERE ( = ) AND = :as_dev_no。 EXEC SQL OPEN c1。 do{ EXEC SQL FETCH c1 INTO :Usr_name, :Dev_no, :Call_flg, :Called_arno, :Called_no, :Call_dat, :Call_dur, :Call_rate, :Call_fee, :Add_fee。 if( ( == SQLNOTFOUND) || ( 0) ) 14 break。 else RsAddRow()。 RsSetCol( 1, Usr_name )。 RsSetCol( 2, Dev_no )。 sprintf( s, %lu, Call_flg )。 RsSetCol( 3, s )。 RsSetCol( 4, Called_arno )。 RsSetCol( 5, Called_no )。 RsSetCol( 6, Call_dat )。 sprintf( s, %, Call_dur )。 RsSetCol( 7, s )。 sprintf( s, %, Call_rate )。 RsSetCol( 8, s )。 sprintf( s, %, Call_fee )。 RsSetCol( 9, s )。 sprintf( s, %, Add_fee )。 RsSetCol( 10, s )。 RsSaveRow()。 }while(1)。 EXEC SQL CLOSE c1。 ExitEasyCics()。 } 清单 2111 (简化 ) 清单 2111 所示的程序可以用于 CICS for NT,访问 DB2 数据库。 我们来简单分析一下简化的 程序: 这个程序采用的接口方法是 EasyCICS,所以引入了“ ”头文件。 程序的开始声明了一些宿主变量 (在 EXEC SQL BEGIN DECLARE SECTION。 和 EXEC SQL END DECLARE SECTION。 之间 ),所谓“宿主变量”即可以同时用于 C 语言变量和 SQL变量。 注意,以 EXEC SQL打头的语句都可以通过数据库的预编译程序转化成相应的 C 语言代码。 在执行部分,程序首先调用 InitEasyCics 函数来初始化环境。 接着调用GetValue 函数,此函数通过其参数指定的关键字“ NO”来获取客户机方面通过SetValue 函数来设置的字符串值。 再调用了 BeginWrite 函数,表示开始写通信用的公共数据区,它的真正作用是清除该公共数据区。 接着调用了几个以“ Rs”为字头的函数,表示要设置结果集 (ResultSet)。 函数 RsCreate 表示要创建结果集,其参数是结果集的列数。 函数 RsSetColNameList设置结果集各列的名称,如果客户机仅通过相对位置来获取各列的值 (这样效率 15 更高 ),则可以省略此调用。 接着程序声明并打开 SQL 游标,并在一个循环中不断获取数值存入宿主变量,直到游标最后结束 (==SQLNOTFOUND)或出错 ( 0)。 注意每从数据库取出一行,调用 RsAddRow函数使 EasyCICS的结果集增加一行。 取到宿主变量中的数值可以再通过 RsSetCol函数写到 EasyCICS的结果集中,注意此函数的第一个参数是列序号 (从 1开始 ), 第二个参数是字符串值 (EasyCICS只接受字符串值 )。 各列写完之后,要调用 RsSaveRow 函数存储此行数据。 程序最后在关闭游标后调用了 ExitEasyCics 函数,注意在任何情况下退出CICS 服务程序,必须调用该函数。 只有 C源程序还不够,我们还需要把它编译成执行文件或库文件 (在 Windows NT 系统, CICS 服务程序最终要被编译成为 .DLL文件,即动态连接库 )。 一些程序员习惯于使用集成编译工具,但无法使用在 UNIX 等操作系统。 我们采用更加通用的 makefile 方式进行编译。 以下是在 NT 系统中,编译 TELECOM 服务程序的 makefile(在各种 UNIX 系统,要进行必要的修改 ): all: : db2 connect to cicstest db2 prep bindfile db2 bind db2 grant execute on package tele to public db2 connect reset copy : set CICS_MSC_FLAGS=I$(DB2PATH)165。 include set USERLIB=$(DB2PATH)165。 lib165。 cicstcl e d lC clean: del 清单 2112 再看看 ANSI C 的客户程序,就是清单 2113 展示的 C 程序。 include /* */ void main(){ 16 int i, j, rc, cc, r。 char s[100], c, cr。 r= ConnectServer( CICSNT01, TEST, TEST )。 printf( Connect Code: %d165。 n, r )。 printf(Enter Query Number:)。 scanf( %s, s )。 scanf( %c, amp。 cr )。 BeginWrite()。 SetValue( NO, s )。 r= CallProgramAndCommit(TELECOM)。 if(r){ puts(Call Program Error !)。 return。 } RsOpen()。 rc = RsGetRowNum()。 cc = RsGetColNum()。 for( i=1。 i=rc。 i++ ){ RsFetchRow()。 for(j=1。 jcc。 j++){ RsGetCol(j,s)。 printf(s)。 printf( , )。 } puts()。 } } 清单 2113 以下是运行结果 (按提示输入查询的号码,程序返回查询的结果 ): D:165。 cicstestec Connect Code: 0 Enter Query Number:2020208 宋阮 ,2020208,105011031,0595,01385995193,Apr 17 1999 10:55PM , , , 17 0, 宋阮 ,2020208,105011031,0595,01385990145,Apr 16 1999 12:22PM , , , 0, 宋阮 ,2020208,105011031,0595,01385922328,Apr 9 1999 6:42PM , , , 0, 宋阮 ,2020208,105011031,0595,01385922328,Apr 7 1999 12:50PM , , , 0, 宋阮 ,2020208,105011031,0595,01385995193,Apr 6 1999 12:57PM , , , 0, 宋阮 ,2020208,105011031,0595,01385995193,Apr 5 1999 11:29AM , , , 0, 宋阮 ,2020208,105011031,0595,01385995193,Apr 5 1999 10:08AM , , , 0, 宋阮 ,2020208,105011031,0595,01385995193,Apr 3 1999 3:50PM , , , 0, 宋阮 ,2020208,105011031,0595,01385995183,Apr 3 1999 10:15AM , , , 0, 宋阮 ,2020208,105011031,0595,01385995193,Mar 31 1999 9:48PM , , , 0, 宋阮 ,2020208,105011031,0595,01385995193,Mar 29 1999 4:49PM , , , 0, 宋阮 ,2020208,105011031,0595,01385995193,Mar 27 1999 3:03PM , , , 0, 宋阮 ,2020208,105011031,0595,01385995193,Mar 21 1999 10:48PM , , , 0, 清单 2114 这个程序采用的接口方法也是 EasyCICS,所以我们引入了“ ”头文件 (注意服务程序使用的是叫做“ ”的头文件 )。 程序首先执行了 ConnectServer 函数。 该函数的第一个参 数是 CICS 的系统名称,相当于 CICS 域 (Region)的连接字符串;函数的后两个参数分别是 CICS 的用户名称和口令。 接着根据用户输入的号码调用 SetValue 函数,其作用是把一个字符串作为值赋予一个关键字 (也是一个字符串 ),并存储在公共数据区。 在这里, ‖NO‖是关键字。 注意所谓关键字是用户随意定义的,但最好客户程序和服务程序能相互匹配,如果没有通过 SetValue 函数设置某关键字的值就直接调用 GetValue 函数取此关键字的值,则取出空字符串。 再下面程序执行了 CallProgramAndCommit 函 数,我们一般使用此函数来调用服务程序 (Program)。 该函数的唯一参数就是要调用的 CICS的服务程序名称,在此处,即 TELECOM 程序。 接下来程序调用了一些结果集函数 (以“ Rs”为字头 )。 RsOpen 函数用于打开结果集。 注意, RsCreate 和 RsOpen 函数对是 EasyCICS 传递二维值的标准方法,而。cics编程(编辑修改稿)
相关推荐
TIME : HH:MM CONTR. NR. : 1 BAUD RATE CBUS : 9600 BAUD RATE MMI: 9600 CONTINUE GENERATE DEFAULT DATA SELECT FIXED APPLICATION REQUEST DOWNLOAD. China AreaACS Service
入课程的教学环境,教师和学生只有进入课程后才可以开展相应的 教学和学习活动。 控制面板:如图 “控制面板” 是教师在使用 Blackboard 平台功能的 唯一入口。 本手册下面所描述的 所有 操作都要先进入 “ 控制面板 ” 才能实现。 教师通过它不仅可以上传课件, 而且 可以和学生进行交流互动,批改作业,管理学习小组,跟踪学习情况等等与网络教学相关的所有工作。 图 注销 :如图
REG, *REGION(面域) MT, *MTEXT(多行文本) T, *MTEXT(多行文本) B, *BLOCK(块定义) I, *INSERT(插入块) W, *WBLOCK(定义块文件) DIV, *DIVIDE(等分) H, *BHATCH(填充) 修改命令: CO, *COPY(复制) MI, *MIRROR(镜像) AR, *ARRAY(阵列) O, *OFFSET(偏移) RO
No, thanks. 爱德华.格林:不, 谢谢。 JENNY ROSS: Kate, this is Edward Green. He39。 s our new Marketing Executive. 詹妮. 罗斯:凯特, 这位是爱德华 o格林。 他是新来的销售主管。 KATE MCKENNA: Ah, yes. Edward. Hello. Wele to Bibury Systems
三天内我们就会下订单。 (80) A: This price is quite a bit higher than it was last time . B: We’re sorry ,but we ’ve had a slight price increase here . A: Slight ?I wouldn’t call this slight . B: We’ve had to
电、熔炼、光学、工业工艺用水晶); — 天然金刚石、冰洲石; — 长石、叶蜡石、蛭石、硅线石、凹凸棒石、海泡石 、浮石、沸石、珍珠岩、霞石正长岩、刚玉、伊利石、硅灰石等; — 天然沥青或地沥青; — 矿物性药材; — 其他未列明的非金属矿。 ◆ 不包括: — 人造水晶和人造金刚石(砂)的制造列入 3199(其他非金属矿物制品制造)。 11 其他采矿业 110 1100 其他采矿业 指对地热资源