2

特定の列 (hourfinish) で複数の null を許可しないトリガーを作成する必要があります。これが私が書いたトリガーです(私はSybaseを使用しています):

ALTER TRIGGER "InsertIntoCardDetail" instead of insert on
DBA.CardDetail
referencing new as new_name
for each row
begin
  declare @nullCount integer;
  if(new_name.hourfinish is null) then
    select COUNT(*) into @nullCount
      from CardDetail
      where hourfinish is null;
    if(@nullCount > 0) then
      raiserror 99999 'Cannot have Multiple Nulls'
    else
      insert into CardDetail( card,hourstart,hourfinish,"work",project,N) 
        values( new_name.card,new_name.hourstart,new_name.hourfinish,new_name."work",new_name.project,new_name.N) 
    end if
  else
    insert into CardDetail( card,hourstart,hourfinish,"work",project,N) 
      values( new_name.card,new_name.hourstart,new_name.hourfinish,new_name."work",new_name.project,new_name.N) 
  end if
end

トリガーは正常に動作します。私が求めているのは、挿入を実行するコマンドがあるかどうかです-それらの長い挿入ステートメントを置き換えることができるコマンドです。

4

2 に答える 2

1

トリガーを次のように変更してみてください。

ALTER TRIGGER "InsertIntoCardDetail" instead of insert on
DBA.CardDetail
referencing new as new_name
for each row
begin
   if(new_name.hourfinish is null) then    
    if exists 
    (select 1
      from CardDetail
      where hourfinish is null) then
      raiserror 99999 'Cannot have Multiple Nulls'
      return 1
    end if --exists 
   end if--(new_name.hourfinish is null) 

    insert into CardDetail( card,hourstart,hourfinish,"work",project,N) 
    values(new_name.card,new_name.hourstart,new_name.hourfinish,new_name."work",new_name.project,new_name.N) 

end
于 2012-10-01T09:48:29.240 に答える
0

before insert トリガーでも同じ結果が得られました。このようにして、トリガーに挿入ステートメントを記述する必要はありません。

ALTER TRIGGER "InsertIntoCardDetail" before insert on
DBA.CardDetail
referencing new as new_name
for each row
begin
  if(new_name.hourfinish is null)
    and exists(select 1
      from CardDetail
      where hourfinish is null) then
    raiserror 99999 'Cannot have Multiple Nulls'
  end if;
end
于 2012-10-02T14:50:15.867 に答える