PowerScript SQL语句
PowerScript支持在脚本中使用标准的嵌入式SQL和动态SQL语句。还支持在SQL语句中使用数据库管理系统的语句、函数和保留字。
在SQL中任何地点都可以使用常量和任何合法的变量,但使用变量时必须在变量名前加冒号,多个变量或常量用逗号分隔,例如 :
INSERT INTO EMPLOYEE( SALARY,AGE ) VALUES ( 18900, 30); INSERT INTO EMPLOYEE ( SALARY, AGE) VALUES( :Sal_var,:Age_var);
PowerBuilder 支持指示变量(indicator variable),在检索数据库后可以使用指示变量判断返回的数据是否空值或者发生了转换错误。例如下面是未加指示变量的情况:
:Name, :Address , :City
下面是在上一行中加入指示变量后的情况:
:Name :IndvName,:Address :IndvAddress,:City :IndvCity
其中在变量名后用空格为分隔的为该变量的指示变量。
指示变量保存的是一个Integer型整数,0表示有意义的发空值,-1表示空值 -2表示转换错误。
脚本中,可以通过检测事务对象的SQLCode属性,判断SQL语句对数据库操作是否成功,进行错误处理。SQLCode的属性值及意义如下表所示:
属 性 |
意 义 |
0 |
成功 |
100 |
检索行未找到 |
-1 |
语句错误,用SQLErrText或SQLDBCode获取详情 |
可以在脚本和函数中编写SQL语句。创建标准SQL语句需要先说明作用域为Global,Instance,Shared或者Local型的游标或过程,其方法与说明变量相同。
COMMIT
COMMIT语句的语法格式为:
COMMIT [USING TransactionObject];
TransactionObject代表自上一次COMMIT、ROLLBACK或者CONNECT操作以来的需要永久更新的数据库操作的事物对象的名称。该子句仅在操纵除默认事务对象(SQLCA)以外的事务对象的需要。该语句会关闭所有的游标和过程,但不会引起连接中断。
CONNECT
CONNECT语句的语法格式为:
CONNECT [USING TransactionObject];
TransactionObject代表包含数据库连接信息事务对象名称。连接默认事务对象SQLCA,在对数据库进行任何的操作之前,必须首先使用CONNECT语句连接数据库。
DELETE
DELETE删除某事务对象中的表中的数据。其语法格式为:
DELETE FROM TableName WHERE Criteria
[USING TransactionObject];
TableName代表将要删除的数据的持有表,Criteria指明删除的标准,USING TransectionObject指明使用的事务对象,缺省表示使用SQLCA。
删除游标中当前数据和与之对应的表中的数据,可以使用下面的DELETE语句。
DELETE FROM TableName WHERE CURRENT OF CursorName
TableName是持有要删除数据的表的标识符,CursorName是与之对应的游标名。
DBMS-specific 并不是所有的DBMS都支持DELETE Where Current of Cursor语句。
DISCONNECT
DISCONNECT首先执行COMMIT语句,然后与数据库解除连接。其语法格式为:
DISCONNECT [USING TransactionObject];
INSERT
INSERT语句在数据库中插入一条记录。其语法格式为:
INSERT INTO TableName(FieldName[,...])
VALUES (ValueOfField[,...])
ROLLBACK
ROLLBACK语句表示放弃自上一个COMMIT、ROLLBACK或者CONNECT语句以来的所有数据库操作,并关闭所有的游标和过程。其语法格式为:
ROLLBACK [USING TransactionName];
其中TransactionObject代表在使用非默认事务对象时的事务对象名。
SELECT
SELECT语句检索一条记录,如果找到多于一条的记录,则发生错误。其语法格式为:
SELECT FieldOFTableList
INTO VariableList
FROM TableName
WHERE Criteria
[USING TransactionObject];
其中FieldOFTableList代表接收数据的变量名列表,TableName代表被检索的表名,Criteria是检索条件,TransactionObject代表在使用非默认事务对象时的事务对象名。
SELECTBLOB
SELECTBLOB检索blob型数据,找到多条符和查询条件的数据时,事务对象状态属性将指明错误。其句法为:
SELECTBLOB BlobFieldOFTableList
INTO VariableList
FROM TableName
WHERE Criteria
[USING TransactionObject];
其中FieldOFTableList代表blob型字段名列表,VariableList代表接受数据的blob变量名列表,TableName代表被检索的表名,Criteria是检索条件,TransactionObject代表在使用非默认事务对象时的事务对象名。
UPDATE
UPDATE修改指定的数据,其句法为:
UPDATE TableName
SET FieldName = VarName
WHERE Criteria
[USING TransactionObject];
用下面的UPDATE语句可以修改与游标当前所指对应的记录,其句法为:
UPDATE TableName
SET FieldName = VarName
WHERE CURRENT OF CurSortName;
[USING TransactionObject];
TransactionObject是包含需要接触连接数据库信息的事务对象。
UPDATEBLOB
UPDATEBLOB语句修改blob型数据。格式为:
UPDATEBLOB TableName
SET BlobColumn = BlobVariable
WHERE Criteria
[USING TransactionObject];
其中Tablename指需修改blob所在的表,BlobColumn指blob数据所在的列名,BlobVariable代表包含blob数据的变量。
OPEN Cursor
OPEN语句打开了说明的游标,并执行了相应的SQL语句。其语法格式为:
OPEN CursorName;
其中CursorName代表游标名。
INSERT
INSERT语句在数据库中插入一条记录。其语法格式为:
INSERT INTO TableName(FieldName[,...])
VALUES (ValueOfField[,...])
[USING TransactionObject];
FETCH
FETCH语句从游标或者过程中读取当前的记录,并把它们存储在指定的变量当中。数据库支持的情况下,用户还可以使用FETCH FIRST、FETCH PRIOR或FETCH LAST语句。FETCH语句的语法格式为:
FETCH Cursorname | Procedure INTO HostVariableList;
其中HostVariableList代表存储数据库记录的变量列表。
EXECUTE
EXECUTE语句执行一个已说明的过程,在这里不需要指明事务对 象,因为在说明过程时事务对象已经指明。EXECUTE的语法格式为:
EXECUTE ProcedureName;
其中ProcedureName指明要求执行的过程的名字。
DECLARE Procedure
DECLARE Procedure语句的语法格式为:
DECLARE ProcedureName PROCEDURE FOR
StoredProcedureName
@Praram1 = Value1 , @Param2 = Value2 , ......
[USING TransactionObject];
ProcedureName代表过程名,可以使用任何PowerBuilder接受的标识符,StoredProcedureName 代表数据库中保存的过程,@Praram1是StoredProcedureName过程的参数,在@Praram1后的VALUE1是它的初始化值,USING TransactionObject子句指明引用的事务对象,如果缺省该子句,表示使用默认事务对象SQLCA。
DECLARE Cursor
DECLARE Cursor语句的语法格式为:
DECLARE CursorNsme CURSOR FOR SelectStatement
[USING TransactionObject];
CursorName代表游标名,可以使用任何有效的PowerBuilder标识符。SelectStatement代表SELECT语句。除使用默认事务对象SQLCA外的事务对象需要使用USING TransectionObject指明使用的事务对象。
这个语句为指定的事务对象说明一个游标,是一个不可执行语句。用户可以使用该语句按照与说明变量类似的方法,说明某事务对象的游标。
例如,下面说明了一个名为CUR的游标:
DECLARE CUR CURSOR FOR
SELECT database.field1, database.field2
FROM database
WHERE database.field >= 36;
CLOSE Procedure
CLOSE Prodedure语句的语法格式为:
CLOSE ProcedureName;
关闭SQL名为ProcedureName的过程,这一语句只能在使用EXECUTE执行了该过程后关闭该过程的时候才能使用。用户不能对使用USING TransactionObject子句的事务对象说明的过程使用CLOSE语句。用户只需要关闭那些返回状态信息的程序,对于那些不返回状态信息或者返回状态信息代码为100的程序,PowerBuilder自动地关闭它们。
DBMS-specific 并不是所有的DBMS都支持存储过程。
CLOSE CURSOR
CLOSE CURSOR的语法格式为:
CLOSE CURSORNAME;
关闭CURSORNAME代表的由OPEN打开的游标,正在使用的游标不能关闭。通常检索后在SQLCode等于100时使用,在执行该语句后最好检测关闭是否成功。
动态SQL语句1
使用这种格式可以处理既没有输出结果序列,也没有输入参数序列的SQL语句。可以处理所有形式的数据定义语言(Data Definition Language ---- DDL)。格式为:
EXECUTE IMMEDIATE SQLStatement {USING TransactionObject};
其中SQLStatement包含一条有效SQL语句的字符串。
例下面假设已存在一个事务对象,并将其连接到数据库:
string mySql
mySql = "INSERT INTO dept Values ( 1234,'Purchasing')"
EXECUTE IMMEDIATE :MySql USING My_trans;
动态SQL语句2
使用这种格式可以处理那些没有输出结果序列,但是需要输入参数序列的SQL语句。可以处理所有形式的数据定义语言(Data Definition Language ---- DDL)。格式为:
PREPARE DynamicStagingArea FROM SQLStatement {USING TransactionObject};
EXECUTE DynamicStagingArea USING {ParameterList}
其中DynamicStagingArea为DynamicStagingArea变量名(通常为SQLSA),SQLStatement包含一条有效SQL语句的字符串,ParameterList为以逗号隔开的PowerScript变量列表。
例如:
int emp_id_var = 56
PREPARE SQLSA FROM "DELETE FROM employee WHERE emp_id = ?";
EXECUTE SQLSA USING :Emp_id_var;
动态SQL语句3
使用这种格式可以处理那些有输入序列,而输出序列在编译的时候才知道的SQL语句。格式为:
DECLARE Cursor | Procedure DYNAMIC CURSOR | PROCEDURE FOR DynamicStagingArea ;
PREPARE DynamicStagingArea FROM SQLStatement {USING TransactionObject} ;
OPEN DYNAMIC Cursor {USING ParameterList} ;
EXECUTE DYNAMIC Procedure {USING ParameterList} ;
FETCH Cursor | Procedure INTO HostVariableList ;
CLOSE Cursor | Procedure ;
其中Cursor or Procedure指需要使用的游标或过程名,DynamicStagingArea为DynamicStagingArea变量名(通常为SQLSA),SQLStatement包含一条有效SQL语句的字符串,ParameterList为以逗号隔开的PowerScript变量列表,HostVariableList是用来保存检索数值的PowerScript变量列表。
例如:
integer Emp_id_var
DECLARE my_cursor DYNAMIC CURSOR FOR SQLSA ;
PREPARE SQLSA FROM "SELECT emp_id FROM employee" ;
OPEN DYNAMIC my_cursor ;
FETCH my_cursor INTO :Emp_id_var ;
CLOSE my_cursor ;
动态SQL语句4
使用这种格式可以处理那些输出序列和输入参数序列在编译时有一个或都未知的SQL语句。其格式为:
DECLARE Cursor | Procedure DYNAMIC CURSOR | PROCEDURE FOR DynamicStagingArea ;
PREPARE DynamicStagingArea FROM SQLStatement {USING TransactionObject} ;
DESCRIBE DynamicStagingArea INTO DynamicDescriptionArea ;
OPEN DYNAMIC Cursor | Procedure USING DESCRIPTOR DynamicDescriptionArea ;
EXECUTE DYNAMIC Cursor | Procedure USING DESCRIPTOR DynamicDescriptionArea ;
FETCH Cursor | Procedure USING DESCRIPTOR DynamicDescriptionArea ;
CLOSE Cursor | Procedure ;
其中Cursor or Procedure指需要使用的游标或过程名,DynamicStagingArea为DynamicStagingArea变量名(通常为SQLSA),SQLStatement包含一条有效SQL语句的字符串,DynamicDescriptionArea为DynamicDescriptionArea变量名(通常为SQLDA)。
例如:
string Stringvar, Sqlstatement
integer Intvar
Sqlstatement = "SELECT emp_id FROM employee"
PREPARE SQLSA FROM :Sqlstatement ;
DESCRIBE SQLSA INTO SQLDA ;
DECLARE my_cursor DYNAMIC CURSOR FOR SQLSA ;
OPEN DYNAMIC my_cursor USING DESCRIPTOR SQLDA ;
FETCH my_cursor USING DESCRIPTOR SQLDA ;
CHOOSE CASE SQLDA.OutParmType[1]
CASE TypeString!
Stringvar = GetDynamicString(SQLDA, 1)
CASE TypeInteger!
Intvar = GetDynamicNumber(SQLDA, 1)
END CHOOSE
CLOSE my_cursor ;
PowerScript SQL语句的更多相关文章
- mysql学习之 sql语句的技巧及优化
一.sql中使用正则表达式 select name,email from user where email Regexp "@163[.,]com$"; sql语句中使用Regex ...
- 一条Sql语句分组排序并且限制显示的数据条数
如果我想得到这样一个结果集:分组排序,并且每组限定记录集的数量,用一条SQL语句能办到吗? 比如说,我想找出学生期末考试中,每科的前3名,并按成绩排序,只用一条SQL语句,该怎么写? 表[TScore ...
- LINQ to SQL语句(7)之Exists/In/Any/All/Contains
适用场景:用于判断集合中元素,进一步缩小范围. Any 说明:用于判断集合中是否有元素满足某一条件:不延迟.(若条件为空,则集合只要不为空就返回True,否则为False).有2种形式,分别为简单形式 ...
- Oracle ------ SQLDeveloper中SQL语句格式化快捷键
Oracle SQL Developer中SQL语句格式化快捷键: 每次sql复制到SQL Developer面板的时候,格式老不对,而且看起来很不舒服,所有的sql都挤在一行完成. 这时我们可以全选 ...
- SQL语句优化
(1) 选择最有效率的表名顺序 ( 只在基于规则的优化器中有效 ) : ORACLE 的解析器按照从右到左的顺序处理 FROM 子句中的表名, FROM 子句中写在最后的表 ( 基础表dri ...
- LinqToDB 源码分析——生成与执行SQL语句
生成SQL语句的功能可以算是LinqToDB框架的最后一步.从上一章中我们可以知道处理完表达式树之后,相关生成SQL信息会被保存在一个叫SelectQuery类的实例.有了这个实例我们就可以生成对应的 ...
- 年终巨献 史上最全 ——LINQ to SQL语句
LINQ to SQL语句(1)之Where 适用场景:实现过滤,查询等功能. 说明:与SQL命令中的Where作用相似,都是起到范围限定也就是过滤作用的,而判断条件就是它后面所接的子句.Where操 ...
- LINQ to SQL语句(19)之ADO.NET与LINQ to SQL
它基于由 ADO.NET 提供程序模型提供的服务.因此,我们可以将 LINQ to SQL 代码与现有的 ADO.Net 应用程序混合在一起,将当前 ADO.NET 解决方案迁移到 LINQ to S ...
- LINQ to SQL语句(17)之对象加载
对象加载 延迟加载 在查询某对象时,实际上你只查询该对象.不会同时自动获取这个对象.这就是延迟加载. 例如,您可能需要查看客户数据和订单数据.你最初不一定需要检索与每个客户有关的所有订单数据.其优点是 ...
随机推荐
- boolean表达式与在if条件中的运用
1.boolean语句 boolean 类型的数据 有两个值 false 和true; 2.在if判断的条件语句中 例如: boolean arn =false 在if 判断的括号中可以表示为 !a ...
- 亚马逊EC2服务器申请+NODE服务器部署+阿里云域名申请+SSL证书使用
最近,由于项目需要,自己申请了一台亚马逊用于部署网站测试,在使用期间,发现网上没有一篇非常完整的文章讲解从服务器申请到域名解析,SSL证书申请的整个流程.所以自己总结一下,以供大家学习! 一.亚马逊E ...
- DataGridView属性和事件
//注册绑定事件 private void dgvBidFile_EditingControlShowing(object sender, DataGridViewEditingControlShow ...
- (转)SQLServer_十步优化SQL Server中的数据访问五
第九步:合理组织数据库文件组和文件 创建SQL Server数据库时,数据库服务器会自动在文件系统上创建一系列的文件,之后创建的每一个数据库对象实际上都是存储在这些文件中的.SQL Server有下面 ...
- Postman runner参数化
按照下面图片的顺序操作吧~ lets go 1.把要做参数化的字段的value用花括号标识起来,如:{{phone}} 2.准备一个csv的文件,把每次请求接口的参数按下图填写好,第一行写字段名称(p ...
- jQuery 双击事件(dblclick)
在jQuery的事件绑定中,执行双击事件(dblclick)时能触发两次单击事件(click).即一个标签元素(如div等),如果元素同时绑定了单击事件(click)和双击事件(dblclick),那 ...
- Spring3.2.0 之后各个版本完整包下载地址
留作工作学习使用 现在Spring官网已经很难找到完整包的下载地址,都已经迁移到Maven上,这给不能用Maven或者不愿用Maven的各位带来了不小的麻烦. 经过挖掘,找到了下载3.2之后各个版本完 ...
- sql语句基本查询操作
表结构 SQL> desc empName Type Nullable Default Comments -------- ------------ -------- ------- ----- ...
- python-day2列表、元祖、字典;编码;字符串
@导入模块时,会先搜索目前路径的同名py文件,再去全局环境变量找 @看模块的环境变量 import sys print(sys.path) @site-package存放第三方库,可以把自己建的拷贝在 ...
- 图片转化成base64编码
var img = "imgurl";//imgurl 就是你的图片路径 function getBase64Image(img) { var canvas = document. ...