Vous êtes sur la page 1sur 56

EMBEDDED SQL

Copyright 1992, 1993 BY DMC CONSULTING, INC. ALL RIGHTS RESERVED 5650 West Central Avenue, Suite B, Toledo, OH 43615
AS/400 is a trademark of International Business Machines Corporation

EMBEDDED SQL 2/10/2003 DMC Consulting, 1993

Embedded SQL Basics SQL COMMANDS NEW COMMANDS

RPG IV
PRE-COMPILER
EMBEDDED SQL 2/10/2003 DMC Consulting, 1993

NEW SOURCE TYPE

Why Embed SQL in your RPG?

COMPILE TIME Vs. RUN TIME


EMBEDDED SQL 2/10/2003 DMC Consulting, 1993

FS pe cs

New Source Type


Work with Members Using PDM File . . . . . . Library . . . . QRPGLESRC DMCSQLLIB DMC41 Position to . . . . .

Type options, press Enter. 2=Edit 3=Copy 4=Delete 5=Display 8=Display description 9=Save 13=Change text Opt Member SQLPROC SQLTEST STOREDPRC1 STOREDPRC3 STOREDPRC4 STOREDPRC5 TSTRPGPRC TSTRPGPRC2 Type SQLRPGLE SQLRPGLE SQLRPGLE SQLRPGLE SQLRPGLE SQLRPGLE SQLRPGLE SQLRPGLE Text Test Test Test Test Test Test Test Test

6=Print 14=Compile

7=Rename 15=Create module...

program program program program program program program program

containing containing containing containing containing containing containing containing

SQL SQL SQL SQL SQL SQL SQL SQL

statements statements statements statements statements statements statements statements More...

Parameters or command ===> F3=Exit F4=Prompt F9=Retrieve F10=Command entry

F5=Refresh F23=More options

F6=Create F24=More keys

EMBEDDED SQL 2/10/2003 DMC Consulting, 1993

Syntax
C/EXEC SQL C+ C/END-EXEC :field-name C/EXEC SQL INCLUDE member-name C/END-EXEC ?

EMBEDDED SQL 2/10/2003 DMC Consulting, 1993

Syntax
RPG IV variables you cant use as a HOST variable:
Pointers Tables UDATE UDAY UMONTH UYEAR Look-ahead fields Named constants Definitions requiring the resolution of %SIZE or %ELEM

Avoid creating fields that start with: 'SQ', 'SQL', 'RDI', or 'DSN

EMBEDDED SQL 2/10/2003 DMC Consulting, 1993

SQL Pre-Compiler CRTSQLxxx


The pre-compiler will do the following: Looks for SQL statements and for the definition of host variable names. Verifies that each SQL statement is valid and free of syntax errors. Validates the SQL statements using the description in the database.

EMBEDDED SQL 2/10/2003 DMC Consulting, 1993

SQL Pre-Compiler
The SQL pre-compiler adds fields such as:

SQLAID SQLABC SQLCOD / SQLCODE SQLERL SQLERM SQLERP SQLERR SQLSTT / SQLSTATE SQLWRN
EMBEDDED SQL 2/10/2003 DMC Consulting, 1993

CRTSQLRPGI
Create SQL ILE RPG Object (CRTSQLRPGI) Type choices, press Enter. Object . . . . . . . Library . . . . . Source file . . . . Library . . . . . Source member . . . Commitment control . Relational database Compile type . . . . Listing output . . . Text 'description' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . > RPG100 > DMCSQLLIB > QRPGLESRC > DMCSQLLIB > RPG100 *CHG *LOCAL > *PGM *NONE *SRCMBRTXT Name Name, Name, Name, Name, *CHG,

*CURLIB QRPGLESRC *LIBL, *CURLIB *OBJ *ALL, *CS, *NONE...

*PGM, *SRVPGM, *MODULE *NONE, *PRINT

F3=Exit F4=Prompt F5=Refresh F13=How to use this display

Bottom F10=Additional parameters F12=Cancel F24=More keys

EMBEDDED SQL 2/10/2003 DMC Consulting, 1993

