PowerBuilder学习笔记(2)PB与SQL语言
(笔记记录于东莞裕元)
一.在PowerScript语言中使用SQL语句的注意点
PowerScript支持标准嵌入式SQL语句以及动态SQL语句.
可以使用数据库管理系统的保留字,例SELECT语句中使用数据库管理系统的内置函数
在SQL语句中可以使用常量和变量,使用变量需在变量前加冒号:
可以通过事务对象的属性来检查SQL语句执行情况
·SQLCode属性:
0 - 最近一次SQL语句执行成功
-1 - 最近一次SQL语句执行失败
100 - 最近一次SQL语句没有返回数据
·SQLDBCode属性 //数据库系统返回的错误代码
·SQLErrText属性 //数据库系统返回的错误信息
事务对象(TransactionObject),缺省时使用SQLCA
二.SQL语句
1.创建和删除数据库
CREATE DATABASE语句
DROP DATABASE语句
2.连接和断开数据库
CONNECT {USING TransactionObject};
DISCONNECT {USING TransactionObject};
3.提交与回滚事务
COMMIT {USING TransactionObject};
ROLLBACK {USING TransactionObject};
4.DML操作
单行检索: SELECT ... {USING TransactionObject};
插入数据: INSERT ... {USING TransactionObject};
修改数据: UPDATE ... {USING TransactionObject};
删除数据: DELETE ... {USING TransactionObject};
5.游标(Cursor)
DECLARE CursorName CURSOR FOR SelectStatement {USING TransactionObject};
OPEN CursorName;
FETCH CursorName INTO HostVariableList; //每次读一行,可用循环读取,用SQLCode判断是否读取成功
CLOSE CursorName;
DELETE FROM TableName WHERE CURRENT OF CursorName; //删除表中当前游标所的数据,不时所有数据库系统都支持
UPDATE TableName SET FieldName = Value WHERE CURRENT OF CursorName; //修改表中当前游标所的数据
6.存储过程(Procedure)
DECLARE ProcedureName PROCEDURE FOR
StoredProcedureName
@Param1=Value1,@Paramm2=Value2,...
{USING TransactionObject};
EXECUTE ProcedureName;
FETCH Procedure INTO HostVariableList;
CLOSE ProcedureName;
三.动态SQL语句
四种类型:
·无输入参数,无结果集
·有输入参数,无结果集
·有输入参数和结果集,在编译时已经知道参数和结果集
·有输入参数和结果集,在编译时尚不知道参数和结果集
1.动态SQL类型一: 无输入参数,无结果集
EXECUTE IMMEDIATE SQLStatement {USING TranactionObject};
2.动态SQL类型二: 有输入参数,无结果集
PREPARE DynamicStagingArea FROM SQLStatement {USING TranactionObject};
EXECUTE DynamicStagingArea USING {Paramenter List};
·DynamicStagingArea: 动态策略区变量,类型为DynamicStagingArea,通常使用SQLSA
·SQLStatement: SQL语句,出现参数的地方用问号?作为占位符.
·TranactionObject: 事务对象,默认为SQLCA
·Paramenter List: 参数列表
例:
PREPARE SQLSA FROM "DELETE FROM employee WHERE emp_id = ?";
EXECUTE SQLSA USING :emp_id_var;
3.动态SQL类型三: 有输入参数和结果集,在编译时已经知道参数和结果集
(1).用游标的形式
DECLARE Cursor DYNAMIC CURSOR FOR DynamicStagingArea;
PREPARE DynamicStagingArea FROM SQLStatement {USING TranactionObject};
OPEN DYNAMIC Cursor {USING ParameterList};
FETCH Cursor INTO HostVariableList;
CLOSE Cursor;
(2).用存储过程的形式
DECLARE Procedure DYNAMIC PROCEDURE FOR DynamicStagingArea;
PREPARE DynamicStagingArea FROM SQLStatement {USING TranactionObject};
EXECUTE DYNAMIC Procedure {USING ParameterList};
FETCH Procedure INTO HosstVariableList;
CLOSE Procedure;
4.动态SQL类型四: 有输入参数和结果集,在编译时尚不知道参数和结果集
(1).用游标的形式
DECLARE Cursor DYNAMIC CURSOR FOR DynamicStagingArea;
PREPARE DynamicStagingArea FROM SQLStatement {USING TransactionObject};
DESCRIBE DynamicStagingArea INTO DynamicDescriptionArea;
OPEN DYNAMIC Cursor USING DESCRIPTOR DynamicDescriptionArea;
FETCT Cursor USING DESCRIPTOR DynamicDescriptionArea;
CLOSE Cursor;
·DynamicDescriptionArea: 动态描述区变量,通常为SQLDA
·SQLDA属性:
·NumInputs //输入参数个数
·NumOutputs //输出参数个数
·InParmType //输入参数类型,数组,数据类型为ParmType
·OutParmType //输出参数类型,数组,数据类型为ParmType
·设定输入参数序列值的函数:
·SetDynamicParam
·获得输出参数值的函数:
·GetDynamicDate
·GetDynamicString
·GetDynamicTime
·GetDynamicDateTime
·GetDynamicNumber
(2).用存储过程的形式
DECLARE Procedure DYNAMIC PROCEDURE FOR DynamicStagingArea;
PREPARE DynamicStagingArea FROM SQLStatement {USING TransactionObject};
DESCRIBE DynamicStagingArea INTO DynamicDescriptionArea;
OPEN DYNAMIC Procedure USING DESCRIPTOR DynamicDescriptionArea;
FETCT Procedure USING DESCRIPTOR DynamicDescriptionArea;
CLOSE Procedure;