2017-05-16 14 views
0

私はほとんど問題ありません。私はテーブルに値を挿入しようとしています。これは機能しています。しかし、値id_trainerが別のテーブルに存在するかどうかを制御したいと思います。 insertClub(1、5、 'someName');を実行します。 - > id_trainer 5がテーブルトレーナーに存在しない場合、プロシージャからこれに関するメッセージが表示されます。 (私はENGにそれを翻訳してみました。LNG。、あなたには、いくつかのGRAMMを見つけることができるようにします。ミス)sqlの挿入プロシージャ:値をテーブルに挿入し、値が別のテーブルに存在するかどうかを制御します。

create or replace procedure insertClub 
(id_club in number, id_trainer in number, clubName in varchar2) 
is 
begin 
declare counter number; 

select count(*) into counter from trianer tr where tr.id_trainer = id_trainer; 

if counter = 0 then 
DBMS_OUTPUT.PUT_LINE('Trainer with this ID not exists'); 
end if; 

insert into club values(id_club, id_trainer, clubName); 
exception 
    when dup_val_on_index then 
DBMS_OUTPUT.PUT_LINE('Dup ID'); 

end; 
/
+0

おそらくパラメータ名が列名と同じであるため、問題があります。 'where tr.id_trainer = insertClub.id_trainer'に変更するか、パラメータ名を' p_id_trainer'や 'l_id_trainer'のように変更する必要があります。 –

+0

私はそれを変更しようとしました。しかし、何も起こらなかった。 selectには下線が引かれているので、変数やselectに何らかの問題があります。そして、私は "期待しています:(。%@"; "show err;"の後に) –

答えて

0

の手順では、いくつかのエラーがあります。

create or replace procedure insertClub 
(id_club in number, id_trainer in number, clubName in varchar2) 
is 
counter number; 
begin 
select count(*) into counter from trianer tr where tr.id_trainer = id_trainer; 

if counter = 0 then 
DBMS_OUTPUT.PUT_LINE('Trainer with this ID not exists'); 
end if; 

insert into club values(id_club, id_trainer, clubName); 
exception 
    when dup_val_on_index then 
DBMS_OUTPUT.PUT_LINE('Dup ID'); 

end; 
/
+0

はい、問題が残っていれば教えてください – smshafiqulislam

+0

はい、うまくいきます。 "私の研究ノートには間違いがたくさんあります。" –

+0

DECLAREキーワードはPL/SQLでは必須ではありません。サブプログラム(プロシージャおよび 機能)。 内に含まれるセクションは と は をBEGIN宣言セクションとして知られています。  TRIGGER  が明示的に宣言するためにDECLAREセクションが必要であることに注意してください。また 、詳細については、この2つのサイトをチェック: https://www.techonthenet.com/oracle/procedures.php
http://psoug.org/definition/DECLARE.htm – smshafiqulislam

関連する問題