102
06/07/22 “””Natural for DB2 Beyond The Find and Read Darrell Skildum Advisory Systems Engineer Software Ag

Natural for DB2 Beyond The Find and Read

  • Upload
    tess98

  • View
    716

  • Download
    5

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: Natural for DB2 Beyond The Find and Read

04/10/23

“””Natural for DB2 Beyond The Find and Read

Darrell SkildumAdvisory Systems EngineerSoftware Ag

Page 2: Natural for DB2 Beyond The Find and Read

Darrell Skildum / 04/10/23 / 2 Software AG

DB2 Programming Tools

1) DBLOG

1) Traces all SQL calls

2) Entry point to LISTSQL and EXPLAIN

2) LISTSQL

1) Lists SQL generated

2) Entry point to EXPLAIN

3) EXPLAIN

1) DB2 estimate of cost of command

2) Shows INDEX use/non use

3) Shows columns of index used

Page 3: Natural for DB2 Beyond The Find and Read

Darrell Skildum / 04/10/23 / 3 Software AG

ADABAS vs DB2

Purpose is not to debate merits of each Database, but to encourage the best use of the tools for each

Page 4: Natural for DB2 Beyond The Find and Read

Darrell Skildum / 04/10/23 / 4 Software AG

ADABAS vs DB2

ADABAS is a Record Oriented Database

A FIND results in a set of ISNs which can be retrieved one at a time

A READ is a true browse function

DB2 is set oriented

A FIND translates to a SELECT which produces a subset of the records as a separate table which is then browsed.

A READ may result is SELECT GE which may produce a subset much larger than wanted

Page 5: Natural for DB2 Beyond The Find and Read

Darrell Skildum / 04/10/23 / 5 Software AG

Adabas vs DB2 programming

For the most part, the same syntax works for both ADABAS and DB2

More thought should be applied because in some cases, the same syntax may be less efficient in DB2

DB2 allows (requires) much more complicated syntax to effectively retrieve the selected information

Page 6: Natural for DB2 Beyond The Find and Read

Darrell Skildum / 04/10/23 / 6 Software AG

Creation of Tables

Employees Creator = SADRS

Employees ADA

EMPL_BASE

EMPLOYEE_PAY

EMPLOYEE_LEAVE

EMPLOY_DEEMPLOY_UK

EMPLOY_SP EMPLOY_US

EMPLOY_FR

Page 7: Natural for DB2 Beyond The Find and Read

Darrell Skildum / 04/10/23 / 7 Software AG

Creation of Tables

Vehicles -Creator = SADRS

Vehicles (ADA)

VEHICLES

Page 8: Natural for DB2 Beyond The Find and Read

Darrell Skildum / 04/10/23 / 8 Software AG

Natural Read

DEFINE DATA LOCAL 1 EMP VIEW OF SADRS-EMPL_BASE 2 PERSONNEL_ID 2 NAME 2 FIRST_NAME 2 DEPT END-DEFINE READ EMP WITH DEPT = 'COMP21' THRU 'COMP21' DISPLAY PERSONNEL_ID NAME FIRST_NAME END-READ END

Page 9: Natural for DB2 Beyond The Find and Read

Darrell Skildum / 04/10/23 / 9 Software AG

Output from Read

Page 1 PERSONNEL_ID NAME FIRST_NAME ------------ -------------------- -------------------- 11300324 DAMMBACH FLORIAN 11400325 SPAEHT KLAUS 11700324 MOELLER MARION 11700323 LIST FRANZ 11300323 DAMM WOLFGANG 11300320 BRUNNER HELMUT 11100114 UNGER KLAUS 11100113 TREIBER KLAUS 11100105 SCHIRM CHRISTIAN

Page 10: Natural for DB2 Beyond The Find and Read

Darrell Skildum / 04/10/23 / 10 Software AG

List SQL from READ

Member NATREAD - LISTSQL - Library NDBDEMO NATURAL statement at line 0080 Stmt 1 / 1 READ EMP WITH DEPT = 'COMP21' THRU 'COMP21' Generated SQL statement Mode : dynamic DBRM : Line 1 / 5 SELECT PERSONNEL_ID, NAME, FIRST_NAME, DEPT FROM SADRS.EMPL_BASE WHERE DEPT >= 'COMP21' ORDER BY DEPT FOR FETCH ONLY

Page 11: Natural for DB2 Beyond The Find and Read

Darrell Skildum / 04/10/23 / 11 Software AG

DBLOG from READ

User SADRS - DBLOG Trace - Library NDBDEMO M No R SQL Statement (truncated) CU SN SREF M Typ SQLC/W Program Line LV_ 1 ROLLBACK 00 00 0000 D DB2 6660 00_ 2 SELECT PERSONNEL_ID,NAME,FIRS 01 01 0080 D DB2 NATREAD 0080 01_ 3 FETCH CURSOR NEX 01 01 0080 D DB2 NATREAD 0080 01_ 4 FETCH CURSOR NEX 01 01 0080 D DB2 NATREAD 0080 01_ 5 FETCH CURSOR NEX 01 01 0080 D DB2 NATREAD 0080 01_ 6 FETCH CURSOR NEX 01 01 0080 D DB2 NATREAD 0080 01_ 7 FETCH CURSOR NEX 01 01 0080 D DB2 NATREAD 0080 01_ 8 FETCH CURSOR NEX 01 01 0080 D DB2 NATREAD 0080 01_ 9 FETCH CURSOR NEX 01 01 0080 D DB2 NATREAD 0080 01_ 10 FETCH CURSOR NEX 01 01 0080 D DB2 NATREAD 0080 01_ 11 FETCH CURSOR NEX 01 01 0080 D DB2 NATREAD 0080 01_ 12 FETCH CURSOR NEX 01 01 0080 D DB2 NATREAD 0080 01_ 13 CLOSE CURSOR 01 01 0080 D DB2 NATREAD 0080 01

Page 12: Natural for DB2 Beyond The Find and Read

Darrell Skildum / 04/10/23 / 12 Software AG

Explain from Read

Estimated cost : 428.5 timerons Qblockno Mixop Access Match Index Pre- Access- Column- Planno seq type cols only fetch creator name fn_eval --- --- --- ---- ----- ----- ----- -------- ------------------ - 1 1 R S 1 2 Table Tslock -- sortn -- -- sortc -- Tabno Creator Tname mode Method uq jo or gr uq jo or gr --- -------- ------------------ ------ ------ -- -- -- -- -- -- -- -- 1 SADRS EMPL_BASE IS N N N N N N N N 3 N N N N N N Y N

Page 13: Natural for DB2 Beyond The Find and Read

Darrell Skildum / 04/10/23 / 13 Software AG

Read

READ

Page 14: Natural for DB2 Beyond The Find and Read

Darrell Skildum / 04/10/23 / 14 Software AG

Read Natural V4

DEFINE DATA LOCAL 1 EMP VIEW OF SADRS-EMPL_BASE 2 PERSONNEL_ID 2 NAME 2 FIRST_NAME 2 DEPT END-DEFINE READ EMP WITH DEPT = 'COMP21' TO 'COMP21' DISPLAY PERSONNEL_ID NAME FIRST_NAME END-READ END

Page 15: Natural for DB2 Beyond The Find and Read

Darrell Skildum / 04/10/23 / 15 Software AG

ListSQL V4 Read

Member NATREAD2 - LISTSQL - Library NDBDEMO NATURAL statement at line 0080 Stmt 1 / 1 READ EMP WITH DEPT = 'COMP21' TO 'COMP21' Generated SQL statement Mode : dynamic DBRM : Line 1 / 5 SELECT PERSONNEL_ID, NAME, FIRST_NAME, DEPT FROM SADRS.EMPL_BASE WHERE DEPT BETWEEN 'COMP21' AND 'COMP21' ORDER BY DEPT FOR FETCH ONLY

Page 16: Natural for DB2 Beyond The Find and Read

Darrell Skildum / 04/10/23 / 16 Software AG

Explain for V4 Read

Estimated cost : 16.5 timerons Qblockno Mixop Access Match Index Pre- Access- Column- Planno seq type cols only fetch creator name fn_eval --- --- --- ---- ----- ----- ----- -------- ------------------ - 1 1 I 1 L SADRS DEPT_NAME 1 2 Table Tslock -- sortn -- -- sortc -- Tabno Creator Tname mode Method uq jo or gr uq jo or gr --- -------- ------------------ ------ ------ -- -- -- -- -- -- -- -- 1 SADRS EMPL_BASE IS N N N N N N N N 3 N N N N N N Y N

16.5 timerons vs 428.5

Page 17: Natural for DB2 Beyond The Find and Read

Darrell Skildum / 04/10/23 / 17 Software AG

Coding SQL SPUFI - ISQL

***** **********************00001 SELECT * 00002 FROM SADRS.EMPL_BASE 00003 WHERE DEPT = 'COMP02' ***** **********************

Page 18: Natural for DB2 Beyond The Find and Read

Darrell Skildum / 04/10/23 / 18 Software AG

Coding SQL SPUFI - ISQL

-----------------------------------------------------------------

PERSONNEL_ID FIRST_NAME MIDDLE_NAME NAME

>----------------------------------------------------------------

50003700 LOUIS D'AGOSTINO

50016600 ANNIE GODEFROY

50019000 ROGER BESSON

50020600 DANIEL GREGOIRE

50006700 SERGE RIGOLLET

60000231 ANTONIO VILLAR

60000509 VICTORIA RODRIGUEZ

60008045 GORKA NIEDA

60008231 JORDI MONTERREY ESPLA

60008745 ANTONIO PUERTAS

60008509 MARIA JOSE PUERTOLAS

Page 19: Natural for DB2 Beyond The Find and Read

Darrell Skildum / 04/10/23 / 19 Software AG

Coding SQL

