บล็อก PL/SQL: โครงสร้าง ไวยากรณ์ และตัวอย่างแบบไม่ระบุชื่อ

⚡ สรุปอย่างชาญฉลาด

บล็อก PL/SQL คือหน่วยพื้นฐานที่จัดกลุ่มคำสั่ง PL/SQL และ SQL เพื่อให้ทำงานพร้อมกัน แทนที่จะทำงานทีละบรรทัด บล็อกแต่ละบล็อกประกอบด้วยส่วนการประกาศ การทำงาน และการจัดการข้อผิดพลาด และบล็อกอาจเป็นแบบไม่ระบุชื่อหรือแบบระบุชื่อก็ได้

  • 🧱 แนวคิดหลัก: Code ถูกจัดกลุ่มเป็นบล็อกที่ทำงานเป็นองค์รวม โดยผสมผสานตรรกะเชิงกระบวนการเข้ากับ SQL
  • 📝 ส่วนการประกาศ: (ไม่บังคับ); ใช้สำหรับประกาศตัวแปร เคอร์เซอร์ ข้อยกเว้น และโปรแกรมย่อยที่ใช้ในบล็อกนี้
  • ▶️ ส่วนการดำเนินการ: จำเป็นต้องมี; ขึ้นต้นด้วย BEGIN และต้องมีคำสั่งที่สามารถเรียกใช้งานได้อย่างน้อยหนึ่งคำสั่ง
  • 🛡️ ส่วนข้อยกเว้น: ตัวเลือกเสริม; ขึ้นต้นด้วย EXCEPTION และใช้จัดการข้อผิดพลาดขณะรันไทม์
  • 🏷️ สองประเภท: บล็อกนิรนามคือบล็อกที่ไม่มีชื่อและจะทำงานเพียงครั้งเดียว ส่วนบล็อกที่มีชื่อจะถูกจัดเก็บเป็นอ็อบเจ็กต์ในฐานข้อมูล
  • 🔁 บล็อกที่มีชื่อ: ขั้นตอนและฟังก์ชันคือบล็อกที่มีชื่อ ซึ่งสามารถเรียกใช้ซ้ำได้
  • เทอร์มิเนเตอร์: คำสั่ง END ปิดบล็อก และเครื่องหมายทับ (/) จะส่งบล็อกนั้นไปยังคอมไพเลอร์

โครงสร้างและไวยากรณ์ของบล็อก PL/SQL

PL/SQL Block คืออะไร?

ใน PL/SQL โค้ดจะไม่ถูกประมวลผลในรูปแบบบรรทัดเดียว แต่จะถูกประมวลผลโดยกลุ่มเสมอping แปลงโค้ดให้เป็นองค์ประกอบเดียวที่เรียกว่าบล็อก ในบทเรียนนี้ คุณจะได้เรียนรู้เกี่ยวกับบล็อกเหล่านี้

บล็อกประกอบด้วยคำสั่งทั้ง PL/SQL และ SQL โดยคำสั่งทั้งหมดจะถูกประมวลผลพร้อมกันทั้งหมด ไม่ใช่ทีละคำสั่ง

โครงสร้างบล็อก

บล็อก PL/SQL มีโครงสร้างที่กำหนดไว้ล่วงหน้าซึ่งโค้ดจะถูกจัดกลุ่มไว้ ด้านล่างนี้คือส่วนต่างๆ ของบล็อก PL/SQL:

  1. ส่วนการประกาศ
  2. ส่วนการดำเนินการ
  3. ส่วนการจัดการข้อยกเว้น

ภาพด้านล่างแสดงให้เห็นถึงส่วนต่างๆ ของบล็อก PL/SQL และลำดับของส่วนเหล่านั้น

ส่วนต่างๆ ของบล็อก PL/SQL และลำดับ

ส่วนประกาศ

นี่คือส่วนแรกของบล็อก PL/SQL และเป็นส่วนที่ไม่บังคับ ส่วนนี้ใช้สำหรับประกาศตัวแปร เคอร์เซอร์ ข้อยกเว้น โปรแกรมย่อย คำสั่ง pragma และคอลเลกชันที่จำเป็นในบล็อก ลักษณะเพิ่มเติมของส่วนนี้มีดังนี้:

  • ส่วนนี้เป็นส่วนเสริมและสามารถข้ามไปได้หากไม่ต้องการการประกาศใดๆ
  • ควรเป็นส่วนแรกในบล็อก PL/SQL หากมีอยู่
  • สำหรับทริกเกอร์และบล็อกที่ไม่ระบุชื่อ คำสั่งจะเริ่มต้นด้วยคำว่า 'DECLARE' สำหรับซับโปรแกรมอื่นๆ จะไม่มีคำนี้ แต่ส่วนที่อยู่หลังชื่อซับโปรแกรมจะเป็นส่วนที่แสดงส่วนการประกาศ
  • ส่วนนี้ควรตามด้วยส่วนการดำเนินการเสมอ

