plsql ट्यूटोरियल
Plsql के साथ शुरुआत करना
खोज…
टिप्पणियों
यह अनुभाग plsql क्या है का एक सिंहावलोकन प्रदान करता है, और क्यों एक डेवलपर इसका उपयोग करना चाहता है।
यह भी plsql के भीतर किसी भी बड़े विषयों का उल्लेख करना चाहिए, और संबंधित विषयों के लिए लिंक करना चाहिए। चूंकि plsql के लिए दस्तावेज़ीकरण नया है, इसलिए आपको उन संबंधित विषयों के प्रारंभिक संस्करण बनाने की आवश्यकता हो सकती है।
PLSQL की परिभाषा
PL / SQL (प्रक्रियात्मक भाषा / संरचित क्वेरी भाषा) SQL के लिए Oracle Corporation का प्रक्रियात्मक विस्तार और Oracle relational database है। PL / SQL Oracle डेटाबेस (संस्करण 7 से), TimesTen-in-memory डेटाबेस (संस्करण 11.2.1 के बाद से), और IBM DB2 (संस्करण 9.7 से) में उपलब्ध है।
पीएल / एसक्यूएल में बुनियादी इकाई को एक ब्लॉक कहा जाता है, जो तीन भागों से बना होता है: एक घोषणात्मक भाग, एक निष्पादन योग्य भाग और एक अपवाद-निर्माण भाग।
DECLARE
<declarations section>
BEGIN
<executable command(s)>
EXCEPTION
<exception handling>
END;
घोषणाएँ - यह खंड खोजशब्द घोषणा के साथ शुरू होता है। यह एक वैकल्पिक अनुभाग है और कार्यक्रम में उपयोग किए जाने वाले सभी चर, कर्सर, उपप्रोग्राम और अन्य तत्वों को परिभाषित करता है।
निष्पादन योग्य कमांड - यह खंड BEGIN और END कीवर्ड के बीच संलग्न है और यह एक अनिवार्य अनुभाग है। यह प्रोग्राम के निष्पादन योग्य PL / SQL कथनों से युक्त होता है। इसमें कोड की कम से कम एक निष्पादन योग्य पंक्ति होनी चाहिए, जो यह इंगित करने के लिए सिर्फ एक पूर्ण आदेश हो सकती है कि कुछ भी निष्पादित नहीं किया जाना चाहिए।
एक्सेप्शन हैंडलिंग - यह सेक्शन एक्सेप्टेंस कीवर्ड से शुरू होता है। यह खंड फिर से वैकल्पिक है और इसमें अपवाद शामिल हैं जो कार्यक्रम में त्रुटियों को संभालते हैं।
प्रत्येक पीएल / एसक्यूएल स्टेटमेंट एक अर्धविराम (;) के साथ समाप्त होता है। PL / SQL ब्लॉक BEGIN और END का उपयोग करके अन्य PL / SQL ब्लॉक के भीतर नेस्ट किया जा सकता है।
अनाम ब्लॉक में, ब्लॉक के केवल निष्पादन योग्य भाग की आवश्यकता होती है, अन्य भाग नेस्सरी नहीं होते हैं। नीचे सरल अनाम कोड का उदाहरण है, जो कुछ भी नहीं करता है लेकिन त्रुटि रिपोर्टिंग के बिना प्रदर्शन करता है।
BEGIN
NULL;
END;
/
Exccutable निर्देश गुम होने से त्रुटि हो जाती है, becouse PL / SQL रिक्त ब्लॉकों का समर्थन नहीं करता है। उदाहरण के लिए, नीचे दिए गए कोड का बहिष्करण एक त्रुटि की ओर जाता है:
BEGIN
END;
/
आवेदन में त्रुटि होगी:
END;
*
ERROR at line 2:
ORA-06550: line 2, column 1:
PLS-00103: Encountered the symbol "END" when expecting one of the following:
( begin case declare exit for goto if loop mod null pragma
raise return select update while with <an identifier>
<a double-quoted delimited-identifier> <a bind variable> <<
continue close current delete fetch lock insert open rollback
savepoint set sql execute commit forall merge pipe purge
कीवर्ड "END;" के नीचे प्रतीक "*" इसका मतलब है, कि इस ब्लॉक के साथ समाप्त होने वाला ब्लॉक खाली है या खराब है। प्रत्येक निष्पादन ब्लॉक को निर्देश करने की आवश्यकता है, भले ही वह हमारे उदाहरण में कुछ भी नहीं करता हो।
नमस्ते दुनिया
set serveroutput on
DECLARE
message constant varchar2(32767):= 'Hello, World!';
BEGIN
dbms_output.put_line(message);
END;
/
कमान set serveroutput on
के उत्पादन में सक्षम करने के लिए एसक्यूएल * प्लस और SQL डेवलपर ग्राहकों में आवश्यक है dbms_output
। कमांड के बिना कुछ भी प्रदर्शित नहीं होता है।
end;
अनाम PL / SQL ब्लॉक के अंत में लाइन सिग्नल। एसक्यूएल कमांड लाइन से कोड चलाने के लिए आपको टाइप करने के लिए आवश्यकता हो सकती है /
कोड की अंतिम पंक्ति के बाद पहली खाली पंक्ति के आरंभ में। जब उपरोक्त कोड SQL प्रॉम्प्ट पर निष्पादित किया जाता है, तो यह निम्न परिणाम उत्पन्न करता है:
Hello, World!
PL/SQL procedure successfully completed.
PLSQL के बारे में
पीएल / एसक्यूएल प्रक्रियात्मक भाषा एक्सटेंशन से एसक्यूएल के लिए खड़ा है। PL / SQL अन्य सॉफ़्टवेयर उत्पादों के भीतर केवल "सक्षम करने वाली तकनीक" के रूप में उपलब्ध है; यह एक स्टैंडअलोन भाषा के रूप में मौजूद नहीं है। आप Oracle सर्वर में Oracle संबंधपरक डेटाबेस में, PL और SQL का उपयोग कर सकते हैं, और क्लाइंट-साइड एप्लिकेशन डेवलपमेंट टूल, जैसे Oracle फॉर्म में। यहां कुछ तरीके दिए गए हैं जिनका उपयोग आप पीएल / एसक्यूएल कर सकते हैं:
- संग्रहीत प्रक्रियाओं का निर्माण करने के लिए। ।
- डेटाबेस ट्रिगर्स बनाने के लिए।
- अपने ओरेकल फॉर्म एप्लिकेशन में क्लाइंट-साइड लॉजिक को लागू करने के लिए।
- वर्ल्ड वाइड वेब होम पेज को ओरेकल डेटाबेस से लिंक करने के लिए।
% TYPE और% ROWTYPE के बीच अंतर।
%TYPE
: एक निर्दिष्ट तालिका स्तंभ के समान क्षेत्र के साथ एक क्षेत्र घोषित करने के लिए उपयोग किया जाता है।
DECLARE
vEmployeeName Employee.Name%TYPE;
BEGIN
SELECT Name
INTO vEmployeeName
FROM Employee
WHERE RowNum = 1;
DBMS_OUTPUT.PUT_LINE(vEmployeeName);
END;
/
% ROWTYPE: निर्दिष्ट तालिका, दृश्य या कर्सर (= कई कॉलम) में पाए गए समान प्रकारों के साथ रिकॉर्ड घोषित करने के लिए उपयोग किया जाता है।
DECLARE
rEmployee Employee%ROWTYPE;
BEGIN
rEmployee.Name := 'Matt';
rEmployee.Age := 31;
DBMS_OUTPUT.PUT_LINE(rEmployee.Name);
DBMS_OUTPUT.PUT_LINE(rEmployee.Age);
END;
/
कोई दृश्य बनाना या बदलना
इस उदाहरण में हम एक दृश्य बनाने जा रहे हैं।
एक दृश्य का उपयोग कई तालिकाओं से डेटा प्राप्त करने के सरल तरीके के रूप में किया जाता है।
उदाहरण 1:
एक तालिका पर एक चयन के साथ देखें।
CREATE OR REPLACE VIEW LessonView AS
SELECT L.*
FROM Lesson L;
उदाहरण 2:
कई तालिकाओं पर चयन के साथ देखें।
CREATE OR REPLACE VIEW ClassRoomLessonView AS
SELECT C.Id,
C.Name,
L.Subject,
L.Teacher
FROM ClassRoom C,
Lesson L
WHERE C.Id = L.ClassRoomId;
इस विचार को एक प्रश्न में कॉल करने के लिए आप एक चयन कथन का उपयोग कर सकते हैं।
SELECT * FROM LessonView;
SELECT * FROM ClassRoomLessonView;
एक तालिका बनाएं
नीचे हम 3 कॉलम के साथ एक तालिका बनाने जा रहे हैं।
कॉलम Id
भरा होना चाहिए, इसलिए हम इसे NOT NULL
परिभाषित करते हैं।
कॉलम Contract
हम एक चेक भी जोड़ते हैं ताकि अनुमत एकमात्र मूल्य 'Y' या 'N' हो। यदि कोई सम्मिलित किया गया है और सम्मिलित करने के दौरान यह कॉलम निर्दिष्ट नहीं है, तो डिफ़ॉल्ट रूप से एक 'एन' डाला जाता है।
CREATE TABLE Employee (
Id NUMBER NOT NULL,
Name VARCHAR2(60),
Contract CHAR DEFAULT 'N' NOT NULL,
---
CONSTRAINT p_Id PRIMARY KEY(Id),
CONSTRAINT c_Contract CHECK (Contract IN('Y','N'))
);