This article is written in English and Portuguese
Este artigo está escrito em Inglês e Português

English version:

I believe this is the first time I cover a 4GL topic here. But a recent customer situation motivated me to write this. Hopefully most of the readers will just say "Yeah... Everybody knows that...", but it's not the first time I see people making the confusion I'm going to describe, and in my opinion that happens because it's not intuitive. Although it's perfectly documented, I suppose many people just follow the intuitive approach and fall into the problem.

I'm talking about the WHENEVER statement. It is used to define the behavior of the program when(ever) a defined condition (ERROR, SQLERROR, WARNING, SQLWARNING or  NOTFOUND) happens. The behavior can be CONTINUE, STOP, GOTO or CALL function. Seems pretty simple and handy... so why am I writing this? The usual confusion relates to the scope of the WHENEVER statement. At first glance you could think this was a program instruction, and the effect or scope of it would be until the program flow reached another WHENEVER statement. And this is the confusion many people make.
In reality it's not a program instruction, but instead it's a compiler directive. As stated in the documentation the scope is local to the module where it appears. If the module contains only function definitions, then all this functions will behave accordingly to the conditions used in the WHENEVER statement. The program flow is irrelevant.
This is better shown with a practical example (line numbers added for clarity)
 1  DATABASE sysmaster
2 MAIN
3 DEFINE v INTEGER
4 CALL func_1() RETURNING v
5 END MAIN
6
7 FUNCTION func_0()
8 WHENEVER ERROR CONTINUE
9 END FUNCTION
10
11 FUNCTION func_1()
12 SELECT no_column FROM no_table
13 RETURN 1,2
14 END FUNCTION

Ok, ...

Author: This e-mail address is being protected from spambots. You need JavaScript enabled to view it (Fernando Nunes)


{mosgoogle}

{mos_sb_discuss:4}


 
Newsflash
IBM intends to offer NoSQL database capabilities inside of DB2 beginning early next year, according to a keynote speaker at IBM Information On Demand 2011.


Read more...
 

Title: Best Practices for Embedded Data Management
Date: Thursday, May 24, 2012
Time: 10:30 AM - 12:00 PM (Central Time), 16:30h Germany
Presented By: Pradeep Natarajan - Software Developer (IBM)
Registration: Best Practices for Embedded Data Management

Description:

 
A small footprint, a silent i...
Read more...
 
Ads