มาตราการดำเนินการ

ส่วนการประมวลผลเป็นส่วนหลักและจำเป็นที่ทำหน้าที่เรียกใช้โค้ดที่เขียนไว้ภายในนั้นจริง ๆ PL / SQL ส่วนนี้ต้องการคำสั่งที่สามารถเรียกใช้งานได้ บล็อกนี้ต้องไม่ว่างเปล่าและต้องมีอย่างน้อยหนึ่งบรรทัดที่สามารถเรียกใช้งานได้อย่างถูกต้อง นอกจากนี้ยังมีคุณลักษณะอื่นๆ อีกเล็กน้อย:

  • สามารถประกอบด้วยทั้งโค้ด PL/SQL และโค้ด SQL ได้
  • มันสามารถบรรจุบล็อกหนึ่งหรือหลายบล็อกไว้ภายในได้ โดยเป็นบล็อกที่ซ้อนกันอยู่
  • เริ่มต้นด้วยคำหลัก 'BEGIN'
  • ควรตามด้วยคำว่า 'END' หรือส่วนการจัดการข้อผิดพลาด (ถ้ามี)

ส่วนการจัดการข้อยกเว้น

ข้อยกเว้นคือข้อผิดพลาดที่หลีกเลี่ยงไม่ได้ซึ่งเกิดขึ้นในระหว่างการทำงาน และจำเป็นต้องจัดการกับข้อยกเว้นเหล่านั้น Oracle ส่วนนี้มีส่วนสำหรับจัดการข้อผิดพลาดในรูปแบบบล็อก ส่วนนี้สามารถมีคำสั่ง PL/SQL ได้ด้วย และเป็นส่วนที่ไม่บังคับ

  • ส่วนนี้คือส่วนที่ใช้จัดการข้อผิดพลาดที่เกิดขึ้นในบล็อกการทำงาน
  • นี่คือส่วนสุดท้ายของบล็อก PL/SQL
  • การควบคุมจากส่วนนี้ไม่สามารถกลับไปยังบล็อกการดำเนินการได้
  • เริ่มต้นด้วยคำหลัก 'EXCEPTION'
  • ควรตามด้วยคำว่า 'END' เสมอ

คำหลัก 'END' ใช้เพื่อระบุจุดสิ้นสุดของบล็อก PL/SQL

ไวยากรณ์บล็อก PL/SQL

ด้านล่างนี้คือไวยากรณ์ของโครงสร้างบล็อก PL/SQL

ไวยากรณ์บล็อก PL/SQL

DECLARE --optional
<declarations>

BEGIN --mandatory
<executable statements. At least one executable statement is mandatory>

EXCEPTION --optional
<exception handles>

END; --mandatory
/

หมายเหตุ บล็อกโค้ดควรตามด้วยเครื่องหมาย '/' เสมอ ซึ่งจะส่งข้อมูลไปยังคอมไพเลอร์เกี่ยวกับจุดสิ้นสุดของบล็อก

ประเภทของบล็อก PL/SQL

บล็อก PL/SQL ส่วนใหญ่มีสองประเภท:

  1. บล็อกที่ไม่ระบุชื่อ
  2. บล็อกที่มีชื่อ

ด้านล่างนี้เป็นการเปรียบเทียบโดยสังเขปของทั้งสองอย่าง ก่อนที่จะอธิบายรายละเอียดของแต่ละอย่าง

แง่มุม บล็อกนิรนาม บล็อกที่มีชื่อ
มีชื่อ ไม่ มี (ใบกำกับภาษีเต็มรูปแบบ)
บันทึกไว้ในฐานข้อมูล ไม่ ใช่ ในฐานะวัตถุ
เริ่มต้นด้วย ประกาศหรือเริ่มต้น สร้าง
นำมาใช้ใหม่ เซสชั่นเดียวกันเท่านั้น โทรได้ตลอดเวลา

บล็อกนิรนาม

บล็อกนิรนามคือบล็อก PL/SQL ที่ไม่มีการกำหนดชื่อให้ จำเป็นต้องสร้างและใช้งานบล็อกเหล่านี้ภายในเซสชันเดียวกัน เนื่องจากไม่ได้ถูกจัดเก็บไว้บนเซิร์ฟเวอร์ในรูปแบบของอ็อบเจ็กต์ฐานข้อมูล

