तुम लगभग वहां थे; यदि आप कुछ भी घोषित करना चाहते हैं तो आपको एक ट्रिगर में DECLARE ब्लॉक की आवश्यकता है; इसका मतलब है कि आपका WHEN क्लॉज गलत जगह पर है।
create or replace trigger trig1
before update
of sal
on emp
for each row
when (new.sal < old.sal)
declare
user_xcep EXCEPTION;
PRAGMA EXCEPTION_INIT( user_xcep, -20001 );
begin
raise user_xcep;
end;
एसक्यूएल फिडल
कुछ बिंदु:
- कभी नहीं एक अपवाद पकड़ें और फिर DBMS_OUTPUT को कॉल करें।PUT_LINE; यह व्यर्थ है। प्रत्येक रिकॉर्ड के लिए परिणाम देखने के लिए किसी को वहां होना चाहिए। यदि आप कुछ नहीं करना चाहते हैं तो अपवाद उठाएं और फिर उसे पकड़ लें। मैंने आपके अपवाद में एक त्रुटि कोड जोड़ा है ताकि आप इसे ट्रिगर के बाहर पकड़ सकें और इसे अपनी इच्छानुसार संभाल सकें (stdout पर कुछ भी प्रिंट न करें)।
- यह एक छोटी सी बात है लेकिन मैंने थोड़ा खाली स्थान जोड़ा है; बहुत ज्यादा नहीं। मैं शुरू में नहीं देख सका कि आपके कोड में समस्या कहाँ थी क्योंकि आपके पास कोई कोड नहीं था।
- अपवाद घोषणा और RAISE के बाद आप सेमी-कोलन याद कर रहे थे।
दस्तावेज़ीकरण में आंतरिक रूप से परिभाषित अपवादों के बारे में और पढ़ें