Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Package assert
1. Create Or Replace Package Assert Authid Definer
/*
Assertion Package
Provides a set of procedures you can use to *assert*
that a required condition is met. If not, an
error is raised, stopping execution of the block.
Author: Steven Feuerstein Technology: Oracle PL/SQL
Author: Steven Feuerstein, steven@stevenfeuerstein.com
You have permission to use and alter this code
without any restrictions.
Example:
PROCEDURE calc_totals (
dept_in IN INTEGER,
date_in IN DATE
)
IS
bad_date EXCEPTION;
BEGIN
assert.is_null (dept_in, 'Department ID');
assert.inrange (
date_in,
ADD_MONTHS (SYSDATE, -60),
SYSDATE
);
-- Everything's fine. Code in confidence...
END;
*/
Is
Procedure Assert(Condition_In In Boolean,
Msg_In In Varchar2,
Display_Call_Stack_In In Boolean Default False,
Null_Means_Failure_In In Boolean Default True);
Procedure Is_Null(Val_In In Varchar2,
Msg_In In Varchar2,
Display_Call_Stack_In In Boolean Default False);
Procedure Is_Not_Null(Val_In In Varchar2,
Msg_In In Varchar2,
Display_Call_Stack_In In Boolean Default False);
Procedure Is_True(Condition_In In Boolean,
Msg_In In Varchar2,
Display_Call_Stack_In In Boolean Default False);
Procedure Is_False(Condition_In In Boolean,
Msg_In In Varchar2,
Display_Call_Stack_In In Boolean Default False);
Procedure Is_In_Range(Date_In In Date,
Low_Date_In In Date,
High_Date_In In Date,
Msg_In In Varchar2,
Display_Call_Stack_In In Boolean Default False);
Function Is_Correct_Date(p_Str In Varchar2,
Format_Picture In Out Nocopy Varchar2)
2. Return Boolean;
End Assert;
/
SHOW ERRORS PACKAGE ASSERT
Create Or Replace Package Body Assert Is
Procedure Assert(Condition_In In Boolean,
Msg_In In Varchar2,
Display_Call_Stack_In In Boolean Default False,
Null_Means_Failure_In In Boolean Default True) Is
Begin
If Not Condition_In Or (Null_Means_Failure_In And Condition_In Is Null) Then
If Display_Call_Stack_In Then
Dbms_Output.Put_Line('ASSERTION VIOLATION! ' || Msg_In);
Dbms_Output.Put_Line('Path taken to assertion violation:');
Dbms_Output.Put_Line(Dbms_Utility.Format_Call_Stack);
End If;
Raise_Application_Error(-20000, 'ASSERTION VIOLATION! ' || Msg_In);
End If;
End;
Procedure Is_Null(Val_In In Varchar2,
Msg_In In Varchar2,
Display_Call_Stack_In In Boolean Default False) Is
Begin
Assert(Val_In Is Null,
Msg_In,
Display_Call_Stack_In,
Null_Means_Failure_In => False);
End Is_Null;
Procedure Is_Not_Null(Val_In In Varchar2,
Msg_In In Varchar2,
Display_Call_Stack_In In Boolean Default False) Is
Begin
Assert(Val_In Is Not Null, Msg_In, Display_Call_Stack_In);
End Is_Not_Null;
Procedure Is_True(Condition_In In Boolean,
Msg_In In Varchar2,
Display_Call_Stack_In In Boolean Default False) Is
Begin
Assert(Condition_In, Msg_In, Display_Call_Stack_In);
End Is_True;
Procedure Is_False(Condition_In In Boolean,
Msg_In In Varchar2,
Display_Call_Stack_In In Boolean Default False) Is
Begin
Assert(Not Condition_In, Msg_In, Display_Call_Stack_In);
End Is_False;
Procedure Is_In_Range(Date_In In Date,
Low_Date_In In Date,
High_Date_In In Date,
Msg_In In Varchar2,
Display_Call_Stack_In In Boolean Default False) Is
Begin
Assert(Trunc(Date_In) Between Trunc(Low_Date_In) And
Trunc(High_Date_In),
Msg_In,
Display_Call_Stack_In);
End Is_In_Range;
Function Is_Correct_Date(p_Str In Varchar2,
3. Format_Picture In Out Nocopy Varchar2)
Return Boolean As
l_Date Date;
Begin
If Format_Picture Is Null Then
Format_Picture := 'FXYYYYMMDD';
End If;
l_Date := To_Date(p_Str, Format_Picture);
Return True;
Exception
When Others Then
Return False;
End Is_Correct_Date;
End Assert;
/
SHOW ERRORS PACKAGE BODY ASSERT