DEFINE DATA LOCAL 1 EMP VIEW OF SADRS-EMPL_BASE 2 PERSONNEL_ID 2 NAME 2 FIRST_NAME 2 DEPT END-DEFINE SELECT * INTO VIEW EMP FROM SADRS-EMPL_BASE WHERE DEPT = 'COMP02' DISPLAY PERSONNEL_ID NAME FIRST_NAMEEND-SELECT END

Page 20: Natural for DB2 Beyond The Find and Read

Darrell Skildum / 04/10/23 / 20 Software AG

Coding SQL

DEFINE DATA LOCAL 1 EMP VIEW OF SADRS-EMPL_BASE 2 PERSONNEL_ID 2 NAME 2 FIRST_NAME 2 DEPT END-DEFINE INTO VIEW EMP FROM SADRS-EMPL_BASE WHERE DEPT = 'COMP02' DISPLAY PERSONNEL_ID NAME FIRST_NAMEEND-SELECT END

SELECT PERSONNEL_ID, NAME, FIRST_NAME, DEPT

Page 21: Natural for DB2 Beyond The Find and Read

Darrell Skildum / 04/10/23 / 21 Software AG

LIKE

DEFINE DATA LOCAL 1 EMP VIEW OF SADRS-EMPL_BASE 2 PERSONNEL_ID 2 NAME 2 FIRST_NAME 2 DEPT END-DEFINE SELECT PERSONNEL_ID, NAME, FIRST_NAME, DEPT INTO EMP.PERSONNEL_ID, EMP.NAME, EMP.FIRST_NAME, EMP.DEPT FROM SADRS-EMPL_BASE WHERE DEPT LIKE 'COMP0%' DISPLAY EMP.PERSONNEL_ID EMP.NAME EMP.FIRST_NAME EMP.DEPT END-SELECT END

Page 22: Natural for DB2 Beyond The Find and Read

Darrell Skildum / 04/10/23 / 22 Software AG

LIKE RESULTS

PERSONNEL_ID NAME FIRST_NAME DEPT ------------ -------------------- -------------------- ------ 50003700 D'AGOSTINO LOUIS COMP0250003100 HEURTEBISE MICHEL COMP0150001700 TANCHOU GERARD COMP0150001200 SIECA FRANCOIS COMP0150000300 FISCHER RENE COMP0350014000 LEFEBVRE CLAUDE COMP0150015800 CATILLON MARCEL COMP0350016000 ROLLET GEORGES COMP0150016600 GODEFROY ANNIE COMP0250019000 BESSON ROGER COMP0250019500 YOT RENE COMP0150020600 GREGOIRE DANIEL COMP0250000100 GASET JEAN COMP0150000500 RIVIERE JEAN-LUC COMP0550006800 THIEBAULT ROBERT COMP0350006700 RIGOLLET SERGE COMP0250006600 TEYSSIER MICHEL COMP0160000231 VILLAR ANTONIO COMP02

Page 23: Natural for DB2 Beyond The Find and Read

Darrell Skildum / 04/10/23 / 23 Software AG

IN

SELECT PERSONNEL_ID, NAME, FIRST_NAME, DEPT

INTO EMP.PERSONNEL_ID, EMP.NAME, EMP.FIRST_NAME, EMP.DEPT

FROM SADRS-EMPL_BASE

WHERE DEPT IN ('COMP02', 'COMP03', 'COMP21')

DISPLAY EMP.PERSONNEL_ID EMP.NAME EMP.FIRST_NAME EMP.DEPT

END-SELECT

Page 24: Natural for DB2 Beyond The Find and Read

Darrell Skildum / 04/10/23 / 24 Software AG

IN - Results

PERSONNEL_ID NAME FIRST_NAME DEPT ------------ -------------------- -------------------- ------ 50003700 D'AGOSTINO LOUIS COMP0250000300 FISCHER RENE COMP0350015800 CATILLON MARCEL COMP0350016600 GODEFROY ANNIE COMP0250019000 BESSON ROGER COMP0250020600 GREGOIRE DANIEL COMP0250006800 THIEBAULT ROBERT COMP0350006700 RIGOLLET SERGE COMP0211100105 SCHIRM CHRISTIAN COMP2111100113 TREIBER KLAUS COMP2111100114 UNGER KLAUS COMP2111300320 BRUNNER HELMUT COMP2111300323 DAMM WOLFGANG COMP2111700323 LIST FRANZ COMP2111700324 MOELLER MARION COMP21

Page 25: Natural for DB2 Beyond The Find and Read

Darrell Skildum / 04/10/23 / 25 Software AG

BETWEEN

DEFINE DATA LOCAL 1 EMP VIEW OF SADRS-EMPL_BASE 2 PERSONNEL_ID 2 NAME 2 FIRST_NAME 2 DEPT END-DEFINE SELECT PERSONNEL_ID, NAME, FIRST_NAME, DEPT INTO EMP.PERSONNEL_ID, EMP.NAME, EMP.FIRST_NAME, EMP.DEPT FROM SADRS-EMPL_BASE WHERE DEPT BETWEEN 'COMP02' AND 'COMP05' DISPLAY EMP.PERSONNEL_ID EMP.NAME EMP.FIRST_NAME EMP.DEPT END-SELECT

Page 26: Natural for DB2 Beyond The Find and Read

Darrell Skildum / 04/10/23 / 26 Software AG

BETWEEN - RESULTS

PERSONNEL_ID NAME FIRST_NAME DEPT ------------ -------------------- -------------------- ------ 50003700 D'AGOSTINO LOUIS COMP02 50000300 FISCHER RENE COMP03 50015800 CATILLON MARCEL COMP03 50016600 GODEFROY ANNIE COMP02 50019000 BESSON ROGER COMP02 50020600 GREGOIRE DANIEL COMP02 50000500 RIVIERE JEAN-LUC COMP05 50006800 THIEBAULT ROBERT COMP03 50006700 RIGOLLET SERGE COMP02 60000231 VILLAR ANTONIO COMP02 60000509 RODRIGUEZ VICTORIA COMP02 60008045 NIEDA GORKA COMP02 60008100 PELEGRIN MANUEL COMP03 60008231 ESPLA JORDI COMP02 60008745 PUERTAS ANTONIO COMP02 60008168 MARTINEZ ANTONIO COMP03 60008287 PEREZ ANTONIO COMP03 60008509 PUERTOLAS MARIA JOSE COMP02

Page 27: Natural for DB2 Beyond The Find and Read

Darrell Skildum / 04/10/23 / 27 Software AG

Nested Select

DEFINE DATA LOCAL

1 EMP VIEW OF SADRS-EMPL_BASE

2 PERSONNEL_ID

2 NAME

2 FIRST_NAME

2 DEPT

1 VEH VIEW OF SADRS-VEHICLES

2 PERSONNEL_ID

2 MAKE

2 MODEL

2 REG_NUM

END-DEFINE

SELECT * INTO VIEW EMP

FROM SADRS-EMPL_BASE

WHERE DEPT = 'COMP21'

SELECT * INTO VIEW VEH

FROM SADRS-VEHICLES

WHERE PERSONNEL_ID = EMP.PERSONNEL_ID

DISPLAY PERSONNEL_ID FIRST_NAME NAME MAKE

END-SELECT

Page 28: Natural for DB2 Beyond The Find and Read

Darrell Skildum / 04/10/23 / 28 Software AG

Nested Select

test dblog q ? > + Program SQLEX5 Lib NDBDEMO

p ....+....1....+....2....+....3....+....4....+....5....+....6....+....7

0010 DEFINE DATA LOCAL

0020 1 EMP VIEW OF SADRS-EMPL_BASE

0030 2 PERSONNEL_ID

0040 2 NAME

0050 2 FIRST_NAME

0060 2 DEPT

0070 1 VEH VIEW OF SADRS-VEHICLES

0080 2 PERSONNEL_ID

0090 2 MAKE

0100 2 MODEL

0110 2 REG_NUM

0120 END-DEFINE

0130 SELECT * INTO VIEW EMP

0140 FROM SADRS-EMPL_BASE

0150 WHERE DEPT = 'COMP21'

0160 SELECT * INTO VIEW VEH

0170 FROM SADRS-VEHICLES

0180 WHERE PERSONNEL_ID = EMP.PERSONNEL_ID

0190 IF NO RECORDS FOUND

0200 MOVE 'NONE' TO VEH.MAKE

Page 29: Natural for DB2 Beyond The Find and Read

Darrell Skildum / 04/10/23 / 29 Software AG

Nested Select

User SADRS - DBLOG Menu - Library NDBDEMO

Code Function

---- ------------------------------------

B Begin Logging of SQL Statements

E End and Display Log Records

S Snapshot of Specific SQL Statement

. Exit

---- ------------------------------------

Code .. B

Statement .. select__ Skip ....... _____ Program .... ________

Line from .. 0000

Low SQLC .. ______ High SQLC .. ______ Line to .... 0000

Page 30: Natural for DB2 Beyond The Find and Read

Darrell Skildum / 04/10/23 / 30 Software AG

Nested Select

NEXT test dblog q show LIB=NDBDEMO

Page 1 05-04-06 01:47:57

PERSONNEL_ID FIRST_NAME NAME MAKE

------------ -------------------- -------------------- --------------------

11100105 CHRISTIAN SCHIRM OPEL

11100113 KLAUS TREIBER AUDI

11100114 KLAUS UNGER BMW

11300320 HELMUT BRUNNER AUDI

11300323 WOLFGANG DAMM VW

11700323 FRANZ LIST VW

11700324 MARION MOELLER NONE

11400325 KLAUS SPAEHT AUDI

11300324 FLORIAN DAMMBACH VW

Page 31: Natural for DB2 Beyond The Find and Read

Darrell Skildum / 04/10/23 / 31 Software AG

Nested Select

User SADRS - DBLOG Trace - Library NDBDEMO

M No R SQL Statement (truncated) CU SN SREF M Typ SQLC/W Program Line LV

_ 1 SELECT PERSONNEL_ID,NAME,FIRS 03 03 0130 D DB2 SQLEX5 0130 01

