Oracle PL / SQL에는 표준 ASSERT 루틴이 있습니까?


14

다른 언어에서 발견되는 것과 같은 기능적으로 유사한 ASSERT 루틴을 사용하고 싶습니다. 즉 구문 (절차, 구문 등)

ASSERT( <condition>, <msg>)

때 이러한 <condition>첫번째 인수 전달 예외 지정된으로 상승 거짓 <msg>설명 메시지.

나는 이것이 손으로하는 것이 쉽지 않다는 것을 알고 있지만 DBMS와 함께 제공 되는 표준이 있는지 묻고 있습니다.

직접 작성하거나 타사 패키지에서 가져와야하는 것은 실용적이지 않습니다. 작업중인 모든 프로젝트에 완전히 이식 가능하고 투명해야하기 때문입니다.


아니, 당신은 당신의 자신을 구축해야합니다. 실용성은 요즘 낮은 ​​임계 값을 가지고 있습니다 :)
Vincent Malgrat

답변:


11

SQL 또는 PL / SQL에는 기본 제공 어설 션 절차가 없으므로 직접 작성해야합니다.

이 작업에는 두 가지 방법이 있습니다. 이 Oracle 기사에 설명 된대로 수동으로 예외를 발생 시키거나 raise_application_error문서의 Oracle 예외 처리 섹션에 설명 된 프로 시저에 대한 랩퍼를 작성할 수 있습니다 .

나는 이런 종류의 시나리오를 위해 예외가 설계되었다는 것을 덧붙일 것이기 때문에 프로그래머 모자를 잠시 벗고 DBA 모자를 사용하는 것이 좋습니다. :)


7

기본 제공 DBMS_ASSERT 패키지는 원하는 범위의 좁은 버전입니다. Phil이 다른 주장은 맞다고 스스로 주장해야한다. 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
@ 필 그리고 그것이 좁은 범위라고 말한 이유입니다. 아마도 그 범위는 매우 좁아 야합니다. :)
레이 리펠
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.