動的SQLでのDECODEがうまくいかず困っています。
SELECT DECODE(A.ROWID,NULL,'0','1')
FROM A
WHERE A.CODE = 9999
の様な感じのSQLを発行しているのですが、
戻ってくるI変数は1、V変数の中身はNULLとなっています。
どなたか対処法をご存じの方がいらっしゃいましたら教えてください。
よろしくお願いします。
ちなみに、DECODE指定しないとROWIDはちゃんと取得できますので、
対処方法はあると言えばあるのですが。。。
動作環境
OS :Red Hat Enterprise Linux AS release 3
Oracle:10g (10.1.0.2.0)
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
そもそも、I変数やV変数に関する説明がないところで
それらについて質問されても、何も回答することができません。
DECODE式は、静的なSQLであっても、動的なSQLであっても
同様に”正しく”動作します。
ちなみに、書かれたSQLでROWIDをDECODEしていますが、
ROWID擬似列が、NULLとなることはないので、固定1を
求めるDECODE式になっていませんか?
DECODE式をは別に、ROWIDが必要なら・・
select decode(なんたら),rowid rid from a where なんたら;
のように、ROWIDを明記すれば良いと思いますよ。
この回答への補足
SQLの例が悪くてすいません。
実際は複数のテーブルを右結合等でリレーションしています。
ですので、テーブルAに該当するレコードが無かった場合には、ROWIDはNULLになると思います。
SELECT A.NAME, A.ADDR, DECODE(A.ROWID,NULL,'0','1')
FROM A, B
WHERE A.CODE(+) = B.CODE
AND A.ID(+) = B.ID
AND B.CODE = '999'
実際、できあがったSQLをSQL*Plus等で実行すると、DECODEが行われます。
ex) Bには、CODE=999、ID=001、002があり、
Aには、CODE=999、ID=001しかなかった場合、
NAME ADDR DECODE
---- ---- ------
name addr '1'
- - '0' ; -は実際はNULL
I変数、V変数はSQLDA構造体の項目です。
動的SQL発行前に領域確保し、ここへ情報が返却され、
プログラマーズガイドには以下の様な説明がなされています。
struct SQLDA
{
long N; /* Descriptor size in number of entries */
char **V; /* Ptr to Arr of addresses of main variables */
long *L; /* Ptr to Arr of lengths of buffers */
short *T; /* Ptr to Arr of types of buffers */
short **I; /* Ptr to Arr of addresses of indicator vars */
long F; /* Number of variables found by DESCRIBE */
char **S; /* Ptr to Arr of variable name pointers */
short *M; /* Ptr to Arr of max lengths of var. names */
short *C; /* Ptr to Arr of current lengths of var. names */
char **X; /* Ptr to Arr of ind. var. name pointers */
short *Y; /* Ptr to Arr of max lengths of ind. var. names */
short *Z; /* Ptr to Arr of cur lengths of ind. var. names */
};
・I変数は、インジケータ変数を格納するデータ・バッファのアドレスの配列へのポインタです。
インジケータ変数の値が-1 のとき、関連するバインド変数の値はNULL です。
・V変数は、選択リストまたはバインド変数の値を格納するデータ・バッファのアドレスからなる
配列のポインタです。
ですので、I変数に-1が返却されれば値を取っていないと言うことですが、1が返却されていますので、
何かしらの値を取得していると思われるのですが、中身がNULLと言う結果になっています。
DECODE指定を行わないと 'AAA....'の文字列がV変数の中に設定されています。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) アクセス 有効なフィールド名、または式として認識できませんのエラー 3 2022/08/19 11:53
- PHP DBのハッシュ化したパスワードをpassword_verifyで戻し照合したのですが上手く行きません 2 2023/02/06 13:24
- その他(プログラミング・Web制作) Rでのスクリプトのご相談 3 2022/12/08 16:22
- PostgreSQL DBFluteについて質問です。 環境:PostgreSQL java8 前提:webアプリケーショ 1 2022/07/07 00:49
- SQL Server [SQLServer] テーブル名からカラム名を取得する 1 2022/08/23 21:20
- MySQL SQLです。こんな感じですか?あってますか? うまくいきません教えてくださいお願いします 1 2023/07/08 15:27
- MySQL SQLです。下記の問合せを行うクエリを、PhpMyAdminで作成して実行せよ。 「昨年の各月の総降 1 2023/07/01 00:32
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- その他(プログラミング・Web制作) pythonのこのエラーがわかりません 3 2022/11/16 14:54
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Oracleのビュー作成時に「指定...
-
ROWNUMについて
-
ORACLEで一番最初の結果だけを...
-
WITH句で複数テーブルを定義す...
-
UPDATE文でこのような更...
-
Oracle SQLにて固定長でデータ...
-
distinct で抽出したレコード件数
-
Excel 2019 のピボットテーブル...
-
「直需」の意味を教えてください
-
エクセルVBAで5行目からオート...
-
Oracle 2つのDate型の値の差を...
-
Accessのフィールド数が255しか...
-
Accessでテーブル名やクエリ名...
-
Access テキスト型に対する指定...
-
【Access】フォームで自動計算...
-
ACCESSのクエリで集計で、先頭...
-
Excel→Accessへ貼り付けがおかしい
-
Accessでテーブルの値をテキス...
-
変数が選択リストにありません
-
Accessクエリーで両方のテーブ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ORACLEで一番最初の結果だけを...
-
Oracleのビュー作成時に「指定...
-
Oracle SQLにて固定長でデータ...
-
ROWNUMについて
-
DB2でREPLACEによる文字列の置換
-
ある値以上の空き番の最小値を...
-
distinct で抽出したレコード件数
-
WITH句で複数テーブルを定義す...
-
抽出結果を1件ずつ次の抽出条件...
-
sqlplusで日本語入力
-
VBAのRows.Selectについて
-
group by でselect
-
時間の重複を加味した連続時間S...
-
PL/SQL 複数件同じ値で更新す...
-
重複
-
動的SQLでのDECODE
-
sqlの条件文に関して
-
Excel 2019 のピボットテーブル...
-
「直需」の意味を教えてください
-
エクセルVBAで5行目からオート...
おすすめ情報