× The internal search function is temporarily non-functional. The current search engine is no longer viable and we are researching alternatives.
As a stop gap measure, we are using Google's custom search engine service.
If you know of an easy to use, open source, search engine ... please contact support@midrange.com.


  • Subject: Re: SQL processing in RPG programs
  • From: Marco Facchinetti <facchinetti@xxxxxxxxx>
  • Date: Thu, 28 Sep 2000 06:43:31 -0700 (PDT)

Thanks John,
and I guess I have to set the "indicator" to -1 if I have
to change data, right?
But maybe I'd better explaine my doubts:

I made this just to test what happen (the field ABDTINIRAP
is null capable filed and is usually null):
H DATFMT(*EUR) ALWNULL(*USRCTL)                            
D DBANA0        E DS                  EXTNAME(DBANA00F)    

D NUL             S              4                         
dind_array        ds                                       

d inds                           4B 0 dim(50)              

D*----------------------------------------------------* 
SQL                
C/EXEC SQL                           
C+ DECLARE CUR CURSOR FOR
C+ SELECT * FROM DBANA02L                              
C+ ORDER BY ABRAGSOC1E                               
C/END-EXEC                                            
c*
C/EXEC SQL                                   
C+ OPEN CUR                                              
C/END-EXEC                                         
 c*                                                        
               
 C     1             DO        11                          

 C/EXEC SQL                                               
 C+ FETCH CUR INTO :DBANA0 :INDS                      
 C/END-EXEC                                             
 c                   except    riga                       
 C                   IF        SQLCOD=100 OR
SQLSTT='020000'
 C                   LEAVE                             
 C                   ENDIF                                
I cannot use this form......
 C*                  IF        %NULLIND(ABDTINIRAP)=*ON 
 C*                  EVAL      NUL ='*ON'               
 C*                  ELSE                            
 C*                  EVAL      NUL ='*OFF'           
 C*                  ENDIF                     
I must write (I know it's INDS(21) from compiler listing )
 C                   IF        inds(21)=-1        
 C                   EVAL      NUL ='*ON'               
 C                   ELSE                            
 C                   EVAL      NUL ='*OFF'           
 C                   ENDIF                     

 C                   ENDDO     
 c*                                      
 C/EXEC SQL                                          
 C+ CLOSE CUR                                          
 C/END-EXEC                                             
 c                   eval      *inlr=*on               
 c                   return                 
 ******************** End ******************************** 

Please do not comment the code, I know it's not perfect. 

I like the way the pre-compiler handles and generate the
code form the "*" syntax and the ds since is working even
if I add or eliminate some fields from the file DBANA00F.
But this is not true anymore since I'm forced to identify
the SQL %nullind whit an array and (of course) a fixed
index.
Any way out?
(please don't tell me to select only the collums I need)
--- jpcarr@TREDEGAR.COM wrote:
> 
> <snip>
> >By the way how do you test if a field resulting from an
> >embebbed sql statement is null? I don't know how to
> handle
> >since is not the same as RPGIV. Somebody know other
> ways?
> Marco Facchinetti
> <snip>
> 
> 
> Here's two examples of  how to handle SQL Null fields in
> RPGIV.
> 
> Note:  The DB field doesn't contain a null character(no
> such thing).
> 
>  You have to test the Indicator Variable associated with
> the field.   In
> the example below,   SalesNull is an Indicator Variable
> that will be a -1
> if it's associated field DSCustSales is null during the
> fetch function.
> On an Insert,   You would say something like  < C     
> Eval     SalesNull
> =  -1  >    Then do an Insert to write DSCustSales as
> Null.
> 
> BTW,   I do in house classes on this stuff if anyone is
> interested.
> 
>    D SalesNull S    4B 0
>     C/Exec SQL
>     C+             Select CustId,
>     C+                        CustNam,
>     C+                        CustSales
>     C+             Into:   :DSCustId,
>     C+                        :DSCustName,
>     C+                        :DSCustSales :SalesNull
>     C+             From Customer  Where CustId = 'ACME'
>     C/End-Exec
> 
> ---------
> Here's how you would do an array of Null capable fields
> into a D/S  You
> have a D/S to put the individual fields you are fetching
> into and (followed
> by a colon) is a structure of an array of binary fields
> to hold the null
> representation of each of those fields.
> 
> D CustomerR    DS
> D    CsCustID         7P  0
> D    CsName         30A
> D    CsShpCity      30A
> D    CsDiscount            5P  3
> 
> D CustomerIDS  DS
> D    CsIDNull         4B  0
> D    CsNameNull            4B  0
> D    CsShpCityNull    4B  0
> D    CsDiscountNull   4B  0
> D*
> D     CustomerI           4B   0  Dim(4)
> overlay(CustomerIDS)
> 
> C/Exec SQL
> C+        Select    CustID,
> C+             Name,
> C+             ShpCity,
> C+             Discount
> C+        Into :CustomerR :CustomerI
> C+        From Customer
> C+        Where     CustID =:SelCst
> C/End-Exec
> 
> 
> John Carr
> 
> 
> +---
> | This is the RPG/400 Mailing List!
> | To submit a new message, send your mail to
> RPG400-L@midrange.com.
> | To subscribe to this list send email to
> RPG400-L-SUB@midrange.com.
> | To unsubscribe from this list send email to
> RPG400-L-UNSUB@midrange.com.
> | Questions should be directed to the list
> owner/operator: david@midrange.com
> +---


__________________________________________________
Do You Yahoo!?
Yahoo! Photos - 35mm Quality Prints, Now Get 15 Free!
http://photos.yahoo.com/
+---
| This is the RPG/400 Mailing List!
| To submit a new message, send your mail to RPG400-L@midrange.com.
| To subscribe to this list send email to RPG400-L-SUB@midrange.com.
| To unsubscribe from this list send email to RPG400-L-UNSUB@midrange.com.
| Questions should be directed to the list owner/operator: david@midrange.com
+---

As an Amazon Associate we earn from qualifying purchases.

This thread ...


Follow On AppleNews
Return to Archive home page | Return to MIDRANGE.COM home page

This mailing list archive is Copyright 1997-2024 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].

Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.