0

Sybase 用のトリガーを作成したいのですが、エラーが表示されます。

私がやりたいことは、[student]テーブルで削除操作が行われたときに、[アカウント] に学生に関連するレコードがあるかどうかを確認し、ある場合は例外を発生させることです。

Sybase によるサポートが不足しているようです。彼らの公式は訪問する人々ではないようです。

*CREATE TRIGGER AccountChecker
BEFORE DELETE ON student
REFERENCING OLD AS old_student
FOR EACH ROW 
BEGIN
DECLARE @acc CHAR(4);
DECLARE @acc_not_null EXCEPTION FOR SQLSTATE '99999';

SELECT @acc=account.account_number FROM account
WHERE account.student_id = old_student.student_id;

   IF @acc IS NOT NULL
   BEGIN
    SIGNAL acc_not_null
   END

END*
4

2 に答える 2

3

sp_primarykeySybase は、 およびなどのプロシージャsp_foreignkeyと宣言型 SQL 制約の両方を介して、外部キーと主キーをサポートします。あなたがしようとしているのは、まさに [学生] を参照する [アカウント] からの外部キーがすべきことです。

Sybase SQL ユーザー ガイド (重要な場合は Adaptive Server 15) は、「削除制限」トリガーを示しています (インデントが多少異なります)。

create trigger deltitle
    on titles
    for delete
    as
       if (select count(*)
               from deleted, salesdetail
               where salesdetail.title_id =
               deleted.title_id) > 0
       begin
           rollback transaction
           print "You cannot delete a title with sales."
       end

ロールバックが良いアイデアであるとは確信していません。おそらく例外の方が良いでしょう。

使用しようとしている表記法は、文書化された Sybase でサポートされている表記法よりも SQL 標準により近いものです。

于 2009-04-19T13:43:45.580 に答える
1

Sybase は外部キーをサポートしていませんか?

于 2009-04-19T13:00:42.050 に答える