CRTSQLRPGI
Create SQL ILE RPG Object (CRTSQLRPGI) Type choices, press Enter. Target release . . . . . INCLUDE file . . . . . . Library . . . . . . . Allow copy of data . . . Close SQL cursor . . . . Allow blocking . . . . . Delay PREPARE . . . . . Severity level . . . . . Date format . . . . . . Date separator character Time format . . . . . . Time separator character Replace . . . . . . . . RDB connect method . . . Default Collection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . *CURRENT . *SRCFILE . *LIBL . *YES . *ENDACTGRP . *READ . *NO . 10 . *JOB . *JOB . *HMS . *JOB . > *YES . *DUW . *NONE *CURRENT, *PRV, VxRxMx Name, *SRCFILE Name, *LIBL, *CURLIB *YES, *NO, *OPTIMIZE *ENDMOD, *ENDACTGRP *READ, *NONE, *ALLREAD *YES, *NO 0-40 *JOB, *USA, *ISO, *EUR... *JOB, /, ., ,, -, ' ', *BLANK *HMS, *USA, *ISO, *EUR, *JIS *JOB, :, ., ,, ' ', *BLANK *YES, *NO *DUW, *RUW Name, *NONE More... F13=How to use this display

F3=Exit F4=Prompt F24=More keys


EMBEDDED SQL 2/10/2003 DMC Consulting, 1993

F5=Refresh

F12=Cancel

CRTSQLRPGI
Create SQL ILE RPG Object (CRTSQLRPGI) Type choices, press Enter. Package . . . . . . Library . . . . . IBM SQL Flagging . . ANS flagging . . . . Print file . . . . . Library . . . . . Debugging view . . . User profile . . . . Dynamic User Profile Sort Sequence . . . Library . . . . . Language id . . . . To source file . . . Library . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . *OBJ *OBJLIB *NOFLAG *NONE QSYSPRT *LIBL *NONE *NAMING *USER *JOB *JOB QSQLTEMP1 QTEMP Name, *OBJ Name, *OBJLIB *NOFLAG, *FLAG *NONE, *ANS Name Name, *LIBL, *CURLIB *SOURCE, *NONE *NAMING, *USER, *OWNER *USER, *OWNER Name, *HEX, *JOB, *JOBRUN... Name, *LIBL, *CURLIB *JOB, *JOBRUN... Name Name, *LIBL, *CURLIB

F3=Exit F4=Prompt F24=More keys


EMBEDDED SQL 2/10/2003 DMC Consulting, 1993

F5=Refresh

F12=Cancel

Bottom F13=How to use this display

Embedding SQL Statements

C C

KEY

CHAIN IF

FILE %FOUND

C/Exec SQL C+ C+ C+ C/End-exec C C

SELECT MDESC INTO :W_DESC FROM ITMMST WHERE MITEM = :W_ITEM

ENDIF RETURN

EMBEDDED SQL 2/10/2003 DMC Consulting, 1993

Embedding SELECT
Selecting ONE field from ONE record * DW_ITEM DW_DESC S S 9P 0 40

* Run the SQL select C 'ITEM?' C/Exec SQL C+ C+ C+ C/End-exec C W_DESC C DSPLY SELECT MDESC INTO :W_DESC FROM ITMMST WHERE MITEM = :W_ITEM DSPLY RETURN W_ITEM

EMBEDDED SQL 2/10/2003 DMC Consulting, 1993

Embedding SELECT
Selecting TWO fields from ONE record DW_ITEM DW_PRICE DW_DESC S S S 9P 0 7P 2 40

* Run the SQL select C 'ITEM?' C/Exec SQL C+ C+ C+ C/End-exec C W_DESC C W_PRICE C
EMBEDDED SQL 2/10/2003 DMC Consulting, 1993

DSPLY SELECT MDESC, MPRICE INTO :W_DESC, :W_PRICE FROM ITMMST WHERE MITEM = :W_ITEM DSPLY DSPLY RETURN

W_ITEM

Embedding SELECT
Selecting MANY fields from ONE record DW_DATA DS EXTNAME(ITMMST)

* Run the SQL select C 'ITEM?' C/Exec SQL C+ C+ C+ C/End-exec C MDESC C MPRICE C DSPLY SELECT * INTO :W_DATA FROM ITMMST WHERE MITEM = :MITEM DSPLY DSPLY RETURN MITEM

