質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PL/SQL

PL/SQL (Procedural Language/Structured Query Language) はOracle CorporationによるSQL(非手続き型言語)を手続き型言語に拡張させるために開発されたプログラミング言語です。

Q&A

2回答

9598閲覧

トリガからプロシージャ呼び出し

plue

総合スコア71

PL/SQL

PL/SQL (Procedural Language/Structured Query Language) はOracle CorporationによるSQL(非手続き型言語)を手続き型言語に拡張させるために開発されたプログラミング言語です。

0グッド

0クリップ

投稿2016/08/17 07:24

トリガからプロシージャ呼び出しをしたいのですが、コンパイルが通らず困っています。
PLSQLを組むのはほぼ初めてのため、どなたかご教示お願いいたします。

PRO_TESTTRG_INS,PRO_TESTTRG_UPDについてはすでに定義しており、コンパイルも通っている状態です。

【エラー内容】

Error(8,13): PLS-00103: 記号"PRO_TESTTRG_INS"が見つかりました。 次のうちの1つが入るとき: := . ( @ % ; 記号":=" は続行のために"PRO_TESTTRG_INS"に代わりました。 Error(15,13): PLS-00103: 記号"PRO_TESTTRG_UPD"が見つかりました。 次のうちの1つが入るとき: := . ( @ % ; immediate 記号":=" は続行のために"PRO_TESTTRG_UPD"に代わりました。

【PL/SQL】

SQL

1CREATE OR REPLACE TRIGGER PRO_TESTTRG 2 AFTER 3 INSERT OR UPDATE 4 ON ZD028MST 5 FOR EACH ROW 6BEGIN 7 IF (INSERTING) THEN 8 EXECUTE PRO_TESTTRG_INS( 9 :NEW.USER_ID, 10 :NEW.KAISHA_CD, 11 :NEW.JUGYOIN_NO 12 ); 13 END IF; 14 IF (UPDATING) THEN 15 EXECUTE PRO_TESTTRG_UPD( 16 :NEW.USER_ID, 17 :NEW.KAISHA_CD, 18 :NEW.JUGYOIN_NO, 19 :OLD.USER_ID, 20 :OLD.KAISHA_CD, 21 :OLD.JUGYOIN_NO 22 ); 23 END IF; 24END PRO_TESTTRG;

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

A.Ichi

2016/08/17 10:58

Oracle詳しくないので、EXECUTE無しでも実行されるのでは?
plue

2016/08/18 06:51 編集

回答ありがとうございます。EXECUTEをつけなければとりあえずコンパイルは通りました。 ありがとうございます。 EXECUTEが必要な場合とそうでない場合の違いが まだイマイチわからないですが、これから勉強していこうと思います。 ベストアンサーにしたいところですが、回答ではないため選択できませんでした。。。
guest

回答2

0

PL/SQLの中からPROCDUREを実行する時はEXECUTEは不要です。
SQL*PLusからPROCDURE呼ぶ時にEXECUTEを使います。

投稿2018/06/22 05:50

Orlofsky

総合スコア16415

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

Oracle初心者なので、見当違いな回答であれば申し訳ございません。

1.「PLS-00103」でググったところ「構文解析エラー」「基本的には「記号""が見つかりました。」のダブルクォーテーションでくくられる文字の直前に問題がある。」という記述が出てきました。
http://www.noguopin.com/oracle/index.php?PLS-00103

2.「pl/sql トリガー」でググったところ、サンプルとして以下SQLがありました。
http://docs.oracle.com/cd/E16338_01/appdev.112/b56260/triggers.htm

SQL

1CREATE OR REPLACE TRIGGER t 2 BEFORE 3 INSERT OR 4 UPDATE OF salary, department_id OR 5 DELETE 6 ON employees 7BEGIN 8 CASE 9 WHEN INSERTING THEN 10 DBMS_OUTPUT.PUT_LINE('Inserting'); 11 WHEN UPDATING('salary') THEN 12 DBMS_OUTPUT.PUT_LINE('Updating salary'); 13 WHEN UPDATING('department_id') THEN 14 DBMS_OUTPUT.PUT_LINE('Updating department ID'); 15 WHEN DELETING THEN 16 DBMS_OUTPUT.PUT_LINE('Deleting'); 17 END CASE; 18END;

1と2の情報を照らし合わせると、(INSERTING)や(UPDATING)のように括弧で括っているのが原因なのではないでしょうか。

投稿2016/08/17 12:24

編集2016/08/17 12:26
minr

総合スコア37

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

plue

2016/08/18 06:53

(INSERTING)や(UPDATING)については他のサンプルにもかかれており、問題ないようです。 回答ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問