2009-04-19 61 views
0

我想爲Sybase創建一個觸發器,但它顯示一個錯誤。SQL觸發器問題:爲什麼這是一個語法錯誤?

我想要做的是,當在[student]表上完成刪除操作時,檢查[account]上是否有與學生相關的任何記錄,如果是,則引發異常。

似乎缺乏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* 
+0

顯示什麼錯誤? – 2009-04-19 11:14:26

+0

我使用Sybase ISQL,這表明附近開始行:14,但如果我刪除 IF @acc IS NOT NULL BEGIN 信號acc_not_null END 它仍然錯誤,如果我距離9號線(從開始刪除選擇...)到第15行,它就成功了。 – Cheung 2009-04-19 11:29:27

+0

正確:在BEGIN附近顯示錯誤:14 – Cheung 2009-04-19 11:29:59

回答

3

Sybase通過諸如sp_primarykeysp_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 

我不相信,回滾是一個好主意;例外情況可能會更好。

您試圖使用的符號更接近SQL標準,而不是Sybase支持的記法。

+0

謝謝,Jonathan Leffler 這是一個很好的替代解決方案。 – Cheung 2009-04-19 14:31:21

1

Sybase不支持外鍵嗎?

相關問題