_ 2 SELECT PERSONNEL_ID,MAKE,MODE 04 04 0160 D DB2 SQLEX5 0160 01

_ 3 SELECT PERSONNEL_ID,MAKE,MODE 04 04 0160 D DB2 SQLEX5 0160 01

_ 4 SELECT PERSONNEL_ID,MAKE,MODE 04 04 0160 D DB2 SQLEX5 0160 01

_ 5 SELECT PERSONNEL_ID,MAKE,MODE 04 04 0160 D DB2 SQLEX5 0160 01

_ 6 SELECT PERSONNEL_ID,MAKE,MODE 04 04 0160 D DB2 SQLEX5 0160 01

_ 7 SELECT PERSONNEL_ID,MAKE,MODE 04 04 0160 D DB2 SQLEX5 0160 01

_ 8 SELECT PERSONNEL_ID,MAKE,MODE 04 04 0160 D DB2 SQLEX5 0160 01

_ 9 SELECT PERSONNEL_ID,MAKE,MODE 04 04 0160 D DB2 SQLEX5 0160 01

_ 10 SELECT PERSONNEL_ID,MAKE,MODE 04 04 0160 D DB2 SQLEX5 0160 01

Page 32: Natural for DB2 Beyond The Find and Read

Darrell Skildum / 04/10/23 / 32 Software AG

Nested Select

Member SQLEX5 - LISTSQL - Library NDBDEMO

NATURAL statement at line 0130 Stmt 1 / 2

SELECT * INTO VIEW EMP

FROM SADRS-EMPL_BASE

WHERE DEPT = 'COMP21'

Generated SQL statement Mode : dynamic DBRM : Line 1 / 4

SELECT PERSONNEL_ID, NAME, FIRST_NAME, DEPT

FROM SADRS.EMPL_BASE

WHERE DEPT = 'COMP21'

FOR FETCH ONLY

Page 33: Natural for DB2 Beyond The Find and Read

Darrell Skildum / 04/10/23 / 33 Software AG

Nested Select

Queryno 1 EXPLAIN Result Row 1 / 1

Estimated cost : 5.3 timerons

Qblockno Mixop Access Match Index Pre- Access- Column-

Planno seq type cols only fetch creator name fn_eval

--- --- --- ---- ----- ----- ----- -------- ------------------ -

1 1 I 1 L SADRS DEPT_NAME

Table Tslock -- sortn -- -- sortc --

Tabno Creator Tname mode Method uq jo or gr uq jo or gr

--- -------- ------------------ ------ ------ -- -- -- -- -- -- -- --

1 SADRS EMPL_BASE IS N N N N N N N N

Page 34: Natural for DB2 Beyond The Find and Read

Darrell Skildum / 04/10/23 / 34 Software AG

Nested Select

Member SQLEX5 - LISTSQL - Library NDBDEMO

NATURAL statement at line 0160 Stmt 2 / 2

SELECT * INTO VIEW VEH

FROM SADRS-VEHICLES

WHERE PERSONNEL_ID = EMP.PERSONNEL_ID

Generated SQL statement Mode : dynamic DBRM : Line 1 / 4

SELECT PERSONNEL_ID, MAKE, MODEL, REG_NUM

FROM SADRS.VEHICLES

WHERE PERSONNEL_ID =?

FOR FETCH ONLY

Page 35: Natural for DB2 Beyond The Find and Read

Darrell Skildum / 04/10/23 / 35 Software AG

Nested Select

Queryno 1 EXPLAIN Result Row 1 / 1

Estimated cost : 3.7 timerons

Qblockno Mixop Access Match Index Pre- Access- Column-

Planno seq type cols only fetch creator name fn_eval

--- --- --- ---- ----- ----- ----- -------- ------------------ -

1 1 I 1 VEHICLES PERSSNNEL_ID

Table Tslock -- sortn -- -- sortc --

Tabno Creator Tname mode Method uq jo or gr uq jo or gr

--- -------- ------------------ ------ ------ -- -- -- -- -- -- -- --

1 SADRS VEHICLES IS N N N N N N N N

Page 36: Natural for DB2 Beyond The Find and Read

Darrell Skildum / 04/10/23 / 36 Software AG

Nested Select

PERSONNEL_ID FIRST_NAME NAME MAKE

------------ -------------------- -------------------- --------------------

11100105 CHRISTIAN SCHIRM OPEL

11100113 KLAUS TREIBER AUDI

11100114 KLAUS UNGER BMW

11300320 HELMUT BRUNNER AUDI

11300323 WOLFGANG DAMM VW

11700323 FRANZ LIST VW

11400325 KLAUS SPAEHT AUDI

11300324 FLORIAN DAMMBACH VW

Page 37: Natural for DB2 Beyond The Find and Read

Darrell Skildum / 04/10/23 / 37 Software AG

Nested Select

User SADRS - DBLOG Trace - Library NDBDEMO

M No R SQL Statement (truncated) CU SN SREF M Typ SQLC/W Program Line LV

_ 1 SELECT PERSONNEL_ID,NAME,FIRS 03 03 0130 D DB2 SQLEX5 0130 01

_ 2 SELECT PERSONNEL_ID,MAKE,MODE 04 04 0160 D DB2 SQLEX5 0160 01

_ 3 SELECT PERSONNEL_ID,MAKE,MODE 04 04 0160 D DB2 SQLEX5 0160 01

_ 4 SELECT PERSONNEL_ID,MAKE,MODE 04 04 0160 D DB2 SQLEX5 0160 01

_ 5 SELECT PERSONNEL_ID,MAKE,MODE 04 04 0160 D DB2 SQLEX5 0160 01

_ 6 SELECT PERSONNEL_ID,MAKE,MODE 04 04 0160 D DB2 SQLEX5 0160 01

_ 7 SELECT PERSONNEL_ID,MAKE,MODE 04 04 0160 D DB2 SQLEX5 0160 01

_ 8 SELECT PERSONNEL_ID,MAKE,MODE 04 04 0160 D DB2 SQLEX5 0160 01

_ 9 SELECT PERSONNEL_ID,MAKE,MODE 04 04 0160 D DB2 SQLEX5 0160 01

_ 10 SELECT PERSONNEL_ID,MAKE,MODE 04 04 0160 D DB2 SQLEX5 0160 01

Total cost = 1*5.3 + 9*3.7 = 38.6

Page 38: Natural for DB2 Beyond The Find and Read

Darrell Skildum / 04/10/23 / 38 Software AG

Normal Join

DEFINE DATA LOCAL

1 EMP VIEW OF SADRS-EMPL_BASE

2 NAME

2 PERSONNEL_ID

2 DEPT

2 FIRST_NAME

1 VEH VIEW OF SADRS-VEHICLES

2 MAKE

2 MODEL

2 PERSONNEL_ID

2 REG_NUM

END-DEFINE

SELECT A.NAME, A.PERSONNEL_ID, A.DEPT, A.FIRST_NAME,

B.MAKE, B.MODEL, B.PERSONNEL_ID, B.REG_NUM

INTO VIEW EMP,VEH

FROM SADRS-EMPL_BASE A , SADRS-VEHICLES B

WHERE DEPT = 'COMP21'

AND B.PERSONNEL_ID = A.PERSONNEL_ID

ORDER BY A.NAME

DISPLAY EMP.NAME EMP.PERSONNEL_ID VEH.MAKE DEPT

Correlation NameAlias or

Page 39: Natural for DB2 Beyond The Find and Read

Darrell Skildum / 04/10/23 / 39 Software AG

Join Results

PERSONNEL_ID FIRST_NAME NAME MAKE

------------ -------------------- -------------------- --------------------

11100105 CHRISTIAN SCHIRM OPEL

11100113 KLAUS TREIBER AUDI

11100114 KLAUS UNGER BMW

11300320 HELMUT BRUNNER AUDI

11300323 WOLFGANG DAMM VW

11700323 FRANZ LIST VW

11400325 KLAUS SPAEHT AUDI

11300324 FLORIAN DAMMBACH VW

Page 40: Natural for DB2 Beyond The Find and Read

Darrell Skildum / 04/10/23 / 40 Software AG

Join ListSql

Member SQLEX6 - LISTSQL - Library NDBDEMO

NATURAL statement at line 0130 Stmt 1 / 1

SELECT A.NAME, A.PERSONNEL_ID, A.DEPT, A.FIRST_NAME,

B.MAKE, B.MODEL, B.PERSONNEL_ID, B.REG_NUM

INTO VIEW EMP,VEH

Generated SQL statement Mode : dynamic DBRM : Line 1 / 6

SELECT A.NAME, A.PERSONNEL_ID, A.DEPT, A.FIRST_NAME, B.MAKE, B.MODEL, B

.PERSONNEL_ID, B.REG_NUM

FROM SADRS.EMPL_BASE A, SADRS.VEHICLES B

WHERE DEPT = 'COMP21' AND B.PERSONNEL_ID = A.PERSONNEL_ID

ORDER BY A.NAME

FOR FETCH ONLY

Page 41: Natural for DB2 Beyond The Find and Read

Darrell Skildum / 04/10/23 / 41 Software AG

Join Explain

Estimated cost : 26.5 timerons

Qblockno Mixop Access Match Index Pre- Access- Column-

Planno seq type cols only fetch creator name fn_eval

--- --- --- ---- ----- ----- ----- -------- ------------------ -

1 1 I 1 L SADRS DEPT_NAME

1 2 I 1 VEHICLES PERSSNNEL_ID

1 3

Table Tslock -- sortn -- -- sortc --

Tabno Creator Tname mode Method uq jo or gr uq jo or gr

--- -------- ------------------ ------ ------ -- -- -- -- -- -- -- --

1 SADRS EMPL_BASE IS N N N N N N N N

2 SADRS VEHICLES IS 1 N N N N N N N N

3 N N N N N N Y N

vs 38.6

Page 42: Natural for DB2 Beyond The Find and Read

Darrell Skildum / 04/10/23 / 42 Software AG

Join Explain

Estimated cost : 26.5 timerons

