PowerBuilder学习笔记(2)PB与SQL语言

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;

猜你喜欢

转载自blog.csdn.net/tlammon/article/details/108896192
今日推荐