2016-10-09 3 views
0

コード:SQLオラクル、エラー "PL/SQL:無視SQL文" および "PL/SQL:ORA-00917:行方不明カンマ"

create or replace TRIGGER populate_title 
AFTER INSERT 
ON SITES 


BEGIN 

INSERT INTO sites 
(job_title) 
VALUES 
((SELECT title FROM jobs WHERE job_id IN (SELECT job_id FROM SITES)); 

END; 

だから基本的に、我々はフィールドを移入しようとしていますテーブル「サイト」の「job_title」列が、別のテーブル「jobs」にあります。私たちにはエラーがあり、今は立ち往生しています。助けてください。

+0

何INSERT文を使用すると、SITESテーブルを移入するために使用していると見えますか?これは、トリガーではなく、フィールドを取得して入力する場所です。トリガーを使用してビジネスロジックを実装しないでください。この方法は狂気です。 –

+0

'Insert'の代わりに' update'が必要でしょうか? –

+0

エラーの原因は 'Trigger'です。元の' Insert 'の何かが間違っていたらどうでしょう? –

答えて

0

最初に、これをコンパイルすると、テーブルの変更に問題がある可能性があります。

トリガー

before insertトリガとして記述する必要があります:

create or replace TRIGGER populate_title 
BEFORE INSERT 
ON SITES 
BEGIN 
    SELECT j.title INTO :NEW.job_title 
    FROM jobs j 
    WHERE j.job_id = :NEW.job_id; 
END; 

しかし、このためのトリガーは滑稽です。この情報を取得するための正しい方法はJOINを照会し、使用することです:

select s.*, j.title 
from sites s join 
    jobs j 
    on s.job_id = j.job_id; 
+0

この情報を取得するのではなく、人為的なエラーを避けるために別のテーブルから挿入します。 –

+0

また、ありがとうございます! @ScottLeslie。 –

+0

。 。 'JOIN'を使うと人為的なエラーを防ぐことができます。複数のテーブルに同じ属性を持つことは、あなたの意図でない限り、矛盾していて矛盾したデータを許容します。 –