OBIETTIVO
Restituisce in formato alfanumerico i risultati di una istruzione SQL Select tramite un cursore
con allocazione dinamica della SQLDA
FUNZIONI E METODI
CLOSE - Chiude il cursore
| C EVAL £SQLD_FUNFU='CLOSE' |
| C EVAL £SQLD_FUNME=*BLANKS |
| C EXSR £SQLD |
OPEN - Prepara lo statement, apre il cursore, dimensiona la SQLDA
Prima di eseguire la funzione 'OPEN' è necessario impostare la variabile £SQLDString con l'istruzione SELECT.
NAM - recuperando i nomi di sistema dei campi in £SQLDCName
| C EVAL £SQLDString=SelectSQL |
| * numero di righe per istruzione OPTIMIZE (se 0 assume 5000) |
| C EVAL £SQLDRows=n |
| C EVAL £SQLD_FUNFU='OPEN' |
| C EVAL £SQLD_FUNME='NAM' |
| C EXSR £SQLD |
NAMLAB - recuperando i nomi di sistema dei campi in £SQLDCName e le intestazioni in £SQLDCLabel
ATTENZIONE: COMPORTA UN'ALLOCAZIONE DI MEMORIA TRIPLA
| C EVAL £SQLDString=SelectSQL |
| C EVAL £SQLD_FUNFU='OPEN' |
| C EVAL £SQLD_FUNME='NAMLAB' |
| C EXSR £SQLD |
LAB - recuperando le intestazioni dei campi in £SQLDCName
| C EVAL £SQLDString=SelectSQL |
| C EVAL £SQLD_FUNFU='OPEN' |
| C EVAL £SQLD_FUNME='LAB' |
| C EXSR £SQLD |
POS - Posizionamento cursore
NEXT - al record successivo
| C EVAL £SQLD_FUNFU='POS' |
| C EVAL £SQLD_FUNME='NEXT' |
| C EXSR £SQLD |
PRIOR - al record precedente
| C EVAL £SQLD_FUNFU='POS' |
| C EVAL £SQLD_FUNME='PRIOR' |
| C EXSR £SQLD |
FIRST - al primo record
| C EVAL £SQLD_FUNFU='POS' |
| C EVAL £SQLD_FUNME='FIRST' |
| C EXSR £SQLD |
LAST - all'ultimo record
| C EVAL £SQLD_FUNFU='POS' |
| C EVAL £SQLD_FUNME='LAST' |
| C EXSR £SQLD |
BEFORE - a BOF
| C EVAL £SQLD_FUNFU='POS' |
| C EVAL £SQLD_FUNME='BEFORE' |
| C EXSR £SQLD |
AFTER - a EOF
| C EVAL £SQLD_FUNFU='POS' |
| C EVAL £SQLD_FUNME='AFTER' |
| C EXSR £SQLD |
RELATIVE - relativo al record corrente
(posizionamento relativo al record corrente di +n o -n in base alla variabile £SQLDRows)
| C EVAL £SQLRel=n |
| C EVAL £SQLD_FUNFU='POS' |
| C EVAL £SQLD_FUNME='RELATIVE' |
| C EXSR £SQLD |
READF - Recupera il Valore della colonna
| C EVAL £SQLD_FUNFU='READF' |
| C EVAL £SQLD_FUNME=' ' |
| C EXSR £SQLD |
FINDC - Recupera la definizione della colonna
NAM - Ricerca dal nome della colonna in £SQLDCName
| C EVAL £SQLDCName=NomeCampo |
| C EVAL £SQLD_FUNFU='FINDC' |
| C EVAL £SQLD_FUNME='NAM' |
| C EXSR £SQLD |
LET - Posizionamento
| C EVAL £SQLD_FUNFU='FINDC' |
| C EVAL £SQLD_FUNME='POS' |
| C EXSR £SQLD |
LET - Lettura
| * ciclo sui campi |
| C DO *HIVAL |
| C EVAL £SQLD_FUNFU='FINDC' |
| C EVAL £SQLD_FUNME='LET' |
| C EXSR £SQLD |
| C IF £SQLD35=*ON |
| C LEAVE |
| C ENDIF |
| C ENDDO |
RETREC - Restituisce in £SQLDString l'intero record
G18 - con i campi separati da ' '
| C EVAL £SQLD_FUNFU='RETREC' |
| C EVAL £SQLD_FUNME='G18' |
| C EXSR £SQLD |
MAT - con i campi separati da '|'
| C EVAL £SQLD_FUNFU='RETREC' |
| C EVAL £SQLD_FUNME='MAT' |
| C EXSR £SQLD |
CSV - con i campi separati da ';'
| C EVAL £SQLD_FUNFU='RETREC' |
| C EVAL £SQLD_FUNME='CSV' |
| C EXSR £SQLD |
RETINT - Restituisce in £SQLDString le intestazioni
G18 - con i campi separati da ' '
| C EVAL £SQLD_FUNFU='RETINT' |
| C EVAL £SQLD_FUNME='G18' |
| C EXSR £SQLD |
CSV - con i campi separati da ';'
| C EVAL £SQLD_FUNFU='RETINT' |
| C EVAL £SQLD_FUNME='CSV' |
| C EXSR £SQLD |
TIPI DI DATI SUPPORTATI
-
Tipo dato RPG |
Tipo dato SQL |
Tipo dato £IR1
- A | CHAR | A
- A (VARYING) | VARCHAR | A
- 05I 0 | SMALLINT | B
- 10I 0 | INTEGER | B
- 20I 0 | BIGINT | B
- F | FLOAT | F
- D | DATE | L
- P | DECIMAL | P
- S | NUMERIC | S
- T | TIME | T
- Z | TIMESTAMP | Z
VARIABILI
| L(PUN) |
| - Stringa istruzione SQL (in INPUT) |
| - Record restituito (in OUTPUT con funzione 'RETREC') |
| - Valore del campo restituito (in OUTPUT con funzione 'READF') |
D £SQLDString S 32766 VARYING
D £SQLD_DS1 DS
D* numero in base al quale eseguire il fetch relative (con funzione 'RELATIVE')
D* numero di righe per l'optimize su apertura cursore
D £SQLDRows 30P 0
- OUTPUT con info campi (con funzione 'READF')
D* nome colonna (con metodo 'NAM' o 'NAMLAB') o intestazione (con metodo 'LAB')
D £SQLDCName 30
D* label (intestazione) colonna (con metodo 'NAMLAB')
D £SQLDCLabel 30
D* tipo di dato del campo
D £SQLDCDType 5I 0
D* lunghezza campo stringa
D £SQLDCLen 5I 0
D* scala campo numerico (numero posizioni decimali)
D £SQLDCScale 10I 0
D* precisione campo numerico
D £SQLDCPrec 10I 0
D* indice della colonna corrente del record
D £SQLDCurCol 7 0
D* numero totale delle colonne del record
D £SQLDTotCol 7 0
D* tipo di dato del campo nel formato della £IR1AC
D £SQLDCDTpIR 1
D £SQLD_ERROR DS
D £SQLD35 N
D £SQLDCOD 5I 0
D £SQLDERM 80
- %Status (per errori di allocazione di memoria)
D £SQLDSTATUS 5S 0
- Variabili per errore non SQL
D £SQLDVA 45
ESEMPIO
| ESEGUIRE UNA LETTURA DEL BRARTI0F QUERY : SELECT * FROM BRARTI0F |
| C*APRO |
| C EVAL £SQLDString='SELECT * FROM BRARTI0F' |
| C EVAL £SQLD_FUNFU='OPEN' |
| C EVAL £SQLD_FUNME='NAM' |
| C EXSR £SQLD |
| 1 C IF £SQLD35=*ON |
| C LEAVESR |
| 1e C ENDIF |
| C*posizionamento |
| C EVAL £SQLD_FUNFU='POS' |
| C EVAL £SQLD_FUNME='NEXT' |
| C EXSR £SQLD |
| 1 C IF £SQLD35=*ON |
| C LEAVESR |
| 1e C ENDIF |
| C*lettura |
| C DO *HIVAL |
| C EVAL £SQLD_FUNFU='RETREC' |
| C EVAL £SQLD_FUNME='MAT' |
| C EXSR £SQLD |
| 1 C IF £SQLD35=*ON |
| C LEAVE |
| 1e C ENDIF |
| C* £SQLDString CONTIENE IL RISULTATO DELLA FETCH |
| 1e C ENDDO |
| C*CHIUDO |
| C EVAL £SQLD_FUNFU='CLOSE' |
| C EVAL £SQLD_FUNME=*BLANKS |
| C EXSR £SQLD |
| C* LA FUNZIONE CLOSE CHIUDE IL CURSORE E PULISCE £SQLDString |