Qblockno Mixop Access Match Index Pre- Access- Column-

Planno seq type cols only fetch creator name fn_eval

--- --- --- ---- ----- ----- ----- -------- ------------------ -

1 1 I 1 L SADRS DEPT_NAME

1 2 I 1 VEHICLES PERSSNNEL_ID

1 3

Table Tslock -- sortn -- -- sortc --

Tabno Creator Tname mode Method uq jo or gr uq jo or gr

--- -------- ------------------ ------ ------ -- -- -- -- -- -- -- --

1 SADRS EMPL_BASE IS N N N N N N N N

2 SADRS VEHICLES IS 1 N N N N N N N N

3 N N N N N N Y N

vs 38.6

Page 43: Natural for DB2 Beyond The Find and Read

Darrell Skildum / 04/10/23 / 43 Software AG

Nested Select – No Records

SELECT * INTO VIEW EMP

FROM SADRS-EMPL_BASE

WHERE DEPT = 'COMP21'

SELECT * INTO VIEW VEH

FROM SADRS-VEHICLES

WHERE PERSONNEL_ID = EMP.PERSONNEL_ID

IF NO RECORDS FOUND

MOVE 'NONE' TO VEH.MAKE

END-NOREC

DISPLAY EMP.PERSONNEL_ID FIRST_NAME NAME MAKE

END-SELECT

END-SELECT

Page 44: Natural for DB2 Beyond The Find and Read

Darrell Skildum / 04/10/23 / 44 Software AG

Nested Select – No Records

PERSONNEL_ID FIRST_NAME NAME MAKE

------------ -------------------- -------------------- --------------------

11100105 CHRISTIAN SCHIRM OPEL

11100113 KLAUS TREIBER AUDI

11100114 KLAUS UNGER BMW

11300320 HELMUT BRUNNER AUDI

11300323 WOLFGANG DAMM VW

11700323 FRANZ LIST VW

11700324 MARION MOELLER NONE

11400325 KLAUS SPAEHT AUDI

11300324 FLORIAN DAMMBACH VW

Page 45: Natural for DB2 Beyond The Find and Read

Darrell Skildum / 04/10/23 / 45 Software AG

Left Outer Join

SELECT A.NAME, A.PERSONNEL_ID, A.DEPT, B.MAKE, B.MODEL, B.PERSONNEL_ID

INTO VIEW EMP,VEH

FROM (SELECT NAME,PERSONNEL_ID, DEPT FROM SADRS-EMPL_BASE

WHERE DEPT = 'COMP21') AS A

LEFT OUTER JOIN (SELECT MAKE, MODEL,PERSONNEL_ID

FROM SADRS-VEHICLES) AS B

ON B.PERSONNEL_ID = A.PERSONNEL_ID

ORDER BY A.NAME

IF VEH.MAKE = ' '

MOVE '***NONE***' TO VEH.MAKE

END-IF

DISPLAY EMP.NAME EMP.PERSONNEL_ID VEH.MAKE DEPT

END-SELECT

Page 46: Natural for DB2 Beyond The Find and Read

Darrell Skildum / 04/10/23 / 46 Software AG

Left Outer Join Results

NAME PERSONNEL_ID MAKE DEPT -------------------- ------------ -------------------- ------

BRUNNER 11300320 AUDI COMP21

DAMM 11300323 VW COMP21

DAMMBACH 11300324 VW COMP21

LIST 11700323 VW COMP21

MOELLER 11700324 ***NONE*** COMP21

SCHIRM 11100105 OPEL COMP21

SPAEHT 11400325 AUDI COMP21

TREIBER 11100113 AUDI COMP21

UNGER 11100114 BMW COMP21

Page 47: Natural for DB2 Beyond The Find and Read

Darrell Skildum / 04/10/23 / 47 Software AG

SubQuery

DEFINE DATA LOCAL 1 EMP VIEW OF SADRS-EMPL_BASE 2 PERSONNEL_ID 2 NAME 2 FIRST_NAME 1 SAL VIEW OF SADRS-EMPLOYEE_PAY 2 PAY_SEQ 2 SALARY END-DEFINE SELECT A.PERSONNEL_ID, A.NAME, A.FIRST_NAME, B.PAY_SEQ, B.SALARY INTO EMP.PERSONNEL_ID, EMP.NAME, EMP.FIRST_NAME, SAL.PAY_SEQ, SAL.SALARY FROM SADRS-EMPL_BASE A, SADRS-EMPLOYEE_PAY B WHERE A.PERSONNEL_ID = '11100114' AND B.PERSONNEL_ID = A.PERSONNEL_ID AND PAY_SEQ = (SELECT MAX(PAY_SEQ) FROM SADRS-EMPLOYEE_PAY WHERE PERSONNEL_ID = A.PERSONNEL_ID) DISPLAY NAME SALARY PAY_SEQ END-SELECT

Page 48: Natural for DB2 Beyond The Find and Read

Darrell Skildum / 04/10/23 / 48 Software AG

SubQuery Results

Page 1 NAME SALARY PAY_SEQ -------------------- ---------- ----------- UNGER 46000 4

Page 49: Natural for DB2 Beyond The Find and Read

Darrell Skildum / 04/10/23 / 49 Software AG

SubQuery and calculated field

SELECT A.PERSONNEL_ID, A.NAME, A.FIRST_NAME, B.PAY_SEQ, B.SALARY + B.BONUS1 + B.BONUS2 + B.BONUS3 AS TOTAL_PAY INTO EMP.PERSONNEL_ID, EMP.NAME, EMP.FIRST_NAME, SAL.PAY_SEQ, #TOTAL-PAY FROM SADRS-EMPL_BASE A, SADRS-EMPLOYEE_PAY B WHERE A.PERSONNEL_ID = '11100112' AND B.PERSONNEL_ID = A.PERSONNEL_ID AND PAY_SEQ = (SELECT MAX(PAY_SEQ) FROM SADRS-EMPLOYEE_PAY WHERE PERSONNEL_ID = A.PERSONNEL_ID) DISPLAY NAME #TOTAL-PAY PAY_SEQ END-SELECT

Page 50: Natural for DB2 Beyond The Find and Read

Darrell Skildum / 04/10/23 / 50 Software AG

SubQuery and calculated field

Page 1 NAME #TOTAL-PAY PAY_SEQ -------------------- ----------- ----------- THOMA 46000.00 4

Page 51: Natural for DB2 Beyond The Find and Read

Darrell Skildum / 04/10/23 / 51 Software AG

DEFINE DATA PARAMETER 01 #SSN (A9) 01 #TODAY (A10) 01 #BEGIN-DATEA (A10) 01 #BEGIN-ANNUAL (P4.2) 01 #EARNED-ANNUAL (P4.2) 01 #TAKEN-ANNUAL (P4.2) 01 #ADJUST-ANNUAL (P4.2) 01 #CURR-ANNUAL (P4.2) 01 #PENDING-ANNUAL (P4.2) 01 #AVAIL-ANNUAL (P4.2) 01 #BEGIN-DATES (A10)

USING DB2 functions

Page 52: Natural for DB2 Beyond The Find and Read

Darrell Skildum / 04/10/23 / 52 Software AG

SELECT SUM(ALVB50D_NOHOUR) INTO #EARNED-ANNUAL FROM PALV-ALVB50D WHERE ALVB50D_NOSSN = #SSN AND ALVB50D_CDTYLV = 'AN' AND ALVB50D_CDTYTR = 'E' AND ALVB50D_DCLVE >= #BEGIN-DATEA GROUP BY ALVB50D_NOSSN END-SELECT

USING DB2 functions

Page 53: Natural for DB2 Beyond The Find and Read

Darrell Skildum / 04/10/23 / 53 Software AG

Union

DEFINE DATA LOCAL 1 EMP VIEW OF SADRS-EMPL_BASE 2 PERSONNEL_ID 2 NAME 2 FIRST_NAME 2 DEPT 2 COUNTRY END-DEFINE SELECT * INTO VIEW EMP FROM SADRS-EMPLOY_DE WHERE DEPT LIKE 'COMP%%' UNION (SELECT * FROM SADRS-EMPLOY_UK WHERE DEPT LIKE 'COMP%%') ORDER BY NAME DISPLAY PERSONNEL_ID FIRST_NAME NAME DEPT COUNTRY END-SELECT END

Page 54: Natural for DB2 Beyond The Find and Read

Darrell Skildum / 04/10/23 / 54 Software AG

Union Results

PERSONNEL_ID FIRST_NAME NAME DEPT COUNTRY------------ -------------------- -------------------- ------ ------- 30000231 ROBERT ACHIESON COMP02 UK 30021544 ELIZABETH AKROYD COMP03 UK 30034231 ROBIN ARCHER COMP02 UK 11500327 HANS BACHMANN COMP35 D 30008042 PAULINE BAKER COMP12 UK 30000287 JACK BIRKENSHAW COMP12 UK 30034311 IAN BRANGWIN COMP01 UK 30008509 CAROLINE BROOKS COMP02 UK 11300320 HELMUT BRUNNER COMP21 D 11300321 MANFRED BUCHERT COMP25 D 30021630 ANDREW BULLOCK COMP03 UK 11100110 GEORG BUNGERT COMP25 D 11300322 FRANZ BURKNER COMP25 D 30034107 COLIN CARROLL COMP01 UK 30016045 JULIAN CHESTER COMP02 UK 30034509 IAN COLQHOUN COMP12 UK 11300323 WOLFGANG DAMM COMP21 D 11300324 FLORIAN DAMMBACH COMP21 D

Page 55: Natural for DB2 Beyond The Find and Read

Darrell Skildum / 04/10/23 / 55 Software AG

Updating

