はじめまして。
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で質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Formulaプロパティーを使ってセルに数式を組んだのですが簡潔にしたい。 3 2022/08/21 20:51
- 英語 "not to worry"の元の表現等について 1 2023/06/22 14:44
- Excel(エクセル) 週毎の集計 2 2023/08/04 16:56
- その他(プログラミング・Web制作) pythonのmap、結果の利用は1度だけ? 5 2022/06/11 12:33
- 電車・路線・地下鉄 TX-1000系 TX-2000系 TX-3000系 1 2022/09/19 14:06
- Excel(エクセル) EXCEL 行固定列移動 3 2022/04/04 09:27
- Visual Basic(VBA) Excel VBAでAA(BBB) → BBB.AA に置換したい 2 2022/10/30 13:59
- お酒・アルコール 断酒団体AAについての質問です 今年に入ってからお酒をやめました 自助グループとして「断酒会」と「A 3 2023/05/22 11:39
- タブレット リカバリ用のUSBメモリ。 6 2022/10/24 15:19
- Visual Basic(VBA) 今日の日付が過ぎたらその行を削除したい 1 2023/04/01 20:06
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教えるわが家の防犯対策術!
ホームセキュリティのプロが、家庭の防犯対策を真剣に考える 2組のご夫婦へ実際の防犯対策術をご紹介!どうすれば家と家族を守れるのかを教えます!
-
SELECT INTOで一度に複数の変数へ代入をするにはどのようにすれがよいでしょうか?
PostgreSQL
-
Oracleのデータ型、NUMBERについて
その他(データベース)
-
PL/SQLカーソルの2重FORループができません
Oracle
-
-
4
Statement ignored というエラー
Oracle
-
5
カーソル0件の時にエラーを発生させる
Oracle
-
6
PL/SQLでのSQL文法
その他(データベース)
-
7
NUMBER(N,M) としたときの、格納データサイズ(バイト)
Oracle
-
8
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
-
9
SQLで特定の項目の重複のみを排除した全項目を取得する方法
その他(プログラミング・Web制作)
-
10
PL/SQLでログを確認したい。
Oracle
-
11
CASE文のエラーについて
Oracle
-
12
Excelで"で囲む方法
Excel(エクセル)
-
13
SQL*Loaderで、データを加工してロードしたいです。
Oracle
-
14
PL/SQL PLS-00103エラーについて
Oracle
-
15
CASEでBETWEEN制約
Oracle
-
16
コマンドプロンプトの「%1」と「%~1」の違いがわからない
その他(プログラミング・Web制作)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SQLでSUMなどの関数でデータが...
-
テーブル名をカラムとして取得...
-
update文で改行を入れる
-
SQL 複数テーブルのupdate
-
特定のカラムが更新されたとき...
-
SQL、2つのテーブルで条件一致...
-
ROWNUMでUPDATEをしたいのです...
-
カラム位置変更
-
sqlで質問です。 aテーブルとb...
-
Oracle(オラクル)で、日付時刻...
-
データの並び替え
-
半角英数文字の抽出がしたい。
-
あるテーブルだけをキャッシュ...
-
UPDATE文
-
sqlplusで表示が変なので、出力...
-
SQLで違うテーブルの値を比較し...
-
SQLでデータを1件だけ取得した...
-
INDEX RANGE SCAN とは?
-
ワークテーブルって何?
-
OracleのSQLで同テーブルのカラ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
テーブル名をカラムとして取得...
-
SQL、2つのテーブルで条件一致...
-
update文で改行を入れる
-
ROWNUMでUPDATEをしたいのです...
-
sqlplusで表示が変なので、出力...
-
SQL 複数テーブルのupdate
-
SQL*LoaderでCSVから指定した列...
-
SQLでSUMなどの関数でデータが...
-
SQLで違うテーブルの値を比較し...
-
カラム位置変更
-
UPDATE文
-
件数とデータを同時に取得する...
-
特定のカラムが更新されたとき...
-
Oracle(オラクル)で、日付時刻...
-
半角英数文字の抽出がしたい。
-
数値をNUMBER型にするかCHAR型...
-
DELETE文とロックについて
-
Oracleのview、synonymをCOMPIL...
-
SQL(oracle)でご助言いただきた...
-
SELECT文で指定桁数分抽出する...
おすすめ情報