0% found this document useful (0 votes)
200 views36 pages

DDLVSDDS AS400

This document compares the two main tools used to define data on IBM i systems - Data Description Specifications (DDS) and SQL Data Definition Language (DDL). It provides examples of creating files and tables with both tools and inserting/validating data. The major difference is that DDS validates data on read, while DDL validates on write. It also discusses performance advantages of DDL and references additional resources on SQL performance tuning.

Uploaded by

ChengKenshin
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
200 views36 pages

DDLVSDDS AS400

This document compares the two main tools used to define data on IBM i systems - Data Description Specifications (DDS) and SQL Data Definition Language (DDL). It provides examples of creating files and tables with both tools and inserting/validating data. The major difference is that DDS validates data on read, while DDL validates on write. It also discusses performance advantages of DDL and references additional resources on SQL performance tuning.

Uploaded by

ChengKenshin
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 36

DDL or DDS?

A comparison of tools used to define data


on the System i.
By Robert Berendt

Data Definition Specifications


UNIQUE
R ITEMMASTR
ITEMNBR

17A

COMP(NE ' ')

ITEMCLAS

2A

COMP(NE ' ')

PRICE

9P 2

COMP(GT 0)

K ITEMNBR

UPDDTA on DDS file

SQL against DDS file


INSERT INTO ROB/ITEMMAST VALUES(' ', ' ', -5)
1 rows inserted in ITEMMAST in ROB.

iNav against DDS file

DDL defined file


CREATE TABLE ROB/DDLMAST
(ITEMNBR CHAR (17 ) NOT NULL WITH DEFAULT,
PRIMARY KEY (ITEMNBR),
CHECK (ITEMNBR<>' ' ),
ITEMCLAS CHAR (2 ) NOT NULL WITH DEFAULT,
CHECK (ITEMCLAS<>' ' ),
PRICE DECIMAL (9 , 2) NOT NULL WITH DEFAULT,
CHECK (PRICE>0 ))
RCDFMT DDLMASTR

SQL against DDL file


INSERT INTO ROB/DDLMAST VALUES(' ', ' ', -5)
INSERT or UPDATE not allowed by CHECK
constraint.

iNav against DDL file

SQL and DDS Data Validation


Differences
The major difference between these two types of physical
database objects is the process that determines when the data is
validated. For DDS, the data is validated as data is read through
the open cursor. For SQL, data is validated as it is written
through the open cursor.

SQL and DDS Data Validation


Differences

DSPPFM of DDS file

DDS: No check on write

CRTPF BADDATA RCDLEN(24)


*...+....1....+....2....
XXXXXXXXXXXXXXXXXXXXXXXX
CPYF FROMFILE(BADDATA) TOFILE(ITEMMAST)
MBROPT(*ADD) FMTOPT(*NOCHK)

DDS: Now has bad data


....+....1....+....2....+....3....+....4..
ITEMNBR

ITEMCLAS

PRICE
8.005.00-

XXXXXXXXXXXXXXXXX

XX

+++++++++++++

Not on DDL file


CPYF FROMFILE(BADDATA) TOFILE(ddlMAST)
MBROPT(*ADD) FMTOPT(*NOCHK)
Data mapping error on member DDLMAST.
Data mapping error on member DDLMAST.
C
Cancel reply received for message CPF5029.
Error writing to member DDLMAST in file
DDLMAST.
0 records copied to DDLMAST in ROB.

Performance enhancements
Many applications have an average of 25 reads to every write.
If you move the validity checking to write time, performance
will be better.
DDL defaults to REUSEDLT, or reuse deleted records.
Allows concurrent write support.

Performance enhancements
(cont)
DDL defined files will have a 64K page size vs 8-32K
page size from DDS.

Source?
Store in QDDSSRC, compile with RUNSQLSTM

What about column headings?


UNIQUE
R ITEMMASTR
ITEMNBR

17A

COMP(NE ' ')


COLHDG('Item' 'Number')

ITEMCLAS

2A

COMP(NE ' ')


COLHDG('Item' 'Class')

PRICE

9P 2

COMP(GT 0)
COLHDG(' ' 'Price')

K ITEMNBR

Column headings in SQL


CREATE TABLE ROB/DDLMAST
(ITEMNBR CHAR (17 ) NOT NULL WITH DEFAULT,
PRIMARY KEY (ITEMNBR),
CHECK (ITEMNBR<>' ' ),
ITEMCLAS CHAR (2 ) NOT NULL WITH DEFAULT,
CHECK (ITEMCLAS<>' ' ),
PRICE DECIMAL (9 , 2) NOT NULL WITH
DEFAULT,
CHECK (PRICE>0 ))
RCDFMT DDLMASTR;

