Oracle PL / SQL มีรูทีน ASSERT มาตรฐานหรือไม่


14

ฉันต้องการใช้รูทีน ASSERT ที่ใช้งานได้คล้ายกับที่พบในภาษาอื่น ๆ เช่นโครงสร้าง (ไม่ว่าจะเป็นขั้นตอนไวยากรณ์ ... )

ASSERT( <condition>, <msg>)

เช่นนั้นเมื่อ<condition>ผ่านในอาร์กิวเมนต์แรกเป็นเท็จข้อยกเว้นจะถูกยกขึ้นด้วย<msg>ข้อความอธิบายที่ระบุ

ฉันรู้ว่านี่เป็นเรื่องเล็กน้อยที่จะต้องทำด้วยมือ แต่ฉันถามว่ามีมาตรฐานที่ได้รับจาก DBMS หรือไม่

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


ไม่คุณจะต้องสร้างของคุณเอง เพ้อฝันมีเกณฑ์ต่ำในปัจจุบัน :)
วินเซนต์ Malgrat

คำตอบ:


11

ไม่มีขั้นตอนการยืนยันในตัวใน SQL หรือ PL / SQL ดังนั้นคุณจะต้องเขียนด้วยตัวคุณเอง

การทำเช่นนี้มีสองวิธี คุณสามารถเพิ่มข้อยกเว้นด้วยตนเองตามที่กล่าวถึงในบทความ Oracle นี้หรือคุณสามารถเขียน wrapper สำหรับraise_application_errorกระบวนการซึ่งมีการบันทึกไว้ในส่วนOracle exception handlingของเอกสาร

ฉันจะเพิ่มข้อยกเว้นที่ได้รับการออกแบบมาสำหรับสถานการณ์ประเภทนี้ดังนั้นคุณควรที่จะถอดหมวกโปรแกรมเมอร์ออกเป็นวินาทีและใช้หมวก DBA ของคุณ :)


7

แพ็คเกจDBMS_ASSERTในตัวเป็นรุ่นที่ จำกัด ขอบเขตของสิ่งที่คุณกำลังมองหา สำหรับการยืนยันอื่น ๆ ที่ฟิลถูกต้องคุณจะต้องสร้างของคุณเอง นี่คือตัวอย่างง่ายๆของตัวเลือกที่สองในคำตอบของ Phil +1 :

set serveroutput on size 1000000
Declare

   Procedure Assert (pCondition In Number, pMessage In Varchar2) Is
   Begin
      If (pCondition = 1) Then
         Return; 
      End If;
      Raise_Application_Error(-20001, pMessage);
   End Assert;

Begin
   DBMS_Output.Put_Line('Start');

   Assert(Case When 1+1=2 Then 1 Else 0 End,'Something is wrong 1.');
   Assert(Case When 1+1=9 Then 1 Else 0 End,'Something is wrong 2.');

   DBMS_Output.Put_Line('End');
End;
/

1
DBMS_ASSERT มีเป้าหมายที่การแยกวิเคราะห์ SQL ดังนั้นฉันไม่ได้พูดถึงมัน
Philᵀᴹ

1
@ ฟิลและนั่นเป็นเหตุผลที่ฉันพูดแบบ จำกัด ขอบเขต บางทีมันควรจะถูก จำกัด ขอบเขตอย่างมาก :)
Leigh Riffel
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.