Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

ओरेकल में सरोगेट कुंजी को पॉप्युलेट करने के लिए ट्रिगर का उपयोग करने का लाभ plsql

यह विशेष पैटर्न वास्तव में काफी खतरनाक है क्योंकि यह किसी को मैन्युअल रूप से एक नई आईडी इनपुट करने की अनुमति देता है जो पहले से मौजूद सरोगेट कुंजी के साथ संघर्ष कर सकता है या भविष्य में आपका अनुक्रम उत्पन्न हो सकता है।

आपका ट्रिगर वास्तव में इस तरह दिखना चाहिए ताकि यह सुनिश्चित हो सके कि प्रत्येक नए रिकॉर्ड के लिए एक अद्वितीय कुंजी प्राप्त हो। यदि आप 11.2 या उच्चतर का उपयोग कर रहे हैं तो select ... into ... . की कोई आवश्यकता नहीं है

CREATE OR REPLACE TRIGGER TEST_TRIG
BEFORE INSERT ON my_table
FOR EACH ROW
BEGIN
   :new.column1 := my_table_seq.NEXTVAL;
END;

इस दृष्टिकोण का लाभ यह है कि यह हमेशा है किया हुआ। इस कॉलम के लिए कोई भी मूल्य जो भी डालता है वह उस चीज़ पर अधिलेखित हो जाता है जो काम करेगी और जो सही अनुक्रम का उपयोग करती है; अगर कोई इसे स्टेटमेंट में जोड़ना भूल जाता है तब भी काम करेगा।

यह आपकी सरोगेट कुंजी को तोड़ना असंभव बना देता है।

आप जो सुझाव देते हैं, उसके साथ कल्पना करें कि कोई व्यक्ति इसके बजाय 1 रखता है; आपको प्राथमिक कुंजी उल्लंघन मिलता है। अगर कोई भूल जाता है तो और भी गलतियाँ हैं। आप इस बात की कभी गारंटी नहीं देंगे कि आपकी तालिका का प्रत्येक अपडेट एक प्रविष्टि के माध्यम से होगा, इसलिए ट्रिगर गारंटी देता है कि पीके सही ढंग से भरा हुआ है।

यह ध्यान देने योग्य है कि 12c से आप पहचान का उपयोग कर सकते हैं। स्तंभ , जो टेबल और ऑटो-इन्क्रीमेंट के बीच की कड़ी को स्पष्ट करता है; ट्रिगर या अनुक्रम की कोई आवश्यकता नहीं है। टेबल निर्माण डीडीएल के लिए सिंटैक्स होगा:

create table <table_name> ( <column_name> generated as identity );


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ORA-00907:सही कोष्ठक गुम है (उदाहरण के साथ)

  2. ओरेकल पर एक स्थानिक सूचकांक बनाना

  3. Oracle में, स्क्रिप्ट के माध्यम से सम्मिलित करने का तेज़ तरीका?

  4. Oracle SQL डेवलपर - क्वेरी परिणाम विंडो जिसमें ग्रिड गुम है

  5. अजगर में Oracle तैयार वक्तव्य के लिए खंड में cx_Oracle