いつもお世話になります。今回は静的SQLに関して質問です。
次のファイルがあるとします(DB2使用)。
■レイアウト
FILEA
フィールド 桁数 属性
1. FLD010 5 A
2. FLD020 7 A
3. FLD030 1 A
■プログラム(簡略)
EXEC SQL INCLUDE SQLCA;
EXEC SQL BEGIN DECLARE SECTION;
struct DEF_FILE_A
{
char fld010[6];
char fld020[8];
char fld030[2];
} a;
EXEC SQL DECLARE c1 CURSOR FOR
SELECT FLD010, FLD020, FLD030 FROM XXXXXX
EXEC SQL OPEN c1;
EXEC SQL FETCH c1 INTO :a.fld010, a.fld020, a.fld030;
(中略)
EXEC SQL CLOSE c1;
問題なのはSQLコーディング上のホスト変数に関してです。
上記のstruct DEF_FILE_Aの記述のように、実際のファイルの
フィールド長に+1した長さの定義をして(NULL値が入るから)記述しています。これにより、fld010~fld030の値には正しい結果が、
FETCHで入ってきています。
ところが同じように、このファイルに挿入する場合に
下記のように記述しました。
EXEC SQL INSERT
INTO XXXXXX(FLD010, FLD020, FLD030)
VALUES
(
:a.fld010,
:a.fld020,
:a.fld030
);
を、実行しますと、SQLCODEには-433(Value is too long)が
入ってきて、INSERTされません。別に実行時にエラーで落ちたりはしませんが、結果として何も挿入されません。
試しに、ファイルレイアウトと同じ桁数の別のホスト変数を
定義して試してみました。結果はOKでした。
皆さんにお聞きしたいのは、SQLの記述では、入力時は
+1桁したホスト変数で受け、更新や挿入時にはファイルレイアウト
と同じ桁数で定義した別のホスト変数を定義しないといけないのでしょうか?
それとも、根本的に間違った解釈をしているでしょうか?
宜しくご教授頂きたく存じます。
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
NULL値の受け渡しには、標識変数を使います。
ご連絡ありがとうございました。
「標識変数」、利用する機会がありましたら、使ってみます。
説明不足ですみません。
文中の、「フィールド長に+1した長さの定義をして(NULL値が入るから)」は、+1した理由が、文字列の最後にNULLが入った状態で、ホスト変数に取り込むためという意味でした。
INSERT時に、+1したホスト変数をそのまま、VALUESに指定して実行するとエラーになります。しかし、+1しない(つまりDB定義と同じ桁数のホスト変数を別に定義して、実行すると正常に実行されるのです。
皆さんがどのようにされているかお聞きしたかったしだいです。
また何か、ございましたら、ご教授ください。
宜しくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) フォルダ内のワードファイルをPDFに一括変換するVBA 3 2023/06/09 16:51
- 照明・ライト 照明はこまめに切った方が電気代の節約になりますか 3 2022/12/24 16:58
- SQL Server [SQLServer] テーブル名からカラム名を取得する 1 2022/08/23 21:20
- Visual Basic(VBA) データベースから絞り込んでデータを読み込み 1 2023/02/21 19:51
- Excel(エクセル) EXCELの「接続」のSQLのコマンド文字列にて、セルから任意の数値を利用したい 2 2023/03/09 16:43
- その他(プログラミング・Web制作) pythonのグローバル変数 2 2022/11/25 18:02
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- PHP PHP MySql ページング 2 2022/09/20 06:38
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SQLPLUSで結果を画面に表示しない
-
AccessからExcelのファイルを起...
-
selectした結果の余計な余白を...
-
SQL*PLUSでファイルからDELETE文
-
動的にSPOOLファイルのファイル...
-
Oracleでインスタンスを複数に...
-
【Excel】[Expression.Error] ...
-
#1062 - '0' は索引 'PRIMARY' ...
-
共有フォルダに誰が何にアクセ...
-
Becky!で「メールサーバーへの...
-
Access VBA を利用して、フォル...
-
ACCESSのモジュールエラー?
-
特定のエクセルファイルを起動...
-
Excelでmdbファイルが簡単に開...
-
【CSVファイル】先頭の文字列に...
-
拡張子が「cda」のファイルを聞...
-
「○○○.ldb」のAccess レコード ...
-
月が変わったら自動でシートが...
-
「1004:アプリケーション定義...
-
100万行のCSVを10万行ずつのフ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SQLPLUSで結果を画面に表示しない
-
selectした結果の余計な余白を...
-
AccessからExcelのファイルを起...
-
動的にSPOOLファイルのファイル...
-
dmpファイルをインポートせずに...
-
Oracleでインスタンスを複数に...
-
ストアドプロシージャの出力に...
-
ORACLEから各テーブルをCSV形式...
-
Accessのレポート出力をWordに...
-
DB2のコマンドラインexportで複...
-
SQLServer2005でSELECTした結果...
-
PLSQLでファイルに書き込みをし...
-
mod_plsql使用時のDBMS_OUTPUT....
-
SQL*PLUSで 定期的にSQLを発行...
-
sqlplusの操作をシェル上で
-
sqliteはExcelと連携できますか?
-
レポートをpdfに変換する方法
-
DB2にspoolコマンドみたいなの...
-
ファイルから直接SQLを実行...
-
プロファイラを裏で実行継続す...
おすすめ情報