




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
InspurElectronicInformationIndustryCo.,RestrictedRightsAllInspurSoftware(K-DB®)and sareprotectedbycopyrightlawsandinternationalconvention.Inspursoftwareand saremadeavailableunderthetermsoftheInspurLicenseAgreementandthismayonlybedistributedorcopiedinaccordancewiththetermsofthisagreement.Nopartofthis betransmitted,copied,deployed,orreproducedinanyformorbyanymeans,electronic,mechanical,oroptical,withoutthepriorwrittenconsentofInspurElectronicInformationIndustryCo.,.本软件(K-DB®)使用说明书内容以及程序受、计算机程序保及国际条约的保护。说明书内容和说明程序只在与InspurElectronicInformationIndustryCo.,.签署协议下才可以使用和。事先若Inspur公司同意,不得对本文件及其中部分内容以,例如影印、记录、信息保存与搜索系统的任何电子媒介形式或可读形式进行传送、、发布或修改编制等行为。Nothinginthissoftware andagreementconstitutesatransferofinlectualpropertyrightsregardlessofwhetherornotsuchrightsareregistered)oranyrightstoInspurtrademarks,logos,oranyotherbrandfeatures. isforinformationpurposesonly.The assumesnodirectorindirectresponsibilitiesforthecontentsofthis ,anddoesnotguaranteethattheinformationcontainedinthis certainlegalorcommercialconditions.Theinformationcontainedinthis issubjecttochangewithoutpriornoticeduetoproductupgradesorupdates.The assumesnoliabilityforanyerrorsinthis K-DB®isaregisteredtrademarkofInspurElectronicInformationIndustryCo.,.Otherproducts,titlesorservicesmayberegisteredtrademarksoftheirrespectivecompanies.本软件K-DB®是InspurElectronicInformationIndustryCo.,.的商标。其他所有产品和公司名都是各自所有OpenSourceSoftwareSomemodulesorfilesofthisproductaresubjecttothetermsofthefollowinglicenses.:OpenSSL,RSADataSecurityInc.,ApacheFoundation,n-loupGaillyandMarkAdlerPaulHsieh'shash本产品的部分文件或模块遵循如下证:OpenSSL,RSADataSecurity,Inc.,ApacheFoundation,n-loupGaillyandMarkAdler,Paul 说明书标题InspurK-DBkdESQL/COBOL说明书时间:2015-04-30软件版本K-DB说明书版本 第1章kdESQL/COBOL简 概 游 第2章数据类 概 结构 指示 第3章基础编 概 初始 结束 游 CURRENTOF子 InspurK- 第4章数组变 概 数组变量的 结构体数组变量的 第5章kdESQL/COBOL语 概 DECLARE DECLARE DESCRIBE EXECUTE EXECUTE FETCH GET InspurK-DBkdESQL/COBOL说明 PREPARE SET 第6章kdESQL/COBOL预编译程序选 概 InspurK- 索 InspurK-DBkdESQL/COBOL说明 InspurK- 示 kdESQL/COBOL内程序变量的 指定使用预编译程序选项的COPY或SQLCAESQLINCLUDE文件路 游标的.......................................................................................................................................... 运用SQLERRD(3)INSQLCA中断循 InspurK- 法的数据库管理员(DatabaseAdministrator,以下统称DBA)及应用程序开发员进行说明。关于本说明书 InspurK-DBkdESQL/COBOL说明双引号超>
有下 或下级文 [[
关于本说明书Solaris(SPARC9/SolarisAIX(PPC5L/AIXGNU(X86,64,Linuxkernel2.6Windows(x86)kdESQL/C(需要支持 InspurK-DBkdESQL/COBOL说明介绍了CallLevelInterface,即kdCLI的概念和构成要素、程序结构,以ExternalProcedure介绍了过程模块kdPSM的概念和语法、组件以及编程时所需的控制以使用K-DBActiveStorage(KAS)来管理K-DB文件的管理员作为对象记关于本说明书介绍了执行数据库操作或编写程序时所需的SQL语句 InspurK-DBkdESQL/COBOL说明关于本说明书第1章kdESQL/COBOL简本章将对kdESQL/COBOL的基本概念和开始使用kdESQL/COBOL编程之前需要了解的构成要素进行说明。kdESQL是为了使用ESQL(EmbeddedSQL:内置SQL)而由K-DB提供的接口。一般编程语言能够快速执K-DB中对开发应用中所需的COBOL和C提供kdESQL接口。把COBOL编程语言的ESQL与SQL语句的查询(Query)等数据库处理相关联的语句称作kdESQL/COBOL语句(kdESQL/COBOLState总是以EXECSQL开始,以ENDEXEC.第1kdESQL/COBOL简介]EXECEXECSQLUPDATEEMPSETSALARY=SALARY*1.05WHEREEMPNO=5 PICNUMBER类型中的p指精度(Precisions指刻度(Scale)。 程序变量几乎同时kdESQL/COBOL程序内的变量与COBOL程序的变量来使用。而与数据库操作不相关的变L0101OPERATIONPICX(20)VARYINGOCCURS5 03EMPNOPIC03ENAMEPICInspurK-DBkdESQL/COBOL说明0303SALARYPIC01CNTPIC输入/输出变EXECSQLSELECTENAME,SALARY,ADDRINTOEXECSQLSELECTENAME,SALARY,ADDRINTO:ENAME,:SALARY,:ADDRFROMEMPWHEREEMPNO=第1kdESQL/COBOL简介结构kdESQL/COBOL程序内通常同时使用多个输入变量或输出变量。如[1.3]中,SELECT语句的INTO子像这样,使用多个输入变量或输出变量时,在kdESQL/COBOL程序中也能够像在COBOL编程语言中一样,将个量一结构体使。.利用输出数组变量执行SELECT语句时,每个结果行将在与结果行的个数大小相同的输出数组变量中。下无法提前得知返回的行数,因此只指定一个SELECT语句中INO子句内的变量,是无法所有的行数据的。 InspurK-DBkdESQL/COBOL说明详细内容请参考「3.4 esql_do(esql_do(第1kdESQL/COBOL简介预编译 编译 InspurK-DBkdESQL/COBOL说明K-DBCHAR,VARCHAR,NUMBER,INTEGER,BLOB,第2据 InspurK-DBkdESQL/COBOL说明CHAR,PICX(n),PICX(n)PICX(n)PICPICPICX(n),PICX(n)PICX(n),PICX(n)时,可将该值在PICS9(n)类型的变量中。又因为实际上不存在与DATE、TIME、TIMESTAMP类型第2据预编译L程序时,输入/基准输入/输出数据值时,与列类型进行比较后,认为需要时,则只需转换数据类型。无法转换数据类型可转换的数据类下面是可由K-DB数据类型转换为kdESQL/COBOL数据类型的类型。并包含「2.3.1数据类型的对应」中PICPICCHAR,PICX(n),PICX(n)PICX(n),PICX(n)PICX(n),PICX(n)程序的PICS9(n)类型的变量值在VARCHAR类型的列中,并可利用通过VARYING关键字的0101SAL-STRPICX(8)01EMP-DATEPICX(20)EXECSQLSELECTSALARY,INTO:SAL-STR,:EMP-DATEFROMEMPWHEREEMPNO= Y'SALARY='SAL-STR-ARRINSAL-STR. Y'EMP-DATE='EMP-DATE-ARRINEMP-DATE. InspurK-DBkdESQL/COBOL说明SALARYSALARY=EMP-DATE=2001-12- 容有,无法将在数据库列中的"ABCDE"字符串在程序PICS9(3)类型的变量中进行转换,也无法将程利用内置函数转换数据类,0101SAL-STRPICX(8)EXECSQLSELECTTO_CHAR(SALARY,'$99,999.99')...①INTO:SAL-STR...②FROMWHEREEMPNO= Y'SALARY='SAL-STR-ARRINSAL-STR....③SALARYSALARY=第2据EXECEXECSQLBEGINDECLARESECTIONEND-01OPERATIONPICX(20)VARYINGOCCURS5 03EMPNOPIC03ENAMEPIC03SALARYPIC01CNTPICEXECSQLENDDECLARESECTIONEND-由上述示例可知,DECLARE区域是由EXECSQLBEGINDECLARESECTIONEND-EXEC.开始,由EXECSQLENDDECLARESECTIONEND-EXEC.结束的。MOVEMOVE20TOEXECSQLSELECTENAME,SALARY,ADDRINTO:ENAME,:SALARY,:ADDRFROMEMPWHEREEMPNO= Y'SALARY='在上述示例中,为执行SELECT语句,首先了输入变量EMPNO的值,并完成了kdESQL/COBOL语句。之后,执行SELECT语句,并把返回的执行结果行的每个列值分配到输出变量ENAME、SALAY、ADNA、SL、ADL假如不存在返回SELECT语句的执行结果行,或存在两个以上的返回行,则将发生错误。发生这种情况 InspurK-DBkdESQL/COBOL说明类型。因此应利用PICX(n)类型或VARCHAR(VARYING)类型进行数据类型转换后再使用。EXECEXECSQLBEGINDECLARESECTIONEND-EXEC.01ROWIDPICX(20).EXECSQLENDDECLARESECTIONEND-EXECSQLSELECTROWID,INTO:ROWID,...FROMEMPWHEREEMPNO= Y'rowid='rowidrowid=第2据VARCHAR类型 VARYING关键字。与PICX(n)相同,必须要指定字符串的最大长度。0101USERNAMEPICX(16)010103USERNAME-LENPICS9(4)COMP-03USERNAME-ARRPICVARCHAR类型变量的与一致除ARCHAR类型的变量外,为使用ARCHAR类型的变量,预编译程序应遵从已转换的结构体语法。或YUSERNAME-YUSERNAME-ARRIN] InspurK-DBkdESQL/COBOL说明NULL值的处ARRARREQUALZ""LENSQUAL0第2据0101ADDRPICX(32)EXECSQLSELECTADDRINTOFROMWHEREEMPNO=IF(ADDR-LENEQUALS0) Y'ADDR=NULL' Y'ADDR='ADDR-ARR在kdESQL/COBOL程序的SELECT语句中应指定n个输出变量(n=SELECT语句内作为查询结果返回的列EXECEXECSQLBEGINDECLARESECTIONEND-EXEC.01EMP.03ENAMEPICX(20)03SALARYPICS9(7)COMP-03 PICX(32)EXECSQLENDDECLARESECTIONEND-EXECSQLSELECTENAME,SALARY,ADDRINTO:EMPFROMWHEREEMPNO= InspurK-DBkdESQL/COBOL说明MOVEMOVEZ"Smith"TOENAME-ARRINENAMEINEMP.MOVE35000TOSALARYINEMP.MOVEZ"LosAngeles"TOADDR-ARRINADDRINEXECSQLINSERTINTOEMP(ENAME,SALARY,ADDR)VALUES(:EMP)与一般程序不同,它是只能在kdESQL/COBOL程序中使用的变量,即指示符(INDICATOR)变量。通过指示符变EXECEXECSQLBEGINDECLARESECTIONEND-EXEC.01IND-ENAMEPICS9(4)COMP-5.01IND-ADDRPICS9(4)COMP-EXECSQLENDDECLARESECTIONEND-EXECSQLSELECTENAME,INTO:ENAMEINDICATOR:IND-:ADDRINDICATOR:IND-FROMWHEREEMPNO=例第2据EXECEXECSQLSELECTENAME,INTO:ENAME:IND-ENAME,:ADDR:IND-FROMWHEREEMPNO=0->0101ENAMEPICX(24)01ADDRPICX(36)01IND-ADDRPICS9(4)COMP-01 PICMOVEZ"Peter"TOENAME-ARR.MOVEZ"NewYork"TOADDR-ARR.MOVE-1TOIND-ADDR.MOVE25TOEMPNO.EXECSQLINSERTINTOEMP(ENAME,ADDR,VALUES(:ENAME,:ADDRINDICATOR:IND-ADDR,:EMPNO)END-例EXECEXECSQLINSERTINTOEMP(ENAME,ADDR,VALUES(:ENAME,:ADDR:IND-ADDR,:EMPNO)END- InspurK-DBkdESQL/COBOL说明EXECSQLINSERTINTOEMP(ENAME,ADDR,EMPNO)VALUESEXECSQLINSERTINTOEMP(ENAME,ADDR,EMPNO)VALUES(:ENAME,NULL,:EMPNO)END-EXEC.->=结构体类型的指示构体变量。把这种指示符变量称作结构体类型的指示符(STRUCTURALINDICATOR)。结构体类型的指示符也与构成输出结构体变量相同,指示符变量的顺序应与查询结果列的顺序相同。两PCS9()5类型。EXECEXECSQLBEGINDECLARESECTIONEND-EXEC.01EMP....①...03ENAMEPICX(24)03SALARYPIC03 PICX(32)01EMP-IND....②03ENAME-INDPICS9(4)COMP-03SAL- PICS9(4)COMP-03ADDR-INDPICS9(4)COMP-EXECSQLENDDECLARESECTIONEND-第2据EXECSQLSELECTENAME,SALARY,ADDRINTO:EMPINDICATOR:EMP-INDFROMEMPWHEREEMPNO=②将该结构体变量作为SELECT语句的输出变量使用,同时将与其对应的指示符变量EMP_IND也为结构体变量。定义结构体变量EMP_IND时,将结构体内的成员变量定义为与EMP对应的变量,并将EMP_IND的所有成员变量定义为PICS9(4)COMP-5类型。 InspurK-DBkdESQL/COBOL说明但是,根据预编译程序选项的不同,也会有不同的情况。有关预编译程序选项的内容请参考「第6章kdEL/OBOLEXECEXECSQLBEGINDECLARESECTIONEND-01OPERATIONPICX(20)VARYINGOCCURS5 03EMPNOPIC03ENAMEPIC03SALARYPIC第3础0101CNTPICEXECSQLENDDECLARESECTIONEND-('')注释此外,只能在EXECSQL语句中使用,不能再COBOL编程代码部分里使用。EXECEXECSQLSELECTENAME,SALARY,INTO:EMPFROMWHEREEMPNO= InspurK-DBkdESQL/COBOL说明EXECEXECSQLINCLUDESQLCAEND-kdESQL/COBOL第3础$$kdpcb[3.2指定使用预编译程序选项的COPY或SQLCAESQLINCLUDE$$kdpcbINCLUDE=../includeGeneralCompile,完成预编译的文件,下一步将进行编译过程与过程。虽然[图3.1]中的编译过程与过程是分开$$cob64-xoempemp.cob--lpthread-/lib-lkdertl- InspurK-DBkdESQL/COBOL说明在程序内执行SQL语句后,通过探讨状态变量的值,可以掌握错误或警告情况的发SQLCA(SQL通信区域:SQLCommunicationArea)是任意SQL语句的执行结果的结构体变量。该结构体以SQLCA为名定义在SQLCAESQLINCLUDE文件中,并发生错误或警告情况时,R语句将执行提前拟定的特定操作。使用状态变量或A结构体时,每当执行L语句时都要讨论是否发生错误或警告情况。但●变下面是EXECEXECSQLBEGINDECLARESECTIONEND-01BRANCHpicx(9)varying.01POSTALpicx(10)varying.01REGIONpicx(10)01OPERATIONpicx(20)varyingoccurs5第3础 03IDEpicx(5).03BRpicx(5).03NAMEEpic LER2occurs1003IDEpicx(5).03BRpicx(5).03NAMEEpic01IDKpicx(5)occurs10times.01NAMEKpicx(12)occurs10times.01CDKpicx(5).EXECSQLENDDECLARESECTIONEND-EXECEXECSQLWHENEVERDOCALL"kdesql_error"USINGBYREFERENCESQLCODEINSQLCAEXECEXECSQLCONNECT:USERNAMEIDENTIFIEDBY:PASSWORDEND-与数据库相关的操作中,将使用大量的输入变量与输出变量。在于数据库查询相关联的源代码内游标,而游包含 行代码。 InspurK-DBkdESQL/COBOL说明EXECEXECDECLAREC1CURSORFORSELECT*FROMBRANCHORDERBYBRANCH_CDEXECEXECFETCHC1INTO:BRANCH,:POSTAL,:REGIONEXECEXECSQLROLLBACKWORKTOSAVEPOINTSP1END-EXEC.EXECSQLCOMMITWORKEND-EXEC.IFIFSQLCODEINSQLCAISLESSTHANTHENDIS Y"connectionfailed"第3础本节将对在kdESQL/COBOL程序内执行的SELECT、INSET、UPTE、DELETE语句的方法进行说SaObjc(:)。INTO子句与输出变EXECEXECSELECTAINT:COL-AFROMTAB1有关游标的详细内容请参考「3.4.游标」与「3.5. InspurK-DBkdESQL/COBOL说明0101ENAMEPICX(24)01SALARYPIC01 PICX(32)MOVE20TOEXECSQLSELECTENAME,SALARY*1.05INTO:ENAME,:SALARYFROMWHEREEMPNO= Y'ENAME='ENAME-WHERE子句与输入变EXECEXECSELECTEMP_NO,EMP_NAMEINTO:EMP-A,:NAMEFROMWHEREDEPT_NO=:DEPT-NOSELECT语句内的输入变量虽然可以代替常数来使用,但却不能代替SchemaObject或列等的名称来使第3础0101 PICX(24)01 PIC01COL-NAMEPICX(32)MOVEZ"EMPNO"TOCOL-NAME-ARR.EXECSQLSELECTENAME,SALARYINTO:ENAME,:SALARYFROMEMPWHERE:COL-NAME=0101ENAMEPICX(24)01EMPNOPICMOVE20TOMOVEZ"Peter"TOENAME-EXECSQLINSERTINTOEMP(ENAME,SALARY,VALUES(:ENAME,35000,010103ENAMEPICX(24)03SALARYPIC03EMPNOPICMOVEZ"Peter"TOENAME-ARRINENAMEIN InspurK-DBkdESQL/COBOL说明MOVEMOVE35000TOSALARYINEMP.MOVE25TOEMPNOINEMP.EXECSQLINSERTINTOEMP(ENAME,SALARY,EMPNO)VALUES(:EMP)0101SAL-BOUNDPICMOVE30000TOSAL-EXECSQLINSERTINTOEMP_SUB(ENAME,EMPNO)SELECTENAME,EMPNOFROMEMPWHERESALARY>=:SAL-BOUND0101ENAMEPICX(24)01EMPNOPICEXECSQLUPDATESETENAME=:ENAME,SALARY=SALARY*1.05WHEREEMPNO=:EMPNO0101PIC01SAL-BOUNDPICMOVE20TOMOVE30000TOSAL-BOUND.EXECSQLUPDATEEMPSETSALARY=(SELECTSALARYFROMEMPWHEREEMPNO=:EMPNO)WHERESALARY<=:SAL-BOUND第3础0101SAL-BOUNDPICMOVE25000TOSAL-BOUND.EXECSQLDELETEFROMWHERESALARY<=:SAL-本节将对游标的基本使用方法,以及用于更新或删除的CURRENTOF子句进行说明。最后还将提供使用为了使用游标,应使用DECLARECURSOR来最先与SQL语句关联的游标。游标时,一定要[3.3EXECEXECSQLDECLAREEMP-CURSORCURSORFORSELECTENAME,SALARY,ADDRFROMEMPWHEREDEPTNO= InspurK-DBkdESQL/COBOL说明EXECEXECSQLOPENEMP-CURSOR]EXECEXECSQLFETCHEMP-INTO:ENAME,:SALARY,发生NOTFOUND错误。为实现出现NOTFOUND错误时便能够跳出循环而使用WHENEVER语句。]EXECEXECSQLWHENEVERNOTFOUNDGOTOFETCH-ENDEND-EXEC.EXECSQLFETCHEMP-INTO:ENAME,:SALARY,GOTOFETCH-LOOP. 有关可滚动游标的的详细说明请参考「3.5.可滚动游标」。第3础EXECEXECSQLCLOSEEMP-CURSORCURRENTOF语句与UPDATE语句中使用CURRENTOF为能够在SELECT语句中使用CURRENTOF子句,应包含FORUPDATE子句。FORUPDATE子句向查EXECEXECSQLDECLAREEMP-CURSORCURSORFORSELECTENAME,SALARY,ADDRFROMEMPWHEREDEPTNO=:DEPTNOFORUPDATEOFSALARYEXECSQLOPENCURSOREMP-CURSOREND-EXECSQLWHENEVERNOTFOUNDGOTOFETCH-ENDEND-EXEC.EXECSQLFETCHEMP-INTO:ENAME,:SALARY,EXECSQLUPDATESETSALARY=SALARY*WHERECURRENTOFEMP-GOTOFETCH-LOOP. InspurK-DBkdESQL/COBOL说明 续使用。即,通过使用游标可以查询结果行。但却不能对包含FORUPDATE子句的SELECT语句的 * EXECSQLBEGINDECLARESECTIONEND-EXEC....①01USERPASSPICX(20)VALUE01 PICX(24)01 PIC01 PICX(32)01 PICEXECSQLENDDECLARESECTIONEND-EXECSQLINCLUDESQLCAEND-EXECSQLDECLAREEMP-CURSORCURSORFOR...②SELECTENAME,SALARY,ADDRFROMEMPWHEREDEPTNO=:DEPTNO...③第3础EXECSQLDECLAREEMP-UPDATE-CURSORCURSORFOR...④FROMEMPWHEREDEPTNO=:DEPTNO...⑤FORUPDATEOFSALARYEND-EXECSQLCONNECT:USERPASSEND- Y Y"Enterdeptnumbertoshow:"ACCEPTDEPTNO.EXECSQLOPENEMP-CURSOREND-EXECSQLWHENEVERNOTFOUNDGOTOFETCH-ENDEND-EXEC.EXECSQLFETCHEMP-INTO:ENAME,:SALARY, Y'ENAME='ENAME-ARR',SALARY='SALARY',ADDR='ADDR-ARRGOTOFETCH-LOOP.EXECSQLCLOSEEMP-CURSOREND- Y"Enterdeptnumbertoraisesalary:"ACCEPTDEPTNO.EXECSQLOPENEMP-UPDATE-CURSOREND-EXECSQLWHENEVERNOTFOUNDGOTOFETCH-UPDATE-ENDEND-EXEC.EXECSQLFETCHEMP-UPDATE-CURSORINTO:SALARYEXECSQLUPDATESETSALARY=:SALARY*WHERECURRENTOFEMP-UPDATE-GOTOFETCH-UPDATE-LOOP.EXECSQLCLOSEEMP-UPDATE-CURSOREND-EXEC. MITWORKRELEASEEND-EXEC....⑥... InspurK-DBkdESQL/COBOL说明③,DEPTNO共用于两个游标中。与游标相关联的SELECT语句是以OPEN语句打开游标时执行的,在这之前输入变量的值。因此,即使使用相同变量,执行每个SELECT语句时可能会使用互不相同的以'DECLARE游标名称CURSOR'的格式进行声以'DECLARE游标名称SCROLLCURSOR'与游标相同,都是在DELETE语句和UPDATE语句中使用CURRENTOF子句。语法的编写与使用方法与第3础DECLAREDECLARE游标名称SCROLLEXECEXECSQLDECLAREEMP-SCROLL-CURSORSCROLLCURSORFORSELECTENAME,SALARY,ADDRFROMWHEREDEPTNO=例如,当前游标指向第8个行,执行'FETCHRELATIVE3'时,游标将指向第5个ABSOLUTEEXECEXECSQLFETCHPRIOREMP-SCROLL-CURSORINTO:ENAME,:SALARY,:ADDR InspurK-DBkdESQL/COBOL说明EXECSQLFETCHLASTEMP-SCROLL-CURSORINTO:ENAME,:SALARY,EXECSQLFETCHABSOLUTE3EMP-SCROLL-CURSORINTO:ENAME,:SALARY,:ADDR的是全体行中的第三个行。假如不存在所要的行,那么将返回NOTFOUND错误。 * EXECSQLBEGINDECLARESECTIONEND-EXEC.01USERPASSPICX(20)VALUEZ"kdb/inspur".01 PICX(24)01 PIC01 PICX(32)01 PICEXECSQLENDDECLARESECTIONEND-EXECSQLINCLUDESQLCAEND-EXECSQLDECLAREEMP-SCROLL-CURSORSCROLLCURSOR第3础
SELECTENAME,SALARY,ADDRFROMEMPWHEREDEPTNO=EXECSQLCONNECT:USERPASSEND- MOVE10TODEPTNO.EXECSQLOPENEMP-SCROLL-CURSOREND-1stEXECSQLFETCHFIRSTEMP-SCROLL-CURSORINTO:ENAME,:SALARY,:ADDRlastEXECSQLFETCHLASTEMP-SCROLL-CURSORINTO:ENAME,:SALARY,:ADDR5thEXECSQLFETCHABSOLUTE5EMP-SCROLL-CURSORINTO:ENAME,:SALARY,:ADDR8thEXECSQLFETCHRELATIVE3EMP-SCROLL-CURSORINTO:ENAME,:SALARY,:ADDR7thEXECSQLFETCHPRIOREMP-SCROLL-CURSORINTO:ENAME,:SALARY,:ADDR7thEXECSQLFETCHCURRENTEMP-SCROLL-CURSORINTO:ENAME,:SALARY,:ADDR4thEXECSQLFETCHRELATIVE-3EMP-SCROLL-CURSORINTO:ENAME,:SALARY,:ADDR5thEXECSQLFETCHEMP-SCROLL-CURSORINTO:ENAME,:SALARY,:ADDREXECSQLCLOSEEMP-SCROLL-CURSOREND-EXEC.EXECSQLCOMMITWORKRELEASEEND-EXEC. InspurK-DBkdESQL/COBOL说明第3础第4组EXECEXECSQLBEGINDECLARESECTIONEND-01ENAMEPICX(24)OCCURS50TIMES01SALARYPICS9(5)OCCURS5001 PICX(32)OCCURS50TIMESEXECSQLENDDECLARESECTIONEND-0101ENAMEPICX(24)OCCURS50TIMES01SALARYPICS9(5)OCCURS5001 PICX(32)OCCURS50TIMESEXECSQLSELECTENAME,SALARY,ADDRINTO:ENAME,:SALARY,:ADDRFROMEMPWHERESALARY>= InspurK-DBkdESQL/COBOL说明在上述[例4.1]中,SELECT语句所返回的执行结果行超过50个时,只有50个结果行能够在数组变在SELECT语句数组变量中的执行结果行的实际个数可通过变量SQLERRD(3)INSQLCA得知。下面是在执行SELECT语句后,在可出现的源代码中使用SQLERRD(3)INSQLCA的示例。PERFORMPERFORMVARYINGCNTFROM1BYUNTIL(CNT>SQLERRD(3)INSQLCA) YENAME(CNT)','SALARY(CNT)','ADDR(CNT) Y'numberofreturnedrows='SQLERRD(3)IN)0101ENAMEPICX(24)OCCURS50TIMES01SALARYPICS9(5)OCCURS5001 PICX(32)OCCURS30TIMESEXECSQLSELECTENAME,SALARY,ADDRINTO:ENAME,:SALARY,:ADDRFROMEMPWHERESALARY>=0101DEPTNOPICS9(9)OCCURS50EXECSQLSELECTENAME,SALARY,ADDRINTO:ENAME,:SALARY,:ADDRFROMEMPWHEREDEPTNO=第4组数组变量跳出循环的方法与使用一般变量时不同。其原因是,发生NOTFOUND错误的情况不同。 是,在一般变量与数组变量中,NOTFOUND错误具有以下差别。 因此,在使用数组变量时,应使用SQLCA的变量来跳出循环。与游标一起使用数组变量时,每当执行FETCH语句时,都要在SQLERRD(3)INSQLCA中到目前为止所处理的结果行的累积个数。因此,[4.2]运用SQLERRD(3)INSQLCA0101 PIC01 PIC01BEFORE-COUNTPIC01CURRENT-COUNTPICEXECSQLDECLARECURCURSORFORMOVE0TOBEFORE-COUNT.MOVE0TOCURRENT-COUNT.EXECSQLFETCHCURINTOMOVESQLERRD(3)INSQLCATOCURRENT-IF(CURRENT-COUNT=BEFORE-COUNT)GOTOFETCH-COMPUTECOUNT=CURRERNT-COUNT-BEFORE-PERFORMVARYINGIDXFROM1BY1UNTIL(IDX>COUNT* InspurK-DBkdESQL/COBOL说明MOVECURRENT-COUNTTOBEFORE-COUNT.GOTOFETCH.EXECEXECSQLDECLARECUR1CURSORFOR...EXECSQLDECLARECUR2CURSORFOREXECSQLOPENCUR1END-EXEC.EXECSQLOPENCUR2END-EXECSQLFETCHCUR1INTO:ENAMEEND-SQLERRD(3)=EXECSQLFETCHCUR2INTO:SALARYEND-SQLERRD(3)=30,notEXECSQLFETCHCUR1INTO:ENAMEEND-SQLERRD(3)=40,notEXECSQLFETCHCUR1INTO:ENAMEEND-SQLERRD(3)=60,notEXECSQLFETCHCUR2INTO:SALARYEND-SQLERRD(3)=60,not可滚动游储在SQLERRD(3)INSQLCA中的值的一样却不同。)第4组一般游标的SQLERRD(3IN可滚动游标的SQLERRD(3IN全体结果行的个数。结果行的绝对位置值与SQLERRD(3)INSQLCA值总是大于1。EXECEXECSQLDECLARECURSCROLLCURSORFOREXECSQLOPENCUREND-EXECSQLFETCHCURINTO:ENAMEEND- .SQLERRD(3)=EXECSQLFETCHNEXTCURINTO:ENAMEEND- .SQLERRD(3)=EXECSQLFETCHABSOLUTE11CURINTO:ENAMEEND- .SQLERRD(3)=EXECSQLFETCHRELATIVE20CURINTO:ENAMEEND- .SQLERRD(3)=EXECSQLFETCHABSOLUTE41CURINTO:ENAMEEND- .SQLERRD(3)=EXECSQLFETCHRELATIVE20CURINTO:ENAMEEND- .SQLERRD(3)=EXECSQLFETCHABSOLUTE51CURINTO:ENAMEEND- .SQLERRD(3)= InspurK-DBkdESQL/COBOL说明指示符数符数组变量也与其他变量一样,必须在DECLARE区域内进行。0101PICX(24)OCCURS50TIMES01ADDR-INDPICS9(4)OCCURS50TIMESCOMP-EXECSQLSELECTADDR,INTO:ADDRINDICATOR:ADDR-IND,...FROMEMPWHEREDEPTNO=例 * EXECSQLBEGINDECLARESECTIONEND-EXEC.01USERPASSPICX(20)VALUEZ"kdb/inspur".第4组01 PICX(24)OCCURS30TIMESVARYING....①01 PICS9(5)OCCURS3001 PICX(32)OCCURS30TIMES01 PICEXECSQLENDDECLARESECTIONEND-PICPICPICPICEXECSQLINCLUDESQLCAEND-EXEC. EXECSQLDECLAREEMP-CURSORCURSORFORSELECTENAME,SALARY,ADDRFROMEMPWHEREDEPTNO=EXECSQLCONNECT:USERPASSEND- MOVE10TODEPTNO.EXECSQLOPENEMP-CURSOREND-EXEC.MOVE0TOBEFORE-COUNT.MOVE0TOCURRENT-EXECSQLFETCHEMP-INTO:ENAME,:SALARY,MOVESQLERRD(3)INSQLCATOCURRENT-IF(CURRENT-COUNT=BEFORE-COUNT)GOTOFETCH-END....②COMPUTECOUNT=CURRERNT_COUNT-BEFORE-COUNT.PERFORMVARYINGIDXFROM1BY1UNTIL(IDX>COUNT) Y'ENAME='ENAME-ARR(IDX)...③',SALARY='SALARY(IDX)',ADDR='ADDR-MOVECURRENT-COUNTTOBEFORE- InspurK-DBkdESQL/COBOL说明GOGOTOFETCH.EXECSQLCLOSEEMP-CURSOREND-EXEC.EXECSQLCOMMITWORKRELEASEEND-EXEC.0101ENAMEPICX(24)OCCURS50TIMES01SALARYPICS9(5)OCCURS50MOVE"BROWN"TOENAME(1).MOVE"30000"TOSALARY(1).MOVE"WHITE"TOENAME(2).MOVE"28000"TOSALARY(2).EXECSQLINSERTINTOEMP(ENAME,第4组VALUESVALUES(:ENAME,PERFORMPERFORMVARYINGIDXFROM1BY1UNTIL(IDX>50)EXECSQLINSERTINTO(ENAME,SALARY)010101PICX(24)OCCURS50TIMESPICS9(5)OCCURS5001SALARY-INDPICS9(4)COMP-5OCCURS50EXECSQLINSERTINTOEMP(ENAME, InspurK-DBkdESQL/COBOL说明]0101SALARYPICS9(5)OCCURS5001EMPNOPICS9(9)OCCURS50MOVE"12000"TOSALARY(1).MOVE"22000"TOSALARY(2).MOVE"18000"TOSALARY(3).MOVE"23000"TOSALARY(4).MOVE"30000"TOSALARY(5).MOVE"23401"TOEMPNO(1).MOVE"12089"TOEMPNO(2).MOVE"13560"TOEMPNO(3).MOVE"32109"TOEMPNO(4).MOVE"10094"TOEMPNO(5).EXECSQLUPDATEEMPSETSALARY=:SALARYWHEREEMPNO=:EMPNO例PERFORMVARYINGIDXFROM1BY1UNTIL(IDX>50)EXECPERFORMVARYINGIDXFROM1BY1UNTIL(IDX>50)EXECSQLUPDATEEMPSETSALARY=:SALARY(IDX)WHEREEMPNO=SQLERRD(3)INSQLCA中只由同一个DELETE语句删除的行的个数,因此为满足完整性约束条...第4组0101EMPNOPICS9(9)OCCURS50MOVE"15009"TOEMPNO(1).MOVE"13450"TOEMPNO(2).MOVE"24200"TOEMPNO(3).MOVE"15832"TOEMPNO(4).MOVE"20009"TOEMPNO(5).MOVE"30110"TOEMPNO(6).EXECSQLDELETEEMPWHEREEMPNO=:EMPNOPERFORMPERFORMVARYINGIDXFROM1BY1UNTIL(IDX>50)EXECSQLDELETEEMPWHEREEMPNO=行数。FOR子句出现在EXECSQL的后面,并指定要处理的行数。 InspurK-DBkdESQL/COBOL说明01010101PICX(24)OCCURS50TIMESVARYING.PICS9(5)OCCURS50TIMES.PICS9(9)OCCURS5001ROW-COUNTPICEXECSQLFOR20...①INSERTINTOEMP(ENAME,SALARY,ADDR)VALUES(:ENAME,:SALARY,NULL)MOVE30TOROW-EXECSQLFOR:ROW-COUNT...②UPDATEEMPSETSALARY=:SALARYWHEREEMPNO=:EMPNOEXECEXECSQLFOR(:ROW-COUNT+10DELETEEMPWHEREEMPNO=第4组0101EMPOCCURS5003ENAMEPICX(24)03SALARYPIC03 PICX(32)01EMPOCCURS01EMPOCCURS5003ENAMEPICX(24)03SUB-05SALARYPIC05 PICX(32)010103FIRST-NAMEOCCURS503LAST-NAMEOCCURS501ENAME-ARROCCURS1003FIRST-NAMEOCCURS503LAST-NAMEOCCURS50101EMPOCCURS5003ENAMEPICX(24) InspurK-DBkdESQL/COBOL说明0303SALARYPIC03 PICX(32)EXECSQLSELECTENAME,SALARY,ADDRINTO:EMPFROMWHERESALARY>=EXECSQLINSERTINTO第4组第5章kdESQL/COBOL语(kdESQL/COBOLStatement)是指在kdESQL/COBOL程序中处理SQL查询,及行的插入及更新、删除等指令 \ ►EXECSQL
►
►paam\► ) \
\ ►
►option )
)► )第5kdESQL/COBOL语句EXECSQL、如:小括号(())、逗号(,))此外,逆时针方向移动的箭头是不包含或包含一次以上的情况。在[5.1]中使用逗号图EXECEXECSQLSTMT(param)choice1END-EXECSQLSTMToption(param,param)choice1END-EXEC.EXECSQLSTMT(param,param)choice2END-EXEC. InspurK-DBkdESQL/COBOL说明/►AT \database_name/\►AT► \指定要使用的数据库名称。在想要区分并管理多个数据库连接时使用►FOR► \/ ► 第5kdESQL/COBOL语句DESCRIPTOR名称是在使用DynamicSQL时指向所需DESCRIPTOR的名称。normal_descriptor_name ► ► ►string )MODEANSI(ISO) InspurK-DBkdESQL/COBOL说明指定描述符名称的主量string 描述符的名称包含在单引号 EXECUTEEXECUTEFETCH使用游标来下一行。GET第5kdESQL/COBOL语句DECLAREDECLAREDESCRIBESET \
► \► EXECSQL
)
\ )
\WITH►MAX►
\ \ )► ►string )–. InspurK-DBkdESQL/COBOL说明WITHMAX–stringliEXECEXECSQLALLOCATEDESSCRIPTOR'IN-DESC'END-EXECSQLALLOCATEDESSCRIPTOR'OUT-DESC'END-
EXECSQL
cursor_name –第5kdESQL/COBOL语句–EXECEXECCLOSEEMP-CURSOREND-► ► EXECSQL ► )
►
\
) )请参考「5.3.1.AT子句」。EXECEXECSQLCOMMITEND-EXECSQLCOMMITWORKRELEASEEND- InspurK-DBkdESQL/COBOL说明理员(DBA:databaseadministrator,以下DBA)进行连接。►/► EXEC
► /►using_clause► uuer_d\
/ )\ ►/►\ \
–请参考「5.3.1.AT子句」。第5kdESQL/COBOL语句EXECEXECSQLCONNECT:USERIDENTIFIEDBY:PASSWORDEND-EXECSQLCONNECT:USERPASSINSYSDBAMODEEND- InspurK-DBkdESQL/COBOL说明►/► EXECSQL
\ \ EXECEXECSQLDEALLOCATEDESSCRIPTOR'IN-DESC'END-DECLAREDynamicSQL语句中的游标,应使其与语句名称(StatementName)相关联。这时,语句名称应通过PRE第5kdESQL/COBOL语句 \
► EXECSQL DECLARE ► ► \► CURSOR► ► \►
SCROLL
内容请参考「5.3.1.AT子句」。EXECSQLDECLAREEMP-CURSOR1CURSORFORSELECTEXECSQLDECLAREEMP-CURSOR1CURSORFORSELECTEMPNO,ENAME,SALARYFROMEMPEXECSQLDECLAREEMP-CURSOR2SCROLLCURSOR InspurK-DBkdESQL/COBOL说明SELECTSELECTEMPNO,ENAME,SALARYFROMEMPEXECSQLDECLAREDYN-CURCURSORFORDYN-STMTDECLARE使用多个数据库连接时,用数据库的名称来管理各个连接。使用DECLAREDATABASE的数据库名 EXECSQL►
database_name►database_name► EXECEXECSQLDECLARED1DATABASEEND-EXECSQLCONNECT:USERPASSATD1END-第5kdESQL/COBOL语句想要使用DELETE时,必须要对对象表或视图用于DELETE对象,或拥有DELETEANYTABLE系CURRESTEXECEXECSQLDELETEFROMEMPEND-EXECSQLDELETEFROMEMPWHEREEMPNO=:EMPNOEXECSQLFOR:CNTDELETEFROMEMPWHEREEMPNO=:EMPNOEXECSQLDELETEFROMWHERECURRENTOFEMP-CURSOR InspurK-DBkdESQL/COBOL说明由上述示例可知,除DELETE语句是以EXECSQL开始,以END-EXEC.结束之外,基本与一般SQL语 \ EXECSQL► ► ►statement_name _) _) ► ► INTO
_SELECT )) BINDVARIABLES默认值SELECTLISTFOR。SELECTLIST EXECEXECPREPAREPSTMTFROM:QUERY-STR第5kdESQL/COBOL语句EXECEXECSQLDECLAREEMP-CURSELECTEMPNO,ENAME,SAL,COMMFROMEMPWHEREDEPTNO=:DEPT-NOEXECSQLDESCRIBEBINDVARIABLESFORPSTMTINTOBIND-DESCEXECSQLOPENEMP-CURUSINGBIND-DESCEND-EXEC.EXECSQLDESCRIBESELECTLISTFORPSTMTEXECSQLFETCHEMP-CURINTOSELECT-DESCRIBEDESCRIBEDESCRIPTOR是描述符中主量信息时使用的语句。但是,该语句只能在ANSI类型ansidescribe \►EXECSQL
\►
/ ) \► ) )/ \ \► ►DESCRIPTORdescriptor ► / ) InspurK-DBkdESQL/COBOL说明 EXECEXECSQLDESCRIBEINPUTSUSINGDESCRIPTOR'IN-DESC'END-EXECSQLDESCRIBEOUTPUTSUSINGDESCRIPTOR'OUT-DESC'END-第5kdESQL/COBOL语句►r► EXECSQL
►\ ►\
►►
►UING► _), ,
► ► }►
/► }USING InspurK-DBkdESQL/COBOL说明EXECEXECSQLEXECUTESQL-STMTEND-EXECSQLEXECUTESQL-STMTUSING:EMPNO,:DEPTNOEND-EXEC.EXECSQLFOR:CNTEXECUTESQL-STMTUSING:EMPNOINDICATOR:EMPNO-INDEXECUTE►EXECSQL►EXECUTE ► ► \ ► \ DESCRIPTOR _)
_)\ \\
►► \ DESCRIPTOR _)
_)\ \–第5kdESQL/COBOL语句–EXECEXECSQLEXECUTESUSINGDESCRIPTORINTODESCRIPTOREXECUTEEXECUTEIMMEDIATE是在备动态SQL语句直接执行时使用的语句。通过该语句要执行的SQL语句 \► EXECSQL \:host_variable ►string ► ►/\\ InspurK-DBkdESQL/COBOL说明string EXECEXECSQLEXECUTEIMMEDIATE:SQL-STMTEXECSQLEXECUTEZ'SELECTEMPNO,ENAME,SALARYFROMEMP' \ \►EXEC\
/►
►\/
►/► ►INTO /, ,\ / \\/USING► / 第5kdESQL/COBOL语句►T /►RIOR / _) ►T \► ►ABSOLUTE► _)►RELATIVE ► ► }►
/► }只数组变量大小的行。详细内容请参考「5.3.2.FOR子句」。指定结构值的主量USING主量必须已为可以PICX(n)类型等字符串的类型 InspurK-DBkdESQL/COBOL说明ABSOLUTE当position_clause的值为负数时,则向前移动。例如,当前游标指向第8个'ETCHIE-3个行。–EXECEXECSQLFETCHEMP-CURSORINTO:EMPNO,:ENAMEEXECSQLFETCHEMP-INTO:EMPNO,:ENAME:ENAME-IND第5kdESQL/COBOL语句EXECSQLFOR:CNTFETCHEMP-CURSORINTOEXECSQLFOR:CNTFETCHEMP-CURSORINTO:EMPNO-ARRAY,:ENAME-ARRAYFETCH ►EXEC
► ► ►
► ►DESCRIPTOR►
► \只数组变量大小的行。详细内容请参考「5.3.2.FOR子句」。主量必须已为可以PICX(n)类型等字符串的类型 InspurK-DBkdESQL/COBOL说明EXECEXECSQLFETCHC1INTODESCRIPTOR'OUT-DESC'END-GETGETDESCRIPTOR是在指定的描述符中所需信息时使用的语句。
►/ EXECSQL
\ ►VALUE , , ount
► \► :host_variable:host_variable item_name 第5kdESQL/COBOL语句►E ► INDICATO\ _) ►DATA\ ►CHARACTER_SET_NAE ►OCTET_LENGT\ ►RETURNED_LENGTH _)►EUND_CE_ENGH_) ►PRECISIO\ ►E ►NULLABL\ _) _)►AME –大小时,只数组变量大小的行。详细内容请参考「5.3.2.FOR主量必须已为可以PICX(n)类型等字符串的类型
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 终身电器维修合同
- 合同管理风险评估工具集
- 读后感西游记读后感250字(9篇)
- 工程施工劳务协议
- 民间艺术二胡800字11篇
- 意外的失败350字12篇
- 营销团队活动策划执行效果评估模板
- 知识产权保护申请及流程工具
- 共享出行平台使用协议用户服务协议
- 2025年村级沼气碳汇管理员招聘笔试预测试题及答案
- GB/T 9871-2008硫化橡胶或热塑性橡胶老化性能的测定拉伸应力松弛试验
- GB/T 26480-2011阀门的检验和试验
- GB/T 19861-2005丙烯酸系阴离子交换树脂强碱基团、弱碱基团和弱酸基团交换容量测定方法
- GB/T 11085-1989散装液态石油产品损耗
- GB 30000.3-2013化学品分类和标签规范第3部分:易燃气体
- 《材料力学》说课-课件
- (完整版)沪教牛津版小学一至六年级英语单词汇总(最新)
- JJF 1587-2016 数字多用表校准规范-(高清现行)
- 完整课件-西方经济学下册(第二版)
- 机械制图教学通用课件(全套)
- 天星择日的基本原理
评论
0/150
提交评论