DatabaseLink`
DatabaseLink`

SQLInsert

SQLInsert[conn,table,cols,data]

SQL接続中の表にデータを挿入する.

詳細とオプション

  • SQLInsertを使うためには,まずNeeds["DatabaseLink`"]を使って DatabaseLink をロードする必要がある.
  • 使用可能なオプション
  • "ColumnSymbols"None結果に関連付けるシンボル
    "EscapeProcessing"TrueプされたJDBC関数シンタックスを変換する
    "FetchSize"AutomaticJDBCドライバへの結果セットの大きさの提示
    "GetAsStrings"Falseすべての結果を文字列として返す
    "GetGeneratedKeys"False更新されたレコードに関連付けられたキーを返す
    "MaxFieldSize"Automatic可変長の列のタイプのバイト制限
    "MaxRows"Automatic返される最大行数
    "ShowColumnHeadings"False結果とともに列見出しを返すかどうか
    "Timeout"$SQLTimeoutクエリのタイムアウト
    "BatchSize" 1000この大きさのレコードのバッチで挿入を処理する
    "JavaBatching" TrueWolfram言語層ではなく,Java層でパラメータのバッチ処理を行う

例題

すべて開くすべて閉じる

  (1)

このセクションの例を実際に試してみて,記載の通りに動作しなかった場合は,データベースの例の使用で述べているようにDatabaseLink`DatabaseExamples`パッケージを使ってデータベースをインストールするか,もとの状態に戻す必要がある可能性がある.

接続を開始する:

1行挿入する:

複数行挿入する:

スコープ  (1)

日付と時刻の使用  (1)

日付と時刻のデータは,DateObjectTimeObject,またはSQLDateTimeを使って与えることができる.コラムタイプがDATETIMEDATETIME である表を作成する:

挿入するデータをいくつか生成する:

生成されたデータを挿入する:

選択された日付と時刻は頭部SQLDateTimeで返される:

選択されたデータをもとの形式で表現する:

表をクリアする:

DATE列は与えられた日付構造の分,時間,秒の要素を無視する.TIME列は与えられた日付構造の年,月,日の要素を無視する:

日付と時刻の両方の要素を記録する列のタイプについては,時刻は与えられていない場合は00:00:00であるとみなされる.日付は与えられていない場合は今日であるとみなされる:

オプション  (2)

"BatchSize"  (1)

長いパラメータリストを含むクエリを生成する際に,使用メモリ量と速度のトレードオフをバッチサイズで調整する:

挿入する乱数データを生成する:

カーネルとJava層両方の使用メモリ量を計算する:

小さいバッチサイズでクエリを実行すると,Java側のメモリ使用量は比較的小さくなる:

再設定する:

大きいバッチサイズでもう一度実行すると,必要なサーバートリップが少なくなる:

Javaの使用メモリ量は今回の方が多い:

"JavaBatching"  (1)

パラメータのバッチ処理をJava層からWolfram言語層に切り換え,速度を落とす代りにメモリ使用量を減らす:

挿入する乱数データを生成する:

カーネル層とJava層の両方を含む使用メモリ量を計算する:

Java側でバッチ処理を行ってクエリを実行する:

再設定する:

Wolfram言語側でバッチ処理を行ってクエリを実行する:

今回の総メモリ使用量は少なくなった:

考えられる問題  (1)

DateObjectはTimeZoneオプションの設定が入力されなかった場合にはデフォルトの$TimeZoneを使用する. 時刻帯の数値は,その日付が夏時間に相当する場合でも調整されない.

$TimeZoneの値は数値である.

この時刻帯設定はDateObject[{2017,1,1}]で使用される.

SQLDateTimeが返す時間は「米国シカゴ」のデフォルトの時刻帯を使って返される.

この問題を回避するために,名前付きの時刻帯IDまたは$TimeZoneEntityを使用する.