EMBEDDED SQL 2/10/2003 DMC Consulting, 1993

EXAMPLE #1
DW_CUST DW_NAME C 'CUST' S S DSPLY 6P 0 40 W_CUST

C/EXEC SQL C+ SELECT CNAME INTO :W_NAME C+ from CUST WHERE CNUMBER = :W_CUST C/END-EXEC C C C 'NAME IS' DSPLY EVAL RETURN *INLR = *ON W_NAME

EMBEDDED SQL 2/10/2003 DMC Consulting, 1993

Embedding INSERT
* Run the SQL INSERT W/VALUES C/Exec SQL C+ C+ C/End-exec INSERT INTO CUST VALUES(7, The Fruit Stand,,, Miami,FL,,)

* Run the SQL INSERT W/SUB-SELECT C/Exec SQL C+ C/End-exec INSERT INTO TESTLIB/CUST SELECT * FROM PRODLIB/CUST

EMBEDDED SQL 2/10/2003 DMC Consulting, 1993

Embedding INSERT
* Run the SQL INSERT W/n ROWS DW_FIELDS D W_ITEM D W_DESC D W_WGT D W_PRICE or D W_FIELDS D E DS EXTNAME(FILE) OCCURS(10) DS 9 40 4 9 0 2 2 OCCURS(10)

* Run the SQL select C/Exec SQL C+ C/End-exec


EMBEDDED SQL 2/10/2003 DMC Consulting, 1993

INSERT INTO ITMMST 10 ROWS VALUES(:W_FIELDS)

Embedding DELETE & UPDATE


* Run the SQL DELETE C/Exec SQL DELETE FROM CUST C+ WHERE CNUMBER = :CUSTNBR C/End-exec * Run the SQL C/Exec SQL C+ C+ C/End-exec UPDATE UPDATE CUST SET CSTATE = FL WHERE CCITY = Miami

C/Exec SQL C+ UPDATE CUSTWORK SET ROW = (SELECT * FROM CUST WHERE C+ CUSTWORK.NAME = CUST.NAME) C/End-exec
EMBEDDED SQL 2/10/2003 DMC Consulting, 1993

EXAMPLE #2
DW_CUST C C C C E DS EVAL EVAL EVAL EVAL EXTNAME(CUST) CNUMBER = 1111 CNAME = 'The Garden Grill' CSTATE = 'OH' CCITY = 'Toledo'

C/EXEC SQL C+ INSERT INTO CUST C+ VALUES(:W_CUST) C/END-EXEC

EMBEDDED SQL 2/10/2003 DMC Consulting, 1993

RPG200 - LAB #2
C/EXEC SQL C+ UPDATE CUST C+ SET CCITY = 'Miami' WHERE CNUMBER = 1111 C/END-EXEC C/EXEC SQL C+ DELETE FROM CUST C+ WHERE CNUMBER = 1111 C/END-EXEC C C EVAL RETURN *INLR = *ON

EMBEDDED SQL 2/10/2003 DMC Consulting, 1993

Using PREPARE
DW_SQL DW_SELECT DW_FROM DW_WHERE DW_FIELD DW_VALUE C C C C C C
EMBEDDED SQL 2/10/2003 DMC Consulting, 1993

S C C C S S DSPLY DSPLY EVAL

1000 SELECT MITEM FROM ITMMST WHERE 10 30 W_FIELD W_VALUE W_SQL= W_SELECT + W_FROM + W_WHERE + W_FIELD + = + W_VALUE = + W_VALUE +

FIELD?' VALUE?'

OR

Using PREPARE
C/Exec SQL C/End-exec C/Exec SQL C/End-exec C/Exec SQL C/End-exec C C/Exec SQL C/End-exec C C/Exec SQL C/End-exec
EMBEDDED SQL 2/10/2003 DMC Consulting, 1993

PREPARE @S1 from :W_SQL

DECLARE @C1 CURSOR FOR @S1

OPEN @C1 DOU SQLCOD <> *zero FETCH @C1 INTO :W_VALUE ENDDO CLOSE @C1

