PL/SQLの質問です。
declare でカーソルを宣言し、その中で集合関数を使用しています。(sum)
CHAR型の項目に対して掛けるので、数値でないものが入っていた場合のために
INVALID ERRORのEXCEPTIONをつけました。
BEGINE
FOR rec IN cur_test
LOOP
----
END LOOP;
EXCEPTION
WHEN INVALID_NUMBER THEN
------
END;
しかし、このやりかただと、一部のレコードでエラーがあっても、
全てのレコードがエラーと判断されてしまいます。
カーソルで集合関数エラーが発生したレコードのみEXCEPTIONで扱い、
それ以外のデータはきちんとチェックしたいのですが、
そのような方法はあるでしょうか?
よろしくお願いします。
No.1ベストアンサー
- 回答日時:
こんにちは。
表(TEST)を以下とします。
*************************************
SQL> desc test
名前 型
--------
COL1 CHAR(1)
COL2 CHAR(1)
*************************************
データは、こんなかんじ。
*************************************
SQL> select * FROM TEST ;
COL1 COL2
- -
1 1
1 2
2 3
2 4
3 1
3 a
4 9
*************************************
ここで、COL1で、GROUP BYして、COL2のSUMを取る。
ただし、COL2には、数値以外があり(上の例では「a」)とします。
いきなり、全部をカーソルとすると、カーソルのレコードセットを作る時点でエラーとなるので、
(1)COL1をGROUP BYするカーソルを準備
(2)COL1を読んで、その値で、COL2をSUM
ここで、数値例外が出ても、継続するために、(2)の部分を別ブロックとします。
こんな感じでしょうか。
*********************************************
DECLARE
CURSOR cur_test IS SELECT COL1 FROM TEST GROUP BY col1 ;
v_sum NUMBER;
flg BOOLEAN ;
BEGIN
FOR rec IN cur_test LOOP
flg := TRUE ;
/*****************************************/
BEGIN
SELECT SUM(COL2) INTO v_sum FROM TEST WHERE COL1 = rec.col1 ;
EXCEPTION
WHEN INVALID_NUMBER THEN
flg := FALSE ;
END;
/*********************************************/
IF ( flg ) THEN
dbms_output.put_line('v_sum=' || v_sum);
END IF ;
END LOOP ;
END;
/
*********************************************
直接の回答になってなくて、もうしわけないですが、参考になられましたでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Excel VBA 複数ブックシートごとにデータを統合する方法について 4 2022/05/20 14:23
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Visual Basic(VBA) Excelで下記のようにマクロを作ったところ、一回目は実行できたのですが、二回目以降「実行時エラー1 1 2022/03/25 08:08
- その他(データベース) 更新クエリをリンクデータベーステーブルに実行し実行時エラー3362固有インデックスに重複する値が含ま 1 2022/09/21 11:44
- PostgreSQL DBFluteについて質問です。 環境:PostgreSQL java8 前提:webアプリケーショ 1 2022/07/07 00:49
- Visual Basic(VBA) VBA 改行コードの取り方 1 2022/03/22 14:14
- 会計ソフト・業務用ソフト ExcelのSUM関数と+の違い 2 2022/07/12 18:32
- Access(アクセス) Access IF文でテーブルに存在しない場合の処理について 2 2022/10/10 18:09
- Excel(エクセル) フォルダ内の全ブックのシート名を変更したい 7 2022/09/22 21:34
- Visual Basic(VBA) VBAでfunctionを利用しようとしたときに「引数は省略できません」というエラーが出ます 1 2022/10/15 16:30
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Texの枠囲み調節
-
PL/SQLでのSQL文法
-
今日の日付が入った行のデータ...
-
likeとsubstrの使いわけについて
-
エクセルVBAでUserFormを起動し...
-
Accessのマクロでモジュールを...
-
Statement ignored というエラー
-
sqlplusでヘッダーが付かない
-
SQLで部分的にGROUP BYしたいとき
-
時間項目を60進数から10進数へ...
-
あいまい検索のパフォーマンス...
-
SQL*PLUSでの分秒までの表示の仕方
-
wordの差し込み印刷での日付表示
-
テーブルの主キーをdate型...
-
今まで使ってたユーザーフォー...
-
アクセス 意図せずサブプロシー...
-
キャッシュを使わずにSELECTを...
-
日付型なら変数の先頭になん...
-
ODBCリンクの際にACCESSでは読...
-
date型のインデックス
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PL/SQLカーソルの2重FORループ...
-
PL/SQLでのSQL文法
-
Texの枠囲み調節
-
カーソル定義での条件分岐
-
ORA-00904:無効な識別子の回避...
-
PL/SQLのOPEN cursor_name FOR...
-
mysqlのcase文で複数の条件を指...
-
自動連番でカラムを更新したい
-
カーソルフェッチにて、最終レ...
-
PL/SQL カーソルのFROM句にカー...
-
PL/SQLにて、マスタから取得し...
-
カーソルループ内部でログを出力
-
【PL/SQL】LOOPした動的SQLにて...
-
カーソルで集合関数を使った場...
-
ROW_NUMBER BY PL/SQL
-
T-SQLのカーソルで
-
PL/SQLでの参照
-
PL/SQLのカーソルについて
-
PL/SQLでカーソルを指定する方法
-
Accessのマクロでモジュールを...
おすすめ情報