Oracle 11gにて,あるデータの登録をSPを用いて行いたいと考えています.
その際に登録するデータに重複が無いかを調べ,重複があれば
その時点でSPを終了させる動作を行いたいのですが,その方法がわかりません.
下記のようなSQLを書いていますが,重複チェックの部分でエラーが出てしまいます.
実施したい内容としては次の通りです.
- SPが呼びだされた際に引数としてi_no1
i_no5に09999のいずれかの値が渡される - i_no1~5を配列に格納し,'0'が入っている行は無視し,'1'以上の値が
入っている行を対象に重複しているかをチェックする
- 重複している場合にはユーザー定義例外(user_define_err)にてSPを終了させる
重複が検出されなかった場合には処理を継続させる
SQL
1CREATE OR REPLACE PROCEDURE ** 2( 3 i_no1 IN VARCHAR2, 4 i_no2 IN VARCHAR2, 5 i_no3 IN VARCHAR2, 6 i_no4 IN VARCHAR2, 7 i_no5 IN VARCHAR2, 8) 9IS 10--引数格納用配列 11 TYPE w_type_no_array IS TABLE OF VARCHAR2(5); 12 w_no_array w_type_no_array; 13BEGIN 14 w_no_array(0) := i_no1; 15 w_no_array(1) := i_no2; 16 w_no_array(2) := i_no3; 17 w_no_array(3) := i_no4; 18 w_no_array(4) := i_no5; 19 20--重複チェックを行う 21 FOR i IN 0..5 LOOP 22 SELECT COUNT(DISTINCT w_no_array(i)), 23 CASE 24 WHEN COUNT > 1 THEN 25 RAISE user_define_err 26 END 27 FROM ( 28 SELECT * 29 FROM w_no_array 30 WHERE w_no_array <> '0' 31 ) 32 END LOOP;
エラー内容
Error(237,9): PL/SQL: SQL Statement ignored
Error(240,30): PL/SQL: ORA-00905: キーワードがありません。