Using PREPARE
DW_SQL DW_DELETE DW_FROM DW_WHERE DW_FIELD DW_VALUE C C C C C FIELD?' VALUE?' S C C C S S DSPLY DSPLY EVAL 1000 DELETE FROM ITMMST WHERE 10 30 W_FIELD W_VALUE W_SQL= W_DELETE + W_FROM + W_WHERE + W_FIELD + = + W_VALUE

EMBEDDED SQL 2/10/2003 DMC Consulting, 1993

Using PREPARE
C/Exec SQL C/End-exec C/Exec SQL C/End-exec PREPARE @S1 from :W_SQL

EXECUTE @S1

C/Exec SQL C/End-exec

EXECUTE IMMEDIATE :W_SQL

EMBEDDED SQL 2/10/2003 DMC Consulting, 1993

EXAMPLE #3 (1 of 3)
DW_CUST DW_CITY DW_SQL C C C C 'CITY' E DS S S DSPLY EVAL EXTNAME(CUST) 20 1000 W_CITY W_SQL = 'SELECT * FROM + CUST WHERE CCITY = ' + '''' + W_CITY + ''''

C/EXEC SQL C+ PREPARE S1 FROM :W_SQL C/END-EXEC C/EXEC SQL C+ DECLARE C1 CURSOR FOR S1 C/END-EXEC
EMBEDDED SQL 2/10/2003 DMC Consulting, 1993

EXAMPLE #3 (2 of 3)
C/EXEC SQL C+ OPEN C1 C/END-EXEC C/EXEC SQL C+ FETCH C1 INTO :W_CUST C/END-EXEC C DOW SQLCOD <> 100 CNAME

C 'NAME IS' DSPLY C/EXEC SQL C+ FETCH C1 INTO :W_CUST C/END-EXEC C ENDDO

EMBEDDED SQL 2/10/2003 DMC Consulting, 1993

EXAMPLE #3 (3 of 3)
C/EXEC SQL C+ CLOSE C1 C/END-EXEC C/FREE W_SQL = 'UPDATE CUST SET + CPHONE = ' + '''555-1212''' + ' WHERE CZIP <> ''32509''' C/END-FREE C/EXEC SQL C+ EXECUTE IMMEDIATE :W_SQL C/END-EXEC C C EVAL RETURN *INLR = *ON

EMBEDDED SQL 2/10/2003 DMC Consulting, 1993

Embedding SELECT Multiple Row Fetch


* Run the SQL SELECT for n ROWS DW_FIELDS D W_ITEM D W_DESC D W_WGT D W_PRICE DS 9 40 4 9 0 2 2 OCCURS(10)

It is possible to read more than one record at a time, loading a MODS with values for C/EXEC at once. This is C1 FOR than ROWS several records SQL FETCHmore efficient 10 the standard one record at a time method.INTO :W_FIELDS C+

C/END-EXEC

EMBEDDED SQL 2/10/2003 DMC Consulting, 1993

Using Parameter Markers


DW_SQL DW_SELECT DW_FROM DW_WHERE DW_VALUE C C C ITEM?' S C C C S DSPLY EVAL 1000 SELECT MITEM FROM ITMMST WHERE MITEM = ? 30 W_VALUE W_SQL= W_SELECT + W_FROM + W_WHERE

EMBEDDED SQL 2/10/2003 DMC Consulting, 1993

Using Parameter Markers


C/Exec SQL C/End-exec C/Exec SQL C/End-exec C/Exec SQL C/End-exec C C/Exec SQL C/End-exec C PREPARE @S1 from :W_SQL DECLARE @C1 CURSOR FOR @S1 OPEN @C1 USING :W_VALUE DOU SQLCOD <> *zero FETCH @C1 INTO :W_VALUE

ENDDO

C/Exec SQL CLOSE @C1 C/End-exec

EMBEDDED SQL 2/10/2003 DMC Consulting, 1993

Using Parameter Markers


DW_SQL DW_DELETE DW_FROM DW_WHERE DW_VALUE1 DW_VALUE2 S C C C S S 1000 DELETE FROM ITMMST WHERE MITEM IN (?, ?) 30 30

C C

ITEM?' ITEM?'

DSPLY DSPLY EVAL

W_VALUE1 W_VALUE2

C C C/Exec SQL C/End-exec C/Exec SQL C/End-exec

