
はじめまして。
Oracle11gで開発しています。
初歩の初歩の質問なのですが。
下記のように複数のレコードをまとめて、
INSERT先のテーブル(レコードを1個に)に入れ込むまでの処理です。
全てNUMBER型のテーブル列で、NOT NULL制御を施しています。
そのようにすれば、明示的にNULLは無くなり、「0」がデフォルトになると思ったのですが、
「tb_trn_aa_day_r.tx_00」はNULLのままでした。
初期化の「tb_trn_aa_day_r := null;」がまずいのでしょうか?
ちなみに、tb_trn_aa_day_r.tx_00~tx_23に「0」をセットしてもなぜか、NULLとなり、
「tb_trn_aa_day_r.tx_sum」が全てNULLとなってしまいます。
初期j化はどのようにすべきでしょうか?
よろしくお願いします。
/* Aデータ初期化 */
tb_trn_aa_day_r := null;
IF c_aa_data_r.hour = '00' THEN
tb_trn_aa_day_r.tx_00 := TO_NUMBER2(c_aa_data_r.tx);
ELSIF c_aa_data_r.hour = '01' THEN
tb_trn_aa_day_r.tx_01 := TO_NUMBER2(c_aa_data_r.tx);
ELSIF c_aa_data_r.hour = '02' THEN
tb_trn_aa_day_r.tx_02 := TO_NUMBER2(c_aa_data_r.tx);
ELSIF c_aa_data_r.hour = '03' THEN
tb_trn_aa_day_r.tx_03 := TO_NUMBER2(c_aa_data_r.tx);
.....
ELSIF c_aa_data_r.hour = '23' THEN
tb_trn_aa_day_r.tx_23 := TO_NUMBER2(c_aa_data_r.tx);
END IF;
dbms_output.put_line(tb_trn_aa_day_r.tx_00);
/* 集計データ */
tb_trn_aa_day_r.tx_sum := TO_NUMBER2(tb_trn_aa_day_r.tx_sum) + TO_NUMBER2(c_aa_data_r.tx);
/* INSERT処理 */
CREATE OR REPLACE function SYNONIM.TO_NUMBER2(str varchar2) return number
is
begin
return to_number(str);
exception when others then
dbms_output.put_line('TO_NUMBER2 error: ' || SQLERRM);
return 0;
end;
/
No.1ベストアンサー
- 回答日時:
tb_trn_aa_day_r の定義が分からないと、正しい回答は出来ないような気がします・・・
>全てNUMBER型のテーブル列で、NOT NULL制御を施しています。
とありますが、仮に tb_trn_aa_day_r が、テーブル%ROWTYPE だとしても各カラムの制約は引き継がれません。
そこを勘違いされているのかもしれません。
また、
>ちなみに、tb_trn_aa_day_r.tx_00~tx_23に「0」をセットしても
とありますが、これはどのようにセットして確認したのでしょうか?
TO_NUMBER2ですが、strにどんな値が来たときにexceptionブロックに飛ぶことを期待していますか?
空文字やNULLの場合は、exceptionは発生しないのでNULLが返りますよ。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SQL、2つのテーブルで条件一致...
-
update文で改行を入れる
-
SQL*LoaderでCSVから指定した列...
-
カラム位置変更
-
sqlplusで表示が変なので、出力...
-
SQL 複数テーブルのupdate
-
LONG型の先頭250バイトを Varch...
-
テーブル名をカラムとして取得...
-
SQLでデータを1件だけ取得した...
-
半角英数文字の抽出がしたい。
-
件数とデータを同時に取得する...
-
SQLでSUMなどの関数でデータが...
-
SQLで違うテーブルの値を比較し...
-
SQL(oracle)でご助言いただきた...
-
UPDATE文
-
Viewのカラムの長さが不明?
-
ROWNUMでUPDATEをしたいのです...
-
distinct をexistsに変換する
-
異常?なカラムのデータについ...
-
PLSQLでフィールド名の参照につ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
update文で改行を入れる
-
SQL*LoaderでCSVから指定した列...
-
SQL、2つのテーブルで条件一致...
-
SQLでSUMなどの関数でデータが...
-
SQL 複数テーブルのupdate
-
テーブル名をカラムとして取得...
-
sqlplusで表示が変なので、出力...
-
ROWNUMでUPDATEをしたいのです...
-
SQL(oracle)でご助言いただきた...
-
カラム位置変更
-
件数とデータを同時に取得する...
-
OracleのSQLで同テーブルのカラ...
-
LONG型の先頭250バイトを Varch...
-
数値をNUMBER型にするかCHAR型...
-
特定のカラムが更新されたとき...
-
半角英数文字の抽出がしたい。
-
DBからタブ区切りのCSVデータを...
-
sqlで質問です。 aテーブルとb...
-
SQLについて教えて下さい。 主...
-
Oracleのview、synonymをCOMPIL...
おすすめ情報