1 EMP VIEW OF I038-EMPLOYEES 2 NAME 2 PERSONNEL_ID 2 SALARY_1 1 EMP2 VIEW OF I038-EMPLOYEES 2 NAME 2 PERSONNEL_ID 2 SALARY_1 1 #PID (A8) END-DEFINE INPUT #PID SELECT * INTO VIEW EMP FROM I038-EMPLOYEES WHERE PERSONNEL_ID = #PID END-SELECT INPUT (AD=M) EMP.PERSONNEL_ID EMP.NAME EMP.SALARY_1 SELECT * INTO VIEW EMP2 FROM I038-EMPLOYEES WHERE PERSONNEL_ID = #PID MOVE BY NAME EMP TO EMP2 UPDATE END-SELECT

Page 56: Natural for DB2 Beyond The Find and Read

Darrell Skildum / 04/10/23 / 56 Software AG

Updating

1 EMP VIEW OF I038-EMPLOYEES 2 NAME 2 PERSONNEL_ID 2 SALARY_1 1 EMP2 VIEW OF I038-EMPLOYEES 2 NAME 2 PERSONNEL_ID 2 SALARY_1 1 #PID (A8) END-DEFINE REPEAT INPUT #PID SELECT * INTO VIEW EMP FROM I038-EMPLOYEES WHERE PERSONNEL_ID = #PID END-SELECT INPUT (AD=M) EMP.PERSONNEL_ID EMP.NAME EMP.SALARY_1 UPDATE EMP SET * WHERE PERSONNEL_ID = #PID END-REPEAT

Page 57: Natural for DB2 Beyond The Find and Read

Darrell Skildum / 04/10/23 / 57 Software AG

Updating 2

DEFINE DATA LOCAL 1 EMP VIEW OF I038-EMPLOYEES 2 NAME 2 PERSONNEL_ID 2 SALARY_1 1 #PID (A8) END-DEFINE REPEAT INPUT #PID SELECT * INTO VIEW EMP FROM I038-EMPLOYEES WHERE PERSONNEL_ID = #PID END-SELECT INPUT (AD=M) EMP.PERSONNEL_ID EMP.NAME EMP.SALARY_1 UPDATE I038-EMPLOYEES SET NAME = EMP.NAME, SALARY_1 = EMP.SALARY_1 WHERE PERSONNEL_ID = #PID END-REPEAT END

Page 58: Natural for DB2 Beyond The Find and Read

Darrell Skildum / 04/10/23 / 58 Software AG

Cross Transation Update

> TEST DBLOG Q START > + Program EMPUPD1 Lib DRSLIB All ....+....1....+....2....+....3....+....4....+....5....+.Mode Structured. 0010 DEFINE DATA LOCAL 0020 1 EMP VIEW OF I038-EMPLOYEES 0030 2 NAME 0040 2 PERSONNEL_ID 0050 2 SALARY_1 0060 1 EMP2 VIEW OF I038-EMPLOYEES 0070 2 NAME 0080 2 PERSONNEL_ID 0090 2 SALARY_1 0100 1 #PID (A8) 0110 END-DEFINE 0120 INPUT #PID 0130 RD1. 0140 SELECT * INTO VIEW EMP FROM I038-EMPLOYEES 0150 WHERE PERSONNEL_ID = #PID 0160 INPUT (AD=M) EMP.PERSONNEL_ID EMP.NAME EMP.SALARY_1 0170 UPDATE (RD1.) 0180 END-SELECT 0190 END

Page 59: Natural for DB2 Beyond The Find and Read

Darrell Skildum / 04/10/23 / 59 Software AG

Updating one record

#PID 30000100

Page 60: Natural for DB2 Beyond The Find and Read

Darrell Skildum / 04/10/23 / 60 Software AG

Updating one record

PERSONNEL_ID 30000100 NAME LLOYD SALARY_1 7200

Page 61: Natural for DB2 Beyond The Find and Read

Darrell Skildum / 04/10/23 / 61 Software AG

SQL Log from Update IMS with FS

User DRS - DBLOG Trace - Library DRSLIB M No R SQL Statement (truncated) CU SN SREF M Typ SQLC/W Program Line LV_ 1 SELECT NAME,PERSONNEL_ID,SALA 01 01 0130 D DB2 EMPUPD1 0130 01_ 2 FETCH CURSOR 01 01 0130 D DB2 EMPUPD1 0130 01_ 3 ROLLOUTS TO FILE SERVER:00000 01 01 0130 D DB2 EMPUPD1 0160 01_ 4 * SELECT NAME,PERSONNEL_ID,SALA 01 01 0130 D DB2 EMPUPD1 0170 01_ 5 * FETCH CURSOR 01 01 0130 D DB2 EMPUPD1 0170 01_ 6 * UPDATE I038.EMPLOYEES SET NAM 01 02 0130 D DB2 EMPUPD1 0170 01_ 7 * CLOSE CURSOR 01 01 0130 D DB2 EMPUPD1 0170 01_ 8 READ FROM FILE SERVER 00 00 0130 D DB2 100 EMPUPD1 0130 01_ 9 CLOSE FILE SERVER 00 00 0130 D DB2 EMPUPD1 0130 01

Page 62: Natural for DB2 Beyond The Find and Read

Darrell Skildum / 04/10/23 / 62 Software AG

SQL Log from Update - Complete

M No R SQL Statement (truncated) CU SN SREF M Typ SQLC/W Program Line LV_ 1 SELECT NAME,PERSONNEL_ID FROM 01 01 0110 D DB2 EMPUPD 0110 01_ 2 FETCH CURSOR NEX 01 01 0110 D DB2 EMPUPD 0110 01_ 3 POSSIBLY IMPLICIT COMMIT 00 00 0000 D DB2 EMPUPD 0140 01_ 4 UPDATE SADRS.EMPL_BASE SET NA 01 02 0110 D DB2 EMPUPD 0150 01_ 5 FETCH CURSOR NEX 01 01 0110 D DB2 100 EMPUPD 0110 01_ 6 CLOSE CURSOR 01 01 0110 D DB2 EMPUPD 0110 01

Page 63: Natural for DB2 Beyond The Find and Read

Darrell Skildum / 04/10/23 / 63 Software AG

Updating without reading row first

DEFINE DATA LOCAL

1 #PID (A8)

END-DEFINE

UPDATE I038-EMPLOYEES SET

SALARY_1 = SALARY_1 + .05*SALARY_1

WHERE DEPT = 'COMP02'

END

Page 64: Natural for DB2 Beyond The Find and Read

Darrell Skildum / 04/10/23 / 64 Software AG

Sample 1 code

SELECT * INTO VIEW FT_FINAN_TRAN FROM FT_FINAN_TRAN WHERE COY = #CCCWOTN-IN.COY AND TRAN_ACCOUNT_ID = #CCCWOTN-IN.ACCOUNT_ID AND TRAN_SA_ID = #CCCWOTN-IN.SA_ID ORDER BY TRAN_ACCOUNT_ID, TRAN_DT, ADD_TIME

REJECT IF FT_FINAN_TRAN.TRAN_CANCELED = 'Y' REJECT IF FT_FINAN_TRAN.TRAN_MEMO_IND = 'Y' REJECT IF FT_FINAN_TRAN.TRAN_TYPE = #CFTTRTL.#MEMO REJECT IF FT_FINAN_TRAN.TRAN_TYPE = #CFTTRTL.#CASH-DIST REJECT IF FT_FINAN_TRAN.TRAN_TYPE = #CFTTRTL.#CASH-DIST-CANCEL-DETAIL REJECT IF FT_FINAN_TRAN.TRAN_TYPE = #CFTTRTL.#BILL-CANCEL-DETAIL REJECT IF FT_FINAN_TRAN.TRAN_TYPE = #CFTTRTL.#PAY-CANCEL-DETAIL REJECT IF (FT_FINAN_TRAN.TRAN_TOT_AMT = 0 AND FT_FINAN_TRAN.TRAN_WRITE_OFF = 0)

Page 65: Natural for DB2 Beyond The Find and Read

Darrell Skildum / 04/10/23 / 65 Software AG

Sample 1 DBLOG

M No R SQL Statement (truncated) CU SN SREF M Typ SQLC/W Program Line LV_ 1 SELECT LOG_COUNTER,COY,ADD_US 01 01 2670 D DB2 DRSOYN5 2670 01_ 2 FETCH CURSOR 01 01 2670 D DB2 DRSOYN5 2670 01_ 3 FETCH CURSOR 01 01 2670 D DB2 DRSOYN5 2670 01_ 4 FETCH CURSOR 01 01 2670 D DB2 DRSOYN5 2670 01_ 5 FETCH CURSOR 01 01 2670 D DB2 DRSOYN5 2670 01_ 6 FETCH CURSOR 01 01 2670 D DB2 DRSOYN5 2670 01_ 7 FETCH CURSOR 01 01 2670 D DB2 DRSOYN5 2670 01_ 8 FETCH CURSOR 01 01 2670 D DB2 DRSOYN5 2670 01_ 9 FETCH CURSOR 01 01 2670 D DB2 DRSOYN5 2670 01_ 10 FETCH CURSOR 01 01 2670 D DB2 DRSOYN5 2670 01_ 11 FETCH CURSOR 01 01 2670 D DB2 DRSOYN5 2670 01_ 12 FETCH CURSOR 01 01 2670 D DB2 DRSOYN5 2670 01_ 13 FETCH CURSOR 01 01 2670 D DB2 DRSOYN5 2670 01_ 14 FETCH CURSOR 01 01 2670 D DB2 DRSOYN5 2670 01 _ 15 FETCH CURSOR 01 01 2670 D DB2 DRSOYN5 2670 01

………………………………………………………………………………………………………………………………………………………….._ 28 FETCH CURSOR 01 01 2670 D DB2 DRSOYN5 2670 01_ 29 FETCH CURSOR 01 01 2670 D DB2 DRSOYN5 2670 01_ 30 FETCH CURSOR 01 01 2670 D DB2 DRSOYN5 2670 01_ 31 FETCH CURSOR 01 01 2670 D DB2 100 DRSOYN5 2670 01_ 32 CLOSE CURSOR 01 01 2670 D DB2 DRSOYN5 2670 01

Page 66: Natural for DB2 Beyond The Find and Read