W_SQL= W_DELETE + W_FROM + W_WHERE PREPARE @S1 from :W_SQL EXECUTE @S1 USING :W_VALUE1, :W_VALUE2

EMBEDDED SQL 2/10/2003 DMC Consulting, 1993

Using Parameter Markers


DW_SQL DW_DELETE DW_FROM DW_WHERE DW_VALUE1 DW_COMP S C C C S S 1000 DELETE FROM ITMMST WHERE MITEM LIKE ? 30 30 VARYING

C ITEM?' DSPLY W_VALUE1 C EVAL %LEN(W_COMP) = %LEN(%TRIM( C W_VALUE1)) C EVAL W_COMP = %TRIM(W_VALUE1) C EVAL W_SQL= W_DELETE + W_FROM + C W_WHERE C/Exec SQL PREPARE @S1 from :W_SQL C/End-exec C/Exec SQL EXECUTE @S1 USING :W_COMP C/End-exec
EMBEDDED SQL 2/10/2003 DMC Consulting, 1993

EXAMPLE #4 (1 of 2)
DW_CUST DW_CITY DW_STATE DW_SQL C C C C C 'CITY' 'STATE' E DS S S S DSPLY DSPLY EVAL EXTNAME(CUST) 20 2 1000 W_CITY W_STATE W_SQL = 'SELECT * FROM + CUST WHERE CCITY = ' + '? OR CSTATE = ?'

C/EXEC SQL C+ PREPARE S1 FROM :W_SQL C/END-EXEC C/EXEC SQL C+ DECLARE C1 CURSOR FOR S1 C/END-EXEC
EMBEDDED SQL 2/10/2003 DMC Consulting, 1993

EXAMPLE #4 (2 of 2)
C/EXEC SQL C+ OPEN C1 USING C/END-EXEC C/EXEC SQL C+ FETCH C1 INTO C/END-EXEC C C 'NAME IS' C/EXEC SQL C+ FETCH C1 INTO C/END-EXEC C C/EXEC SQL C+ CLOSE C1 C/END-EXEC C C
EMBEDDED SQL 2/10/2003 DMC Consulting, 1993

:W_CITY, :W_STATE

:W_CUST DOW DSPLY :W_CUST ENDDO SQLCOD <> 100 CNAME

EVAL RETURN

*INLR = *ON

SQL Error Handling SQLCA


The SQLCA is a set of variables that is updated after the execution of every SQL statement. For RPG, this data structure is automatically added by the Pre-compiler. The most commonly used SQL variable is SQLCOD. It can be tested as follows: 0 Positive Negative
EMBEDDED SQL 2/10/2003 DMC Consulting, 1993

- Success - Warning - Error

SQL Error Handling


SQLERL - Contains the length of the text loaded into SQLERM. SQLERM - Contains Message text for the SQLCOD value. SQLERP - Contains the name of the Product and Module returning an error. SQLERRD - Array containing 6 diagnostic codes.
(1) (2) (3) (4) (5) (6) - Last four digits of the CPF message if SQLCOD is negative. - Last four digits of the CPD message if SQLCOD is negative. - Number of rows affected. - Cost of execution, error message, or length of the row. - Position of a syntax error, +100 if EOF, or the number of parameter markers. - SQL completion code when SQLCOD is 0.

SQLWRN - String of 11, 1 byte flags. SQLSTT - A return code for the most recent SQL statement.
EMBEDDED SQL 2/10/2003 DMC Consulting, 1993

Complex SQLs Multiple Cursors


DOU SQLCOD = 100 FETCH @C1 INTO :W_VALUE DOU SQLCOD = 100 FETCH @C2 INTO :W_VALUE

ENDO

?... SQLCOD = ?
ENDO
EMBEDDED SQL 2/10/2003 DMC Consulting, 1993

Complex SQLs ADVANCED CURSORS


SCROLL - Allows forward and back movement of the cursor.

DYNAMIC SCROLL - As Scroll but also allows update.

WITH HOLD - Allows COMMIT to be performed without closing the cursor.

EMBEDDED SQL 2/10/2003 DMC Consulting, 1993

Complex SQLs ADVANCED CURSORS


FETCH NEXT - positions cursor ON next record.

