
PL/SQLを勉強し始めたのですが、テーブルを作成してから、データを流し込むという処理をしたいのですが、テーブルの作成に失敗しらたら、処理を終了させるという処理はできないのでしょうか?
それとも、考え方が違うのでしょうか?アドバイスお願いします。
次のようにPL/SQLを作成しています。
例)
declare
curHandle1 INTEGER;
begin
curHandle1 := DBMS_SQL.OPEN_CURSOR;
DBMS_SQL.PARSE(curHandle1, 'create table xxx as select * from xxx where ID=-1', DBMS_SQL.V7);
DBMS_SQL.CLOSE_CURSOR(curHandle1);
exception
when OTHERS then
エラーになったら、処理終了したい(次のブロックにいきたくない)
end;
declare
begin
insert into xxx NOLOGGING values (1,'test');
end;
よろしくお願いします。
No.1ベストアンサー
- 回答日時:
下記ぐらいでいいのではないのでしょうか?
create table でエラーが発生した場合、PL/SQLブロック(BEGIN,ENDで
括られた範囲)内の次の行は実行されず、次の実行はException以下の行にジャンプします。
declare
curHandle1 INTEGER;
begin
curHandle1 := DBMS_SQL.OPEN_CURSOR;
DBMS_SQL.PARSE(curHandle1, 'create table xxx as select * from xxx where ID=-1', DBMS_SQL.V7);
DBMS_SQL.CLOSE_CURSOR(curHandle1);
insert into xxx NOLOGGING values (1,'test');
exception
when OTHERS then
・・・・
end;
No.3
- 回答日時:
まず、なぜブロックを分けるのですか?(分けるからには理由があるんですよね?)
一つのブロック内で処理を書いて、例外が発生すれば、後続の処理は打ち切られます。
通常、例外処理を書くのは、例外をキャッチして何らの処理を行いたい場合です。
例えば、#2に書かれているような、例外をキャッチしてRAISEするだけなら、
例外処理は書かなくても一緒です。
(例外時にエラーを表示するなど何らの処理があって初めて例外処理に意味があります)
No.2
- 回答日時:
1ブロック処理だけでしたら、nitorinさんの方法でよいですが、
複数ブロックがあるのでしたら、下記のようにしないといけないです。
declare
・・・
begin
・・・
begin
・・・
exception
when others then
raise;
end;
begin
・・・
exception
when others then
raise;
end;
exception
when others then
・・・
end;
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PostgreSQL DBFluteについて質問です。 環境:PostgreSQL java8 前提:webアプリケーショ 1 2022/07/07 00:49
- SQL Server [SQLServer] テーブル名からカラム名を取得する 1 2022/08/23 21:20
- Oracle sqlで質問です。 aテーブルとbテーブルがあり、下記のsqlで取得したidとnameに一致しないレ 1 2022/04/20 20:34
- Access(アクセス) アクセス 有効なフィールド名、または式として認識できませんのエラー 3 2022/08/19 11:53
- その他(プログラミング・Web制作) Rでのスクリプトのご相談 3 2022/12/08 16:22
- Visual Basic(VBA) データベースから絞り込んでデータを読み込み 1 2023/02/21 19:51
- PHP プログラムコードを入力する場合改行してもいいですか? 2 2022/10/02 16:05
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- MySQL SQLです。下記の問合せを行うクエリを、PhpMyAdminで作成して実行せよ。 「昨年の各月の総降 1 2023/07/01 00:32
- MySQL SQLです。こんな感じですか?あってますか? うまくいきません教えてくださいお願いします 1 2023/07/08 15:27
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
カーソル0件の時にエラーを発生...
-
ACCESSで一括処理する方法
-
処理件数を非表示にしたい
-
データ型でFloatとreal の計算...
-
300万件のデータの処理について
-
カーソル宣言をIFで分けられま...
-
複数レコードを1変数にセット...
-
カーソルオープンの処理について
-
Accessで処理経過を表示したい...
-
カーソルを使って、最終行レコ...
-
テーブルの項目が異なるテーブ...
-
SQL-LOADERの逆のもの
-
SQLで特定の項目の重複のみを排...
-
フィルターかけた後、重複を除...
-
for whichの使い方
-
差し込み後、元データを変更し...
-
エクセルで最後の文字だけ置き...
-
外部参照してるキーを主キーに...
-
列番号による項目の取得について
-
UPDATE文のWHERE条件に他のテー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
カーソル0件の時にエラーを発生...
-
処理件数を非表示にしたい
-
カーソルを使って、最終行レコ...
-
データ型でFloatとreal の計算...
-
ストアドプロシージャ_カーソル...
-
クエリの実行時間の目安
-
カーソル宣言をIFで分けられま...
-
NVLとDECODEのスピード差
-
カーソルがコミットするとクロ...
-
テーブルの項目が異なるテーブ...
-
SQL-LOADERの逆のもの
-
(x 行処理されました)を表示さ...
-
Accessで処理経過を表示したい...
-
ACCESSで一括処理する方法
-
PL/SQL で continue ?
-
カーソルオープンの処理について
-
動的SQLの処理件数
-
わり算の結果が整数でも小数点...
-
SQL plus で改行
-
RDBとVSAMの比較
おすすめ情報