Darrell Skildum / 04/10/23 / 66 Software AG

Sample 1 Code Revision

SELECT * INTO VIEW FT_FINAN_TRAN FROM FT_FINAN_TRAN WHERE COY = #CCCWOTN-IN.COY AND TRAN_ACCOUNT_ID = #CCCWOTN-IN.ACCOUNT_ID AND TRAN_SA_ID = #CCCWOTN-IN.SA_ID AND FT_FINAN_TRAN.TRAN_CANCELED <> 'Y' AND TRAN_MEMO_IND <> 'Y' AND TRAN_TYPE NOT IN (#CFTTRTL.#MEMO, #CFTTRTL.#CASH-DIST,#CFTTRTL.#CASH-DIST-CANCEL-DETAIL, #CFTTRTL.#BILL-CANCEL-DETAIL, #CFTTRTL.#PAY-CANCEL-DETAIL) AND TRAN_TOT_AMT + TRAN_WRITE_OFF <> 0 ORDER BY TRAN_ACCOUNT_ID, TRAN_DT, ADD_TIME*

Page 67: Natural for DB2 Beyond The Find and Read

Darrell Skildum / 04/10/23 / 67 Software AG

Sample 1 Revised DBLOG

M No R SQL Statement (truncated) CU SN SREF M Typ SQLC/W Program Line LV_ 1 SELECT LOG_COUNTER,COY,ADD_US 01 01 2420 D DB2 DRSOYN5Z 2420 01_ 2 FETCH CURSOR 01 01 2420 D DB2 DRSOYN5Z 2420 01_ 3 FETCH CURSOR 01 01 2420 D DB2 DRSOYN5Z 2420 01_ 4 FETCH CURSOR 01 01 2420 D DB2 DRSOYN5Z 2420 01_ 5 FETCH CURSOR 01 01 2420 D DB2 DRSOYN5Z 2420 01_ 6 FETCH CURSOR 01 01 2420 D DB2 DRSOYN5Z 2420 01_ 7 FETCH CURSOR 01 01 2420 D DB2 DRSOYN5Z 2420 01_ 8 FETCH CURSOR 01 01 2420 D DB2 100 DRSOYN5Z 2420 01_ 9 CLOSE CURSOR 01 01 2420 D DB2 DRSOYN5Z 2420 01_ 10 ROLLBACK 00 00 0000 D DB2 DBLOQ 0000 00

Page 68: Natural for DB2 Beyond The Find and Read

Darrell Skildum / 04/10/23 / 68 Software AG

Sample 2

SELECT * INTO VIEW CIS_ACCOUNT FROM CIS_ACCOUNT WHERE COY = #INPUT.COY AND ACCOUNT_ID = AD_ADJUST.ACCOUNT_ID OPTIMIZE FOR 1 ROW * SP. SELECT * INTO VIEW CIS_PERSON FROM CIS_PERSON WHERE COY = #INPUT.COY AND PERSON_ID = CIS_ACCOUNT.CUST_ID OPTIMIZE FOR 1 ROW*

Page 69: Natural for DB2 Beyond The Find and Read

Darrell Skildum / 04/10/23 / 69 Software AG

Sample 2

SELECT A.ACCOUNT_ID, A.CUST_ID, B.PERSON_ID, B.LAST_NAME, B.FIRST_NAME, B.BUSINESS_NAME INTO CIS_ACCOUNT.ACCOUNT_ID, CIS_ACCOUNT.CUST_ID ,CIS_PERSON.PERSON_ID, CIS_PERSON.LAST_NAME ,CIS_PERSON.FIRST_NAME, CIS_PERSON.BUSINESS_NAME FROM CIS_ACCOUNT A, CIS_PERSON B WHERE A.COY = #INPUT.COY AND A.ACCOUNT_ID = AD_ADJUST.ACCOUNT_ID AND B.COY = A.COY AND B.PERSON_ID = A.CUST_ID OPTIMIZE FOR 1 ROW

Page 70: Natural for DB2 Beyond The Find and Read

Darrell Skildum / 04/10/23 / 70 Software AG

Sample 2

Queryno 1 EXPLAIN Result Row 1/ 2 Estimated cost : 0.0 timerons Qblockno Mixop Access Match Index Pre- Access-Column- Planno seq type cols only fetch creator name fn_eval --- --- --- ---- ----- ----- ----- -------- ------------------- 1 1 I 2 CSDOWN21 COY_ACCOUNT_ID 1 2 I 2 CSDOWN21 PR_STD_FRMAT_NM Table Tslock -- sortn -- -- sortc -- Tabno Creator Tname mode Method uq jo or gr uq jo or gr --- -------- ------------------ ------ ------ -- -- -- -- -- -- -- -- 1 CSDOWN21 CIS_ACCOUNT_T IS N N N N N N N N 2 CSDOWN21 CIS_PERSON_T IS 1 N N N N N N N N

1 SELECT A.ACCOUNT_ID,A.CUST_ID 01 01 0880 D DB2 DRS011PX 0880 01 2 FETCH CURSOR 01 01 0880 D DB2 DRS011PX 0880 01 3 CLOSE CURSOR 01 01 0880 D DB2 DRS011PX 1230 01

Page 71: Natural for DB2 Beyond The Find and Read

Darrell Skildum / 04/10/23 / 71 Software AG

Methodology for making changes

1) Make a copy of Program2) Leave LDA in place3) If program is one easy to test, put display before

Find/READ/SELECT statement of all variables used in search. Record values

4) Change type to program if necessary make parameter data areas be local if it was a subprogram.

5) Eliminate all code except DATA AREAS and Search .6) Add assignment of variables used in search.7) Add display of selected values.8) Run program using DBLOG.9) Do and explain. 10)Make code changes and repeat steps 7 and 8

Page 72: Natural for DB2 Beyond The Find and Read

Darrell Skildum / 04/10/23 / 72 Software AG

Methodology continued Before

DEFINE DATA PARAMETER…..LOCAL….….END-DEFINE… .….….FIND

FIND…….…….END-FIND…..END-FIND………..END

Page 73: Natural for DB2 Beyond The Find and Read

Darrell Skildum / 04/10/23 / 73 Software AG

Methodology continued First Step

DEFINE DATA LOCAL…..LOCAL….….END-DEFINEASSIGN ……..FINDFINDDISPLAY …..End-FindEnd-find

Page 74: Natural for DB2 Beyond The Find and Read

Darrell Skildum / 04/10/23 / 74 Software AG

Methodology continued Second Step

DEFINE DATA LOCAL…..LOCAL….….END-DEFINEASSIGN ……..SELECTDISPLAY …..END-SELECTEND

Page 75: Natural for DB2 Beyond The Find and Read

Darrell Skildum / 04/10/23 / 75 Software AG

Sample 1 code Before

SELECT * INTO VIEW FT_FINAN_TRAN FROM FT_FINAN_TRAN WHERE COY = #CCCWOTN-IN.COY AND TRAN_ACCOUNT_ID = #CCCWOTN-IN.ACCOUNT_ID AND TRAN_SA_ID = #CCCWOTN-IN.SA_ID ORDER BY TRAN_ACCOUNT_ID, TRAN_DT, ADD_TIME

REJECT IF FT_FINAN_TRAN.TRAN_CANCELED = 'Y' REJECT IF FT_FINAN_TRAN.TRAN_MEMO_IND = 'Y' REJECT IF FT_FINAN_TRAN.TRAN_TYPE = #CFTTRTL.#MEMO REJECT IF FT_FINAN_TRAN.TRAN_TYPE = #CFTTRTL.#CASH-DIST REJECT IF FT_FINAN_TRAN.TRAN_TYPE = #CFTTRTL.#CASH-DIST-CANCEL-DETAIL REJECT IF FT_FINAN_TRAN.TRAN_TYPE = #CFTTRTL.#BILL-CANCEL-DETAIL REJECT IF FT_FINAN_TRAN.TRAN_TYPE = #CFTTRTL.#PAY-CANCEL-DETAIL REJECT IF (FT_FINAN_TRAN.TRAN_TOT_AMT = 0 AND FT_FINAN_TRAN.TRAN_WRITE_OFF = 0)

Page 76: Natural for DB2 Beyond The Find and Read

Darrell Skildum / 04/10/23 / 76 Software AG

Sample 1 code Methodology continued First Step

ASSIGN #CCCWOTN-IN.COY = xxASSIGN #CCCWOTN-IN.ACCOUNT_ID =xxxxxxx

ASSIGN #CCCWOTN-IN.SA_ID = yyyyyyyy

SELECT * INTO VIEW FT_FINAN_TRAN FROM FT_FINAN_TRAN WHERE COY = #CCCWOTN-IN.COY AND TRAN_ACCOUNT_ID = #CCCWOTN-IN.ACCOUNT_ID AND TRAN_SA_ID = #CCCWOTN-IN.SA_ID ORDER BY TRAN_ACCOUNT_ID, TRAN_DT, ADD_TIME

REJECT IF FT_FINAN_TRAN.TRAN_CANCELED = 'Y' REJECT IF FT_FINAN_TRAN.TRAN_MEMO_IND = 'Y' REJECT IF FT_FINAN_TRAN.TRAN_TYPE = #CFTTRTL.#MEMO REJECT IF FT_FINAN_TRAN.TRAN_TYPE = #CFTTRTL.#CASH-DIST REJECT IF FT_FINAN_TRAN.TRAN_TYPE = #CFTTRTL.#CASH-DIST-CANCEL-DETAIL REJECT IF FT_FINAN_TRAN.TRAN_TYPE = #CFTTRTL.#BILL-CANCEL-DETAIL REJECT IF FT_FINAN_TRAN.TRAN_TYPE = #CFTTRTL.#PAY-CANCEL-DETAIL REJECT IF (FT_FINAN_TRAN.TRAN_TOT_AMT = 0 AND FT_FINAN_TRAN.TRAN_WRITE_OFF = 0DISPLAY FT_FINAN_TRAN.TRAN_TYPE FT_FINAN_TRAN.TRAN_TOT_AMT