PRIOR - positions cursor ON previous record.

FIRST - positions cursor ON the first record in the result table. LAST - positions cursor ON the last record in the result table.

EMBEDDED SQL 2/10/2003 DMC Consulting, 1993

Complex SQLs

BEFORE

- positions cursor BEFORE the first record in the result table. - positions cursor AFTER the last record in the result table. - no change.

AFTER

CURRENT

RELATIVE - positions cursor on the record specified by a host variable. A negative number moves back x rows. A positive value moves forward X rows.
EMBEDDED SQL 2/10/2003 DMC Consulting, 1993

Complex SQLs ADVANCED CURSORS


C+ DECLARE @QC1 DYNAMIC SCROLL CURSOR WITH HOLD C+ FOR SQLSTMT C+ FETCH PRIOR FROM @QC1 INTO :W_DATA1 :W_IND1, C+ :W_DATA2 :W_IND2, :W_DATA3 :W_IND3 C+ FETCH RELATIVE -1 FROM @QC1 INTO :W_DATA1:W_IND1, C+ :W_DATA2:W_IND2, :W_DATA3:W_IND3 C+ FETCH BEFORE FROM @QC1

EMBEDDED SQL 2/10/2003 DMC Consulting, 1993

Complex SQLs ADVANCED CURSORS


C+ DECLARE @C2 DYNAMIC SCROLL CURSOR WITH HOLD FOR C+ SELECT * FROM DATA FOR UPDATE OF LONGNAM2 C+ FETCH FIRST FROM @QC2 INTO :W_FIELDS C+ UPDATE DATA SET LONGNAM2 = FRED C+ WHERE CURRENT OF @C2

EMBEDDED SQL 2/10/2003 DMC Consulting, 1993

Complex SQLs COMMITMENT CONTROL


UPDATE MAST SET OHQTY = OHQTY + :TRQTY INSERT INTO HIST VALUES(:W_FIELDS) DELETE FROM TRAN WHERE CURRENT OF @QC1 COMMIT UPDATE MAST SET OHQTY = OHQTY + :TRQTY INSERT INTO HIST VALUES(:W_FIELDS) DELETE FROM TRAN WHERE CURRENT OF @QC1 COMMIT UPDATE MAST SET OHQTY = OHQTY + :TRQTY INSERT INTO HIST VALUES(:W_FIELDS) DELETE FROM TRAN WHERE CURRENT OF @QC1

EMBEDDED SQL 2/10/2003 DMC Consulting, 1993

Complex SQLs COMMITMENT CONTROL


+ DECLARE @QC1 DYNAMIC SCROLL CURSOR WITH HOLD FOR SQLSTMT C+ FETCH NEXT FROM @QC1 INTO :W_FIELDS C DOW SQLCOD = *ZERO C+ C+ C+ C+ C UPDATE MAST SET OHQTY = OHQTY + :TRQTY WHERE MAST.PART = :PART INSERT INTO HIST VALUES(:W_FIELDS) DELETE FROM TRAN WHERE CURRENT OF @QC1 COMMIT

C+ FETCH NEXT FROM @QC1 INTO :W_FIELDS C ENDDO


EMBEDDED SQL 2/10/2003 DMC Consulting, 1993

Null Values

C/EXEC SQL C+ UPDATE DATA SET LONGNAM2 = NULL WHERE NAME IS NOT NULL C/END-EXEC

C/EXEC SQL C+ SELECT * FROM DATA WHERE LONGNAM2 IS NULL C/END-EXEC

EMBEDDED SQL 2/10/2003 DMC Consulting, 1993

Null Values
* Single Row FETCH testing for NULL values DW_NAME DW_LONGNAM1 DW_LONGNAM2 DW_IND1 DW_IND2 S S S S S 30 120 120 5U 0 5U 0

C/EXEC SQL C+ FETCH NEXT FROM @QC1 INTO :W_NAME :W_IND1, C+ :W_LONGNAM1, :W_LONGNAM2 :W_IND2 C/END-EXEC

EMBEDDED SQL 2/10/2003 DMC Consulting, 1993