Column headings

LABEL ON COLUMN ITEMNBR


IS 'Item Number';
LABEL ON COLUMN ITEMCLAS
IS 'Item
Class';
LABEL ON COLUMN PRICE
IS 'Price';

Field Reference File


CREATE TABLE EMPLOYEE AS
(SELECT EMPLOYEE_ID, NAME, etc.
FROM FIELDREF)
WITH NO DATA
Yes, it does bring the column headings along.
No, it does not bring the constraints along.

Constraints
ITEMCLAS CHAR (2 ) NOT NULL WITH DEFAULT,
CHECK (ITEMCLAS<>' ' ),
FOREIGN KEY (ITEMCLAS)
REFERENCES IIC (ICLAS)
ON DELETE NO ACTION
ON UPDATE NO ACTION,

RCDFMT clause
In older releases of i5/os SQL did not support the RCDFMT
clause. Commonly what one did was CREATE TABLE and
then rename it.

Embedding UDFs
CREATE VIEW wPricing
AS SELECT LPROD, LQORD, LCUST, LRDTE,
pricing(lprod, lqord, lcust, lrdte) as PRICE
FROM ordline

Multi member files


Partitioned tables
Foreign key constraints

Identity columns
CREATE TABLE ROB/ORDMAST
(ORDNBR INTEGER GENERATED ALWAYS AS IDENTITY,
CUSTNBR INTEGER,
ITEMNBR CHAR (17));
INSERT INTO ROB/ORDMAST
(CUSTNBR, ITEMNBR) VALUES(5, 'A');
SELECT * FROM ORDMAST;
ORDNBR
CUSTNBR
1
5

ITEMNBR
A

Identity value
Exec sql
VALUES IDENTITY_VAL_LOCAL() INTO

:IVAR;

Dump using dummy file SYSDUMMY1 and use


VALUES
6.1 also supports:
select ordnbr from final table (
INSERT INTO ROB/ORDMAST
(CUSTNBR, ITEMNBR) VALUES(7, 'C'))

ADDPFCST trick

You can use ADDPFCST to add a key to a *OUTFILE

6.1 HIDDEN &


ROW CHANGE TIMESTAMP
CREATE TABLE tickets(
ticket_ord INTEGER,
ticket_qty INTEGER,
ticket_event VARCHAR(10),
ticket_ts TIMESTAMP NOT NULL
IMPLICITLY HIDDEN
FOR EACH ROW ON UPDATE AS ROW
CHANGE TIMESTAMP);
INSERT INTO tickets
VALUES(1,11,mvGAME1);
NOTE: Only 3 column values passed on INSERT

6.1 HIDDEN &


ROW CHANGE TIMESTAMP
SELECT * FROM TICKETS
TICKET_ORD
TICKET_QTY
TICKET_EVENT
1
11
mvGAME1
SELECT TICKET_ORD, TICKET_TS FROM TICKETS
TICKET_ORD
TICKET_TS
1
2009-04-19-22.25.57.106071

6.1 LFs for RLA


CREATE INDEX ROB/IIML01R ON IIM (IPROD)
WHERE IID='IM'
RCDFMT IIML01RR
ADD IPROD, IDESC, ICLAS

System reference tables

Select * from QSYS2/SYSCOLUMNS

Bibliography
http://www-03.ibm.com/servers/eserver/iseries/db2/pdf/
Performance_DDS_SQL.pdf
http://faq.midrange.com/data/cache/462.html
SQL Performance Diagnosis on IBM DB2 Universal Database for
iSeries
http://www.redbooks.ibm.com/abstracts/sg246654.html?Open
Modernizing IBM eServer iSeries Application Data Access - A
Roadmap
Cornerstone
http://www.redbooks.ibm.com/abstracts/sg246393.html?Open

Preparing for and Tuning the SQL Query Engine on DB2 for
i5/OS
http://www.redbooks.ibm.com/abstracts/sg246598.html?Open
Database performance and query optimization
http://publib.boulder.ibm.com/infocenter/iseries/v5r4/topic/rzajq/r
zajq.pdf
DB2 Universal Database for iSeries Administration: The
Graphical Way on V5R3
http://www.redbooks.ibm.com/abstracts/sg246092.html?Open
Mastering SQL Performance with Visual Explain - V5R3 Update
http://www03.ibm.com/servers/enable/site/education/abstracts/2dc6_abs.html

Analyzing DB2 for i5/OS Performance with the V5R4 SQL


Plan Cache & Visual Explain
http://www03.ibm.com/servers/enable/site/education/abstracts/e526_abs.
html

You might also like