Page 77: Natural for DB2 Beyond The Find and Read

Darrell Skildum / 04/10/23 / 77 Software AG

Sample 1 code Methodology continued Second Step

ASSIGN #CCCWOTN-IN.COY = xxASSIGN #CCCWOTN-IN.ACCOUNT_ID =xxxxxxx

ASSIGN #CCCWOTN-IN.SA_ID = yyyyyyyySELECT * INTO VIEW FT_FINAN_TRAN FROM FT_FINAN_TRAN WHERE COY = #CCCWOTN-IN.COY AND TRAN_ACCOUNT_ID = #CCCWOTN-IN.ACCOUNT_ID AND TRAN_SA_ID = #CCCWOTN-IN.SA_ID AND FT_FINAN_TRAN.TRAN_CANCELED <> 'Y' AND TRAN_MEMO_IND <> 'Y' AND TRAN_TYPE NOT IN (#CFTTRTL.#MEMO, #CFTTRTL.#CASH-DIST,#CFTTRTL.#CASH-DIST-CANCEL-DETAIL, #CFTTRTL.#BILL-CANCEL-DETAIL, #CFTTRTL.#PAY-CANCEL-DETAIL) AND TRAN_TOT_AMT + TRAN_WRITE_OFF <> 0 ORDER BY TRAN_ACCOUNT_ID, TRAN_DT, ADD_TIME DISPLAY FT_FINAN_TRAN.TRAN_TYPE FT_FINAN_TRAN.TRAN_TOT_AMT

Page 78: Natural for DB2 Beyond The Find and Read

04/10/23

Natural for DB2 4.2 - News

Software AG

Page 79: Natural for DB2 Beyond The Find and Read

Darrell Skildum / 04/10/23 / 79 Software AG

Contents

DB2 UDB for z/OS Version 8 Support

Unicode Support

Page 80: Natural for DB2 Beyond The Find and Read

Darrell Skildum / 04/10/23 / 80 Software AG

Dynamic Scrollable Cursors I

Cursor sensitivity - the degree to which database updates are visible to the subsequentFETCH statements in a cursor. These changes can be made by this or by other application process (UOW).

ASENSITIVE SENSITIVE

DYNAMIC STATIC

SCROLLABLE NOT SCROLLABLE

INSENSITIVE

DB2 UDB for z/OS Version 8

CURSORS

Page 81: Natural for DB2 Beyond The Find and Read

Darrell Skildum / 04/10/23 / 81 Software AG

Dynamic Scrollable Cursors II

DB2

Temporary Database

FETCH INSENSITIVE

SENSITIVE STATIC INSENSITIVE

FETCH SENSITIVE

No checks against Base Table

Is checked against Base Table:

Holes (SQLCODE)

Page 82: Natural for DB2 Beyond The Find and Read

Darrell Skildum / 04/10/23 / 82 Software AG

Dynamic Scrollable Cursors III

WITH  

SELECT selection …ASENSITIVE SCROLLINSENSITIVE SCROLLSENSITIVE STATIC SCROLLSENSITIVE DYNAMIC SCROLL

