intra-mart Accel Platform 脚本开发模式编程指南 第16版2020-04-01

数据库

数据库类型

intra-mart Accel Platform使用以下三种数据库 。
  • 系统数据库

    存储系统数据的数据库 。
    不要使用系统数据库,因为它在系统内部使用。
  • Tenant数据库

    它是一个数据库 ,用于存储租户中使用的数据。
  • 共享数据库

    这是一个在intra-mart Accel Platform系统外部存储数据的数据库 。
    要与外部系统链接时,请使用此选项。

编程方式

事务

本节介绍如何实现事务处理。
事务是交易Object 运行开始的方法函数通过传递,并在处理完成时自动提交。
// 事务处理
交易额开始机能() {
    //查询执行
    变种 结果 = 新的 租户数据库()。执行sql 参数);
    如果结果错误 {
        //回退错误。
        交易额回滚();
    }
});
通过如上所述传递执行函数 ,如果处理正常结束,则执行提交处理;如果发生异常,则自动执行回滚处理,因此,省略事务提交/回滚的执行可以预防。

执行查询

运行查询的方式取决于您要连接的数据库 。
  • Tenant数据库

    //对Tenant数据库执行查询。
    变种 资料库 = 新的 租户数据库();
    变种 结果 = 资料库执行“从b_m_account_b选择*”);
    
  • 共享数据库

    //对连接ID为“ sample”的共享数据库执行查询。
    变种 资料库 = 新的 共享数据库“样本”);
    变种 结果 = 资料库执行“从b_m_account_b选择*”);
    
使用预处理语句时,请使用DbParameter Object 。
//使用准备好的语句执行查询。
变种 sql = “从b_m_account_b中选择*,其中user_cd =?和login_failure_count =?”;
变种 结果 = 新的 租户数据库()。执行sql [
    Db参数“ aoyagi”),
    Db参数0
]);

使用外部SQL

外部SQL是通过在程序外部执行SQL来从程序执行SQL的功能。
如果要使用外部SQL,请将该SQL写入扩展名为“ .sql”的文本文件中,并将其放在“%CONTEXT_PATH%/ WEB-INF / jssp / src”下的任何目录中。
当使用SQL文件“%CONTEXT_PATH%/ WEB-INF / jssp / src / sample / sql / get_sample_data.sql”时,实现如下。
//使用传出的SQL执行查询。
变种 资料库 = 新的 租户数据库();
变种 结果 = 资料库executeByTemplate'样本/ SQL / get_sample_data' 参数);

要读取的文件

外部SQL可以划分用于连接目标数据库每种数据库 类别的SQL文件。
数据库为每种数据库 类别分隔SQL文件,请添加文件名后缀的数据库 类别 。
  • 示例:当数据库类别为Oracle并且SQL文件名为“ get_sample_data.sql”时
    • 将SQL文件命名为“ get_sample_data_oracle.sql”。
通过如上所述准备带有后缀的SQL文件,当数据库 类别为Oracle时使用“ get_sample_data_oracle.sql”,而对于其他数据库使用“ get_sample_data.sql”。
附加到SQL文件的每个数据库的后缀如下。
数据库 后缀
甲骨文 _甲骨文
SQL服务器 _sqlserver
PostgreSQL的 _postgre

SQL文件的描述示例

  • 示例1:使用2-Way-SQL

    2Way-SQL是一条SQL语句,可以通过在注释中编写与程序的映射使用SQL * Plus等SQL工具直接执行该语句。
    • SQL文件“ sample.sql”
    SELECT *
    FROM b_m_account_b
    WHERE user_cd = / * userCd * /'aoyagi'
    
    • 程序“ sample.js”
    新的 租户数据库()。executeByTemplate“样本” {
        userCd  Db参数“原田”
    });
    
    执行该程序时,将获得user_cd ='harada'的数据。
    如果使用工具按原样执行“ sample.sql”,则将获得user_cd ='aoyagi'的数据。
    执行程序时,用准备好的语句替换WHERE子句的注释部分并执行它。
    如果将“: 数据类型 ”添加到SQL文件的注释部分(/ 参数名称 /),则不使用DbParameter
    可以使用准备好的语句。
    • SQL文件“ sample.sql”
    SELECT *
    FROM b_m_account_b
    WHERE user_cd = / * userCd:字符串* /'aoyagi'
    
    • 程序“ sample.js”
    新的 租户数据库()。executeByTemplate“样本” {
        userCd  “原田”
    });
    
  • 示例2:使用准备好的语句

    当在SQL文件中描述预备语句(包括SQL的?)时,属性名称必须为
    指定$ 1,$ 2,…,$ N Object 作为参数。
    • SQL文件“ sample.sql”
    SELECT *
    FROM b_m_account_b
    WHERE user_cd =   login_failure_count = 
    
    • 程序“ sample.js”
    新的 租户数据库()。executeByTemplate“样本” {
        1美元  Db参数'aoyagi'),
        2美元  Db参数0
    });
    
  • Example#3字符串替换

    如果要通过动态替换SQL文件中描述的查询字符串来执行SQL,
    用“ $”指定参数名称。
    • SQL文件“ sample.sql”
    SELECT *
    FROM b_m_account_b
    订购 BY / * $订单* /'user_cd'
    
    • 程序“ sample.js”
    新的 租户数据库()。executeByTemplate“样本” {
        订单  “ user_cd”
    });
    
    当您要替换无法使用已准备好的语句的部分的字符串(如ORDER BY子句)时,将使用此选项。
  • 示例4:条件分支

    如果要根据特定条件动态更改要执行的SQL,请使用/ IF // END /。
    • SQL文件“ sample.sql”
    SELECT *
    FROM b_m_account_b
    WHERE
        / *如果userCd!=空* /
        user_cd LIKE / * userCd:字符串* /'aoyagi'
        /*END*/
        / * IF谓词()* /
         login_failure_count = / * failureCount:数字* /0
        /*END*/
    
    • 程序“ sample.js”
    新的 租户数据库()。executeByTemplate“样本” {
        userCd  “原田”
        failureCount  0
        谓词  机能() {
            归还 true;
        }
    });
    
    如果有可能执行无效的SQL,例如由于条件分支而导致空白的WHERE子句,请将WHERE子句放在/ BEGIN // END /中。
    通过使用/ BEGIN // END /,执行以下处理,并且可以防止执行无效的SQL。
    1. 如果不满足所有条件,请从SQL中删除WHERE本身。
    2. 如果首先满足条件的查询字符串以AND开头,则删除AND。
    • SQL文件“ sample.sql”
    SELECT *
    FROM b_m_account_b
    /*BEGIN*/
    WHERE
        / *如果userCd!=空* /
        user_cd LIKE / * userCd:字符串* /'aoyagi'
        /*END*/
        / * IF谓词()* /
         login_failure_count = / * failureCount:数字* /0
        /*END*/
    /*END*/