เนื่องจากไม่ได้จัดเก็บไว้ในฐานข้อมูล จึงไม่จำเป็นต้องมีขั้นตอนการคอมไพล์แยกต่างหาก ไฟล์เหล่านี้ถูกเขียนและเรียกใช้งานโดยตรง และการคอมไพล์และการเรียกใช้งานเกิดขึ้นในกระบวนการเดียว ลักษณะเด่นอื่นๆ อีกเล็กน้อย:

  • บล็อกเหล่านี้ไม่มีชื่ออ้างอิง
  • คำสั่งเหล่านี้เริ่มต้นด้วยคำหลัก 'DECLARE' หรือ 'BEGIN'
  • เนื่องจากไม่มีชื่ออ้างอิง จึงไม่สามารถจัดเก็บไว้ใช้ในภายหลังได้ และต้องสร้างและเรียกใช้งานภายในเซสชันเดียวกันเท่านั้น
  • พวกเขาสามารถเรียกบล็อกที่มีชื่ออื่นๆ ได้ แต่ไม่สามารถเรียกบล็อกที่ไม่ระบุชื่อได้ เนื่องจากบล็อกนั้นไม่มีการอ้างอิง
  • พวกมันสามารถมีบล็อกย่อยที่ซ้อนกันอยู่ได้ โดยบล็อกย่อยนั้นอาจมีชื่อหรือไม่ก็ได้ และยังสามารถซ้อนอยู่ภายในบล็อกใดก็ได้อีกด้วย
  • พวกเขาสามารถมีได้ครบทั้งสามส่วน โดยส่วนการดำเนินการเป็นส่วนที่บังคับ และอีกสองส่วนเป็นส่วนที่ไม่จำเป็น

ชื่อบล็อค

บล็อกที่มีชื่อจะมีชื่อเฉพาะและไม่ซ้ำกัน บล็อกเหล่านี้จะถูกจัดเก็บเป็นอ็อบเจ็กต์ในฐานข้อมูลบนเซิร์ฟเวอร์ ดังนั้นจึงสามารถอ้างอิงหรือใช้งานได้ตราบใดที่บล็อกเหล่านั้นยังคงอยู่ กระบวนการคอมไพล์สำหรับบล็อกที่มีชื่อจะเกิดขึ้นแยกต่างหากเมื่อสร้างเป็นอ็อบเจ็กต์ในฐานข้อมูล คุณลักษณะเพิ่มเติมอีกเล็กน้อย:

  • บล็อกเหล่านี้สามารถเรียกจากบล็อกอื่นได้
  • โครงสร้างของบล็อกนั้นเหมือนกับบล็อกนิรนาม ยกเว้นว่าจะไม่เริ่มต้นด้วย 'DECLARE' แต่จะเริ่มต้นด้วย 'CREATE' ซึ่งเป็นการสั่งให้คอมไพเลอร์สร้างมันเป็นอ็อบเจ็กต์ในฐานข้อมูล
  • บล็อกเหล่านี้สามารถซ้อนกันภายในบล็อกอื่นได้ และยังสามารถบรรจุบล็อกที่ซ้อนกันอยู่ภายในได้อีกด้วย
  • บล็อกที่มีชื่อโดยพื้นฐานแล้วมีสองประเภท:
  1. การรักษาอื่นๆ
  2. ฟังก์ชัน

คุณสามารถเรียนรู้เพิ่มเติมเกี่ยวกับบล็อกที่มีชื่อเหล่านี้ได้ในคู่มือ ขั้นตอนและหน้าที่.

คำถามที่พบบ่อย

เฉพาะส่วนการดำเนินการเท่านั้น ซึ่งเริ่มต้นด้วย BEGIN และสิ้นสุดด้วย END ส่วนการประกาศและการจัดการข้อผิดพลาดเป็นส่วนเสริมและสามารถละเว้นได้หากไม่จำเป็น

บล็อกที่ไม่ระบุชื่อจะไม่มีชื่อ ไม่ถูกจัดเก็บ และทำงานในเซสชันเดียวกัน ในขณะที่บล็อกที่มีชื่อ เช่น โพรซีเดอร์หรือฟังก์ชัน จะถูกจัดเก็บเป็นอ็อบเจ็กต์ในฐานข้อมูลและสามารถเรียกใช้ซ้ำได้

ในเครื่องมืออย่าง SQL*Plus เครื่องหมายทับ (/) ในบรรทัดของตัวเองจะบอกคอมไพเลอร์ว่าบล็อกนั้นเสร็จสมบูรณ์แล้วและควรดำเนินการต่อไป หากไม่มีเครื่องหมายทับ เครื่องมือจะรอรับข้อมูลเพิ่มเติมต่อไป

ใช่แล้ว AI สามารถห่อหุ้มตรรกะไว้ในส่วนหัวของคำสั่ง CREATE PROCEDURE เพิ่มพารามิเตอร์ และย้ายการประกาศต่างๆ ไปยังตำแหน่งที่เหมาะสมได้ ทดสอบผลลัพธ์ด้วย เนื่องจากเวอร์ชันที่บันทึกไว้อาจต้องการโหมดพารามิเตอร์และการจัดการข้อผิดพลาดที่ชัดเจน

ใช่แล้ว ส่วนการประกาศและส่วนการจัดการข้อยกเว้นเป็นตัวเลือกที่แยกจากกัน บล็อกสามารถเริ่มต้นที่ BEGIN ข้ามการประกาศ และยังคงมีส่วน EXCEPTION ก่อน END เพื่อดักจับข้อผิดพลาดขณะทำงานได้

สรุปโพสต์นี้ด้วย: