
<テーブル>
T1 C1 VARCHAR2(7) NOTNULL
C2 NUMBER(13)
C3 VARCHAR2(8)
<プログラム>
VARCHAR hT1_C1[7];
VARCHAR hT1_C2[13+1];
VARCHAR hT1_C3[8];
short iT1_C1;
short iT1_C2;
short iT1_C3;
EXEC SQL
INSERT INTO T1 (
T1.C1,
T1.C2,
T1.C3
)
VALUES (
:hT1_C1 INDICATOR :iT1_C1,
TO_NUMBER(:hT1_C2),
:hT1_C3 INDICATOR :iT1_C3
)
;
<事象>
SQLエラー[-1485]が発生
<補足>
C1、C2はNULL以外の値を設定。
C3はNULLを設定。
hT1_C3.arr = "";
hT1_C3.len = 0;
iT1_C3 = -1;
<質問>
1、NULLの設定方法が間違っているのでしょうか?
2、上記プログラムの「EXECSQL~」の部分を変更せずに解消する方法はあるのでしょうか?
3、SQLエラーコード「-1458」は、どのような場合に発生するのでしょうか?
以上、回答お願いいたします。
No.3ベストアンサー
- 回答日時:
こんにちわ。
NULL をInsert する方法ですが、
strcpy(hT1_C3.arr, ""); hT1_C3.len = 0; iT1_C3 = -1;
としておいて、Insert すればOk の筈です。
※ hT1_C1, hT1_C3 変数についてですが、NULL 文字を入れるための
領域も併せて確保しておいた方が、扱いが楽になると思いますょ。
ユーザ登録 (無料) が必要ですが、OTN Japan にPDF 形式でマニュアル
が公開されていますので、こちらからDownload されてはいかがでしょうか?
標識変数の使い方については、「Pro*C/C++ Precompiler プログラマーズ・ガイド」
に説明があります。
参考URL:http://technet.oracle.co.jp/
この回答への補足
<訂正>
補足欄の表記に誤りがありました。
(誤)hT1_C3.arr = ""
(正)strcpy(hT1_C3.arr, "");
<リファレンスより抜粋>
ORA-01458 可変長文字列の長さが無効です。
原因:可変長文字列をバインドまたは定義していますが、
バッファ長が必要最低限の長さより小さくなっています。
処置:バッファ・サイズを大きくするか、他のデータ型を使用してください。
<疑問>
「可変長文字列の長さ」は、おそらく「hT1_C3.len」だと思うのですが、
「バッファ長」、「バッファサイズ」とはなんのことなのでしょう?(^^;
<結果>
ご指摘の方法でNULLをINSERTできるのですが、
やはりINSERTするデータによっては「ORA-01458」が発生するようです。
引き続き調査をしたいと思います。
<最終結果>
プログラム正常に動作いたしました。
ありがとうございます。m(_ _)m
原因は、ホスト変数にデータを設定する処理にありました。
例>
strcpy(hT1_C3.arr,"");
hT1_C3.len = 123; /* ←文字列長の設定に誤りがあった */
iT1_C3 = -1;
上記の処理そのままではありませんが、
ホスト変数の領域を逸脱するような、
文字列長を設定していたため、
今回のようなエラーが発生していました(^^;
No.2
- 回答日時:
VARCHAR hT1_C3[8];
は展開すると
struct
{
int len
char arr[8];
} ;
になります。
そのまま代入しちゃダメです。
せめて
hT1_C3.arr[0] = 0x00;
とでもしましょう。
この回答への補足
<訂正>
補足欄の表記に誤りがありました。
(誤)hT1_C3.arr = ""
(正)strcpy(hT1_C3.arr, "");
<結果>
ご指摘の通りです。
hT1_C3.arr = "";
↓
hT1_C3.arr = "\0";
↓
hT1_C3.arr = 0x00;
↓
hT1_C3.arr = Null;
Nullポインタを代入しているように見えてしまいますね(^^;
C言語の経験が浅いため省略して表記したため、
誤った表記になっていました。
No.1
- 回答日時:
"" じゃなくて 直接 Null と入れるのだと思います。
hT1_C3.arr =Null;
この回答への補足
<訂正>
補足欄の表記に誤りがありました。
(誤)hT1_C3.arr = ""
(正)strcpy(hT1_C3.arr, "");
<結果>
ご指摘の通りです。
hT1_C3.arr = "";
↓
hT1_C3.arr = "\0";
↓
hT1_C3.arr = 0x00;
↓
hT1_C3.arr = Null;
Nullポインタを代入しているように見えてしまいますね(^^;
C言語の経験が浅いため省略して表記したため、
誤った表記になっていました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 数学 a1,a2, a3をベクトル空間Vのベクトルとする。a1+a2,a2+a3,a3+a1が一次独立のと 2 2022/10/02 15:55
- 数学 座標平面上に放物線 C1: y=ax^2+b^x+4 がある。 C1と直線 y=1に関して対称で あ 1 2023/07/16 22:27
- C言語・C++・C# c言語でユーザ関数を利用して複素数のべき乗と絶対値の数列を計算するプログラムが作りたいです。 3 2023/01/29 22:13
- Excel(エクセル) エクセル関数について 2 2022/05/30 14:36
- C言語・C++・C# numpyスライス機能を使った数値計算 2 2023/05/08 16:01
- Excel(エクセル) Excel での関数についての質問です。 例えばA列に商品名を、B列に個数をそれぞれ入力しています。 7 2023/05/13 10:51
- Excel(エクセル) Excelについて質問があります。 関数の数値入力についてなのですが、 b1にー c1に数値 がある 2 2023/05/28 12:30
- Excel(エクセル) スプレッドシートについて A1÷B1の値をC1に、A2÷B2をC2、A3÷B3をC3…といった感じで 1 2022/05/17 20:24
- MySQL テーブル作成です。どこかのスペルが間違っているか記号など スペースかな? 1 2022/10/01 05:08
- その他(コンピューター・テクノロジー) パリティビットの検出・訂正について 2 2022/07/09 12:35
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
不具合が発生(API・C言語)
-
COBOLのピリオド
-
チェックボックスのValueを残し...
-
Fortranプログラム-if文について
-
プロローグ(=Prolog)について質...
-
乱数を扱いたい
-
C言語の質問です。
-
自然数の和のプログラム
-
C言語のエラーについてです
-
最近c言語始めたばかりなんです...
-
PIC 初心者で行き詰まりま...
-
c言語とgnu
-
Prologについて
-
PICのA/Dを使うプログラムにつ...
-
Fortranの問題です。急いでます...
-
Excelをcsvとして保存して、VB....
-
ネットワーク並列処理が出来る...
-
65536は2の何乗なのでしょうか?
-
RealPlayer(無償版)を
-
Bluestacks内でダウンロードし...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
変数の値が勝手に変化する原因
-
【JAVA】数字をひし形に出力す...
-
3つの整数のうち奇数のみを表示...
-
Sublime Text 3でのFortranプロ...
-
fortran if文
-
main関数終了時のreturnの意味は?
-
Fortran90についての質問です。
-
360度を超える角度
-
Fortran "実引数の型が仮引数の...
-
N88basicを用いたGPIB制御
-
JCLの基本について教えてください
-
COBOLのピリオド
-
プログラミング
-
C言語からのFortranプログラム...
-
ProC 固定SQLでNULLってどう表...
-
4桁の数値を逆に表示されるプ...
-
Tiny Basicのプログラムです。。
-
CommonLispでハノイの塔の円盤...
-
プログラミングの課題で1万円か...
-
プログラムの実行回数
おすすめ情報