TenantDatabaseオブジェクト
| コンポーネント情報 | |
|---|---|
| version | 8.0.16 |
| since | 8.0.0 |
テナント用のデータベースにアクセスするためのクラスです。
テナントデータソースが利用されます。
Storage と同様に、getByteReader, getTextReader が関数を受け取れるようになっています。close 漏れを予防できるため、関数を渡す方法を推奨します。
例1:
例2(execute, select, insert, update, remove, fetch):
テナントデータソースが利用されます。
Storage と同様に、getByteReader, getTextReader が関数を受け取れるようになっています。close 漏れを予防できるため、関数を渡す方法を推奨します。
例1:
var db = new TenantDatabase(); var md = db.getMetaData(); Debug.print(md.data.getDatabaseProductName()); Debug.print(db.connectId); Debug.print(db.databaseName); Debug.print(db.dataSourceName);
例2(execute, select, insert, update, remove, fetch):
var db = new TenantDatabase();
var result = db.execute('CREATE TABLE test_example(test varchar(128))');
if (!result.error) {
try {
function printResult(result) {
if (!result.error) {
result.data.forEach(function(e) {
Debug.print(e.test);
});
Debug.print('');
}
}
Transaction.begin(function() { // 5件データを挿入します
db.insert('test_example', {
test: 'test_value1'
});
db.execute("INSERT INTO test_example values('test_value2')");
db.execute('INSERT INTO test_example values(?)', [DbParameter.string('test_value3')]); // PreparedStatement を利用します
db.execute('INSERT INTO test_example values(?)', [DbParameter.string(null)]); // PreparedStatement を利用します
db.insert('test_example', {
test: null
});
});
printResult(db.select('SELECT * FROM test_example')); // 'test_value1', 'test_value2', 'test_value3', 'null', 'null' が表示されます
Transaction.begin(function() { // データを消す
db.remove('test_example', 'test IS NULL'); // カラムが null のデータを削除します
});
printResult(db.select('SELECT * FROM test_example')); // 'test_value1', 'test_value2', 'test_value3' が表示されます
Transaction.begin(function() { // test を含むデータを null に書き換えます
db.update('test_example', {
test: null
}, 'test LIKE ?', [DbParameter.string('%test%')]); // PreparedStatement を利用します
});
printResult(db.select('SELECT * FROM test_example')); // 'null', 'null', 'null' が表示されます
Transaction.begin(function() { // データを消す
db.remove('test_example', 'test IS NULL');
});
printResult(db.select('SELECT * FROM test_example')); // データが無いので、何も表示されません
Transaction.begin(function() { // 5件データを挿入します
db.execute("INSERT INTO test_example values('test_value1')");
db.execute("INSERT INTO test_example values('test_value2')");
db.execute("INSERT INTO test_example values('test_value3')");
db.execute("INSERT INTO test_example values('test_value4')");
db.execute("INSERT INTO test_example values('test_value5')");
});
printResult(db.select('SELECT * FROM test_example')); // 'test_value1', 'test_value2', 'test_value3', 'test_value4', 'test_value5' が表示されます
printResult(db.fetch('SELECT * FROM test_example ORDER BY test', 2, 3)); // 'test_value2', 'test_value3', 'test_value4' が表示されます(2件目から3件取得されます)
} finally {
db.execute('DROP TABLE test_example');
}
}
var tenantDatabase = {
connectId : String, // 接続先のID
dataSourceName : String, // JNDI名
databaseName : String // “Oracle”, “PostgreSQL”, “SQLServer” のいずれか
}
コンストラクタの概要
| TenantDatabase () コンストラクタ。 |
プロパティの概要
| 型 | プロパティ名 | アクセス権 |
|---|---|---|
| String | connectId 接続先のID |
読み取り専用
|
| String | dataSourceName JNDI名 |
読み取り専用
|
| String | databaseName "Oracle", "PostgreSQL", "SQLServer" のいずれか |
読み取り専用
|
メソッドの概要
| 返却値の型 | メソッド名 |
|---|---|
| DatabaseResult | executeByTemplate (String path, Object [params]) 2WaySQL を実行します。 |
| DatabaseResult | executeCallable (String sql, Array [params]) ストアドプロシージャ/ファンクションを実行します。 |
| DatabaseResult | execute (String sql, Array [params]) 任意のSQL文を実行します。 |
| DatabaseResult | fetchByTemplate (String path, Number start, Number length, Object [params]) 2WaySQL を実行します。 |
| DatabaseResult | fetch (String sql, Number start, Number length, Array [params]) SELECT文を発行後、取得データをフェッチして取得します。 |
| DatabaseResult | getByteReader (String tableName, String columnName, String condition, Array [params], Function [callback]) BLOB または InputStream を取得し、それを元に ByteReader を返します。 |
| DatabaseResult | getMetaData () データベースのメタデータを取得します。 |
| DatabaseResult | getTextReader (String tableName, String columnName, String condition, Array [params], Function [callback]) CLOB または Reader を取得し、それを元に TextReader を返します。 |
| DatabaseResult | insert (String tableName, Object insertData) 指定されたテーブルにデータを挿入します。 |
| Boolean | isIncludeClobData () SQL実行時に、CLOB型のカラムに格納されているテキストデータの取得結果を変更するフラグを取得します。 |
| Boolean | isUseBigDecimal () decimal/numeric型のカラムの取得方法を変更するフラグを取得します。 |
| DatabaseResult | remove (String tableName, String condition, Array [params]) データベースデータを削除します。 |
| DatabaseResult | select (String sql, Array [params], Number [length]) SELECT文を発行してデータを取得します。 |
| void | setIncludeClobData (Boolean includeClobData) SQL実行時に、CLOB型のカラムに格納されているテキストデータの取得結果を変更するフラグを設定します。 |
| void | setUseBigDecimal (Boolean useBigDecimal) decimal/numeric型のカラムの取得方法を変更するフラグを設定します。 |
| DatabaseResult | update (String tableName, Object updateData, String condition, Array [params]) データベースのデータを更新します。 |
コンストラクタの詳細
| TenantDatabase ()
コンストラクタ。
|
プロパティの詳細
|
String connectId
読み取り専用
接続先のID
|
|
String dataSourceName
読み取り専用
JNDI名
|
|
String databaseName
読み取り専用
"Oracle", "PostgreSQL", "SQLServer" のいずれか
|
メソッドの詳細
DatabaseResult executeByTemplate (String path, Object [params])
2WaySQL を実行します。
例1:
例2(パラメータ): example2.sql の /*hoge*/'bar' を 'Hoge', /*parameter.foo*/'baz' を 'Foo' にして(PreparedStatement を利用して)SQL を発行します。 SQLファイル中では、パラメータオブジェクトに渡したオブジェクトのプロパティを変数として使用できます。 また、Ver.8.0.4 以降ではパラメータオブジェクト「parameters」を経由して参照することもできます。 example2.sql は、そのままツールに流すことによって、SQL の構文の正しさを確認できるようになっていることに注意してください。
例3(置換): order by パラメータは PreparedStatement で渡せないので、単純な文字列置換で置き換える仕組みを用意しています (SQL ファイル中の、$ で始まるバインド変数、あるいは名前が orderBy なバインド変数が、置換の対象となります)。
例4(パラメータその2): SQL 中に ? を書くと、その出現順に引数の $1, $2, …, $N プロパティの値に置き換えて(内部で PreparedStatement を利用しています) SQL を発行します。
例5(パラメータその3): パラメータを配列で渡し、SQLを発行します。
例6(条件分岐): /*IF …*/ /*END*/ により、条件によって動的に発行する SQL を変更できます。
例7(条件分岐その2): example6.sql は、start() が false かつ end() が false などの場合に不正な SQL になることに注意してください。 (start, end の値によっては、SQL が WHERE で終了したり、WHERE の直後に AND が来る場合があるため)。 この問題を解決するために、/*BEGIN*/ /*END*/ を使います。 BEGIN, END を使うと、すべての条件が不成立だった場合 WHERE そのものを SQL から消し、最初に成立した条件が AND であった場合には、AND を除去する動作を行います。
パラメータ
返却値
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
DatabaseResult executeCallable (String sql, Array [params])
ストアドプロシージャ/ファンクションを実行します。
このメソッドは intra-mart Accel Platform 2017 Winter(8.0.18)(データベースアクセスモジュール(スクリプト開発向け)モジュールバージョン 8.0.13)から利用可能です。
各 DBMS のカラム型と DbParameter は以下の組み合わせのみをサポートします。 PostgreSQL
Oracle clobは、 setIncludeClobDataを trueに設定することで、SQLの戻り値に含まれるようになります。setIncludeClobDataは, intra-mart Accel Platform 2023 Autumn(8.0.34)(データベースアクセスモジュール(スクリプト開発向け)モジュールバージョン 8.0.16)から利用可能です。
SQL Server
例1: PostgreSQL 戻り値が numeric の場合 SQL
CREATE TABLE my_table1(numeric_column numeric)
INSERT INTO my_table1 VALUES(10)
CREATE OR REPLACE FUNCTION my_func1()
RETURNS numeric AS '
SELECT numeric_column FROM my_table1;
' LANGUAGE SQL;
JavaScript
Transaction.begin(function() {
var db = new TenantDatabase();
var result = db.executeCallable(
"{ ? = call my_func1() }", // 関数 my_func1 を実行
[DbParameter.paramOut(DbParameter.TYPE_NUMERIC)] // 関数 my_func1 の戻り値(1個目の「?」パラメータ)は DbParameter.TYPE_NUMERIC(上記表から、PostgreSQL numeric 型のカラムは DbParameter.TYPE_NUMERIC を使用するため)
);
if (!result.error) {
Debug.print(result.params[0]); // 「?」の戻り値は params 変数に返却される。一個目の「?」の戻り値は params[0] に格納される
}
});
例2: Oracle 戻り値が timestamp の場合SQL
CREATE TABLE my_table2(timestamp_column timestamp)
INSERT INTO my_table2 VALUES('2000-01-01 00:00:00')
CREATE OR REPLACE FUNCTION my_func2
RETURN my_table2.timestamp_column%TYPE
IS
timestamp_column my_table2.timestamp_column%TYPE;
BEGIN
SELECT timestamp_column into timestamp_column FROM my_table2;
RETURN timestamp_column;
END my_func2;
JavaScript
Transaction.begin(function() {
var db = new TenantDatabase();
var result = db.executeCallable(
"{ ? = call my_func2() }", // 関数 my_func2 を実行
[DbParameter.paramOut(DbParameter.TYPE_TIMESTAMP)] // 関数 my_func2 の戻り値(1個目の「?」パラメータ)は DbParameter.TYPE_TIMESTAMP(上記表から、Oracle timestamp 型のカラムは DbParameter.TYPE_TIMESTAMP を使用するため)
);
if (!result.error) {
Debug.print(result.params[0]); // 「?」の戻り値は params 変数に返却される。一個目の「?」の戻り値は params[0] に格納される
}
});
例3: SQL Server 戻り値が varchar の場合注意)SQL Server は SelectMethod=cursor を指定時に UDFs を実行できません(参考:Execution of User Defined Function fails with JDBC, when selectMethod=cursor is enabled) SQL
CREATE TABLE my_table3(varchar_column varchar(128))
INSERT INTO my_table3 VALUES('test')
CREATE FUNCTION my_func3()
RETURNS varchar(128)
AS
BEGIN
DECLARE @varchar_column varchar(128);
SELECT @varchar_column = varchar_column FROM my_table3;
RETURN @varchar_column;
END;
JavaScript
Transaction.begin(function() {
var db = new TenantDatabase();
var result = db.executeCallable(
"{ ? = call my_func3() }", // 関数 my_func3 を実行
[DbParameter.paramOut(DbParameter.TYPE_STRING)] // 関数 my_func3 の戻り値(1個目の「?」パラメータ)は DbParameter.TYPE_STRING(上記表から、SQL Server varchar 型のカラムは DbParameter.TYPE_STRING を使用するため)
);
if (!result.error) {
Debug.print(result.params[0]); // 「?」の戻り値は params 変数に返却される。一個目の「?」の戻り値は params[0] に格納される
}
});
例4: PostgreSQL 戻り値が refcursor の場合SQL
CREATE TABLE my_table4(numeric_column numeric, varchar_column varchar(128))
INSERT INTO my_table4 VALUES(1, 'test1')
INSERT INTO my_table4 VALUES(2, 'test2')
CREATE OR REPLACE FUNCTION my_func4()
RETURNS refcursor AS'
DECLARE
mycurs refcursor;
BEGIN
OPEN mycurs FOR SELECT * FROM my_table4;
RETURN mycurs;
END; ' language 'plpgsql'
JavaScript
Transaction.begin(function() {
var db = new TenantDatabase();
var result = db.executeCallable(
"{ ? = call my_func4() }", // 関数 my_func4 を実行
[DbParameter.paramOut(DbParameter.TYPE_CURSOR)] // 関数 my_func4 の戻り値(1個目の「?」パラメータ)は DbParameter.TYPE_CURSOR(上記表から、PostgreSQL refcursor 型のカラムは DbParameter.TYPE_CURSOR を使用するため)
);
if (!result.error) {
// 「?」の戻り値は params 変数に返却される。一個目の「?」の戻り値は params[0] に格納される
Debug.print(result.params[0][0].numeric_column); // 1
Debug.print(result.params[0][0].varchar_column); // 'test1'
Debug.print(result.params[0][1].numeric_column); // 2
Debug.print(result.params[0][1].varchar_column); // 'test2'
}
});
例5: Oracle 戻り値が refcursor の場合SQL
CREATE TABLE my_table5(number_column number, varchar2_column varchar2(128))
INSERT INTO my_table5 VALUES(1, 'test1')
INSERT INTO my_table5 VALUES(2, 'test2')
CREATE OR REPLACE FUNCTION my_func5
RETURN SYS_REFCURSOR
IS
cur SYS_REFCURSOR;
BEGIN
OPEN cur FOR SELECT * FROM my_table5;
RETURN cur;
END my_func5;
JavaScript
Transaction.begin(function() {
var db = new TenantDatabase();
var result = db.executeCallable(
"{ ? = call my_func5() }", // 関数 my_func5 を実行
[DbParameter.paramOut(DbParameter.TYPE_CURSOR)] // 関数 my_func5 の戻り値(1個目の「?」パラメータ)は DbParameter.TYPE_CURSOR(上記表から、Oracle refcursor 型のカラムは DbParameter.TYPE_CURSOR を使用するため)
);
if (!result.error) {
// 「?」の戻り値は params 変数に返却される。一個目の「?」の戻り値は params[0] に格納される
Debug.print(result.params[0][0].number_column); // 1
Debug.print(result.params[0][0].varchar2_column); // 'test1'
Debug.print(result.params[0][1].number_column); // 2
Debug.print(result.params[0][1].varchar2_column); // 'test2'
}
});
例6: SQL Server 戻り値がカーソル型の場合SQL
CREATE TABLE my_table6(numeric_column numeric, varchar_column varchar(128))
INSERT INTO my_table6 VALUES(1, 'test1')
INSERT INTO my_table6 VALUES(2, 'test2')
CREATE PROCEDURE my_proc6
AS
BEGIN
SELECT * FROM my_table6;
END;
JavaScript
Transaction.begin(function() {
var db = new TenantDatabase();
var result = db.executeCallable(
"{ call my_proc6() }" // 関数 my_proc6 を実行(SQL Server の上記のストアドの場合、戻り値は不要)
);
if (!result.error) {
// 戻り値は data 変数に返却される。
Debug.print(result.data[0].numeric_column); // 1
Debug.print(result.data[0].varchar_column); // 'test1'
Debug.print(result.data[1].numeric_column); // 2
Debug.print(result.data[1].varchar_column); // 'test2'
}
});
例7: SQL Server 戻り値が複数のカーソル型の場合SQL
CREATE TABLE my_table7_1(numeric_column numeric, varchar_column varchar(128))
CREATE TABLE my_table7_2(numeric_column numeric, varchar_column varchar(128))
INSERT INTO my_table7_1 VALUES(1, 'test1')
INSERT INTO my_table7_1 VALUES(2, 'test2')
INSERT INTO my_table7_2 VALUES(3, 'test3')
INSERT INTO my_table7_2 VALUES(4, 'test4')
CREATE PROCEDURE my_proc7
AS
BEGIN
SELECT * FROM my_table7_1;
SELECT * FROM my_table7_2;
END;
JavaScript
Transaction.begin(function() {
var db = new TenantDatabase();
var result = db.executeCallable(
"{ call my_proc7() }" // 関数 my_proc7 を実行(SQL Server の上記のストアドの場合、戻り値は不要)
);
if (!result.error) {
// 戻り値は data 変数に返却される。my_table7_1 は data[0] に、my_table7_2 は data[1] に格納される。
// my_table7_1
Debug.print(result.data[0][0].numeric_column); // 1
Debug.print(result.data[0][0].varchar_column); // 'test1'
Debug.print(result.data[0][1].numeric_column); // 2
Debug.print(result.data[0][1].varchar_column); // 'test2'
// my_table7_2
Debug.print(result.data[1][0].numeric_column); // 3
Debug.print(result.data[1][0].varchar_column); // 'test3'
Debug.print(result.data[1][1].numeric_column); // 4
Debug.print(result.data[1][1].varchar_column); // 'test4'
}
});
例8: PostgreSQL INパラメータとOUTパラメータSQL
CREATE OR REPLACE FUNCTION my_proc8(in param1 text, out param2 text)
RETURNS text AS $$
BEGIN
param2 := param1;
END;
$$ LANGUAGE plpgsql;
JavaScript
Transaction.begin(function() {
var db = new TenantDatabase();
var result = db.executeCallable(
"{ call my_proc8(?, ?) }", // 関数 my_proc8 を実行
[
DbParameter.string('text'), // INパラメータ(上記の表から PostgreSQL text 型のカラムは DbParameter.TYPE_STRING)
DbParameter.paramOut(DbParameter.TYPE_STRING) // OUTパラメータ(上記の表から PostgreSQL text 型のカラムは DbParameter.TYPE_STRING)
]
);
if (!result.error) {
Debug.print(result.params[0]); // "test"(1番目の「?」はINパラメータなので、渡した値がそのままコピーされる)
Debug.print(result.params[1]); // "test"(2番目の「?」はOUTパラメータなので、出力値が設定される)
}
});
例9: Oracle INパラメータとOUTパラメータSQL
CREATE OR REPLACE PROCEDURE my_proc9(param1 in long raw, param2 out long raw)
IS
BEGIN
param2 := param1;
END my_proc9;
JavaScript
Transaction.begin(function() {
var db = new TenantDatabase();
var result = db.executeCallable(
"{ call my_proc9(?, ?) }", // 関数 my_proc9 を実行
[
DbParameter.binary([1, 2, 3]), // INパラメータ(上記の表から Oracle long raw 型のカラムは DbParameter.TYPE_BINARY)
DbParameter.paramOut(DbParameter.TYPE_BINARY) // OUTパラメータ(上記の表から Oracle long raw 型のカラムは DbParameter.TYPE_BINARY
]
);
if (!result.error) {
Debug.print(result.params[0]); // [1, 2, 3](1番目の「?」はINパラメータなので、渡した値がそのままコピーされる)
Debug.print(result.params[1]); // [1, 2, 3] をデータとして持つ ByteReader(2番目の「?」はOUTパラメータなので、出力値が設定される)
}
});
例10: SQL Server INパラメータとOUTパラメータSQL
CREATE PROCEDURE my_proc10(@param1 bit, @param2 bit OUTPUT)
AS
BEGIN
SET @param2 = @param1;
END;
JavaScript
Transaction.begin(function() {
var db = new TenantDatabase();
var result = db.executeCallable(
"{ call my_proc10(?, ?) }", // 関数 my_proc10 を実行
[
DbParameter.boolean(true), // INパラメータ(上記の表から SQL Server bit 型のカラムは DbParameter.TYPE_BOOLEAN
DbParameter.paramOut(DbParameter.TYPE_BOOLEAN) // OUTパラメータ(上記の表から SQL Server bit 型のカラムは DbParameter.TYPE_BOOLEAN
]
);
if (!result.error) {
Debug.print(result.params[0]); // true(1番目の「?」はINパラメータなので、渡した値がそのままコピーされる)
Debug.print(result.params[1]); // true(2番目の「?」はOUTパラメータなので、出力値が設定される)
}
});
例11: PostgreSQL INOUTパラメータSQL CREATE OR REPLACE FUNCTION my_proc11(inout param varchar) RETURNS varchar AS $$ BEGIN param := upper(param); END; $$ LANGUAGE plpgsql;JavaScript
Transaction.begin(function() {
var db = new TenantDatabase();
var result = db.executeCallable(
"{ call my_proc11(?) }", // 関数 my_proc11 を実行
[DbParameter.string('test').paramInOut()] // INOUTパラメータ(上記の表から PostgreSQL varchar 型のカラムは DbParameter.TYPE_STRING
);
if (!result.error) {
Debug.print(result.params[0]); // "TEST"(1番目の「?」はINOUTパラメータなので、出力値が設定される)
}
});
例12: Oracle INOUTパラメータSQL
CREATE OR REPLACE PROCEDURE my_proc12(param in out varchar2)
IS
BEGIN
param := UPPER(param);
END my_proc12;
JavaScript
Transaction.begin(function() {
var db = new TenantDatabase();
var result = db.executeCallable(
"{ call my_proc12(?) }", // 関数 my_proc12 を実行
[DbParameter.string('test').paramInOut()] // INOUTパラメータ(上記の表から Oracle varchar2 型のカラムは DbParameter.TYPE_STRING
);
if (!result.error) {
Debug.print(result.params[0]); // "TEST"(1番目の「?」はINOUTパラメータなので、出力値が設定される)
}
});
例13: SQL Server INOUTパラメータSQL
CREATE PROCEDURE my_proc13(@param varchar(128) OUTPUT)
AS
BEGIN
SET @param = UPPER(@param);
END;
JavaScript
Transaction.begin(function() {
var db = new TenantDatabase();
var result = db.executeCallable(
"{ call my_proc13(?) }", // 関数 my_proc13 を実行
[DbParameter.string('test').paramInOut()] // INOUTパラメータ(上記の表から SQL Server varchar 型のカラムは DbParameter.TYPE_STRING
);
if (!result.error) {
Debug.print(result.params[0]); // "TEST"(1番目の「?」はINOUTパラメータなので、出力値が設定される)
}
});
例14: Oracle INOUTパラメータ(number, float)Oracle の number もしくは float の INOUT パラメータに null を渡す際には null ではなく DbParameter.NULL を利用してください。 SQL
CREATE OR REPLACE PROCEDURE my_proc14_1(param in out number)
IS
BEGIN
param := null;
END my_proc14_1;
CREATE OR REPLACE PROCEDURE my_proc14_2(param in out float)
IS
BEGIN
param := null;
END my_proc14_2;
JavaScript
Transaction.begin(function() {
var db = new TenantDatabase();
var result = db.executeCallable(
"{ call my_proc14_1(?) }", // 関数 my_proc14_1 を実行
[DbParameter.numeric(DbParameter.NULL).paramInOut()] // Oracle の number もしくは float の INOUT パラメータに null を渡す際には null ではなく DbParameter.NULL を利用
);
if (!result.error) {
Debug.print(result.params[0]);
}
result = db.executeCallable(
"{ call my_proc14_2(?) }", // 関数 my_proc14_2 を実行
[DbParameter.numeric(DbParameter.NULL).paramInOut()] // Oracle の number もしくは float の INOUT パラメータに null を渡す際には null ではなく DbParameter.NULL を利用
);
if (!result.error) {
Debug.print(result.params[0]);
}
});
パラメータ
返却値
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
DatabaseResult execute (String sql, Array [params])
任意のSQL文を実行します。
パラメータ
返却値
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
DatabaseResult fetchByTemplate (String path, Number start, Number length, Object [params])
2WaySQL を実行します。
例1:
例2(パラメータ): example2.sql の /*hoge*/'bar' を 'Hoge', /*parameter.foo*/'baz' を 'Foo' にして(PreparedStatement を利用して)SQL を発行します。 SQLファイル中では、パラメータオブジェクトに渡したオブジェクトのプロパティを変数として使用できます。 また、Ver.8.0.4 以降ではパラメータオブジェクト「parameters」を経由して参照することもできます。 example2.sql は、そのままツールに流すことによって、SQL の構文の正しさを確認できるようになっていることに注意してください。
例3(置換): order by パラメータは PreparedStatement で渡せないので、単純な文字列置換で置き換える仕組みを用意しています (SQL ファイル中の、$ で始まるバインド変数、あるいは名前が orderBy なバインド変数が、置換の対象となります)。
例4(パラメータその2): SQL 中に ? を書くと、その出現順に引数の $1, $2, …, $N プロパティの値に置き換えて(内部で PreparedStatement を利用しています) SQL を発行します。
例5(パラメータその3): パラメータを配列で渡し、SQLを発行します。
例6(条件分岐): /*IF …*/ /*END*/ により、条件によって動的に発行する SQL を変更できます。
例7(条件分岐その2): example6.sql は、start() が false かつ end() が false などの場合に不正な SQL になることに注意してください (start, end の値によっては、SQL が WHERE で終了したり、WHERE の直後に AND が来る場合があるため)。 この問題を解決するために、/*BEGIN*/ /*END*/ を使います。 BEGIN, END を使うと、すべての条件が不成立だった場合 WHERE そのものを SQL から消し、最初に成立した条件が AND であった場合には、AND を除去する動作を行います。
パラメータ
返却値
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
DatabaseResult fetch (String sql, Number start, Number length, Array [params])
SELECT文を発行後、取得データをフェッチして取得します。
(注意)Microsoft SQL Serverに対してこのメソッドを利用する場合、以下の制約があります。
パラメータ
返却値
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
DatabaseResult getByteReader (String tableName, String columnName, String condition, Array [params], Function [callback])
BLOB または InputStream を取得し、それを元に ByteReader を返します。
BLOB, CLOB 型は使用している DBMS に応じて以下をお使いください。
var storage = new PublicStorage('sample.txt');
storage.createAsBinary(function(writer, error) { // PublicStorage に 3 バイトのデータ [97, 98, 99] をもつ sample.txt を作成します。
if (error != null) {
throw error;
}
writer.write([97, 98, 99]);
});
var db = new TenantDatabase();
var result = db.execute('CREATE TABLE blob_example(blob BLOB)'); // BLOB 型のカラムを持つテーブルを作成します。BLOB に相当する型は各データベース製品で異なることに注意してください。
if (result.error) {
throw Error(result.errorMessage);
}
storage.openAsBinary(function(reader, error) { // blob へデータを追加します。
if (error != null) {
throw error;
}
result = db.execute('INSERT INTO blob_example VALUES(?)', [DbParameter.blob(reader)]);
if (result.error) {
throw Error(result.errorMessage);
}
});
{ // データ読み出し方法1(コールバックを指定する方法)
db.getByteReader('blob_example', 'blob', '', null, function(result) { // blob からデータを読み取ります。この例のように getByteReader にコールバックを渡す場合ユーザはストリームを close する必要がありません。
if (result.error) {
throw Error(result.errorMessage);
}
var data = new Array(3);
result.data.read(data);
Debug.print(data);
});
}
{ // データ読み出し方法2(コールバックを指定しない方法)
result = db.getByteReader('blob_example', 'blob', ''); // getByteReader にコールバックを渡さずにデータを読み取ります。この呼び出し方法ではユーザは戻り値を忘れずに close する必要があります。
try {
if (result.error) {
throw Error(result.errorMessage);
}
var data = new Array(3);
result.data.read(data);
Debug.print(data);
} finally {
if (result.data != null) {
result.data.close();
}
}
}
パラメータ
返却値
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
DatabaseResult getMetaData ()
データベースのメタデータを取得します。
返却値
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
DatabaseResult getTextReader (String tableName, String columnName, String condition, Array [params], Function [callback])
CLOB または Reader を取得し、それを元に TextReader を返します。
BLOB, CLOB 型は使用している DBMS に応じて以下をお使いください。
var storage = new PublicStorage('sample.txt');
storage.createAsText(function(writer, error) { // PublicStorage に 'sample text' という内容をもつ sample.txt を作成します。
if (error != null) {
throw error;
}
writer.write('sample text');
});
var db = new TenantDatabase();
var result = db.execute('CREATE TABLE clob_example(clob CLOB)'); // CLOB 型のカラムを持つテーブルを作成します。CLOB に相当する型は各データベース製品で異なることに注意してください。
if (result.error) {
throw Error(result.errorMessage);
}
storage.openAsText(function(reader, error) { // clob へデータを追加します。
if (error != null) {
throw error;
}
result = db.execute('INSERT INTO clob_example VALUES(?)', [DbParameter.clob(reader)]);
if (result.error) {
throw Error(result.errorMessage);
}
});
{ // データ読み出し方法1(コールバックを指定する方法)
db.getTextReader('clob_example', 'clob', '', null, function(result) { // clob からデータを読み取ります。この例のように getTextReader にコールバックを渡す場合ユーザはストリームを close する必要がありません。
if (result.error) {
throw Error(result.errorMessage);
}
Debug.print(result.data.readLine());
});
}
{ // データ読み出し方法2(コールバックを指定しない方法)
result = db.getTextReader('clob_example', 'clob', ''); // getTextReader にコールバックを渡さずにデータを読み取ります。この呼び出し方法ではユーザは戻り値を忘れずに close する必要があります。
try {
if (result.error) {
throw Error(result.errorMessage);
}
Debug.print(result.data.readLine());
} finally {
if (result.data != null) {
result.data.close();
}
}
}
パラメータ
返却値
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
DatabaseResult insert (String tableName, Object insertData)
指定されたテーブルにデータを挿入します。
対象テーブルからメタデータを取得し、テーブルとカラムの存在チェックが行われます。 指定されたプロパティ値は、対象カラムのJDBC型からAPI内部で自動的に対応するDbParameterに変換されます。
new TenantDatabase().insert('test_table', {
column1: 'test_value1',
column2: 123,
column3: textReader
});
パラメータ
返却値
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Boolean isIncludeClobData ()
SQL実行時に、CLOB型のカラムに格納されているテキストデータの取得結果を変更するフラグを取得します。
このメソッドは intra-mart Accel Platform 2023 Autumn(8.0.34)(データベースアクセスモジュール(スクリプト開発向け)モジュールバージョン 8.0.16)から利用可能です。
返却値
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Boolean isUseBigDecimal ()
decimal/numeric型のカラムの取得方法を変更するフラグを取得します。
このメソッドは intra-mart Accel Platform 2017 Winter(8.0.18)(データベースアクセスモジュール(スクリプト開発向け)モジュールバージョン 8.0.13)から利用可能です。
返却値
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
DatabaseResult remove (String tableName, String condition, Array [params])
データベースデータを削除します。
パラメータ
返却値
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
DatabaseResult select (String sql, Array [params], Number [length])
SELECT文を発行してデータを取得します。
パラメータ
返却値
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
void setIncludeClobData (Boolean includeClobData)
SQL実行時に、CLOB型のカラムに格納されているテキストデータの取得結果を変更するフラグを設定します。
初期状態、またはTenantDatabase#setIncludeClobData(Boolean)でfalseを指定した場合は、SQLで取得時の戻り値に、CLOB型のカラムに格納されているテキストデータを含めずnullを返します。 TenantDatabase#setIncludeClobData(Boolean)でtrueを指定した場合は、SQLで取得時の戻り値に、CLOB型のカラムに格納されているテキストデータを含めて返します。 返却値に含めるため、テキストデータがメモリ上に展開されることになります。 そのため、大きなテキストデータを含むカラムが指定されていた場合に、OutOfMemoryError を引き起こす可能性があります。 true を指定する場合には、大きなテキストデータを含むカラムが返却されないように注意して利用する必要があります。このメソッドは intra-mart Accel Platform 2023 Autumn(8.0.34)(データベースアクセスモジュール(スクリプト開発向け)モジュールバージョン 8.0.16)から利用可能です。
パラメータ
返却値
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
void setUseBigDecimal (Boolean useBigDecimal)
decimal/numeric型のカラムの取得方法を変更するフラグを設定します。
数値型カラムの値を取得時のデータ型を変更します。 初期状態、またはTenantDatabase#setUseBigDecimal(Boolean)でfalseを指定した場合は、数値型カラムは Number型で取得します。 TenantDatabase#setUseBigDecimal(Boolean)でtrueを指定した場合は、数値型カラムは BigDecimal で取得します。 整数型、不動小数点型のカラムについては対応しておりません。 各JDBCにて対象のデータ型を表す java.sql.Typesの値が DECIMAL または NUMERIC である場合は、この設定によりBigDecimalにて数値情報を扱えます。 BigDecimalとして取得可能な型は以下の通りです。
パラメータ
返却値
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
DatabaseResult update (String tableName, Object updateData, String condition, Array [params])
データベースのデータを更新します。
対象テーブルからメタデータを取得し、テーブルとカラムの存在チェックが行われます。 指定されたプロパティ値は、対象カラムのJDBC型からAPI内部で自動的に対応するDbParameterに変換されます。
new TenantDatabase().update('test_table', {
column1: 'test_value1',
column2: 123,
column3: textReader
}, 'column4 LIKE ?', [DbParameter.string('%like%')]);
パラメータ
返却値
|