SQLコマンドでのWhere句での変数使用方法
- このフォーラムに新しいトピックを立てることはできません
- このフォーラムではゲスト投稿が禁止されています
Ace_Nagashim
投稿数: 105
![一人前 一人前](../../uploads/rank3dbf8ea81e642.gif)
PervasiveからSQL Serverへの切替を検討しています。
集計・更新のスピードアップをはかるべく、SQLコマンドの
使用を検証しています。
そこで、Where句などでの範囲指定を行う場合の
下限値・上限値に変数を使用する方法が解りません。
どなたかご教授をお願いします。
集計・更新のスピードアップをはかるべく、SQLコマンドの
使用を検証しています。
そこで、Where句などでの範囲指定を行う場合の
下限値・上限値に変数を使用する方法が解りません。
どなたかご教授をお願いします。
投票数:0
平均点:0.00
Tanda
投稿数: 2151
![長老 長老](../../uploads/rank3dbf8eb1a72e7.gif)
Ace_Nagashim さん、こんにちは。
Where句を使用する場合は、変数の値がそのタスクの実行前に代入
されている必要があるようです。
つまり、そのタスク自身で定義された変数項目ではWhere句の評価に
手遅れでして、そのタスクの上位タスクで変数の値が定められている
必要があるようです。
上位タスクで変数の値を代入してみてください。きっと、うまく行きますよ。
Where句を使用する場合は、変数の値がそのタスクの実行前に代入
されている必要があるようです。
つまり、そのタスク自身で定義された変数項目ではWhere句の評価に
手遅れでして、そのタスクの上位タスクで変数の値が定められている
必要があるようです。
上位タスクで変数の値を代入してみてください。きっと、うまく行きますよ。
投票数:0
平均点:0.00
Ace_Nagashim
投稿数: 105
![一人前 一人前](../../uploads/rank3dbf8ea81e642.gif)
Tandaさん ご教授ありがとうございます。
親タスクで次の変数を用意し、値をセットします。
A.部品番号
B.開始発生日
C.終了発生日
子タスクでSQLコマンドを設定しています。
SELECT NS_社内品番,NS_発生日付,NS_データ区分,NS_数量,
NS_単価,NS_金額 FROM 入出庫明細
これに範囲式として、NS_社内品番 = A.部品番号
NS_発生日付 = B.開始発生日〜C.終了発生日 を定義したいのです。
Where句の具体的な記述が解りません。
Where NS_社内品番 = XXXXXXXX で
XXXXXXXX に A 、部品番号 、A.部品番号 を試みましたが
エラーになってしまいます。
どのように記述したらよいか、ご教授をお願いします。
親タスクで次の変数を用意し、値をセットします。
A.部品番号
B.開始発生日
C.終了発生日
子タスクでSQLコマンドを設定しています。
SELECT NS_社内品番,NS_発生日付,NS_データ区分,NS_数量,
NS_単価,NS_金額 FROM 入出庫明細
これに範囲式として、NS_社内品番 = A.部品番号
NS_発生日付 = B.開始発生日〜C.終了発生日 を定義したいのです。
Where句の具体的な記述が解りません。
Where NS_社内品番 = XXXXXXXX で
XXXXXXXX に A 、部品番号 、A.部品番号 を試みましたが
エラーになってしまいます。
どのように記述したらよいか、ご教授をお願いします。
投票数:0
平均点:0.00
Tanda
投稿数: 2151
![長老 長老](../../uploads/rank3dbf8eb1a72e7.gif)
Ace_Nagashim さん、こんにちは。
SQL コマンドを直接記述しようとすると、SQL コマンドの知識が必要となって
きます。これに対して、Magic では SQL コマンドを記述しなくても、SQL の
Where 句が発行できるようになっています。
Magic から SQL Where 句を発行するには、「タスク環境」→「範囲/位置付」
→「SQL Where句」→「Magic SQL」→「式」で、ここに普通に Magic の定義式
を記述するだけです。
これで、バックグラウンドでは適切な SQL Where句が発行されます。式には
普通に、「=、<、>」等の等号、不等号記号が使えますよ。
SQL コマンドを直接記述しようとすると、SQL コマンドの知識が必要となって
きます。これに対して、Magic では SQL コマンドを記述しなくても、SQL の
Where 句が発行できるようになっています。
Magic から SQL Where 句を発行するには、「タスク環境」→「範囲/位置付」
→「SQL Where句」→「Magic SQL」→「式」で、ここに普通に Magic の定義式
を記述するだけです。
これで、バックグラウンドでは適切な SQL Where句が発行されます。式には
普通に、「=、<、>」等の等号、不等号記号が使えますよ。
投票数:0
平均点:0.00
tiyn
投稿数: 70
![常連 常連](../../uploads/rank3dbf8e9e7d88d.gif)
oracleの場合
メインソースを使わず
あくまでSQLコマンドでされるのであれば、
SQLコマンド
SELECT NS_社内品番,
NS_発生日付,
NS_データ区分,
NS_数量,
NS_単価,
NS_金額
FROM 入出庫明細
WHERE NS_社内品番 = :1
入力パラメータ
1個目 A.部品番号
になると思いますが、SQLSERVERだと勝手が違うのですかね。
メインソースを使わず
あくまでSQLコマンドでされるのであれば、
SQLコマンド
SELECT NS_社内品番,
NS_発生日付,
NS_データ区分,
NS_数量,
NS_単価,
NS_金額
FROM 入出庫明細
WHERE NS_社内品番 = :1
入力パラメータ
1個目 A.部品番号
になると思いますが、SQLSERVERだと勝手が違うのですかね。
投票数:0
平均点:0.00
Ace_Nagashim
投稿数: 105
![一人前 一人前](../../uploads/rank3dbf8ea81e642.gif)
Tandaさん、ご教授ありがとうございました。
MagicSQLの式に範囲式を記述することで、レコードメインの
範囲指定で行っていた状態から比べて半分ぐらいの時間で
処理できるようになりました。
tiynさん、ご教授ありがとうございます。
変数は :1、:2 の様に記述して、入力パラメータに
セットするのですね。
この記述方法が解らないでいました。
SQLコマンドを使った方法を試してみます。
ありがとうございました。
MagicSQLの式に範囲式を記述することで、レコードメインの
範囲指定で行っていた状態から比べて半分ぐらいの時間で
処理できるようになりました。
tiynさん、ご教授ありがとうございます。
変数は :1、:2 の様に記述して、入力パラメータに
セットするのですね。
この記述方法が解らないでいました。
SQLコマンドを使った方法を試してみます。
ありがとうございました。
投票数:0
平均点:0.00
Tanda
投稿数: 2151
![長老 長老](../../uploads/rank3dbf8eb1a72e7.gif)
Ace_Nagashim さん、こんにちは。
あとは、バックグラウンドで発行される SQL コマンドのログを取って
みて、定義式の内容が思惑通りに発行されているかを確認すれば、
もっと早くなるかもしれませんね。
あとは、バックグラウンドで発行される SQL コマンドのログを取って
みて、定義式の内容が思惑通りに発行されているかを確認すれば、
もっと早くなるかもしれませんね。
投票数:0
平均点:0.00