[:] scroll_hv [GIVING [:] sqlcode

DB2: SQLCODE=222 Update / Delete hole encountered

> > + Program DEM2SCRL Lib SYSDB2 ....+....1....+....2....+....3....+....4....+....5....+....6....+....7.. 0380 MOVE 'SENSITIVE ABSOLUTE + 1' to SCROLL_HV 0390 SELECT * 0400 INTO VIEW NAT-VIEW 0410 FROM NAT-DEMO 0420 WHERE SALARY BETWEEN :SALARY_LOW AND :SALARY_HIGH 0430 ORDER BY NAME 0440 WITH SENSITIVE STATIC SCROLL :SCROLL_HV GIVING :SQLCODE 0450 DECIDE ON FIRST VALUES OF SQLCODE 0460 VALUES 100

Page 83: Natural for DB2 Beyond The Find and Read

Darrell Skildum / 04/10/23 / 83 Software AG

Sequence Objects and Identify Columns I

CREATE SEQUENCE ORDER_SEQ START WITH 1 INCREMENT BY 1 NO MAXVALUE NO CYCLE CACHE 20; INSERT INTO ORDERS (ORDERNO, CUSTNO) VALUES (NEXT VALUE FOR ORDER_SEQ, 123456);

A sequence is a user-defined object that generates a sequence of numeric values

Page 84: Natural for DB2 Beyond The Find and Read

Darrell Skildum / 04/10/23 / 84 Software AG

Sequence Objects Identify Columns II

Natural DB2: PROCESS SQL, SELECT, INSERT etc.

0070 PROCESS SQL SYSIBM-SYSDATABASE 0080 << CREATE SEQUENCE TEST.ORDER_SEQ START WITH 1 CACHE 20 >> 0090 SELECT 0100 NEXT VALUE FOR TEST.ORDER_SEQ 0110 INTO :NEXTVAL 0120 FROM SYSIBM-SYSDATABASE 0130 DISPLAY NEXTVAL PREVVAL 0140 END-SELECT 0150 SELECT 0160 NEXT VALUE FOR TEST.ORDER_SEQ , 0170 PREVIOUS VALUE FOR TEST.ORDER_SEQ 0180 INTO :NEXTVAL, :PREVVAL 0190 FROM SYSIBM-SYSDATABASE 0200 DISPLAY NEXTVAL PREVVAL 0210 END-SELECT

Page 85: Natural for DB2 Beyond The Find and Read

Darrell Skildum / 04/10/23 / 85 Software AG

Multiple Row Processing I

Single Row Multi Row

FETCH

A rowset is a set of rows for which a cursor position is established

EXEC SQL DECLARE CURS1 CURSORWITH ROWSET POSITIONING FOR SELECT…;

FETCH ROWSET STARTING AT ABSOLUTE 10FROM CURS1 FOR 6 ROWSINTO :hva1, :hva2, :hva3;

Page 86: Natural for DB2 Beyond The Find and Read

Darrell Skildum / 04/10/23 / 86 Software AG

Multiple Row Processing II

Natural DB2: support for SELECT and INSERT

0210 MOVE 25 TO MF 0220 FIND MULTI-FETCH OF MF VDEMO 0230 WITH EMPNO = 000000 THRU 9999990240 WRITE VDEMO 0250 END-FIND

Natural DML Natural SQL

Natural DB2

Views Views and Host Variables (arrays)

Page 87: Natural for DB2 Beyond The Find and Read

Darrell Skildum / 04/10/23 / 87 Software AG

Multiple Row Processing III

0120 DEFINE DATA LOCAL 0130 01 NAME (A20/1:10) 0140 01 ADDRESS (A100/1:10) 0160 01 SALARY (P4.2/1:10) 0170 01 L§ADDRESS (I2/1:10) 0180 01 ROWS (I4) 0190 01 NUMBER (I4) 0200 01 INDEX (I4) 0210 END-DEFINE 0220 OPTIONS DB2ARRY=ON /* <-- ENABLE DB2 ARRAY 0250 SELECT NAME, ADDRESS , SALARY 0260 INTO :NAME(*), /* <-- ARRAY 0270 :ADDRESS(*) LINDICATOR :L§ADDRESS(*), /* <-- ARRAY 0290 :SALARY(01:10) /* <-- ARRAY 0300 FROM NAT-DEMO 0310 WHERE NAME > ' ' 0320 WITH ROWSET POSITIONING FOR 10 ROWS /* <-- ROWS REQ 0340 ROWS_RETURNED :ROWS /* <-- ROWS RET 0350 IF ROWS > 0 0360 FOR INDEX = 1 TO ROWS STEP 1 0370 DISPLAY 0390 NAME(INDEX) 0400 ADDRESS(INDEX) (AL=20) 0420 SALARY(INDEX) 0430 END-FOR 0440 END-IF 0450 END-SELECT

Page 88: Natural for DB2 Beyond The Find and Read

Darrell Skildum / 04/10/23 / 88 Software AG

Multiple Row Processing IV

0450 OPTIONS DB2ARRY=ON /* <-- ENABLE DB2 ARRAY 0470 INSERT INTO NAT-DEMO_ID 0480 (NAME,ADDRESS,DATEOFBIRTH,SALARY) 0490 VALUES 0500 (:NAME(*), /* <-- ARRAY 0510 :ADDRESS(*) /* <-- ARRAY 0520 INDICATOR :N§ADDRESS(*) /* <-- ARRAY 0530 LINDICATOR :L§ADDRESS(*), /* <-- ARRAY DB2 VCHAR 0550 :DATENATD(1:10), /* <-- ARRAY NATURAL DATES 0560 :SALARY(01:10) /* <-- ARRAY NATURAL PACKED 0580 ) 0590 FOR 10 ROWS 0610 * ATOMIC /* <-- DEFAULT OPTION 0620 NOT ATOMIC CONTINUE ON SQLEXCEPTION /* <-- SPECIAL OPTION

ATOMIC / NOT ATOMIC ... – specifies the DB2 reaction on an INSERT error

Page 89: Natural for DB2 Beyond The Find and Read

Darrell Skildum / 04/10/23 / 89 Software AG

GET DIAGNOSTICS

GET DIAGNOSTICS provides diagnostic information about the last executed SQL statement

long rcount;EXEC SQL UPDATE T1 SET C1 = C1 + 1;EXEC SQL GET DIAGNOSTICS :rcount = ROW_COUNT;

1120 PROCESS SQL NAT-DEMO 1130 << GET DIAGNOSTICS CONDITION :U:NUMBER 1220 ,:G:MESSAGE_ID = MESSAGE_ID 1230 ,:G:MODULE = DB2_MODULE_DETECTING_ERROR 1300 ,:G:REASON = DB2_REASON_CODE 1310 ,:G:SQLCODE = DB2_RETURNED_SQLCODE 1320 ,:G:ROW_NUMBER = DB2_ROW_NUMBER 1330 ,:G:TOKEN_COUNT = DB2_TOKEN_COUNT 1340 ,:G:MESSAGE_TEXT = MESSAGE_TEXT 1350 ,:G:SQLSTATE = RETURNED_SQLSTATE 1360 ,:G:SERVER = SERVER_NAME 1370 >>

Page 90: Natural for DB2 Beyond The Find and Read

Darrell Skildum / 04/10/23 / 90 Software AG

XML Publishing Built-In Functions I

XML Built-In Functions - a set of SQL built-in functions that allow applications to generate XML data from relational data.

DB2 XML Functions

XMLELEMENT Generates an XML element from arguments

XMLATTRIBUTES Constructs XML attributes from arguments

XMLFOREST Produces a forest of XML elements from a list of columns and expressions

XML2CLOB Converts the transient XML data type into a CLOB so that the application can access the XML data

Page 91: Natural for DB2 Beyond The Find and Read

Darrell Skildum / 04/10/23 / 91 Software AG

XML Publishing Built-In Functions II

Example: Generate an "Emp" element for each employee. Use employee name as its attribute and two subelements generated from columns HIRE and DEPT by using XMLFOREST as its content. The element names for the two subelements are "HIRE" and "department".

SELECT E.EMPNO, XML2CLOB ( XMLELEMENT ( NAME "Emp", XMLATTRIBUTES ( E.FIRSTNME !! ' ' !! E.LASTNAME AS "name" ), XMLFOREST ( E.HIRE, E.WORKDEPT AS "department" ) ) ) FROM DSN8810.EMP E;

ID result---------------------------------------------1001 <Emp name="John Smith"> <HIRE>2000-05-24</HIRE> <department>Accounting</department> </Emp>1001 <Emp name="Mary Martin"> <HIRE>1996-02-01</HIRE> <department>Shipping</department> </Emp>

Page 92: Natural for DB2 Beyond The Find and Read

Darrell Skildum / 04/10/23 / 92 Software AG

XML Publishing Built-In Functions III

0040 DEFINE DATA LOCAL 0050 01 #EMPNO (A6) 0060 01 #XML_LINE (A) DYNAMIC 0070 END-DEFINE 0080 SELECT E.EMPNO, XML2CLOB ( XMLELEMENT 0090 ( NAME "EMP", 0100 XMLATTRIBUTES ( E.FIRSTNME !! ' ' !! E.LASTNAME 0110 AS "NAME" ), 0120 XMLFOREST ( E.HIREDATE, 0130 E.WORKDEPT AS "DEPARTMENT" ) 0140 ) ) AS RESULT 0150 INTO #EMPNO, #XML_LINE 0160 FROM DSN8810-EMP E; 0170 PRINT #EMPNO #XML_LINE ;

Page 93: Natural for DB2 Beyond The Find and Read

Darrell Skildum / 04/10/23 / 93 Software AG

Unicode Support I

DB2 does not have data type ‘UNICODE’

DB2 Unicode

GRAPHIC Data type

UNICODE, 1200 CCSID

Page 94: Natural for DB2 Beyond The Find and Read

Darrell Skildum / 04/10/23 / 94 Software AG

Unicode Support II

0090 DEFINE DATA LOCAL 0100 01 EMP VIEW OF DSN8810-EMP 0110 02 EMPNO 0130 02 LASTNAME 0140 02 SALARY 0170 * 0180 01 UC 0190 02 EMPNO (U6) 0200 02 FIRSTNME (U12) 0210 02 LASTNAME (U15) 0220 02 SALARY (P7.2) 0250 END-DEFINE 0290 * ALPHA 0350 SELECT * INTO VIEW EMP 0360 FROM DSN8810-EMP 0370 ORDER BY SALARY + COMM 0380 FETCH FIRST 50 ROW ONLY 0400 DISPLAY EMP *COUNTER 0410 END-SELECT 0290 * UNICODE 0480 SELECT EMPNO,FIRSTNME,SALARY,0490 INTO UC.EMPNO,UC.FIRSTNME,UC.SALARY0500 FROM DSN8810-EMP 0510 ORDER BY SALARY + COMM 0520 FETCH FIRST 50 ROW ONLY 0540 DISPLAY UC *COUNTER 0550 END-SELECT

Natural DB2 uses the DB2 Code Page Translation (UTF16, Code Page 1200)

Page 95: Natural for DB2 Beyond The Find and Read

Darrell Skildum / 04/10/23 / 95 Software AG

SELECT Statement I

DB2: I(insert)-table-reference

INSERT SELECT

CREATE TABLE EMPLOYEE (EMPNO INTEGER GENERATED ALWAYS AS IDENTITY, ID SMALLINT, NAME CHAR(30), SALARY DECIMAL(5,2), DEPTNO SMALLINT) IN DSN8D81A.DSN8S81D;

SELECT EMPNOFROM FINAL TABLE (INSERT INTO DSN8810.EMP

(NAME,SALARY,DEPTNO)VALUES(‘SMITH’,99000,123)

);

Page 96: Natural for DB2 Beyond The Find and Read

Darrell Skildum / 04/10/23 / 96 Software AG

SELECT Statement II

0160 SELECT * INTO VIEW V1 0170 FROM FINAL TABLE (INSERT INTO NAT-DEMO_ID 0180 (NAME, ADDRESS,DATEOFBIRTH,SALARY)0190 VALUES ('KLUGE','ANGLE STREET 1', 0200 '1980-05-05', 5720.05) 0210 ) 0220 DISPLAY (AL=15) V1 0230 END-SELECT

Page 97: Natural for DB2 Beyond The Find and Read

Darrell Skildum / 04/10/23 / 97 Software AG

Materialized Query Tables

A materialized query table (MQT) is a table whose definition is based on the result of a query.

CREATE TABLE STRANS AS(SELECT YEAR AS SYEAR, MONTH AS SMONTH, DAY AS SDAY, SUM(AMOUNT) AS SSUMFROM TRANSGROUP BY YEAR, MONTH, DAY)DATA INITIALLY DEFERRED REFRESH DEFERRED;

MQT

Population

User-Maintained System-Maintained

INSERT, UPDATE, DELETE

REFRESH TABLE

LOAD

REFRESH TABLE

0940 PROCESS SQL SYSIBM-SYSDATABASE 0950 << REFRESH TABLE ‘EMPLOYEE’; >>

Page 98: Natural for DB2 Beyond The Find and Read

Darrell Skildum / 04/10/23 / 98 Software AG

Current Package Path Register I

In releases of DB2 before Version 8, the only way to switch between packages was to execute the SET CURRENT PACKAGESET statement every time you needed to use a different package. With SET CURRENT PACKAGE PATH, you can execute the statement only once, to give the server a list of package collections to search.

PACKAGE NAMElocation.collection.DBRM

SET CURRENT PACKAGESET

Search for Collection

SET CURRENT PACKAGE PATH

before DB2 Version 8 DB2 Version 8

Page 99: Natural for DB2 Beyond The Find and Read

Darrell Skildum / 04/10/23 / 99 Software AG

Current Package Path Register II

0940 PROCESS SQL SYSIBM-SYSDUMMY1 0950 << SET CURRENT PACKAGE PATH = SYSIBM, ‘ADMIN’, ‘USER’ >>

14:54:32 ***** NATURAL TOOLS FOR DB2 ***** 2006-02-10 - Environment Setting - Code Function Code Function SET CURRENT CO CONNECT SS SQLID RE RELEASE (connection) SP PACKAGESET SC SET CONNECTION SD DEGREE SY SET ENCRYPTION PASSWORD SU RULES SR Display SPECIAL REGISTER SO OPTIMIZATION HINT ? Help SL LOCALE LC_CTYPE . Exit SA PATH SE PRECISION SM MAINTAINED TABLE TYPES FOR OPT SB PACKAGE PATH Code .. __ SF REFRESH AGE SH SCHEMA SN APPLICATION ENCODING SCHEME

Natural DB2: PROCESS SQL, SYSDB2

Page 100: Natural for DB2 Beyond The Find and Read

Darrell Skildum / 04/10/23 / 100 Software AG

Common Table Expressions I

A common table expression permits defining a result table with a table name that can be referenced as a table name in any FROM clause of the fullselect that follows.

Table

Expressions

Nested SELECT … FROM (SELECT EDLEVEL, YEAR(HIREDATE) AS HIREYEAR, SALARY+BONUS+COMM AS TOTAL_PAY FROM EMPLOYEE WHERE EDLEVEL > 16)

WITH PAYLEVEL AS (SELECT EMPNO, EDLEVEL, YEAR(HIREDATE) AS HIREYEAR, SALARY+BONUS+COMM AS TOTAL_PAY FROM EMPLOYEE WHERE EDLEVEL > 16) SELECT … FROM PAYLEVEL

Common Table

Page 101: Natural for DB2 Beyond The Find and Read

Darrell Skildum / 04/10/23 / 101 Software AG

Common Table Expressions II

0270 WITH_CTE 0280 RPL (PART,SUBPART,QUANTITY) AS 0290 (SELECT ROOT.PART,ROOT.SUBPART,ROOT.QUANTITY 0300 FROM HGK-PARTLIST ROOT (PART,SUBPART,QUANTITY) 0310 WHERE ROOT.PART ='01' 0320 UNION ALL 0330 SELECT CHILD.PART,CHILD.SUBPART,CHILD.QUANTITY 0340 FROM RPL PARENT, HGK-PARTLIST CHILD 0350 WHERE PARENT.SUBPART =CHILD.PART 0360 ) 0370 SELECT DISTINCT PART,SUBPART,QUANTITY 0380 INTO VIEW V1 0390 FROM RPL 0400 ORDER BY PART,SUBPART,QUANTITY 0410 PERFORM CHECK-SQLCA 0420 DISPLAY *COUNTER V1 0430 END-SELECT

Natural DB2: WITH_CTE and subsequent SELECT

Page 102: Natural for DB2 Beyond The Find and Read

Darrell Skildum / 04/10/23 / 102 Software AG