您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > 第12章 SQL语句
第12章SQL语句12.1嵌入式SQL语句12.2动态SQL语句12.1.1Select语句格式:SELECTcol1,col2,…,colnINTO:var1,:var2,…:varnFROMtable_name[WHEREcondition_expression][USINGtransaction_object];功能:从数据库中检索第一条满足条件的记录,并将结果存放到变量var1、var2、…、varn中。12.1.1Select语句例如,从表student中查找name为“李华”的记录,如果找到的话,则将其id、sex、math的值存入变量s1、s2、m1中。程序如下:strings1,x1chars2intm1x1='李华'selectid,sex,mathinto:s1,:s2,:m1fromstudentwherename=:x1usingsqlca;//这里有一个分号在上面的程序中,并没有用Datawindow,而是用嵌入式SQL语句从数据库中获取了所要的数据。不过,只能读取一条记录。要处理多条记录,必须用游标。12.1.2Insert语句格式:INSERT[INTO]table_name[(col1,col2,…,coln)]VALUES(v1,v2,…,vn)[USINGtransaction_object];其中:功能:在表table_name中插入一条记录,各列的值依次分别为v1、v2等,若某列的列名未给,则值为NULL。注意:如所有的列名都未给,则在Values中必须依次给出所有列的值。给出的值的类型必须与对应的列的类型相一致。12.1.2Insert语句例:在表student中插入一条记录,其列id、name、sex、math的值分别为‘99690508’、'张伟'、’f’、89,其余列的值为NULL。程序如下:strings_id,s_names_id=‘99690508’s_name='张伟'insertstudent(id,name,sex,math)values(:s_id,:s_name,’f’,89);例:在表student中插入一条记录,其列id、name、sex、class、age、math的值分别为‘99690509’、’胡圆圆’、’m’、null、null、96、null。程序如下:Insertstudentvalues(‘99690509’,’胡圆圆’,’m’,null,null,96,null)usingtransaction_object;12.1.3Update语句格式:UPDATEtable_nameSETcol1=v1[,col2=v2,…,coln=vn][WHEREcondition_expression][USINGtransaction_object];其中:功能:更新表table_name中满足条件的记录,使列col1的值为v1、列col2的值为v2等。注意:如不给出条件,则更新表中所有行。例如,将表student中所有姓王的学生的数学成绩变为0。程序如下:intm=0updatestudentsetmath=:mwherenamelike'王%';12.1.4Delete语句格式:DELETEFROMtable_name[WHEREcondition_expression][USINGtransaction_object];其中:功能:删除表table_name中满足条件的记录。注意:如不给出条件,则删除表中所有记录。例如:删除表student中列math的值大于30但小于60的记录。程序如下:intm1=30,m2=60deletefromstudentwheremath:m1andmath:m2;12.2.1类型一格式:EXECUTEIMMEDIATEsqlstatement[USINGtransaction_object];其中:sqlstatement是一个内含SQL语句的字符串;transaction_object表示当前连接数据库的事务处理对象,默认值为SQLCA。这种类型的动态SQL语句通常用于执行数据操作语句(例如定义表、删除表等)以及插入、更新和删除记录。因为没有返回值,所以不好用来查询数据(Select)。例如,在当前数据库创建一新表teacher,有三列:列t_id为char型,宽度为10,NULL值为No;列t_name为char型,宽度是20,NULL值为Yes;列t_age为integer型,NULL值为Yes。程序如下:stringmysqlmysql=“CREATETABLEteacher”&+“(t_idchar(10)notnull,”&+“t_namechar(20)null,”&+“t_ageintegernull)”EXECUTEIMMEDIATE:mysqlUSINGSQLCA;12.2.1类型一例:在表student中插入一条记录,其列id、name、math的值分别为‘99690511’、'董晓丽'、93,其余列的值为NULL。程序如下:stringmysql,s_id,s_nameintmm=93s_id=”99690511”s_name=”董晓丽”mysql=”INSERTINTOstudent(id,name,math)values(‘”mysql=mysql+s_id+“’,’”+s_name+“’,”+string(m)+”)”EXECUTEIMMEDIATE:mysql;12.2.2类型二格式:PrepareDynamicStagingAreaFromsqlstatement[USINGtransaction_object];ExecuteDynamicStagingAreaUsing[para_list];其中:sqlstatement是一个内含SQL语句的字符串,用问号(?)代表所需参数transaction_object表示当前连接数据库的事务处理对象,默认值为SQLCADynamicStagingArea是PowerScript提供的一种数据类型,这种类型的变量用来存储动态SQL语句所用的信息。通常就用PowerScript预定义的全局变量SQLSA,不必另外定义。para_list是参数列表,各参数对应于sqlstatement中的问号。这种类型的动态SQL语句通常也用于执行数据操作语句以及插入、更新和删除记录。因为没有返回值,同样不好用来查询数据(Select)。类型二与类型一的功能差不多,主要区别在于类型二可以带输入参数,因而使用起来比类型一要方便。12.2.2类型二例如,在表student中插入一条记录,列id、name、math的值分别为”99690513”、”杨关”、97,其余列的值为null。程序如下:intmstrings_id,s_name,sqlstrsqlstr=”INSERTINTOstudent(id,name,math)VALUES(?,?,?)”PREPARESQLSAFROM:sqlstrUsingSQLCA;m=97s_id=”99690513”s_name=”杨关”EXECUTESQLSAUSING:s_id,:s_name,:math;比较例7和例5,可以看到例7要方便一点,特别当涉及的参数及类型较多时,用类型一的方法需要较多的转换函数,字符串的构造相当复杂,而类型二的方法则简洁得多。12.2.3类型三类型三有两种形式:使用游标和使用存储过程。介绍使用游标的方法。格式:DECLAREmycursorDYNAMICCURSORFORDynamicStagingArea;PREPAREDynamicStagingAreaFROMsqlstatement[USINGtransaction_object];OPENDYNAMICmycursor[USINGpara_list];FETCHmycursor|INTOvar_list];CLOSEmycursor;其中:mycursor是游标名。DynamicStagingArea这种类型的变量用来存储动态SQL语句所用的信息。通常就用PowerScript预定义的全局变量SQLSA,不必另外定义。sqlstatement是一个内含SQL语句的字符串,用问号(?)代表所需参数。para_list是参数列表,各参数对应于sqlstatement中的问号。var_list是用户在PowerScript中定义的变量,这里引用时应在变量名前加冒号transaction_object表示当前连接数据库的事务处理对象,默认值为SQLCA12.2.3类型三DECLARE语句说明动态游标,PREPARE准备动态SQL,OPEN打开动态游标,FETCH读取一行数据,如果需要读取多行数据,那么需要反复执行FETCH语句。最后CLOSE语句关闭动态游标。类型三主要用于实现动态查询(Select),以弥补类型一和类型二的不足。但类型三的输入和输出参数的个数及含义在设计时必须确定。12.2.3类型三例:下面的程序统计表student中class等于“996905”的学生的math和chinese平均成绩。Decave_math=0,ave_chinese=0,s_math,s_chineseIntm=0//m表示参加统计的学生人数Stringmysql,mycur,s_classs_class=”996905”mysql=”selectmath,chinesefromstudentwhereclass=?”DECLAREmycurDYNAMICCURSORFORSQLSA;PREPARESQLSAFROM:mysqlUSINGSQLCA;OPENDYNAMICmycurUSING:s_class;FETCHmycurINTO:s_math,:s_chinese;DOWHILEsqlca.sqlcode=0Ave_math+=s_mathAve_chinese+=s_chineseM++FETCHmycurINTO:s_math,:s_chinese;LOOPCLOSEmycur;Ave_math=ave_math/mAve_chinese=ave_chinese/m……12.2.4类型四第四类动态SQL语句最复杂、功能也最强,它能够弥补类型三的不足,即输入和输出参数的个数及含义可以动态定义。同类型三一样,类型四也有两种形式:使用游标和使用存储过程。这里我们就介绍使用游标的方法,使用存储过程与此类似。格式:DECLAREcursorDYNAMICCURSORFORDynamicStagingArea;PREPAREDynamicStagingAreaFROMsqlstatement[USINGtransaction_object];DESCRIBEDynamicStagingAreaINTODynamicDescriptionArea;OPENDYNAMICcursor[USINGDESCRIPTORDynamicDescriptionArea]FETCHcursorUSINGDESCRIPTORDynamicDescriptionArea;CLOSEcursor;12.2.4类型四其中:cursor是游标名DynamicStagingArea这种类型的变量用来存储动态SQL语句所用的信息。通常就用PowerScript预定义的全局变量SQLSA,不必另外定义。sqlstatement是一个内含SQL语句的字符串,用问号(?)代表所需参数DynamicDescriptionArea也是PowerScript提供的一种数据类型,这种类型的变量用来存储类型四的动态SQL语句所用的输入和输出参数信息。通常就用PowerScript预定义的全局变量SQLDA,不必另外定义。transaction_object表示当前连接数据库的事务处理对象,默认值为SQLCA类型四主要用于实现动态查询(Select),以弥补类型三
本文标题:第12章 SQL语句
链接地址:https://www.777doc.com/doc-3401132 .html