Null Values
* Multi Row FETCH testing for NULL values DW_FIELDS D W_NAME D W_LONGNAM1 D W_LONGNAM2 DW_IND D W_IND1 D W_IND2 D W_IND3 DS 30 120 120 DS 5U 0 5U 0 5U 0 OCCURS(10) OCCURS(10)

C/EXEC SQL FETCH @QC1 FOR 10 ROWS C+ INTO :W_FIELDS :W_IND C/END-EXEC
EMBEDDED SQL 2/10/2003 DMC Consulting, 1993

SQL Descriptors SQLDA


SELECT * from ?

The SQLDA is used to determine what fields will be returned by a prepared SELECT statement before performing the fetch, allowing you to tailor the number and size of values used in the FETCH or OPEN statement.
EMBEDDED SQL 2/10/2003 DMC Consulting, 1993

SQL Descriptors
SQLN - The number of occurrences of SQLVAR. SQLD - Contains the number of occurrences of SQL_VAR being used. SQLVAR - Array containing descriptions of each variable being used. SQLTPE - Contains data type. Odd types are NULL capable.

SQLLEN - Contains the length of the variable. SQLRES - Reserved area for boundary alignment. SQLDATA - Contains a pointer to the address of the variables. SQLIND - Contains a pointer to an integer. A negative value indicates NULL, otherwise it is NOT NULL. SQLNAME - Contains column name, label, or system name. SQLNAMELEN - Contains the length of SQLNAME.
EMBEDDED SQL 2/10/2003 DMC Consulting, 1993

SQL Descriptors
To use the IBM supplied SQLDA specify the following code in your program: C/EXEC SQL INCLUDE SQLDA C/END-EXEC SQL_VAR: is an array which holds the description of each variable used in a FETCH or OPEN statement. The data structure SQLVAR is used to parse the values in SQL_VAR. SQL_NUM: is a numeric constant that must be defined before the SQLDA is defined. It determines the number of variables which will be dimensioned by the SQL_VAR array.

EMBEDDED SQL 2/10/2003 DMC Consulting, 1993

SQL Descriptors
DESCRIBE statement INTO data-area USING SYSTEM NAMES

The USING clause determines what values are used for column labels. USING NAMES (default if USING is omitted) USING SYSTEM NAMES USING LABELS USING BOTH (NAMES and LABELS) USING ALL (NAMES, LABELS, and SYSTEM NAMES) For BOTH and ALL you must double or triple the size of the SQLVAR array.

EMBEDDED SQL 2/10/2003 DMC Consulting, 1993

SQL Descriptors DESCRIBE


C/Exec SQL C/End-exec C/Exec SQL C/End-exec C/Exec SQL C/End-exec C/Exec SQL C/End-exec PREPARE @S1 from :W_SQL1 DECLARE @C1 CURSOR FOR @S1 OPEN @C1 USING :W_FILE DESCRIBE @S1 INTO :SQLDA

EMBEDDED SQL 2/10/2003 DMC Consulting, 1993

SQL Descriptors FETCH w/SQLDA

C/Exec SQL C/End-exec C C C C

FETCH @C1 USING DESCRIPTOR :SQLDA DOW DO EVAL SELECT SQLCOD = *ZERO SQLD X PTR_DATA = SQLDATA(X)

EMBEDDED SQL 2/10/2003 DMC Consulting, 1993

SQL Descriptors SQLDA is only for programs that are so dynamic that the program knows nothing about the files and fields being used, at the time it is written.

EMBEDDED SQL 2/10/2003 DMC Consulting, 1993

Summary
SQL contains powerful update capabilities. It provides the ability to perform updates to specific records or make massive updates to every record in a table. Statements can be created statically, or dynamically. Static SQLs offer better performance. Dynamic SQLs offer more flexibility. The pre-compiler adds a significant amount of code to the program, providing features such as the SQLCA, SQLCODE, and SQLSTATE. A prepared SELECT statement must be processed with the DECLARE, OPEN, and FETCH statements. Other prepared statements can simply be executed. Combining the flexibility of SQL with the robust RPG IV language, creates a hybrid program of great potential. Also remember that SQL is used in ODBC and JDBC. So learning other languages such as VB and JAVA, will be easier.
EMBEDDED SQL 2/10/2003 DMC Consulting, 1993

Vous aimerez peut-être aussi