PowerBuilder SQL 语句

单独执行 SQL 语句

在数据库画板中,选择菜单 View -- Interactive SQL 打开输入窗口,输入 SQL 语句及分号,选择菜单 Design -- Execute ISQL 或工具栏按钮 执行。

连接与断开数据库

CONNECT { USING TransactionObject } ;

DISCONNECT { USING TranscationObject } ;

其中:TranscationObject 是事务对象,必须先行设置方可使用。

提交与回退事务

COMMIT { USING TransactionObject } ;

ROLLBACK { USING TransactionObject } ;

当断开数据库,系统自动提交。

嵌入式 SQL 语句

变量名前加冒号称作绑定变量

SELECT FieldsList

INTO VarList

FROM TableList

WHERE conditions

{ USING TransactionObject } ;

查询一条记录,查出多条记录将出错
INSERT INTO TableName ( FieldName [,...] )

VALUES ( Value [,...] )

{ USING TransactionObject } ;

插入一条记录
DELETE FROM TableName

WHERE conditions

{ USING TransactionObject } ;

删除满足条件的记录
UPDATE TableName

SET FieldName = newvalue [, ...]

WHERE conditions

{ USING TransactionObject } ;

更新记录
SELECTBLOB BlobField

INTO VariableList

FROM TableName

WHERE conditions

{ USING TransactionObject } ;

查询 BLOB 字段内容
UPDATEBLOB TableName

SET BlobColumn = BlobVariable

WHERE conditions

{ USING TransactionObject } ;

更新 BLOB 字段内容

游标操作

上述查询只能查一条记录,此查询解决此问题。

取字段值后,应检查事务对象的 SQLCode 属性值是否为 0(表示操作成功)。

定义游标 DECLARE CursorName CURSOR FOR

SELECT 语句

{ USING TransactionObject } ;

声明名为 CursorName 的游标,

SELECT 语句为标准 SQL 语句。

这义游标时并没有执行相应操作。

打开游标 OPEN CursorName ; 此时执行查询操作
取字段值 FETCH CursorName

INTO VarList ;

读取当前记录内容到各变量
关闭游标 CLOSE CursorName ; 释放游标占用的资源

动态 SQL 语句

没有输入

没有输出

EXECUTE IMMEDIATE SQLStatement 

{ USING TransactionObject } ;

 

建立表、删除表等
参数个数已知

没有输出

PREPARE DynamicStagingArea FROM SQL 语句
{ USING TransactionObject } ;

EXECUTE DynamicStagingArea
USING { 参数列表 }

DynamicStagingArea 是动态策略区变量,

通常使用 SQLSA。

SQL 语句是字符串,包含 ?表示参数,

具体值在参数列表中确定

参数个数已知

有输出

使用游标

DECLARE Cursor

DYNAMIC CURSOR

FOR DynamicStagingArea ;

PREPARE DynamicStagingArea FROM SQL 语句

{ USING TransactionObject } ;

OPEN DYNAMIC Cursor

{ USING 参数列表 };

FETCH { Cursor | INTO VarList } ;

CLOSE Cursor;

 
使用存储过程

DECLARE Procedure

DYNAMIC PROCEDURE

FOR DynamicStagingArea ;

PREPARE DynamicStagingArea FROM SQL 语句

{ USING TransactionObject } ;

EXECUTE CYNAMIC Procedure

{ USING 参数列表 };

FETCH { Procedure INTO VarList } ;

CLOSE Procedure;

 
参数未知

结果未知

使用游标

DECLARE Cursor

DYNAMIC CURSOR

FOR DynamicStagingArea ;

PREPARE DynamicStagingArea FROM SQL 语句

{ USING TransactionObject };

DESCRIBE DynamicStagingArea

INTO DynamicDescriptionArea;

Open DYNAMIC Cursor

{ USING DESCRIPTOR DynamicDescriptionArea };

FETCH Cursor

USING DESCRIPTOR DynamicDescriptionArea;

CLOSE Cursor;

 
使用存储过程

DECLARE Procedure

DYNAMIC PROCEDURE

FOR DynamicStagingArea ;

PREPARE DynamicStagingArea FROM SQL 语句

{ USING TransactionObject };

DESCRIBE DynamicStagingArea

INTO DynamicDescriptionArea;

EXECUTE DYNAMIC Procedure

USING DESCRIPTOR DynamicDescriptionArea;

FETCH Procedure

USING DESCRIPTOR DynamicDescriptionArea;

CLOSE Procedure;

 

DynamicDescriptionArea 动态描述区变量 SQLDA

属性 / 方法 意义
NumInputs 输入参数个数
InParmType 输入参数类型数组, 下标从 1 开始
NumOutputs 输出参数个数
OutParmType 输出参数类型数组,下标从 1 开始
GetDynamic...(n) 取输出参数第 n 个值,与各种类型对应使用
GetDynamicNumber(n) TypeInteger!、TypeDecimal!、TypeDouble!、TypeLong!、TypeReal!、TypeUInt!、TypeULong!、TypeBoolean!
GetDynamicString(n) TypeString!
GetDynamicDate(n) TypeDate!
GetDynamicTime(n) TypeTime!
GetDynamicDateTime(n) TypeDateTime!