I invest a bit of time in order to understand how does it exactly works.
I prepared a small tutorial and summerized here below.
Theory:
In java
public class myClass() {
...
public void myMethod() {
...
try {
//code to be executed causing exception
}
catch(Exception e) {
//log the exception
}
...
}
...
}
Equivalent in SQLScript
CREATE PROCEDURE myproc AS
BEGIN
...
DECLARE EXIT HANDLER FOR SQL_ERROR_CODE MY_SQL_ERROR_CODE
BEGIN
-- log the exception
END;
-- code to be executed causing exception
end;
Practical example
copy and paste on SAP HANA Studio. First prepare something:
CREATE TABLE MYTAB (I INTEGER PRIMARY KEY);
drop PROCEDURE myproc;
Then create this procedure:
CREATE PROCEDURE myproc AS
BEGIN
declare myvar int;
DECLARE EXIT HANDLER FOR SQL_ERROR_CODE 1299
BEGIN
write_debug_log('MARCO TEST',
'Handler of the NO_DATA_FOUND exception of the select below (after the following begin end block)',
'SQL_ERROR_CODE = ' || ::SQL_ERROR_CODE || '; SQL_ERROR_MESSAGE = ' || ::SQL_ERROR_MESSAGE);
END;
begin
declare my_test int;
--CASE GENERIC FOR ANY POSSIBLE EXCEPTION
DECLARE EXIT HANDLER FOR SQLEXCEPTION
begin
write_debug_log('MARCO TEST',
'separate handler for division by 0',
'SQL_ERROR_CODE = ' || ::SQL_ERROR_CODE || '; SQL_ERROR_MESSAGE = ' || ::SQL_ERROR_MESSAGE);
end;
my_test := 1/0;
end;
SELECT I INTO myVar FROM MYTAB; --NO_DATA_FOUND exception
SELECT 'NeverReached_noContinueOnErrorSemantics' FROM DUMMY;
END;
Please, notice that I am using my classing logging procedure.
Just substitute this procedure with any other suitable to your environment for logging...
Then let it run:
--execute the code and raise the exceptions
call myproc;
--check the situation in the log table
select * from log
order by id desc;
Again, here is the code for accessing my log table...
Just use the one of your environment.
Just use the one of your environment.
Nessun commento:
Posta un commento