548
IBM i SQL 7.1

IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

  • Upload
    lyphuc

  • View
    245

  • Download
    0

Embed Size (px)

Citation preview

Page 1: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

IBM i

������

SQL �����

7.1

���

Page 2: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441
Page 3: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

IBM i

������

SQL �����

7.1

���

Page 4: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�!

� ��� � ��� ���� ��� ���� ��, 529 ���� ������� ��� �����.

� ���� � ���� ��� ���� �� �, IBM i 7.1(�� �� 5770-SS1) � �� �� ���� ����� ���

�. � ��� RISC(Reduced Instruction Set Computer) �� � CISC ����� ���� ����.

© Copyright International Business Machines Corporation 1998, 2010.

Page 5: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

��

SQL ����� . . . . . . . . . . . . . 1

IBM i 7.1� ��� �� . . . . . . . . . . 1

SQL ������ PDF �. . . . . . . . . 3

i� DB2 SQL(Structured Query Language) �� . 3

SQL �� . . . . . . . . . . . . . . 4

SQL ��� ������ � ��� �� . . 6

SQL � ��� �� �� . . . . . . . . 6

SQL� �� . . . . . . . . . . . . 7

SQL �� � . . . . . . . . . . . 8

SQL �� � . . . . . . . . . . . 9

SQL ���� . . . . . . . . . . . . . 9

��� . . . . . . . . . . . . . . 9

�� � �� ��� . . . . . . . . . . 9

���� . . . . . . . . . . . . . 10

���, � � . . . . . . . . . . 10

�� . . . . . . . . . . . . . . . 10

� . . . . . . . . . . . . . . . 11

� . . . . . . . . . . . . . . . 11

���� . . . . . . . . . . . . . 11

��� . . . . . . . . . . . . . . 12

�� ���� . . . . . . . . . . . 12

��� . . . . . . . . . . . . . . 12

��� �� . . . . . . . . . . . . 13

��� �� � . . . . . . . . . . 13

��� �� �� . . . . . . . . . . 13

XSR ���� . . . . . . . . . . . 13

SQL ��� . . . . . . . . . . . . 14

����� ���� ���� . . . . . . 14

��� �� � . . . . . . . . . . 16

�� �� � �� . . . . . . . . . 16

���� . . . . . . . . . . . . . 16

SQL ��� . . . . . . . . . . . . 17

�� . . . . . . . . . . . . . . . 17

�� ���� . . . . . . . . . . . 17

��� �� �� . . . . . . . . . . . . 18

��� �� . . . . . . . . . . . . . 18

��� �� . . . . . . . . . . . . . 18

���� �� � ��. . . . . . . . . 19

�� ��� � ���. . . . . . . . . 19

�� ���� �� � �� . . . . . . 20

�: �� ���� �� . . . . . . . 21

�: ���� �� . . . . . . . . . . 22

� �� . . . . . . . . . . . . 22

LIKE� ���� ��� �� . . . . . . . 23

AS� ���� ��� �� . . . . . . . . 24

��� �� ��� �� � � . . . . . 24

��� �� ��� �� . . . . . . . . . 26

� � ��� �� . . . . . . . . 26

ID �� � � . . . . . . . . . . 27

ROWID �� . . . . . . . . . . . . 28

��� �� � �� . . . . . . . . . . 28

ID � ���� � . . . . . . . . 30

� ���� �� . . . . . . . . . . . 31

� ����� �� � �� . . . . . 31

� ���� �� . . . . . . . . . . 32

� ����� ���� . . . . . . 32

� ���� ��� �� ��� ��� 33

� ���� ��� � ���(FPPVL) 35

� ����� �� ��� � �� 36

� ��(� � 8) . . . . . . . 37

� ��(� � 0). . . . . . . 38

� ���(� � 4). . . . . . . 39

�� � ���� ���� . . . . . 40

� ���� ��� �� �� . . 41

� ��� . . . . . . . . . . 42

�� ��� . . . . . . . . . . 42

LABEL ON�� ���� � ��� �� . . 42

COMMENT ON� ���� SQL ����

� . . . . . . . . . . . . . . . . 43

��� �� � . . . . . . . . . . . 44

��. . . . . . . . . . . . . . 44

�. . . . . . . . . . . . . . 45

�� ��� ��� �� �� . . . . . . 45

��. . . . . . . . . . . . . . 46

ALTER TABLE�� �� �� � . . . 47

ALIAS � �� � �� . . . . . . . . 47

� �� � �� . . . . . . . . . . . . 48

��� WITH CHECK OPTION . . . . . 50

WITH CASCADED CHECK OPTION 50

WITH LOCAL CHECK OPTION . . . 51

�: ����� ���� � �� . . . 52

� �� . . . . . . . . . . . . . . 53

��� �� �� � �� . . . . . . . . 54

� ���� �� . . . . . . . . . . . 54

© Copyright IBM Corp. 1998, 2010 iii

||

||

||

||

||

||

||

||

||

||

||

||

||

||

||

||

||

||

Page 6: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

������ �� ���� . . . . . . . 55

���� �� ���� �� ���� . . . 55

� �� ���� �� ���� . . . . . 55

������ ���� (drop) . . . . . . 56

��� �� �� . . . . . . . . . . . . 56

SELECT�� ���� ��� � . . . . . 57

� SELECT� . . . . . . . . . . 57

WHERE�� ���� �� �� �� . . . 59

WHERE�� �� . . . . . . . . 60

� ��� . . . . . . . . . . . 61

NOT �� . . . . . . . . . . . 62

GROUP BY� . . . . . . . . . . . 62

HAVING� . . . . . . . . . . . . 64

ORDER BY� . . . . . . . . . . . 65

� SELECT� . . . . . . . . . . 67

�� �� . . . . . . . . . . . . . 68

SQL�� �� ���� . . . . . . . . 69

��� �� �� . . . . . . . . . . 70

��, �� � ��� ��� �� . . . . 71

�� �� � �� � �� . . . . . . 71

��/�� �� . . . . . . . . . . 72

� � �� . . . . . . . . . . . 72

� � �� . . . . . . . . . . . . 72

��� �� �� ��. . . . . . . . . 73

LIKE� �� �� ���. . . . . . 75

WHERE�� � �� �� . . . . . 76

OLAP �� �� . . . . . . . . . . 77

� ��� ����� ��� �� . . . 80

�� �� . . . . . . . . . . . . 80

�� �� �� . . . . . . . . . . 82

��� �� �� . . . . . . . . . 83

�� �� . . . . . . . . . . . . 83

�� �� . . . . . . . . . . . . 84

�� �� �� . . . . . . . . . . 85

��� ���� �� � �� �� . . 85

��� �� �� . . . . . . . . . . 86

� �� �� . . . . . . . . . . . 88

UNION ��� ���� �� � �� 95

UNION ALL �� �� . . . . . . 98

EXCEPT �� �� . . . . . . . . 100

INTERSECT �� �� . . . . . . . 102

��� � �� . . . . . . . . . . 104

INSERT�� ���� � �� . . . . . . 105

VALUES�� ���� � �� . . . . . 107

select�� ���� � �� . . . . . . 108

��� INSERT�� ���� � � �

� . . . . . . . . . . . . . . . 109

�� ����� �� ���� ��� �� 109

ID � � �� . . . . . . . . . . 110

�� � � . . . . . . . . . . . 111

UPDATE�� ���� ���� ��� � 112

�� �� �� ���� ��� �� 113

���� �� ���� ��� �� . . . 114

�� ����� �� ��� �� . . . . 114

�: UPDATE �� . . . . . . . . 115

ID �� . . . . . . . . . . . . 115

����� �� � ��� �� . . . . 116

DELETE�� ���� ����� � �� . . 118

�� ����� �� ����� � �� 118

�: DELETE �� . . . . . . . . 120

��� � . . . . . . . . . . . . . 121

�� �� �� . . . . . . . . . . . . 123

SELECT���� �� �� . . . . . . 123

�� �� � �� �� . . . . . . . 124

�� �� �� � �� . . . . . . 125

WHERE �� HAVING�� �� ��

. . . . . . . . . . . . . 125

�� �� �� . . . . . . . . . . . 127

�� � � ���� . . . . . . 127

�: WHERE�� �� �� �� . . . 128

�: HAVING�� �� �� �� . . . 129

�: select ���� �� �� �� . . . 130

�: UPDATE�� �� �� �� . . . 130

�: DELETE�� �� �� �� . . . 131

SQL�� � � � �� . . . . . . . 131

ORDER BY � � �� � ���� �

� . . . . . . . . . . . . . . . 132

� � � ORDER BY. . . . . . . 133

� � � � � . . . . . . . . 135

� � � � . . . . . . . . . . . 135

� � � CREATE INDEX� . . . . . 136

� � � ���� . . . . . . . . . 136

ICU � � . . . . . . . . . . . . 136

��. . . . . . . . . . . . . . . 137

��� �� . . . . . . . . . . . . . . 138

SQL ���� �� . . . . . . . . . . 138

���� ID. . . . . . . . . . . . 140

� . . . . . . . . . . . . . . . 140

�� . . . . . . . . . . . . . . 140

��� ��� . . . . . . . . . . . . 140

���. . . . . . . . . . . . . . 141

iv IBM i: ������ SQL �����

||

Page 7: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

���. . . . . . . . . . . . . . 143

�� �� . . . . . . . . . . . . 144

�� . . . . . . . . . . . . . . 148

� �� . . . . . . . . . . . . 149

���� . . . . . . . . . . . . . 151

� ���� �� � �� . . . . . 152

�� � �� �� . . . . . . . . . 153

�� �� �� . . . . . . . . . . . 154

� �� . . . . . . . . . . . . 154

���� ��� . . . . . . . . . . 155

��� �� ��� � . . . . . . . 155

� �� ��� � . . . . . . . . 156

� . . . . . . . . . . . . . . . . 156

�� ���� . . . . . . . . . . . . 156

�� ���� �� . . . . . . . . . 157

SQL ���� �� . . . . . . . . . 158

�� ���� �� . . . . . . . . . 164

���� ��� ��� CALL�

�� . . . . . . . . . . . . . 164

���� ��� ��� �� ��

CALL� �� . . . . . . . . . 165

SQLDA� � �� CALL� �� 166

CREATE PROCEDURE� � �

CALL� �� . . . . . . . . . . 167

�: CALL� . . . . . . . . . . 168

�� ������� �� � ��. . . . 175

�� 1: � �� �� ���� ��

���� �� . . . . . . . . . . 176

�� 2: � ������� �� �

� ���� �� ���� �� . . . . 177

�� ������� �� �� �����

���� �� SQL ���� �� . . . . 183

�� ���� � ��� �� �� ��

� �� �� . . . . . . . . . . . 189

���� �� � �� ���� . . . . 194

�� ������ �� �� �� . . . . 196

DB2�� �� ����� ��� �� 197

��� �� SQL . . . . . . . . 197

��� �� GENERAL . . . . . . 199

��� �� GENERAL WITH

NULLS . . . . . . . . . . . . 199

��� �� DB2GENERAL . . . . 200

��� �� Java . . . . . . . . 200

��� �� � �� . . . . . . . . . 200

UDF �� . . . . . . . . . . . . 201

UDF� SQL �� �� . . . . . . . 203

�: SQL �� UDF . . . . . . . 203

�: SQL ��� UDF . . . . . . . 203

UDF� �� �� �� . . . . . . . 204

UDF �� . . . . . . . . . . . 204

DB2�� �� �� � �� . . . . 208

��� � ��� . . . . . . . 214

UDF� �� �� �� . . . . . . . 215

�� ��� . . . . . . . . . 216

�� . . . . . . . . . . . 216

��(fenced) �� ��(unfenced) �

�� . . . . . . . . . . . . . 216

�� � �� ��� . . . . . . . 217

�: UDF � . . . . . . . . . . . 217

�: �� UDF� �� . . . . . . . 217

�: ��� . . . . . . . . . . . 219

�: �� ��� �. . . . . . . . 220

SQL��� UDF �� . . . . . . . . 227

��� �� �� ��� � ��

�� . . . . . . . . . . . . . 227

�� � �� �� . . . . . . . 228

���� �� � �� ��. . . . . 229

� �� ��. . . . . . . . . . 229

���. . . . . . . . . . . . . . . 232

SQL ���. . . . . . . . . . . . 233

BEFORE SQL ��� . . . . . . . 233

AFTER SQL ���. . . . . . . . 235

INSTEAD OF SQL ��� . . . . . 236

SQL ���� �� . . . . . . . 238

SQL ��� �� ��� . . . . . . 239

�� ��� . . . . . . . . . . . . 239

SQL ������� � �� . . . . . . 240

SQL � �� . . . . . . . . . . . 241

���� � �� �� �� . . . . . . . 242

���� � � �� �� . . . . . . 243

�� ��� �� � �� . . . . . . 245

�� ��� �� �� . . . . . . . . . . 246

�� ���� . . . . . . . . . . . . 247

�� ���� ��� �� . . . . . . . 247

�� ���� �� ��� . . . . . . . 247

�: �� ���� ��� CLOB �� ��

� . . . . . . . . . . . . . . 248

�: C� �� LOBLOC . . . . . . 249

�: COBOL� �� LOBLOC . . . 250

���� �� � LOB �� ��� . . . 252

LOB � �� ��. . . . . . . . . 253

�: CLOB ���� �� �� . . . . 254

�� v

|

||

||

||

||

|

||

||

||

||

Page 8: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�: C� �� LOBFILE . . . . . . 254

�: COBOL� �� LOBFILE . . . 255

�: CLOB � ��� �� . . . . . . 256

LOB � �� �. . . . . . . . . 257

LOB � �� �� �� . . . . . . . 257

��� �� �� �� . . . . . . . . . 258

UDT �� . . . . . . . . . . . . 259

�: � . . . . . . . . . . . . 259

�: �� . . . . . . . . . . . . 259

UDT� ���� ��� �� . . . . . . 260

�: � . . . . . . . . . . . . 260

�: �� �� . . . . . . . . . . 260

UDT �� . . . . . . . . . . . . 261

�: UDT �� . . . . . . . . . . . 261

�: UDT� �� �� � . . . . . 261

�: UDT ��� ��. . . . . . . 261

�: UDT� �� � . . . . . . 263

�: UDT� �� �� UDF . . . . 263

�: UDT� �� �. . . . . . . 264

�: � SQL��� � . . . . . . 264

�: �� UDT� �� � . . . . . 265

�: UNION�� UDT �� . . . . . 266

�: UDT, UDF � LOB �� . . . . . . 266

�: UDT � UDF �� . . . . . . . . 266

�: LOB �� ���� ������ �

� . . . . . . . . . . . . . . . 267

�: UDF� ��� UDT ��� �� . . 268

�: LOB �� ���� ��� UDT ��

� �� . . . . . . . . . . . . . 268

DataLink �� . . . . . . . . . . . . 269

DataLink�� �� �� � . . . . . . 270

NO LINK CONTROL . . . . . . . 270

FS ��� �� FILE LINK CONTROL 270

DB ��� �� FILE LINK

CONTROL . . . . . . . . . . . 270

DataLink� �� � . . . . . . . . 271

SQL� � SQL/XML � . . . . . . . . 273

XML �� � �� �� . . . . . . . . 275

XML � �� �� � . . . . . . . . 276

XML ��� . . . . . . . . . . . . 278

�� 1: XML ���� ��� � �� ��

� �� . . . . . . . . . . . . . 278

�� 2: XML �� �� � XML ��

�� . . . . . . . . . . . . . . 278

�� 3: XML � �� XML �� �� 279

�� 4: XML ���� ��� XML ��

��� � . . . . . . . . . . . . 280

�� 5: XSLT ����� ���� �� 282

XML ��� �� . . . . . . . . . . 286

� ���� XML �� . . . . . . 286

XML � �� . . . . . . . . . . 286

XML �� . . . . . . . . . . . . 287

XML � ��� �� SQL/XML �� � 289

�: � ���� ��� XML �� �� 290

�: � ���� ��� XML �� �� 291

�: � ��� �� ��� �� ���

XML �� �� . . . . . . . . . . 292

�: XSLT ����� ���� ��. . . 293

�: XSLT� ��� ���� �� . . . . 295

�: ��� ��� XSLT �� . . . . . 297

�: XSLT� ��� � �� �� . . . 298

XML �� ��� �� �� ��� 302

SQL/XML �� �� �� �� �� . . 302

XML � � . . . . . . . . . . . 303

�� � � � XML ��� �� . . . 305

���� XML ��� ��� �� . . . . 306

XML ��� �� . . . . . . . . . . 306

����� XML ��� ��. . . . . . 307

XML ��� ��� . . . . . . . . . . 307

����� ����� �� �� . . . . . 308

CLI ������ XML �� � �� 309

CLI ������ XML ��� � . . 310

�� SQL ������� XML ���

�� �� . . . . . . . . . . . . 311

�: �� SQL ������ XML �

�� �� �� . . . . . . . . . . 312

XML� �� SQL ����� ���

�� ���� . . . . . . . . . . 313

SQLDA�� XML � �� . . . . . 313

Java . . . . . . . . . . . . . . 314

JDBC ������ XML ���. . . 314

SQLJ ������ XML ��� . . . 320

� . . . . . . . . . . . . . . 323

SQL ����� XML �� . . . . . 323

�� �� XML ��� �� �� . . 324

XML ��� �� . . . . . . . . . . 329

XML ��� �� �� �� �� ��

���. . . . . . . . . . . . . . 329

������� XML ��� �� ��

�� ��� . . . . . . . . . 329

vi IBM i: ������ SQL �����

||

||

||

||

|

||

|

||

||

|

||

||

||

||

||

||

||

||

||

|

||

||

||

||

||

||

||

||

||

||

||

||

||

||

||

||

|

||

|

||

|

||

||

||

||

||

||

||

||

||

|

||

|

||

Page 9: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�������� XML ��� � ��

�� ��� . . . . . . . . . 329

� ���� XML ��� �� �

�� ��� . . . . . . . . . . 330

JDBC � SQLJ ������ XML �

�� �� ���. . . . . . . . 330

XML �� � � �� ��� ��� �

� �� . . . . . . . . . . . . . 331

������� ���� �� XML

��� �� �� �� ���� . . . 331

������� ���� �� XML

��� �� �� �� ���� . . . 332

�� � �� XML ��� � ��

�� ���� . . . . . . . . . . 334

�� XMLSERIALIZE� XML ���

� �� �� ���� . . . . . . 337

�� XML ���� �� CCSID� �

�� �� . . . . . . . . . . . . 339

� � XML �� ���� �����

CCSID �� . . . . . . . . . . . 339

��� �� xml ��� �� . . . . . . . 339

��� �� XML ���� XML �� �� 340

��� �� XML ��� �� � �� . . 340

��� �� xml ��� ��� �� . . . 340

xml �� �� . . . . . . . . . . . 341

xml �� ��� �� � � . . . . 341

������ �� . . . . . . . . . 341

��� �� ����� �� . . . . 342

��� �� . . . . . . . . . . . 342

xml �� �� - �� . . . . . . . 342

db2-xdb:defaultSQLSchema �� �� 344

db2-xdb:rowSet �� �� . . . . . . 346

db2-xdb:table �� �� . . . . . . 350

db2-xdb:column �� �� . . . . . 353

db2-xdb:locationPath �� �� . . . . 355

db2-xdb:expression �� �� . . . . 358

db2-xdb:condition �� �� . . . . . 361

db2-xdb:contentHandling �� �� . . 365

db2-xdb:normalization �� �� . . . 369

db2-xdb:truncate �� �� . . . . . 372

db2-xdb:rowSetMapping �� �� . . . 374

��� �� xml ��� ��� �� 377

��� �� xml ��� ��� CDATA �

� �� . . . . . . . . . . . . . 378

��� �� xml ��� ��� �� � �

���. . . . . . . . . . . . . . 378

��� �� xml ��� ��� � ��� 379

��� �� xml ��� ��� �� � . . . 380

� �� ��� �� . . . . . . . 380

�� �� �: XML � �� . . . . . 386

�� �� �: � �� ��� � ��

�� �� � . . . . . . . . . . . 388

�� �� �: � �� ��� � ��

�� �� � . . . . . . . . . . . 389

�� �� �: � ���� �� � . . 391

�� �� �: � ���� �� � �

���. . . . . . . . . . . . . . 393

�� �� �: � ���� �� � �

� ���� � � . . . . . . . . 395

��� �� ��� ��� XML ��� �

SQL �� ��� . . . . . . . . . . 396

��� �� xml ��� ��� �� � �

���. . . . . . . . . . . . . . 403

xml �� ��� ���. . . . . . . . 405

�� ��� SQL �� . . . . . . . . . 406

�� �� . . . . . . . . . . . . . 406

�� �� . . . . . . . . . . . . 407

�: �� �� . . . . . . . . . . . 408

1��: �� �� . . . . . . . . . 410

2��: �� � . . . . . . . . . 411

3��: ��� �� ��� � ��� �

� �� . . . . . . . . . . . . 412

4��: ��� ���� � � . . . . 412

5a ��: �� � �� . . . . . . . 413

5b ��: �� � �� . . . . . . . 413

6��: �� � . . . . . . . . . 414

� � FETCH� �� . . . . . . . 415

��� �� �� ���� � �

FETCH . . . . . . . . . . . . 415

� �� �� ���� � � FETCH 417

� �� � � �� . . . . . . . . 419

� SQL ����� . . . . . . . . . 420

� SQL ����� � � �� . . . 421

� SQL�� CCSID . . . . . . . . 421

SELECT� �� ��� �� . . . . . . 422

PREPARE � EXECUTE� �� . . . 422

SELECT� �� � �� �� . . . . . 423

� ��� SELECT�. . . . . . . 423

�� ��� SELECT�. . . . . . . 424

SQL �� � . . . . . . . . . 425

SQLDA �� . . . . . . . . . . 426

�� vii

|

||

|

||

|

||

|

||

|

||

|

||

|

||

|

||

|

||

|

||

||

||

||

||

||

||

||

||

||

||

||

||

||

||

||

||

||

||

||

||

||

||

|

||

|

||

||

||

||

||

|

||

|

||

||

|

||

|

||

|

||

|

||

||

Page 10: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�: SQLDA� ���� ��� ��

SELECT� . . . . . . . . . . . 429

�: � SQL ��� ����

SELECT� . . . . . . . . . . . 434

��� �� . . . . . . . . . . 436

��� SQL �� . . . . . . . . . . . 438

��� SQL �� . . . . . . . . . . 439

��� �� �� �� . . . . . . . . 441

���. . . . . . . . . . . . . . 441

�� � . . . . . . . . . . . 443

��� �� � . . . . . . . . . 443

�� �� . . . . . . . . . . . 443

CREATE TABLE ��� . . . . . . 443

DBCS ��� �� . . . . . . . . 443

��� � �� �� . . . . . . . . 444

�: ��� ��� � �� . . . . 445

� �� � . . . . . . . . . . 447

��� SQL �� . . . . . . . . . . 448

�� SQL � �� . . . . . . . . 449

SQL � �� . . . . . . . . . . 449

��� SQL� ���� ��� ������

� � � . . . . . . . . . . . . 449

SQL� �� � �� . . . . . . . . . 451

�� � � ��� �� . . . . . . . 453

SQL� �� ���� �� �� . . . . 453

SQL� �� �� �� �� ��� . . . 454

�� ��� ������ � � SQL . . . . 456

i� DB2 �� ��� ������ �� . . . 457

i� DB2 �� ��� ������ �� ���

� . . . . . . . . . . . . . . . . 458

SQL ��� �� . . . . . . . . . . . 459

SQL ����� ��� SQL� . . . . . 460

SQL ��� �� ���. . . . . . . 460

CRTSQLPKG �� . . . . . . . . 460

i� DB2� �� �� ��������

��� �� . . . . . . . . . . . 460

�� ���(TGTRLS) ��� . . . . 461

SQL� �. . . . . . . . . . . 461

���� ���� �� ��� . . . . 462

��� ���� ��. . . . . . . . 462

ILE ���� � �� ���� . . . 462

��� �� �� . . . . . . . . . 462

� �� . . . . . . . . . . . 462

��� ��� �� . . . . . . . . 463

���. . . . . . . . . . . . . 463

�� � . . . . . . . . . . . 463

SQL � � . . . . . . . . . . 463

SQL� �� CCSID ��� . . . . . . 464

�� �� � �� �� . . . . . . . . . 464

PGM1� �� � . . . . . . . . . 465

PGM2� �� � . . . . . . . . . 465

PGM3� �� � . . . . . . . . . 466

�� ��� �������� � �� 467

��� �� ��� �� �� �� �� 468

���� �� �� ��� �� �� ��

�� . . . . . . . . . . . . . . 469

�� �� . . . . . . . . . . . . . 469

�� �� �� . . . . . . . . . . . 470

�� � �� �� ���� . . . . . . 473

�� �� �� . . . . . . . . . . . 473

�� � �� �� ���. . . . . . 475

�� �� . . . . . . . . . . . . 475

�� � ��. . . . . . . . . . . . 476

�� � �� �� �� . . . . . . . 476

�� �� � . . . . . . . . . . . 479

�� � � ��� . . . . . . . . 479

DRDA �� ���� ��� . . . . . . 480

WebSphere MQ with DB2 . . . . . . . . 481

WebSphere MQ � � . . . . . . . . 481

WebSphere MQ � � �� . . . . . . 481

DB2 MQ �� . . . . . . . . . 482

DB2 MQ �� . . . . . . . . . 483

DB2 MQ � . . . . . . . . . . . 484

DB2 MQ ��� . . . . . . . . . . 485

DB2 MQ ��� . . . . . . . . . . . 486

DB2 MQ CCSID �� . . . . . . . . . 492

Websphere MQ ���� . . . . . . . . 493

WebSphere MQ�� � � � . . . . . 494

WebSphere MQ�� � � �� . . . . . 495

WebSphere MQ�� � � � . . . . . 496

WebSphere MQ� ����� � �� . . . 497

�� . . . . . . . . . . . . . . . . 498

i� DB2 ��� . . . . . . . . . 498

�� ���(DEPARTMENT). . . . . . 498

DEPARTMENT . . . . . . . . . 499

�� ���(EMPLOYEE) . . . . . . . 500

EMPLOYEE . . . . . . . . . . 501

�� �� ���(EMP_PHOTO) . . . . 502

EMP_PHOTO . . . . . . . . . . 502

�� ��� ���(EMP_RESUME) . . . 503

EMP_RESUME . . . . . . . . . 503

viii IBM i: ������ SQL �����

||

||

||

||

||

||

||

||

||

||

||

||

||

||

Page 11: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� � ���� �� ���

(EMPPROJACT) . . . . . . . . . . 504

EMPPROJACT . . . . . . . . . 504

���� ���(PROJECT) . . . . . . 506

PROJECT . . . . . . . . . . . 507

���� �� ���(PROJACT) . . . . 508

PROJACT . . . . . . . . . . . 509

�� ���(ACT) . . . . . . . . . 511

ACT . . . . . . . . . . . . . 511

��� ��� ���(CL_SCHED) . . . . 512

CL_SCHED . . . . . . . . . . 512

�� ���(IN_TRAY) . . . . . . . 513

IN_TRAY . . . . . . . . . . . 513

�� ���(ORG) . . . . . . . . . 514

ORG . . . . . . . . . . . . . 514

��� ���(STAFF) . . . . . . . . 515

STAFF . . . . . . . . . . . . 515

� ���(SALES) . . . . . . . . . 516

SALES . . . . . . . . . . . . 517

XML ��� . . . . . . . . . 518

�� ���(PRODUCT) . . . . . . . 518

PRODUCT . . . . . . . . . . . 518

� �� ���(PURCHASEORDER) . . 520

PURCHASEORDER . . . . . . . 520

� ���(CUSTOMER) . . . . . . . 524

CUSTOMER . . . . . . . . . . 524

���� ���(CATALOG) . . . . . . 526

CATALOG . . . . . . . . . . . 526

��� ���(SUPPLIERS) . . . . . . 526

SUPPLIERS . . . . . . . . . . 526

� ���(INVENTORY) . . . . . . 527

INVENTORY . . . . . . . . . . 527

�� ��� ���(PRODUCTSUPPLIER) 527

PRODUCTSUPPLIER . . . . . . . 527

i� DB2 CL �� � . . . . . . . . . 527

��. ���� . . . . . . . . . . . . . 529

����� ���� �� . . . . . . . . 531

� . . . . . . . . . . . . . . . . 531

���� . . . . . . . . . . . . . . . 531

�� ix

||

||

||

||

||

||

||

||

||

||

||

||

||

||

||

Page 12: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

x IBM i: ������ SQL �����

Page 13: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

SQL �����

IBM® i� DB2® ������� SQL(Structured Query Language)� �� � �� ��� �����.

� �� ���� �� �� SQL� ��� ���� �� �� �� ��� �� �����.

v ��� SQL ��� ���� ILE C �� COBOL� �����. EXEC SQL � END-EXEC� �

��� COBOL ������ SQL�� �����.

v ��� SQL ��� � �� �� ��� ���� � �� ��� �� ����.

v SQL ��� �� ����.

v ����� ���� ����� ��� CORPDATA� �����. ���� � �����

���� ���� ���� ���� ���.

v �� � �� () � ��� []� ����.

v SQL �� ��� �����.

v APOST � APOSTSQL ���� ��� �����(� ��� COBOL�� ��� ��� ��

��). SQL � ��� �� ���� �� ��� ���� �� �� (’)� �����.

v �� ���� ��� *HEX � �� �����.

��� �� ��� �� �� �����.

� �� ���� ����� ������ �� ����, ���� ��� ����� ������ �

� ��� ����. �� �� ��� �� �� � � ��� SQL� ���� ����� ��

� � ����. ��� SQL� ��� SQL� ��� ����� ��� � �� ���� ��� �

� ����.

�: � ��� ���� 528 ���� �� ���� � ���� ��� ��� ���� ����.

�� ��

�� SQL �����

�� ��

498 ���� �i� DB2 ����

�� ���� SQL ����� � SQL �� �� ����� ����� �����.

i5/OS� DB2 SQL ��

IBM i 7.1� ��� ��

SQL ����� �� ���� �� ��� �� �� � �� � ��� � ����.

© Copyright IBM Corp. 1998, 2010 1

Page 14: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

������ �� �� ��

�� ������ ������ �� �� ��� � ��� ����� �� �� ���� � � ��

��. � � ��� 183 ���� ��� ������� �� �� ����� ���� �� SQL ���

� ���� ������.

XML

XML ��� ��� SQL� �������. ���� XML � �� �� � xml ��� ��� ��

�. � � ��� 273 ���� �SQL� � SQL/XML ��� ������.

�� ����

� ����� � � �� ���� �� ��� �� �� ����. �� ���� � �� �

�� � � ����� � �� �� ���� �� ����� � �� ��( ��)� � ����. �

� �� �� �� �����. �� �� �� � � ����� � �( ���)� �� ����

�� �� ��� �� ����� ���. � � ��� 31 ���� �� ���� ���� ������.

MERGE�

MERGE�� ���� ����� �� � �� ����� � �� ��� � ����(�� �����

�� �� ���� ��� �� �). � � ��� 121 ���� ���� ��� ������.

��� ��

��� ��� SQL� �� � ��� � ����. � � ��� 54 ���� ���� �� �� � ���

� ������.

SQL ������� ��

SQL ������ ��� � ��� � ��� ��� �������. � � ��� 240 ���� �SQL

������� � ��� � 241 ���� �SQL � ���� ������.

WebSphere® MQ with DB2

DB2� DB2 MQ ��� �� ��� �� � �� �� WebSphere MQ � � �� ���� �

���� ����� ����� �����. SQL��� �� �� ���� DB2 ������ �

�� WebSphere MQ � � ��� ��� � ����. � � ��� 481 ���� �WebSphere MQ

with DB2�� ������.

SQL ������ �� ��� ���� ��

v � ���� �� ��� �� DDL CREATE�� �������. 54 ���� �� ���� ���

� ������.

2 IBM i: ������ SQL �����

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

Page 15: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

��� �� �� ��� �� �� ��

�� ���� � � � ��� Information Center��� ��� �����.

v ��� �� �� � ��� ���� ��� ��� �� ���.

v ��� �� �� � ��� ��� ��� ��� �� ���.

PDF ���� ��� ��� � ��� � ���� �� ��(|)� � � ����.

� ���� ��� �� �� � ��� �� �� ��� ���� ��� ��� ������.

SQL ������ PDF ��

� ��� PDF �� � �� � ����.

� ��� PDF ��� ��� ������ SQL �����(� 1,714KB)� �����.

PDF �� ��

��� ��� �� � ����� PDF� ����� ��� ������.

1. �� ��� PDF � � � � ��� ���� ������.

2. PDF� ��� ���� ��� ������.

3. PDF� ��� ���� ������.

4. ��� ������.

Adobe® Reader ����

�� PDF� ��� ���� ���� Adobe Reader� ��� ��� ���. Adobe � ���

(http://get.adobe.com/reader/) �� �� �� ���� � ����.

i� DB2 SQL(Structured Query Language) ��

SQL(Structured Query Language)� ��� �������� ���� ��� ���� �� �� �

����. � ����� i� DB2 ������ � i� IBM DB2 Query Manager � SQL Development

Kit ����� �� ����� ���� SQL� System i® ��� �� ����.

SQL� ���� ��� ��� �� ��� �����. SQL�� � ��� �����, ��� �

�� �����, ����� ��� � ����. �� SQL� �� ��� �� SQL ������ �

�����.

SQL� �������� ���� �� ���� �� � � � � ��� ��� ��� ��� �

�� �����.

SQL ����� 3

Page 16: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

SQL� IBM Distributed Relational Database Architecture™(DRDA®)� ���� ��� ��� ����

��� �� ���� � �� � ����.

�� ��

�� ������ �����

�� ��

456 ���� ��� ��� ������ � � SQL�

�� ��� ������(distributed relational database)� �� �� ��� ��� ��� �� ��

SQL ���� �� �����.

SQL ��

i� DB2 SQL� SQL ��� ��, ����, ��� SQL� �� � �� � ��� ������.

v SQL ��� ��

SQL ���� SQL�� ��� SQL�� �����. � ��� i5/OS® ����� �� �����

��, SQL�� ������ i� IBM DB2 Query Manager � SQL Development Kit ��

��� �� ����� ��� �� ����� ��� � �� ���.

v SQL ����

SQL ����� ��� ��� �� SQL� ����� �����. ���� ��� ��� �

���.

– ILE C

– ILE C++

– ILE COBOL

– COBOL

– PL/I

– RPG III(RPG� �)

– ILE RPG

SQL ��� �� ����� SQL�� ����� ����� ����. �� ��� �

� ��� ���� ��� �� ����� �����. ������ �� � � ��� �

� SQL ����� ��� SQL�� �� ���� � � ��� ������. ����� i�

IBM DB2 Query Manager � SQL Development Kit ����� �� ����� ����.

v SQL ��� ����

SQL ��� ����� ���� SQL�� ��� ��� � ����. ��� SQL� �� � �

��� 438 ���� ���� SQL ���� ������. ��� SQL� i� IBM DB2 Query Manager

� SQL Development Kit ����� �� ����� ����.

v SQL � � ��

4 IBM i: ������ SQL �����

Page 17: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

System i Navigator� SQL � � �� �� ���� SQL� � � ��, ��, �� � ����

� ��� � ����.

v SQL� ��(RUNSQLSTM) CL ��

RUNSQLSTM ��� ���� �� � �� �� ��� �� �� �� SQL�� ��� �

����. RUNSQLSTM ��� �� � � ��� 451 ���� �SQL� �� � ���� �����

�.

v DB2 �� ���

DB2 �� ���� ���� ��� , ���� ����, ���� ����� �������� �

�� ��� � �� �� ��� ��� ��� �������. �� ���� i� IBM DB2 Query

Manager � SQL Development Kit ����� �� ����� ����. � � ��� �� �� �

��� �� � ������.

v SQL REXX ����

SQL REXX ����� ���� REXX ������ SQL�� ��� � ����. REXX ����

�� SQL�� ���� ��� �� � � ��� �� SQL ����� ��� REXX �����

�� SQL� ��� ������.

v SQL �� �� ����

i� DB2 ������� SQL �� �� ����� �����. ��� ILE �� ���� ����

���� �� ���� � ��� �� �� SQL �� � �� � ����. SQL �� ��

����� ���� , ����� ���� � � SQL �� � ��� � ����. ��

SQL�� �� , SQL�� ����, ��� �� ��� � ��(�: ���� � � � ��

� ���� �� � �)� ���� �� � ���� �� ����.

�� ��� �� �� ��� �� � � �� i5/OS Information Center� ������ ��� �

� SQL �� �� ����� ������.

v �� � �� � SQL(QSQPRCED) API

� ����� ����� ����(API)� �� � SQL �� �����. � API� ���� SQL

�� SQL ���� �� ��� � ����. � API� ���� ���� ��� ���� ���

�� ���� ���� (drop)� � � �����. QSQPRCED API� �� � � ��� ��

� �� � SQL(QSQPRCED) API� ������. API� �� ��� ����� ����

� ����� ������.

v SQL� �� �(QSQCHKS) API

� API� SQL� ��� ����. QSQCHKS API� �� � � ��� SQL� �� �(QSQCHKS)

API� ������. API� �� ��� ����� ����� ����� ������.

v DB2 Multisystem

SQL ����� 5

Page 18: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

����� ���� � ��� ���� � ���� ���� ��� � ����. � � ��� DB2

Multisystem� ������.

v DB2 �� ����

����� ���� � ��� �� � ����� ��� �� ���� �� � �� �

� ��� �����. �� ���� (SMP)� ���� �� ��� ���� � �� �(CPU

� I/O �� �)� ��� � ��� �� �� ��� � �� � ����� �� �� �

����. � ��� ������ ���� ��� � ��� �� � � ���(��

��) ��� �� �� �� � ��� �����. � � ��� ������ �� � �� � �

� ���� ��� �� �� ��� ������.

SQL ��� ���� � ��� ��

��� ��� ���� �� ���� ���� � ���� �����. i� DB2 ����� ��� ��

��� �� � �������.

�� � ��� ��� SQL ��� ������ �� �� ��� ����.

1. ��� ��� SQL ��� ��

��� �� SQL ��

�����. �� ����� ���� ��� ����

� �� � �� ���.

���. ����, ��, �� ���, SQL ���� � �

�� ��� ���� ���� ����. ���� �� �

���� ���� ��� ����� �� � �� ��

�.�� ��(PF). �� ����. ���. � � ����.���. � ����. �. �� � �� �� ���� �� �����.��. � ��� ��� �� ��� �� �� �� ��� �

����.

�. � ��� �� ���� � �����.

�� ��. �� ��� �� �(PF)� � � �� ��

����.

�. �� ��� ���� � � �� ����.

SQL ���. SQL�� ���� � ���� ���� ���

��.

���. SQL�� ���� � ���� ���� �����.

��� ���� ���� �� �� ���� ID.

�� ��

�� ������ �����

SQL � ��� �� ��

i� DB2 �������� ���(*SYS) �� SQL(*SQL) �� ��� ��� � ����.

���� �� ��� ��� SQL ���� ���� ��� � � ����� ���� ��� ��� �

��. ���� �� ��� SQL ��� ��� �� SET OPTION�� ���� ����.

��� ��(*SYS)

��� �� ���� ���� SQL�� �� SQL ����� ����� �� �� ���� �����.

schema/table

6 IBM i: ������ SQL �����

Page 19: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

SQL ��(*SQL)

SQL �� ���� ���� SQL�� �� SQL ����� ����� �� �� ���� �����.

schema.table

�� ��

���� �� ������ ��

SQL� �

� �� � SQL� ��� ����. ���� � ��� �� ��� ����.

v ��� �� ��(DDL)� � �� SQL ��� ���

v ��� �� ��(DML)� � �� SQL ��� � ��� � ���

v � SQL�

v �� SQL ��� �� ���

SQL ��� ��� SQL ��� ���

ALTER FUNCTION

ALTER PROCEDURE

ALTER SEQUENCE

ALTER TABLE

COMMENT ON

CREATE ALIAS

CREATE FUNCTION

CREATE INDEX

CREATE PROCEDURE

CREATE SCHEMA

CREATE SEQUENCE

CREATE TABLE

CREATE TRIGGER

CREATE TYPE

CREATE VARIABLE

CREATE VIEW

DROP

GRANT

LABEL ON

RENAME

REVOKE

ALLOCATE CURSOR

ASSOCIATE LOCATORS

CLOSE

DECLARE CURSOR

DELETE

FETCH

FREE LOCATOR

HOLD LOCATOR

INSERT

LOCK TABLE

OPEN

REFRESH TABLE

SELECT INTO

SET ��

UPDATE

VALUES INTO

SQL ��� �� ��� SQL �� ���

DELETE

INSERT

MERGE

UPDATE

CONNECT

DISCONNECT

RELEASE

SET CONNECTION

SQL ����� 7

|

||

|

Page 20: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

SQL ��� ��� SQL �� ���

COMMIT

RELEASE SAVEPOINT

ROLLBACK

SAVEPOINT

SET TRANSACTION

DECLARE GLOBAL TEMPORARY TABLE

SET CURRENT DECFLOAT ROUNDING MODE

SET CURRENT DEGREE

SET CURRENT IMPLICIT XMLPARSE OPTION

SET ENCRYPTION PASSWORD

SET PATH

SET SCHEMA

SET SESSION AUTHORIZATION

� SQL� �� SQL ��� �� ���

ALLOCATE DESCRIPTOR

DEALLOCATE DESCRIPTOR

DESCRIBE

DESCRIBE CURSOR

DESCRIBE INPUT

DESCRIBE PROCEDURE

DESCRIBE TABLE

EXECUTE

EXECUTE IMMEDIATE

GET DESCRIPTOR

PREPARE

SET DESCRIPTOR

BEGIN DECLARE SECTION

DECLARE PROCEDURE

DECLARE STATEMENT

DECLARE VARIABLE

END DECLARE SECTION

GET DIAGNOSTICS

INCLUDE

SET OPTION

SET RESULT SETS

SIGNAL

WHENEVER

SQL ���

CALL

SQL�� ���� � �� �(PF)� � �� �� �� �� SQL� �� ����� ��

�����. ���� � �� �� ��� ��� �� ����(IDDU) �� ��� ���� ����.

���� � �� �� ��� � �� ���� ����.

�� ��

18 ���� ���� �� ���

��� �� ��(DDL)� ������ ����� ��, � � ���� SQL ��� ����. �

� ������ ������ ���, �, �, ����, � � ��� ����.

56 ���� ���� �� ���

��� �� ��(DML)� ���� ����� ���� SQL ��� �� ����.

�� ��

i5/OS� DB2 SQL ��

SQL �� ��

SQL �� �(SQLCA)� SQL� ��� �� ��� ����� ����� ���� �� ����.

SQLCA� SQL� �� �� � �����.

8 IBM i: ������ SQL �����

|

|

|

Page 21: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� ��

SQLCA(SQL �� �)

SQLCA� ���� SQL �� �� � ��

SQL �� ��

������ ���� ������ SQL �� �� �� �� �� SQL�� �� ��� ����

�. ����� ����� GET DIAGNOSTICS�� ���� SQL �� �� � �� � ����.

�� ��

SQL �� � ��

�� ��

GET DIAGNOSTICS�

SQL ����

SQL ����� ���, ��, ����, ���, ��, �, � , ����, ���, �, �� ����, �

�� �� �, ��� �� ��, ��� �� � SQL ������. SQL� �� ����� ��� �

���� �� � �������.

���

���� SQL ����� �� ��� �����. ���(schema)� ����, ��, �� ���, ���

� � ��� ��(���)�� �����.

���, � � ��� ����(�: ����)� ��� ����� ����� �� �� ��� � ���

�. SQL ���� ��� ��� �� �� �� �� ��� �� SQL ���� �� �� ��

� � ����. SQL ���� ��� ��� �� ��� �� �� ����.

v ��� ��� �� ��� �� �� �(PF)�� �� �� �� SQL ���� ����� �� �

� ��� � ����.

v ��� ���� �� � � ��� �� �� SQL ���� ��� � ���.

�� ���� ��� ��� � ����.

�� � �� ��

��(journal) � �� ���(journal receiver)� ������� �� ��� � �� �� ���� �

��� � �����.

�� � �� ���� SQL COMMIT, ROLLBACK, SAVEPOINT � RELEASE SAVEPOINT� ��

�� �����. �� �� ��� ����� � �� �� ��� ��� �� ����.

SQL ����� 9

|

|

|

Page 22: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� ��

�� ��

�� ��

����

SQL ����(catalog)� ���, �, � , ����, �, ���, ���, ��, ����, ����, ���

� XSR ����� ��� ��� � � ������.

� ��� ���� QSYS � QSYS2�� �� �� ��� �� ���. � SQL ����� ��

�� ����� �� ��� �� ���� ���� �� � � �� ����.

����� ���� ��� � ���� �����. ����� (drop)��� ���� �� �

���.

�� ��

����

�, � � �

���(table)� �(row) � (column)� ���� 2�� ��� ����.

�� �� ��� � �� �� �� �����. � ��� ��� ��� �� ��� �� �� ��

�� �� � �����. � �� ���� �� ����� ���. SQL ���� � �� ��

�� �� �(PF)���.

��� �� ���(materialized query table)� select�� �� �� ��� �� ����� ���

��� ���� �� � ���� ������.

��� ���(partitioned table)� ���� �� ��� �� ���(��)� �� ������.

�� ��

DB2 �����

�� ��

��� ��

24 ���� ���� �� ��� �� � ��

��� �� ���(materialized query table)� ��� �� ��� �� � , ��� �� ���

��� �� �� ����� ��� �� �� �� ��� ���� �� ������.

��

��(alias)� ��� �� �� ������.

� ����� �� ��� � �� � ��� ���� ����� �� ��� � ����. �� �

�� ���� ��� ��� ��� �� ����.

10 IBM i: ������ SQL �����

|

|

Page 23: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� ��

��

�� ����� ����� ����� ����. �� �� ���� �� ��� �� �� �

� ��� ���� ���� ����.

�� ��� ��� �� ��� �� �� �� � �� � � ����. � ��� ������

��� ��� � �� � ����. SQL� �� �� �� �� �� �� �����.

�� ��

��

SQL � (index)� ���� �� �� ����� ��� ��� � �� ��� �� ���

�.

� � �� ��� �� ����. � �� � ��(ORDER BY�), ���(GROUP BY�) � ��

� �����. SQL � � � ���� �� ����.

� � � �� ��� �� �� ����� �����. � ��� ������. ���� � � �

�� � ����. ���� � � ����� (drop)� � ����. � � ���� �� ���� �

������. �� � � ���� ������� � � �� ���� ��� ������ �

�� �� �� ��� � � ����.

�� ��

� �� ��

����

����(constraint)� ����� ��, �� �� ��� � �� �� ������ ���� �����

�� �����.

i� DB2� �� ����� �����.

v � ����

� ����� �� �� �� �� ��� �����. CREATE TABLE �� ALTER TABLE

�� ���� � ����� ��� � ����. ��� ���� � � � CREATE INDEX�

�� ��� � ���, �� � � ����� � ��.

� ����� INSERT � UPDATE�� ��� � ����. PRIMARY KEY ����� UNIQUE

����� �����. �� � PRIMARY KEY� ��� ��� � � � � ����.

v �� ����

�� ����� �� �� ��� ���� �� �� � �� ��� �����.

SQL ����� 11

Page 24: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

– �� �� ��� ����.

– �� �� � ����� ����.

�� ����� INSERT, UPDATE � DELETE�� ��� � ����.

v � ����

� ����� ��� �� ���� ���� �� ���� �����. CREATE TABLE �

� ALTER TABLE�� ���� � ����� ��� � ����. � ����� INSERT �

UPDATE�� ��� � ����. ����� �����, ����� �� �� ���� ���� �

��� �� ��� TRUE �� � � �(�����)�� ���� ���.

�� ��

151 ���� ������

i� DB2 ������� �, �� � � ����� �����.

��

���� �� ���� �� ��� �� �� �� ��� ���� ���� �� ����.

���� ��, ��, �� �� �� �� � ����. ��� � �� �� ���� ��� � ����.

i� DB2� SQL ��, ��, �� ��� � �� ���� �����.

�� ���

�������� �� ��� ���

�� ����

�� ����� SQL CALL��� ��� � �� �������.

i� DB2� �� ���� � SQL ����� �����. �� ����� ��� ����, �� ���

� �� REXX ���� � ����. System/36 ������ ���� �� ���. SQL ����

� ��� SQL� ����, SQL ���� �� SQL�� � � ����.

�� ��

156 ���� ��� �����

����(� �� ����� � )� ��� ���� �� ��� � �� �������. �����

� ��� ���� SQL�� � � � � ����. SQL� ����� ��� ��� ����

� �� � � �����.

���

���(sequence)� �� ��� ��� �� �� ��� ���� ��� � �������.

���� ���� ID �� ���� ��� �� � ��� � ����. ���� �� ��� �

�� �����.

12 IBM i: ������ SQL �����

Page 25: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� ��

28 ���� ���� �� � ���

� � � �� ���� �� ���� ID � �����. �� ���� ���� � ��

�����. ���� ���� ��� �� �� � ����.

��� ��

��� ��(global variable)� SQL� ���� ��, � � � ��� � �� �� �����.

��� ��� �� �� �� ��� � ����. ��� ��, �� � �� insert�� �� � ��

�� ��� �� ��� � ����.

��� �� ��

��� �� �� � �� �� ����� ��� � �� �������.

i� DB2� �� �, SQL � � �� �� �����. �� �� ��� ILE ���� �� ��

���� � ����. SQL �� ��� SQL� ����, SQL ���� �� SQL�� �

� ����. �� �� � �� � �� �� ��� �� � �� ����. �� �� �

�� �� SQL �� �� �� ��� � ����.

�� ��

200 ���� ���� �� � ���

SQL ����� �� � ������� � ��� ��� ��� �� �(UDF)� �����

��� � ����. � ��� ����� ���� �� ��� � � ��� UDF� �� ���

� � � �� � ����.

��� �� �

��� �� ��� ������ �� ���� ���� ��� ��� ��� ��� � �� ��� ��

���.

�� ��� ��� �� ��� �����. � ��� ��� �� ��� �� �� � � �����

��� ���� �����.

�� ��

258 ���� ���� �� �� ���

��� �� �� ��(UDT)� �� ��� �� ��� �� ���� DB2 ��� ���� �� ���

����.

XSR ����

XSR ����� XML ��� ���� �� ��� �� �� ��� XML ��� �����.

XML ��� ��� � �� ��� �� xml ��� �� XSR ����� ��� � ����.

SQL ����� 13

|

|

|

|

|

|

|

|

|

Page 26: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

SQL ���

SQL ���(SQL package)� ����� ����� SQL�� ��� ��� ������ �� ���

(DBMS)� � � � ��� �� ��� �� �������.

DBMS� �� ��� ���� ����� ���� �� � �� SQL�� �����.

SQL ���� CRTSQLxxx(SQL ��) ��� ��� �������(RDB ���)� ��� ����

����� ��� � �����. ���� CRTSQLPKG(SQL ��� ��) ����� �����.

�: � ���� xxx� ��� �� ����(ILE C� CI, ILE C++� CPPI, COBOL� CBL, ILE

COBOL� CBLI, PL/I� PLI, RPG/400®� RPG, ILE RPG� RPGI)� �����.

SQL ���� QSQPRCED(�� � SQL ��) API�� �����. � �� ����� ���� SQL

���� �� �� ���� SQL ���� �����. QSQPRCED API� SQL ���� ���� ��

� SQL ��� �����.

�� ��

456 ���� ��� ��� ������ � � SQL�

�� ��� ������(distributed relational database)� �� �� ��� ��� ��� �� ��

SQL ���� �� �����.

�� � �� � SQL(QSQPRCED) API

���� ���� ����

i� DB2 ����� ����� ����� � � �� ����� �����.

i� DB2� ILE � ILE ���� � � �����. ����� ����� �� ������

�� ����� � � ����.

i� DB2 ������� ���� �� ����� ���� � �� ����.

v �� �

v ���, ILE ����� �� ����

v ���� �� �� ����

v �� ����� �� SQL ���

�� ILE i� DB2 ������� �� �� �� ����� ���� ���. �� ��� ��

����� �� ILE i� DB2 ����� �� ���� � �� � ��� ��� �����.

��� �� �� ��� �� �� � ��� �������. � ��� ������ �����.

14 IBM i: ������ SQL �����

Page 27: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� ILE i� DB2 ������� �� �� ��, �� �� ������ �� ����� ���

� � �� ����. �� ��� �� ����� �� ILE i� DB2 ����� �� ���� �

�� � ��� ��� �����. ��� �� �� ��� �� �� � ��� ������

�. � ��� ����� � �� ��� �����.

�� ILE i� DB2 ������� �� �, �� ���� � �� ���� ���� ���. �� �

�� �����, �� ILE i� DB2 ����� �� ���� � �� � ��� ��� ���

��. ��� �� �� ��� �� �� � ��� �������. � ��� ������ ���

��. ����� ���� ����� ��� SQL ���� �����.

�� ILE i� DB2 ������� �� �, �� ����, �� ������ �� ����, �� ��

�� ���� ���. �� ILE ������ �� ������ �� ���� SQL ���� ��� �

����. �� ��� �����, �� ILE i� DB2 ����� �� ���� � �� � ���

��� �����. ��� �� �� ��� �� �� � ��� �������. � ��� ����

� � �� ��� �����. ����� ���� ����� ��� SQL ���� �����.

SQL ����� 15

Page 28: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�: i� DB2 �� ���� ����� ���� � � ��� ����� ��� ��� � � ����

����.

�� ���

SQL��� ���� � � ��

��� �� ��

�� � �� �� �� ��� ��� ����� ��� SQL�� ���. IBM Rational®

Development Studio for i ����� �� ����� � �� �� ����(SEU)� ���� ��

� ��� �� � ����� � ����.

�� �� �� �

��� ���� �� �� QTEMP ����� �� �� � QSQLTxxxxx� �����. �

� �� �� �� ���� ��� �� �� ��� � ����.

���� �� �� QTEMP ����� ���� , � � ���� ���� ���� �� �

����. ������ �� �� �� ��� �� �� �� �����. � ��� ���

��� ����.

v �� SQL�� ��� SQL ��� �� ��

v �� � �� � SQL�

��� ����� ��� �� ��� �����.

�� ���

SQL��� ���� � � ��

����

����� ILE ��� �� �� �� �� ��� �� ILE ��� �� � �� �� ��

� ���� �������.

� � ��� �� SQL�� �� ���� ���� ��� SQL� ���� �� �� � �� �

���. ����� ���� �� �� �����. ���� ���� �� � �� ����� �

�� � ����(�: ��� �� �)� ���� �� SQL�� �� ���� �� � � � �

�� ���� ����.

16 IBM i: ������ SQL �����

Page 29: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� ���� �� � � ��� ����� ��� � �����. � ��� ��� ��� �� ��

�� � �� ����� ��� � �� �� SQLCODE� �����. � � ��� �� SQL

����� ���� �����, �� SQL ����� SQL ���� �� � �������.

SQL ���

SQL ���� �� SQL ����� �� � � ��� ���.

SQL ���� ��� �� � ���� �������.

v SQL ��(CRTSQLxxx) ��� ��� ������(RDB) ���� ���� �� SQL ����� �

��� .

v SQL ��� ��(CRTSQLPKG) ��� ���� .

�� SQL ����� ��� �, SQL ���� �� �� �� �� ����� �����. �� �

�� � SQL ���� �� SQL ���� � ����� ���� � �� � �����. SQL ����

�� �� SQL ����� ���� � ���� SQL ���� �� ��� ��� � ���.

v ��

v � �

v ��

v �� ����� ��

��

��� �� ��(CRTxxxMOD) ��(�� � ���� ��(CRTBNDxxx) ��(���xxx� C, CBL,

CPP �� RPG�))� ���� �� �� ����� ���� ILE(Integrated Language Environment®)

�������.

���� ��(CRTPGM) ��� ���� �� ��� ���� ����� � � � ����.

�� � �� ��� � � ��� ��� ��� ���� � � �� ����. ��� SQL�

� �� ��� ��� SQL � � ��� ���� �� �� ����� ��� � ��� ��

���.

�� ��

CRTPGM(���� ��) ��

�� ����

�� ����� ���� ���� �� ��� �(� �� ����)� ��� ����� ����

� ��� ���� ILE(Integrated Language Environment) �������.

� ����� �� �� ����� ����� �� ����� ���� ����� ���� �

� �� � �� � ����. �� ����� ��� � �� ��� �����. ��� �� ��

��� �� ��� ��� �� � �� ��� �����.

SQL ����� 17

Page 30: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

��� �� ��

��� �� ��(DDL)� ������ ����� ��, � � ���� SQL ��� ����. ��

������ ������ ���, �, �, ����, � � ��� ����.

�� ��

7 ���� �SQL� ���

� �� � SQL� ��� ����. ���� � ��� �� ��� ����.

�� ���

SQL ����

��� ��

���� SQL ���� �� ���� �����. ���� ����� CREATE SCHEMA�� ����

��.

���� ����, ��, �� ���, ���� � ��� ��� ���� ���� ����. ���,

� � ��� ����(�: ����)� ��� ����� ��, �� �� ��� � ����. SQL ��

�� ��� ��� �� �� �� �� ��� �� SQL ���� �� �� ��� � ���

�. SQL ���� ��� ��� �� ��� �� �� ����.

v ��� ��� �� ��� �� �� �(PF)�� �� �� �� SQL ���� ����� �� �

� ��� � ����.

v ��� ���� �� � � ��� �� �� SQL ���� ��� � ���.

�� ���� ��� ��� � ����.

CREATE SCHEMA�� ���� ���� ��� � ����. �� ��, DBTEMP�� ���� ��

����.

CREATE SCHEMA DBTEMP

�� ��

CREATE SCHEMA

� ��

���� �� � ���� ��� 2�� �� ���� � ����. ���� ����� CREATE

TABLE�� ������.

�� �� ��� � �� �� �� �����. � ��� ��� ��� �� ��� �� �� ��

�� �� � �����. � �� ���� �� ����� ���. SQL ���� � �� ��

�� �� �(PF)���.

CREATE TABLE�� ���� ���� ��� � ����. ���� � �� � � ���

��� ���. ���� ���� �� ��(�: 1� �)� � � ����.

18 IBM i: ������ SQL �����

Page 31: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�: �� ��� ��� �� � �� ‘INVENTORY’�� ���� ������.

v �� ��: 1 - 9999� ��� �� ����

v �: ��� 0 - 24 ��

v �� ��: 0 - 100000� ��

1� �� PARTNO���.

CREATE TABLE INVENTORY(PARTNO SMALLINT NOT NULL,DESCR VARCHAR(24 ),QONHAND INT,PRIMARY KEY(PARTNO))

�� ��

��� ��

���� � � �

����� � ����� � ���� ��� � ����. � �, 1� �, �� ���� �� � �

���� ����� CREATE TABLE �� ALTER TABLE�� ������. ����� �����

ALTER TABLE�� ������.

�� ��, ALTER TABLE�� ���� � ���� 1� �� ��� � ����.

ALTER TABLE CORPDATA.DEPARTMENTADD PRIMARY KEY (DEPTNO)

� �� � �� ���� �� PRIMARY� UNIQUE� ������.

�� ALTER TABLE�� ���� ����� ��� � ����.

ALTER TABLE CORPDATA.DEPARTMENTDROP PRIMARY KEY (DEPTNO)

�� �� � �

�� ���� � ����� �� ����� �� ��� ��� ������� ��� � �����.

�� �� �����.

v CORPDATA.EMPLOYEE� �� ��� ���� �� ���.

v CORPDATA.DEPARTMENT� ��� �� �� �� ��� ���� �� ���.

v CORPDATA.EMP_ACT� ����� �� ���� �� ��� ���� �����.

�� ���� �� ���� � �� ���� �����. ���� ��� ���� �� ����

, � ���� ��� ��� ���� ���� ���. ��� �� ��� ���� �

���. ��� ���� ���� �� ���� �� ���� ���� �� ������. ��

����� �� ����� ��� ��� , ��� � ��� �� ����� ���.

SQL ����� 19

Page 32: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� ���� ��� �� ���� �� �� �� �� �� ��� ������ �����. �� ��

� �� �� �� ��� ���� ���. �� �� ��� ��� �� ��� ���� ���.

v � �� �� ��� ���� ���� �� ����. ���� � �� � �� �� �

� ��� ���� �� �� � � �� �� �� ���.

v 1� �� �� ���� �� � ����. ����� � ��� 1� �� �� � ���.

v �� �� �� ������ ���� � � �� 1� ����.

v �� �� �� �� �� �� ��� �� �� ����. �� �� ��� � ����

�� ���, � ��� ��� ����.

v �� ���� �� �� ������.

v �� ���� �� �� ������.

v ��� ���� �� ��� �� �� ���� ��� ������.

�� ���� ��� �� �� �� �� �� ��� �� �� ��� � ���� ��� ��

� �� �����.

SQL� CREATE TABLE � ALTER TABLE�� ���� �� ��� ��� �����.

�� ��

498 ���� �i� DB2 ����

�� ���� SQL ����� � SQL �� �� ����� ����� �����.

CREATE TABLE

ALTER TABLE

�� ���� � � �:

CREATE TABLE� �� ALTER TABLE�� ���� �� ����� ��� � ����. �� ��

��� ����� ALTER TABLE�� ������.

����� � ���(�� ���)�� �� ���(�� ���)� ����� ��� ���� � �� �

����. �� ����� ���� �� ���� � ���.

�� ����� ���� �� �� �� �� �� �� �� ���� ��� �� �����.

�� ����� ��� � ��� �����.

v 1� �� � �

v �� �

v �� �� ����� ��� � �� �� �� ��� ��� ���� �� � �� ��

���, ����� �� ��� � ����. �� ���� ��� ���� ����.

20 IBM i: ������ SQL �����

Page 33: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� ����� ����, ���� System i Navigator, CL ��, ���� �� � �� ����

�� SQL �� �� ����� �� �� �� INSERT, DELETE � UPDATE ��� �� ���

�� ����.

�� ��

CREATE TABLE

ALTER TABLE

: �� ���� �:

�� ���� �� �� ��� �� ���� ���� �� �� ����� �����. �� ��

��� �� ��� � ��� ���� � ���.

�� SQL�� �� ���� ��� ���� CORPDATA.DEPARTMENT � CORPDATA.EMPLOYEE

���� �����.

CREATE TABLE CORPDATA.DEPARTMENT(DEPTNO CHAR(3) NOT NULL PRIMARY KEY,DEPTNAME VARCHAR(29) NOT NULL,MGRNO CHAR(6),ADMRDEPT CHAR(3) NOT NULL

CONSTRAINT REPORTS_TO_EXISTSREFERENCES CORPDATA.DEPARTMENT (DEPTNO)ON DELETE CASCADE)

CREATE TABLE CORPDATA.EMPLOYEE(EMPNO CHAR(6) NOT NULL PRIMARY KEY,FIRSTNME VARCHAR(12) NOT NULL,MIDINIT CHAR(1) NOT NULL,LASTNAME VARCHAR(15) NOT NULL,WORKDEPT CHAR(3) CONSTRAINT WORKDEPT_EXISTS

REFERENCES CORPDATA.DEPARTMENT (DEPTNO)ON DELETE SET NULL ON UPDATE RESTRICT,

PHONENO CHAR(4),HIREDATE DATE,JOB CHAR(8),EDLEVEL SMALLINT NOT NULL,SEX CHAR(1),BIRTHDATE DATE,SALARY DECIMAL(9,2),BONUS DECIMAL(9,2),COMM DECIMAL(9,2),CONSTRAINT UNIQUE_LNAME_IN_DEPT UNIQUE (WORKDEPT, LASTNAME))

� �, DEPARTMENT ����� 1� �� ��� , �� ���� ���� �� ��� �

�� �� (DEPTNO)� ����.

REPORTS_TO_EXISTS

DEPARTMENT ���� �� ���� �� � �� ���� �� �� �� �������.

ADMRDEPT� �� �� �� �� DEPTNO �� ��� ���. ��� ������� ��

� ��� � �� ���. DELETE CASCADE ��� DEPTNO �� n �� ����

����� ADMRDEPT� n �� � ���� ����.

SQL ����� 21

Page 34: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

WORKDEPT_EXISTS

EMPLOYEE ���� �� ����, �� �� � (WORKDEPT)� �� �� ����. �

�� �� WORKDEPT �� DEPTNO �� ��� ���. DELETE SET NULL ���

DEPARTMENT�� DEPTNO �� n �� ���� EMPLOYEE�� WORKDEPT� �

� n �� ��� �� ��� ����. UPDATE RESTRICT ��� EMPLOYEE� ��

DEPTNO �� ��� WORKDEPT �� �� DEPARTMENT�� DEPTNO �� ��

� � �� ����.

EMPLOYEE ���� UNIQUE_LNAME_IN_DEPT ����� ��� ���� LASTNAME� ��

� ���. �� ����� �� � �� ���, � �� � ���� ����� ��� ���� ��

� � �� ��� �����.

: ���� �

DEPARTMENT ���� DEPTNO � �� 1� �� ���� �� ���� ��� ���.

���� 1 � �� � ���� ���� �� ���� DEPARTMENT ���� ��

REPORTS_TO_EXISTS ����� EMPLOYEE ���� �� WORKDEPT_EXISTS ����� �

�����.

ALTER TABLE CORPDATA.EMPLOYEE DROP PRIMARY KEY

�� �� ����� �� ��� ����� ��� � ����.

ALTER TABLE CORPDATA.DEPARTMENTDROP CONSTRAINT UNIQUE_LNAME_IN_DEPT

�� �� �

�� ���� � � ����� �� ���� �� ��� � �� ��� �� � ���

�.

�� ����� , �� �� �� � �� �� ��� ��� �� ����. � ���

�� , � ����� ���� � �� �� ��� �� ����. ���� �����

��� �� ��� ����(�: �� � �), ����� � �� �� ����. �� �� �

�� ����� �� ��� ��� ��� �����. �� ����� , ��� ����� �

�� ����.

v �� �� �� �� �� �� ��� ���� ����.

v �� �� �� �� � �� ��� �����.

� ����� � �� ����, �� ����� ����.

v �� �� �� ��� ���� ����.

v �� � �� ��� ��� ����� ����.

����� � �� ��� ���� ��� �� ��� �����.

1. �� �(PF) ���� �(CHGPFCST) CL ��� ���� ��� �� ����� ����.

22 IBM i: ������ SQL �����

Page 35: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

2. �� ����� �(��, �� �� � �) ��� �� � ����� ���� ����

��.

3. CHGPFCST CL ��� ���� ����� �� ��� � �� ����.

� �� ���� �(DSPCPCST) CL ��� ���� ����� ��� �� ��� � ���

�.

�� ��

�� ������� � �� ��

�� ���

� �� ��� �� ����� �� �

LIKE� �� � ��

�� ���� ��� ���� ��� � ����. �, � ���� �� ��� �� ���� �

�� � ����.

�� ��� �����.

v �(� ��� �)

v ��� ��, ��, ��� � ��

v CCSID

v FIELDPROC

LIKE�� ���� �� ��� � ��� �� �� �� ��� ���.

v ���(LABEL ON)

v �(LABEL ON)

v ��� �

v ��� ��

v ID ��

v � ���

�� ��� �� �� ID � �� , � ���� � ID � ��� ��� CREATE TABLE�

� INCLUDING IDENTITY ��� ���� ���. CREATE TABLE� ��� ��� EXCLUDING

IDENTITY���. ��� �, ��� �� � � � ��� ��� �� �� ��� ��� ���

�. �� ��� �� �� SQL� ���� �� �� �(PF) �� �� � SQL� �� ��

� �����.

EMPLOYEE� �� � �� ��� EMPLOYEE2� �����.

CREATE TABLE EMPLOYEE2 LIKE EMPLOYEE

SQL ����� 23

|

Page 36: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� ��

CREATE TABLE

AS� �� � ��

SELECT�� ���� ���� ��� � ����. �� ��� ���� ����� CREATE TABLE

AS�� ������.

SELECT��� ��� � �� �� ��� CREATE TABLE AS��� ��� � ����. �� ��

�� �� ���� ���� ��� ���� � � ����.

�� ��, DEPTNO = D11 EMPLOYEE� �� ��� �� EMPLOYEE3 ���� ����

�.

CREATE TABLE EMPLOYEE3 AS(SELECT PROJNO, PROJNAME, DEPTNOFROM EMPLOYEEWHERE DEPTNO = 'D11') WITH NO DATA

�� ��� �� �� ID � �� , � ���� � ID � ��� ��� CREATE TABLE�

� INCLUDING IDENTITY ��� ���� ���. CREATE TABLE� ��� ��� EXCLUDING

IDENTITY���. ��� �, ��� �� � � � ��� ��� �� �� ��� ��� ���

�. WITH NO DATA�� ��� � ��� ���� �� ����. � ��� EMPLOYEE3�

���� ���� WITH DATA�� �����. �� ��� SQL� ���� �� �� �

(PF)�� �� �� SQL� �� �� ��� �����.

�� ��

57 ���� �SELECT�� ���� ��� ��

SELECT�� ��� ��� �� ��� �����. SELECT�� ���� �� �� ���� ��

���� ���� �� � ����.

�� ��

CREATE TABLE

���� �� � �� � ��

��� �� ���(materialized query table)� ��� �� ��� �� � , ��� �� ��� �

�� �� �� ����� ��� �� �� �� ��� ���� �� ������.

��� � ���� �� ���� ��� ��� �� ���� �� � �� ���� ����

��� ��� �� ���� �� �����. ��� �� ���� �� ��� � ����. Optimizer�

��� �� ���� ���� ��� �� � � ��� ������ �� � �� � ��� ��

����.

�� � ���� ��� TRANS� �� ��� ������ ��� �� �� �����. ����

�� � �����. �� ��� ���� ���� �� � �� �� �� ���� �� TRANS

���� �� ��� �� ���� ������.

24 IBM i: ������ SQL �����

Page 37: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

CREATE TABLE STRANSAS (SELECT YEAR AS SYEAR, MONTH AS SMONTH, DAY AS SDAY, SUM(AMOUNT) AS SSUM

FROM TRANSGROUP BY YEAR, MONTH, DAY )

DATA INITIALLY DEFERREDREFRESH DEFERREDMAINTAINED BY USER

� ��� �� ���� DATA INITIALLY DEFERRED�� ���� ��� � ���� ���� �

�� �����. REFRESH DEFERRED� TRANS� ���� STRANS�� ��� ��� ��

��. �� � ���� ���� �������, ���� ALTER, INSERT, DELETE � UPDATE��

��� � ����.

��� �� ���� � �� ��� � ���� ������� REFRESH TABLE�� ������.

�� ��� �� ���� �� ��� ��� ���� �� ��� �����. STRANS ���

� � �� �� ���� ������.

REFRESH TABLE STRANS

select�� � ���� �� � ��� �� ���� �(�� �� �� ��� ��)

�� � ����� ��� �� ���� ��� � ����. �� ��, TRANSCOUNT ����

������. �� �� � ��� TRANSCOUNT� ��� �� ���� �����.

���� ����� ��� ������.

CREATE TABLE TRANSCOUNT(ACCTID SMALLINT NOT NULL,LOCID SMALLINT,YEAR DATECNT INTEGER)

� ���� ��� �� ���� ��� �� � ����.

ALTER TABLE TRANSCOUNTADD MATERIALIZED QUERY

(SELECT ACCTID, LOCID, YEAR, COUNT(*) AS CNTFROM TRANSGROUP BY ACCTID, LOCID, YEAR )

DATA INITIALLY DEFERREDREFRESH DEFERREDMAINTAINED BY USER

�����, ��� �� ���� �� � ���� �� � ����. �� �� ��� ����.

ALTER TABLE TRANSCOUNTDROP MATERIALIZED QUERY

� ����, ��� TRANSCOUNT� (drop)�� ��� � �� ��� �� ���� � ��.

SQL ����� 25

Page 38: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� ��

10 ���� ����, � � �

���(table)� �(row) � (column)� ���� 2�� ��� ����.

��� � � ��

�� �� ��� �� ���� ��� � ����. �� ���� ����� DECLARE GLOBAL

TEMPORARY TABLE�� ������.

� �� ���� ��� ����� ��� ���� �� �� ��� � ���. �� ���� �

�� �� ��� ���� (drop)���.

� ���� ��� CREATE TABLE�� ��� ���� LIKE �� AS�� � � ����.

�� �� ��� �� �� ��� ORDERS� �����.

DECLARE GLOBAL TEMPORARY TABLE ORDERS(PARTNO SMALLINT NOT NULL,DESCR VARCHAR(24),QONHAND INT)

ON COMMIT DELETE ROWS

� ���� QTEMP�� �����. ����� ���� ���� ����� SESSION �� QTEMP�

������. �� ���� ���, � ���� ���� SELECT, INSERT, UPDATE � DELETE�

� ��� � ����. DROP TABLE�� ���� � ���� (drop)� � ����.

DROP TABLE ORDERS

�� ��

DECLARE GLOBAL TEMPORARY TABLE

� �� ���� � ��

� � ��� � �� ���� �� ����� �� ��� � � ��� �� �� ��

�� �� ��� ���� ��� �� ����.

� � ��� � ��� ��� TIMESTAMP�� ���. ���� � � ��� � ��� �

�� � ����.

���� ��� � � � ��� � � ��� � ��� � ����. �� ��, ORDERNO,

SHIPPED_TO, ORDER_DATE, STATUS � CHANGE_TS�� � �� ORDERS ���� ����

��. CHANGE_TS� � � ��� � ������.

CREATE TABLE ORDERS(ORDERNO SMALLINT,SHIPPED_TO VARCHAR(36),ORDER_DATE DATE,STATUS CHAR(1),CHANGE_TS TIMESTAMP FOR EACH ROW ON UPDATE AS ROW CHANGE TIMESTAMP NOT NULL)

26 IBM i: ������ SQL �����

Page 39: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

ORDERS ���� �� ����, �� CHANGE_TS � �� ��� ��� �� ����. ORDERS

� �� ��� ��� �� ��� ��� � ���� �� CHANGE_TS � �����.

�� � � ��� ��� (drop)� � ����.

ALTER TABLE ORDERALTER COLUMN CHANGE_TSDROP ROW CHANGE TIMESTAMP

CHANGE_TS � ���� TIMESTAMP � �� ��� ���� � � �� � �� ��� �

� ���� ���� ����.

ID � �� � ��

ID � �� ���� �� ��� ��� ���� � �� ID �� ����.

SMALLINT, INTEGER, BIGINT, DECIMAL �� NUMERIC ��� � ID � ��� � ����.

��� ��� ID � �����. ��� ��� ��� , ��� �� � ID � ��� �

����. � � ��� � ���.

���� ��� � ID � � ��� � ��� � ����. �� ��, ORDERNO, SHIPPED_TO

� ORDER_DATE�� 3�� � �� ORDERS ���� ������. ORDERNO� ID � ���

���.

CREATE TABLE ORDERS(ORDERNO SMALLINT NOT NULLGENERATED ALWAYS AS IDENTITY(START WITH 500INCREMENT BY 1CYCLE),SHIPPED_TO VARCHAR (36) ,ORDER_DATE DATE)

� � �� � 500� ���� ��� � �� ��� ��� 1� ����, ��� ���� ���

��. � ���� ID � ��� ��� ��� �����. ��� ��� SMALLINT� ���� �

�� ORDERNO� �� � �� � �� 500 - 32,767���. � �� 32,767� ���� �� 500

�� ������. � ��� 500� �� ID � � �� ����, � � ��� �����. �

� �� ��� 501� ���� �����. ID � �� � �� ��, ���� ���� ���

��� 500� �� �����.

�� � � �� , � INTEGER �� BIGINT ��� ��� ��� ������. ID �� �

���, INCREMENT ��� �� �� ������. �� MINVALUE � MAXVALUE� ���� �

� �� ��� ��� � ����.

ALTER TABLE�� ���� � ID � ��� ��� � ����. �� ��, ID � � ��� �

���� ���.

ALTER TABLE ORDERALTER COLUMN ORDERNORESTART WITH 1

SQL ����� 27

Page 40: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� �� ID ��� (drop)� � ����.

ALTER TABLE ORDERALTER COLUMN ORDERNODROP IDENTITY

ORDERNO � SMALLINT � �� ��� ID ��� (drop)���. ���� � � �� � �

� �� ��� ����.

�� ��

30 ���� �ID � ���� ��

ID � ���� �� ���� �����, �� � ����.

110 ���� �ID � � ���

�� ID � �� ����� ���� �� ����� ��� � ����.

115 ���� �ID ���

ID �� �� ��� ����� ���� � �� ��� � � ����.

ROWID ��

ROWID� ���� �� ���� � � �� ��� �� � �� �����. ROWID� ID �

�����. �� �� � ��� ��� ��� ��� �����.

ID ��� ��� ���� ����� �� ���� ������.

CREATE TABLE ORDERS(ORDERNO ROWIDGENERATED ALWAYS,SHIPPED_TO VARCHAR (36) ,ORDER_DATE DATE)

��� �� � ��

� � � �� ���� �� ���� ID � �����. �� ���� ���� � ���

����. ���� ���� ��� �� �� � ����.

���� ���� � ���� � ���� � ����. �� ���� � ��� �� ����

����.

CREATE SEQUENCE�� ���� ���� ������. ID ��� ��� ��� , ORDER_SEQ

���� ������.

CREATE SEQUENCE ORDER_SEQSTART WITH 500INCREMENT BY 1MAXVALUE 1000CYCLECACHE 24

� ���� �� � 500� ���� ��� �� � 1� ����, ��� ���� �����.

� ���� ��� ��� 1000���. � �� 1000� ���� �� 500�� ������.

28 IBM i: ������ SQL �����

Page 41: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

� ���� �� ��� ���� ���� � �� ��� � ����. �� ��, ORDERNO �

CUSTNO � �� ORDERS ���� ORDER_SEQ ���� �� �� ������.

��, ORDERS ���� ������.

CREATE TABLE ORDERS(ORDERNO SMALLINT NOT NULL,CUSTNO SMALLINT);

�� ��, ��� �� ������.

INSERT INTO ORDERS (ORDERNO, CUSTNO)VALUES (NEXT VALUE FOR ORDER_SEQ, 12)

�� ���� ���� � �� �����.

SELECT *FROM ORDERS

2. ORDERS ����� SELECT� ��

ORDERNO CUSTNO

500 12

� ����� ORDER ���� �� �� ORDERNO � �����. INSERT�� �� ������.

�� ��, SELECT�� ������.

3. ORDERS ����� SELECT� ��

ORDERNO CUSTNO

500 12

501 12

�� PREVIOUS VALUE ��� ���� ORDER ���� �� �� ��� � ����. �� �

��� NEXT VALUE � PREVIOUS VALUE� ��� � ����.

v ���� DISTINCT ��, GROUP BY�, ORDER BY�, UNION ��, INTERSECT �� �

� EXCEPT ��� �� �� ��� SELECT� �� SELECT INTO�� select� ���

v INSERT�� VALUES� ���

v INSERT�� �� �� select� ���

v SET��� ��� �� �� select�� NEXT VALUE� ��� � ��� ����� �� ��

UPDATE�� SET� ���

ALTER SEQUENCE�� ���� ���� �� � ����. ��� �� ���� ���� �� �

����.

v ��� ���

v �� ��� � �� �� �

v �� �� �� � �� ��

SQL ����� 29

Page 42: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

v � ��� �� � �

v ���� �� � ��� ��� ���� �� �

v ��� ��� �� ���� ���� ��� �� �

�� ��, ORDER ���� � ��� 1�� 5� �����.

ALTER SEQUENCE ORDER_SEQINCREMENT BY 5

� �� �� � INSERT�� �� ��� � SELECT�� ������. �� ���� �� �

���.

4. ORDERS ����� SELECT� ��

ORDERNO CUSTNO

500 12

501 12

528 12

���� ���� �� �� 528�� ������. �� ��� � ��� ���� �� ��� ����.

�� � �� ��� ���� ������. ��, ���� ��� ��� � � � 24� ����

��. ���� � �� �� 24� �� ����. � ��� ���� ������. ALTER

SEQUENCE�� ����, ���� � �� (drop)� �� ��� �� ��� �� �����.

� , � �� 24� �� �� 5� �����. �� CREATE SEQUENCE�� CACHE�� �

��, ���� ���� ��� � � 20� ����. � ���� � , �� ��� �� �

� 25���.

�� ��

12 ���� �����

���(sequence)� �� ��� ��� �� �� ��� ���� ��� � �������.

ID � � ���� �

ID � ���� �� ���� �����, �� � ����.

��� �� ���� �� �� �� � ������.

ID � ��� ��� ����.

v ID � ���� ��� � ���� �� ����� � ���� ���� � ��� � ���

�. ���� ��� �� ID ��� �� � ����.

v ID � ���� � ���� �� ����.

v ID � GENERATED ALWAYS� �� , ���� �� �� ������ ���� ���

�. ������ ��� ��� �� � ��� �� ��� � ���.

v IDENTITY_VAL_LOCAL �� ���� ID � �� � �� � � ����.

30 IBM i: ������ SQL �����

|

|

Page 43: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

���� ��� ��� ����.

v ���� ���� ���� �� *DTAARA ��� ��� �������.

v ���� �� SQL���� ��� � �� � �� ����.

v ����� �� �� �� ���� � �� �� �� �� ��� ��� �����.

PREVIOUS VALUE ��� �� ��� �� ���� �� ���� �� �� � �� �

����. NEXT VALUE ��� �� ���� �� �� �� �����. � ��� ���� �

�� ��� ��� � �� SQL� ��� �� �� ��� � ����.

�� ��� ID � ���� �� ����, ������ �� ������� ���� ��

���� �� ID �� ���� ��� � ���� � ��� � � ����.

�� ��

27 ���� �ID �� � ��

ID � �� ���� �� ��� ��� ���� � �� ID �� ����.

�� ���� ��

� ����� CREATE TABLE � ALTER TABLE�� FIELDPROC�� �� ���� ����.

� ����� � � �� ���� ��� �� �� ����.

�� ���� � �� ��� � � ����� � �� �� ���� �� ����� � ��

��( ��)� � ����. �� �� �����. �� �� �� � � ����� � �( ��

�)� �� ���� �� �� ��� �� ����� ���. � ����� ���� � � ��

� � �� ��� ����.

�� �� � ����� ���� ��� � ��� ���. �� �� � ��� ������ �

��� �� �� �����. � ��� � ����� ���. � ����� ���� � ��

�� ���� DB2� ����.

1. CREATE TABLE �� ALTER TABLE� �� � �� ���� ��� QSYS2.SYSCOLUMNS

� ����. � �� � ��� �� ��� ��� ���.

2. �� �� �� ������� �� �� ���� ��� QSYS2.SYSFIELDS� ����. �

�� � �� �� ��� � ��� ���.

��: � ��� �� � �� �� ��� ��� ���. �� ��, �� ‘ALABAMA’�

‘01’� ���� ‘01’� ‘ALABAMA’� ����� ���. � ��� ��� ��� � � �

�� �� � ����. 41 ���� �� ���� ��� �� ���� ������.

�� ����� �� �� ��

� ����� ���� ����� �� � DB2� �� �� �� �� � ��� ��� ����

���� �����. �� ��� � ��� ���.

SQL ����� 31

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

Page 44: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� �� ��� ��� ROWID �� DATALINK� ��� �� ��� SQL ��� ��� ���

��. �� � ����� IDENTITY �� ROW CHANGE TIMESTAMP� �� � �� ��

�� � ��� � ���.

� ����� ����� DDS �� �� �(PF)� � �� �� ��� ��� LOB ��

�� DataLink� � � ���. � ����� ����� SQL ���� � �� �� ��

� ��� �� �� ���� �� �� ��� �� 0��� ���.

� ����� ��� �� CURRENT DATE, CURRENT TIME, CURRENT TIMESTAMP �� USER

� ��� � ���.

��� �� ��� ���� �� �� ��� �� ��� ��� �� ��� ���� SQL ���

�� �� � ����� �� � ����. DB2� � ����� ���� �� �� ���

�� �����.

�� ���� ��

� �� � ����� �� �����, CREATE TABLE �� ALTER TABLE�� FIELDPROC

�� ��� �� ������ ����� ��� ���� ������.

���� ROWID �� DATALINK �� IDENTITY �� ROW CHANGE TIMESTAMP�� �

�� �� �� ��� � ����� ��� � ���. �� �� ����� �� � ���

� ��� � ����.

�� ������ �� � ��� ���� ��� ���� �� �� ���(��� ��)���.

��� ���� DB2�� � ���� ��� � ���(FPPVL)� �� ��� ��� �����.

FPPVL� � �� �� � � ����� �����. �� ����� FPPVL� ����� ���

� ��� � ����. FPPVL� �� ��� �� FPPVL�� ���. � ��� �� ��

DB2 QSYS2.SYSFIELDS ���� ���� �����. �� FPPVL� � �� �� � ���

� �� � ����� ��� ��� � ����� �� �����.

�� ���� ���� ��

� �� �� � ����� ��� ��� �����.

v � ��� , ���� �� ���� CREATE TABLE �� ALTER TABLE�� ��� �. �

�� � ����� ��� �����.

– � ��� �� � ��� ���� ��� �����.

– ��� ���� � � ��� ����.

– � � �� �����.

v � ��� �� ��� �. ��� �� ��� �� � ����.

– SQL INSERT�, SQL MERGE� �� �� �� ���� � �����.

– SQL UPDATE�, SQL MERGE� �� �� �� ���� ����.

32 IBM i: ������ SQL �����

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

Page 45: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

– ���� ���� � �� � � ����� �� , � ����� ���� �� ��

�� ��� � ����. ��� SQL� ALTER TABLE �� CREATE TABLE(LIKE ��

as-result-table�� ��)� CL �� CPYF �� RGZPFM� ����.

– � ������ � ����. �� ������, ��� ��, �� �� �� � ���

�� ��� ���� �� Optimizer�� QAQQINI �� FIELDPROC_ENCODED_COMPARISON

� �����.

– DEFAULT �� �� CREATE �� ALTER TABLE ���, � � ����� �� .

after �� read ���� �� � ����� �� ��� ��� �����. before ����

�� � ����� before ��� ��� �����.

v � ���� , �� �� �� �� ��� � ���� �. �� �� ��� �� � ���

�.

– SQL SELECT �� FETCH��� �� �� ���� ������.

– ���� ���� � �� � � ����� �� , � ����� ���� ���� �

� ���� ���� � ����. ��� SQL� ALTER TABLE �� CREATE TABLE(LIKE �

� as-result-table�� ��)� CL �� CPYF �� RGZPFM� ����.

– � ������ � ����. �� ������, ��� �� �� ��� ����� ��

� ���� �� Optimizer�� QAQQINI �� FIELDPROC_ENCODED_COMPARISON� ��

���.

��� ���� �� � ����� ���� ����. �� ���� DELETE ���� � �

WHERE�� � DELETE ���� ���� ����. � ����� � ���� �� �����.

����: � ������ ��� ���� ����. DB2� �� ��� ��� �� �� � �

�� ���� ��� � ���� ���� �� �� ��(�: EBCDIC �� 2��� ��)� ����.

� �� ���� � ����� �� � � �� �� ��� ����� �� ��� �

��� ����. ��� ����� ��� �� ��� ��� � � ���� �� �� �� ���

�� ���� �� �� �� ��� �� ����. �� ��� ��� �� � ����. �� �

�, ��� �� � ���� �� ��� ��� �� � ����. ��� � ����� �� ��

��� ���� ����.

�� ���� ��� �� ���� ���

� ���� ��� ���� ��� � ����� �����.

��� ���� ��� ��� �� � ����� �� ��� �� � ��� �����. DB2�

� ����� ���� �� ���� �� ���� �����. ��� ���� ��� � ��

��� �����.

� ������ ���� ��� ��� �, � ���� �� �� ��� � ���� �

�� ���� �� ����� ���� ���. ���� �� ��� ����� ��� ����

SQL ����� 33

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

Page 46: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

��� ��� ��� �� ���� � �� ��� � ����. � � ����� ����

�� �� ���� ��� ������� �� �� ���� �� � ����.

���� 1

��� �� ��� small(2���) ��. � ���� �� �����. ���� �� ���

����.

v 0 – � ��

v 4 – � ���

v 8 – � ��

���� 2

� ���� ��� � ���(FPPVL)� ���� ��.

v � � 8� , � ���� �/�� ������.

v � � 0 � 4� , � ����� � � 8 ��� ��� ���. � ����

�� �����.

���� 3

� ��(CVD)� �� �� ��� ��� ��. CREATE TABLE �� ALTER TABLE

�� �� �����. � ���� �� �����.

���� 4

��� ���. ��� ��� � �� �����.

v � � 8� ��. � ���� �� �����.

v � � 0� ��� ���. � ���� �� �����.

v � � 4� ��� ���� � ��. � ���� �� �����.

���� 5

� � ��(FVD)� �� �� �� ��� ��.

v � � 8� �� ��� ��� �� ��. � ���� �� �����.

v � � 0 �� 4� � 8 ��� ��� �� ��� ��� �� ��. � �

��� �� �����.

���� 6

� � ��(FVD)� �� �� �� ���. ��� ��� � �� �����.

v � � 8� ��. � ���� �� �����.

v � � 0� �� ���� � ��. � ���� �� �����.

v � � 4� ���� �� ��. � ���� �� �����.

���� 7

SQLSTATE(character(5)). � ���� �/�� ������.

34 IBM i: ������ SQL �����

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

Page 47: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

� ���� � ����� ���� �� DB2�� ‘00000’�� ����. � �����

�� � ����. �� SQLSTATE� � ����� �� ��� ���, ��� �� ����

��� �� ��� ��� � ��� � ����.

v � ����� ��� ���� SQLSTATE� ‘38xxx’� ��� ���. ��� xxx�

� �� ��� ��� �� � ����. � � ��� DB2 � � � �� �����

�.

� � ����� �� ���� ����.

���� 8

� � ��� �(varchar(1000)). � ���� �/�� ������.

� �� � ����� ���� �� DB2�� � ����� ����. � �����

SQLSTATE �� ��� �� � � ����� � � ���� ���� �� ��� � ��

VARCHAR(1000) ����. SQLSTATE ���� � ����� �� ��� ��� � �

���� DB2�� �����. � � ���� � CCSID� �� ��� �����.

QSYSINC/H� include SQLFP� �� ���� ����.

�� ���� ���� ���(FPPVL):

� ���� ��� � ���� CREATE TABLE �� ALTER TABLE�� �� ��� ����

� �� � � ����� �����.

�� � ����� FPPVL� �� ���� � ����. ��� QSYS2.SYSFIELDS� ��� �

�� � � ��� � �� FPPVL� � ����� ���� ���� FPPVL���.

�� � FPPVL� ����.

5. sqlfpFieldProcedureParameterList_t

�� ��� ��� �� ��

sqlfpOptParmValueListLength 0 4��� �� ��� ��(���)

sqlfpNumberOfOptionalParms 4 4��� �� �� �� � �� �. FIELDPROC�� �

� ��� ��� ����. ���� ��

� �� 0���.

sqlfpParmList 8 sqlfpOptionalParameterValueDescriptor_t �� sqlfpOptionalParameterValueDescriptor_t ��

� sqlfpNumberOfOptionalParms ��� �

� ���.

6. sqlfpOptionalParameterValueDescriptor_t

�� ��� ��� �� ��

sqlfpOptDescLength 0 4��� �� ��� ��(���)

sqlfpParmDesc 4 sqlfpParameterDescription_t �� ��� �

reserved2 38 12�� ��(character(12)) ���� ��

SQL ����� 35

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

||

||||

||||

||||||

|||||||

||

||||

||||

||||

||||

Page 48: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

6. sqlfpOptionalParameterValueDescriptor_t (��)

�� ��� ��� �� ��

sqlfpParmData 40 � ��� ��� �.

v �� �� �� ��� �� 2���

� ��� ����.

v �� LOB �� XML �� �� 4�

��� ��� ����.

v �� �� ���� �� �� ��

��.

v �� �� � �� �� *ISO ���

��.

�� ����� �� ���� ��:

��� � ��� ��� ��� �� �� ��� ����.

��� � ��� ��� �� ���� � ����� � �����.

v � ���� � ���� ��� � ���(FPPVL)� �� ��� ��� ����. � �

��� � �� �� FPPVL �� ��� ����.

v � �� � � ��� �, ���() �� ��(�) ��� � ��(CVD)� � �

��(FVD)� ����.

� ��(CVD)�� �� �� ����. � �� � CVD� ��� �� ����. �

��� �� � ����� ��� ��� �� ����. � �� �� CREATE TABLE ��

ALTER TABLE�� �� �� � ����.

� � ��(FVD)�� � �� �� ����. � �� � FVD� � ������ ���

�� �� ����. � ��� �� ���� �� ����. � �� �� �� �� ��

FVD� �� ���.

�� � ��� � ��� ����.

7. sqlfpParameterDescription_t

�� ��� ��� �� ��

sqlfpSqlType 0 2��� �� � ���� SQL ��� �����. ���

� �� SQL ���� �� D� ������.

sqlfpByteLength 2 ��� 4��� �� � ���� ��(���)���. �� ��

���� ���� ��� � ����

�.

sqlfpLength 6 ��� 4��� �� � ���� ��(��)���. �� �� ��

� ��� �� sqlfpLength �

sqlfpByteLength� �� ����.

sqlfpPrecision 10 2��� �� ���� �� �� ���(��� � ���

�� ��, , 2�) ������.

36 IBM i: ������ SQL �����

|

||||

||||

|

|

|

|

|

|

|

||

|

|

|

|

|

|

|

|

|

|

|

|

|

|

||

||||

|||||

||||||

||||||

|||||

Page 49: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

7. sqlfpParameterDescription_t (��)

�� ��� ��� �� ��

sqlfpScale 12 2��� �� ��� �� �� ���(��� � ���

�� ��, , 2�) �����. ��

�� �� ��� ��� 0���. �

�� ��� �� ��� 6���.

sqlfpCcsid 14 ��� 2��� �� �� �� ��� �� XML � ��

�� CCSID���.

sqlfpAllocatedLength 16 ��� 2��� �� CREATE TABLE �� ALTER TABLE��

� � �� �� � �����.

reserved1 18 14�� ��(character(14)) ���.

�� ��(�� �� 8):

� �� ��� �� �� � �� ��� ��� ����.

v ���� 1

�� - ��� �� ��� small(2���) ��(8 - � ��)

v ���� 2

�/�� - � ���� ��� � ���(FPPVL)� ���� ��. � ��� �� �� �� �

����. � ��� � ��� 8������. � ��� � �� ��� 32K���.

v ���� 3

�� - ��� ��� ��� �� �� sqlfpParameterDescription_t.

v ���� 4

���� ����.

v ���� 5

�� - �� ��� ��� �� �� sqlfpParameterDescription_t. ��

sqlfpParameterDescription_t� �� CCSID, ��, ��� � �� � �� �� ����

���.

v ���� 6

���� ����.

v ���� 7

�/�� - SQLSTATE(character(5))

v ���� 8

�/�� - � � ��� �(varchar(1000))

� ������ �� ��� SQLCODE -681(SQLSTATE ‘23507’)� ����. � �� SQL �

� �� DB2_RETURNED_SQLCODE � RETURNED_SQLSTATE �� � ��� SQL �� �

(SQLCA) ���� ����. ��� 7 � 8� ��� SQLCA(� SQLERRMT� ��)� SQL ��

� �� � �� MESSAGE_TEXT� �� ���. �� � �� ��� � ����� �� �

����.

SQL ����� 37

|

||||

|||||||

|||||

|||||

|||||

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

Page 50: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

��� 5(sqlfpParameterDescription_t)� ���� ���� ��� ��� 2� ��� ���� ���

SQLCODE -685(SQLSTATE ‘58002’)� ����. ������ ���� � ����� ��� �

� SQLCODE -682(SQLSTATE ‘57010’)� �����.

FPPVL� � ����� ��� ���� �� FPPVL� ��� � ����. �� ����� ��

��.

v sqlfpOptParmValueListLength�� �� FPPVL� �� ��� ���� ��� ���. ��� ��

�� ���� �� sqlfpOptParmValueListLength� 8� ��� ���.

�� FPPVL� ���� ��� QSYS2.SYSFIELDS� ����, � �� � � ��� � �

����� �����. �� FPPVL�� � ���� ��� ���� ��� ���� ��� �

��� � ��� ��� ��� ��� ���.

� � ��� ��� ��� �� � ����.

�� ��� ��� ��, ��� �� XML �� CCSID �� ��� ��� ��� CCSID�

��� ���.

� �� �� ��� �� �� �� ��� �� � ��� ��� ���� ��� ���

����.

�� ���(�� �� 0):

� �� ��� �� �� � �� ��� ��� ����.

v ���� 1

�� - ��� �� ��� small(2���) ��(0 - � ��)

v ���� 2

�� - �� � ���� ��� � ���(FPPVL)� ���� ��.

v ���� 3

�� - ��� ��� ��� �� sqlfpParameterDescription_t� �� ��� ��

v ���� 4

�� – ��� ���

�� �� �� ��� �� 2���� ��� ����. �� LOB �� XML ��

�� 4���� ��� ����. �� �� ���� �� �� ����. �� �� �

�� �� *ISO �����.

v ���� 5

�� - �� ��� ��� �� sqlfpParameterDescription_t� �� ��� ��

v ���� 6

�� – �� ���� � ��

38 IBM i: ������ SQL �����

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

Page 51: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� �� �� �� ��� �� 2���� ��� ��� ���. �� �� LOB

�� XML �� �� 4���� ��� ��� ���. �� �� ���� �� ��

����. �� �� � �� �� *ISO ����� ���.

v ���� 7

�/�� - SQLSTATE(character(5))

v ���� 8

�/�� - � � ��� �(varchar(1000))

� ������ �� ��� SQLCODE -681(SQLSTATE ‘23507’)� ����. � �� SQL �

� �� DB2_RETURNED_SQLCODE � RETURNED_SQLSTATE �� � ��� SQL �� �

(SQLCA) ���� ����. ��� 7 � 8� ��� SQLCA(� SQLERRMT� ��)� SQL ��

� �� � �� MESSAGE_TEXT� �� ���. ������ ���� � ����� ���

� � SQLCODE -682(SQLSTATE ‘57010’)� �����.

�� ���(�� �� 4):

� ��� ��� �� �� � �� ��� ��� ����.

v ���� 1

�� - ��� �� ��� small(2���) ��(4 - � ���)

v ���� 2

�� - �� � ���� ��� � ���(FPPVL)� ���� ��.

v ���� 3

�� - ��� ��� ��� �� sqlfpParameterDescription_t� �� ��� ��

v ���� 4

�� – ��� ���� � ��

��� �� �� �� ��� �� 2���� ��� ��� ���. ��� �� LOB

�� XML �� �� 4���� ��� ��� ���. �� �� ���� �� ��

����. �� �� � �� �� *ISO ����� ���.

v ���� 5

�� - �� ��� ��� �� sqlfpParameterDescription_t� �� ��� ��

v ���� 6

�� - �� ���.

�� �� �� ��� �� 2���� ��� ����. �� LOB �� XML ��

�� 4���� ��� ����. �� �� ���� �� �� ����. �� �� �

�� �� *ISO �����.

v ���� 7

�/�� - SQLSTATE(character(5))

SQL ����� 39

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

Page 52: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

v ���� 8

�/�� - � � ��� �(varchar(1000))

� ������ �� ��� SQLCODE -681(SQLSTATE ‘23507’)� ����. � �� SQL �

� �� DB2_RETURNED_SQLCODE � RETURNED_SQLSTATE �� � ��� SQL �� �

(SQLCA) ���� ����. ��� 7 � 8� ��� SQLCA(� SQLERRMT� ��)� SQL ��

� �� � �� MESSAGE_TEXT� �� ���. ������ ���� � ����� ���

� � SQLCODE -682(SQLSTATE ‘57010’)� �����.

� �� ���� ����:

C1� FP1 � ����� �����. FP1 � ����� � ����� ���� �� � ��

� �� ���� ��� ���� �����.

ALTER TABLE TESTTAB ALTER C1 CHAR(10) FIELDPROC FP1(3)

#include "string.h"#include <SQLFP>void reverse(char *in, char *out, long length);main(int argc, void *argv[]){short *funccode = argv[1];sqlfpFieldProcedureParameterList_T *optionalParms = argv[2];char *sqlstate = argv[7];struct sqlfpMessageText_t *msgtext = argv[8];int bytesToProcess;sqlfpOptionalParameterValueDescriptor_T *optionalParmPtr;

if (optionalParms->sqlfpNumberOfOptionalParms != 1){

memcpy(sqlstate,"38001",5);return;

}optionalParmPtr = (void *)&(optionalParms->sqlfpParmList);bytesToProcess = *((int *)&optionalParmPtr->sqlfpParmData);if (*funccode == 8) /* create time */{

struct sqlfpParameterDescription_t *inDataType = argv[3];struct sqlfpParameterDescription_t *outDataType = argv[5];if (inDataType->sqlfpSqlType !=452 ||

inDataType->sqlfpSqlType !=453 ) /* only support fixed length char */{

memcpy(sqlstate,"38002",5);return;

}/* do something here to determine the result data type *//* ..... *//* in this example input and output types are exactly the same *//* so just copy */memcpy(outDataType, inDataType, sizeof(sqlfpParameterDescription_T));

}else if (*funccode == 0) /* encode */{

char *decodedData = argv[4];char *encodedData = argv[6];

40 IBM i: ������ SQL �����

|

|

|

|

|

|

|

|

|

|

|||||||||||||||||||||||||||||||||||||||||

Page 53: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

reverse(decodedData, encodedData, bytesToProcess);}else if (*funccode == 4) /* decode */{char *decodedData = argv[4];char *encodedData = argv[6];

reverse(encodedData, decodedData, bytesToProcess);}else /* unsupported option -- error */

memcpy(sqlstate, "38003",5);}

void reverse(char *in, char *out, long length){

int i;for (i=0;i<length; ++i) {out[length - (i+1)] = in[i];

}}

�� ���� ��� �� ���� ��

� ����� ��� � �� ��� ��� ���.

v ILE *PGM ������ ���. *SRVPGM, OPM *PGM � JAVA ����� ���� ����.

v � ����� ���� ��� � � ���� *PGM ����� �� ��� � ���. � ��

��� ��� �� �� �� ���� ����.

– ��� ���� ��� ��� �� ����� � ���� ����� �����. � ����,

����� �� ���� ��� �� ����� ��� ��� ����.

– USRPRF(*OWNER) � *EXCLUDE �� ���� ����� �����. � ���� ����

� �� ��� USER(*PUBLIC)� ���� ����. �� ���� � ���� ����� �

��� ���� ��� ����.

v � ������� SQL� ���� ����.

v � ����� ����� ���. SQE� , �� � QAQQINI

FIELDPROC_ENCODED_COMPARISON� �� ����.

v ����� ���� ���� �� � ����� ���� ����.

v � ����� ���� ���.

v ��(Fenced) �� ���� �� � � �� ��� � ��� ���.

v ACTGRP(*CALLER)� ����� �����. ����� ��� �� ���� �����.

v � ���� ����� ��� ��� ��� �����. � ���� ����� �� ��� �

(native) ������ ��� �� �� �����.

v �� �(PF)� ������ ����� �����.

SQL ����� 41

|||||||||||||||||||||

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

Page 54: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

v � ���� ������ ��� ���� ���� , � ���� ����� SQLSTATE �

� � ��� ���� ��� ���. SQLSTATE ���� ��� ���� ��� ��

������� � ����� ���� �� ��� �����. �� � ��� ����

��� � ��� ��� � ����.

��: � ����� ����� �� ��� ��� ���� �� � �����. �� �

���� ����� ����� ″��� ��″� ����� � ��� �� �� ����� ���

��� � ����. �� ��� ���� �� � �� ��� �� ���� ���� �� ���

�. ���� ��� ���� ���� ���� � ���� ����� ��� � �� ���

��� �� ���.

���, ��� ��� ��� �� ��� �� � �� �� ������. !� ��� �� �� �

�� �, � �� ! ��� ��� ��� ���� ����. ��� ���, �� ��� ��� �

���� �� ��� ��� ���.

�� ����:

� � CRTPF, CRTLF, CHGPF �� CHGLF ��� RECOVER ���� �� IPL � ��� �

����. � ����� �� � �� �� � �� ��� ���� ����.

� ����� �� � �� ��� �� � �� ���� ��� � �� �� �

����� �� � ���� �� � ������ PASE(QSH) � JAVA� ���� ��� ��

���. PASE �� JAVA� ���� �� �� IPL �� � � ���� � �� � ��

� ����� � � RECOVER(*NO)� �� �� �����.

��� ����:

� ����� � ����� ��� ��� �� � �� �����. �� � ����� �

��� ��� ��� ���� � ��� ��(����� ���� ��)�� ����� ���� �

� � ����.

� ����� �� � �� �����, ���� ��� �� �� �� �����. �� �

� ���� ��� � ���� �� �� ���� ����.

v � ����� ��� ��� � �� ���� ���� �� ��� ���� ����. � ���

� ��� � ���� ����� �� ���� �� ���� ���� �����.

v � ����� 2� ����� ��� ���� ��� ��� � ���.

v � ���� ����� �� �� ���� ����� � ���� �� ��(ACTGRP ���)

�� ���� ���. *CALLER� ���� ����� ��� �� ���� �����.

LABEL ON�� �� � �� ��

�� ��� �� ����(�: ��� �� � )� ����� ��� �� �� �����.

LABEL ON�� ���� � �� �� �� � ���� ��� � ����.

42 IBM i: ������ SQL �����

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

Page 55: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

� ���� SQL ����� LABEL �� � � ����.

LABEL ON�� ��� ����.

LABEL ONTABLE CORPDATA.DEPARTMENT IS 'Department Structure Table'

LABEL ONCOLUMN CORPDATA.DEPARTMENT.ADMRDEPT IS 'Reports to Dept.'

� ���� ���� DEPARTMENT ���� ��� �� Department Structure Table� ��

ADMRDEPT � Reports to Dept �� ����. ���� �� � ���� 50���� �� �

�� �� 60���(�� )� �� � ���. ��� �� �� LABEL ON�� ��

���.

� LABEL ON�� � 1� � 2� �����.

*...+....1....+....2....+....3....+....4....+....5....+....6..*LABEL ON COLUMN CORPDATA.EMPLOYEE.EMPNO IS

'Employee Number'

� LABEL ON�� SALARY � �� ��� �� �����.

*...+....1....+....2....+....3....+....4....+....5....+....6..*LABEL ON COLUMN CORPDATA.EMPLOYEE.SALARY IS

'Yearly Salary (in dollars)'

� LABEL ON�� SALARY� �� �� �����.

*...+....1....+....2....+....3....+....4....+....5....+....6..*LABEL ON COLUMN CORPDATA.EMPLOYEE.SALARY IS ''

� LABEL ON�� ��� �� DBCS �� �����.

*...+....1....+....2....+....3....+....4....+....5....+....6..*LABEL ON COLUMN CORPDATA.EMPLOYEE.SALARY IS

'<AABBCCDD> <EEFFGG>'

� LABEL ON�� EDLEVEL � ���� �����.

*...+....1....+....2....+....3....+....4....+....5....+....6..*LABEL ON COLUMN CORPDATA.EMPLOYEE.EDLEVEL TEXT IS

'Number of years of formal education'

�� ��

LABEL

COMMENT ON� �� SQL ���� �

����� �� �� SQL ����� ��� �, COMMENT ON�� ���� �� ��� �� ���

� ��� ��� � ����.

��� ����� �, ����� ���� ���, �� ��� ��� ���� �� �� � ���

�. �� ����� �� � � �� ��� ��� �� �� ����. ��� �� �� ��

����� ��� ���� ��� �� � �����. �� , ��� ���� �� ���

SQL ����� 43

Page 56: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� �� ��� �����. ��, ��� 2000�� �� � �� �� � ��� 500��

��. ����� �� ��� �� �� ��� � ���� �����.

COMMENT ON �� ��� ��� ����.

COMMENT ON TABLE CORPDATA.EMPLOYEE IS'Employee table. Each row in this table representsone employee of the company.'

COMMENT ON� �� � ��

���� �� COMMENT ON�� ���� ��� SYSTABLES� LONG_COMMENT � ����

�. �� ����� ��� �� ���� ���� LONG_COMMENT � �����. �� ��� �

� ���� COMMENT ON��� ��� ��� �����.

SELECT LONG_COMMENTFROM CORPDATA.SYSTABLESWHERE NAME = 'EMPLOYEE'

�� ��

COMMENT

� �� ��

��, � ��(�: � �� �� ��� �) �, � (drop), ���� �� �� ���

� ��� ���� ��� ��� ����.

��� ��� ���� SQL ALTER TABLE�� ������.

��� ALTER TABLE�� ���� � ��, � �� (drop)� ����� �� �� ��� �

����. �� � � ADD COLUMN, ALTER COLUMN � DROP COLUMN��� � �� �

�� � ����. �, � ��� � �� ALTER TABLE��� � � �� � ���.

�� ��

ALTER TABLE

� �

� � ���� ��� � � �� � �� ��� ��� �����. NOT NULL� ��

��� �� ���� ���.

SQL ALTER TABLE�� ADD COLUMN�� ���� ���� � ��� � ����.

� ���� � 8000�� � ��� � ����. � ��� � ��� 32766� ��� ���,

VARCHAR �� VARGRAPHIC � �� �� 32740� �� � ���. LOB � ���

�� � �� ��� ��� � ��� 15,728,640� ��� ����.

44 IBM i: ������ SQL �����

Page 57: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� ��

ALTER TABLE

� ��

ALTER TABLE�� ALTER COLUMN�� ���� ����� ��� �� � ����.

� � ��� ��� �� � �� ��� � ��� �� ���� ���. ��, ��� �� 2�

� � ���� �� �� �� LOB�, �� �� �� LOB�� � ��� �� �� � ����.

� � ��� ��� ���� ��� ���� �� �� ��� �����. � �� ��� ���

���� ��� ���� � ���� ��� � ����. � � �� ��� � � �� ���

���.

��� ���� �� � ��� ����� ���� DROP NOT NULL�� ������. ��� �

��� � ��� ��� � �� ��� SET NOT NULL�� ������. � � �� � �

� ���� ALTER TABLE� ���� � SQLCODE -190� ��� ����.

�� ��

��� ��� ��� �� ���

� � ��� ��� �� � �� ��� � ��� �� ���� ���.

�� ��

ALTER TABLE

�� �� �� � ��

� � ��� ��� �� � �� ��� � ��� �� ���� ���.

8. �� ��� ��

�� ��� �� � ��� ��

�� ��

�� Bigint, Integer, Smallint

�� Decfloat

�� ��

�� ��

�� Bigint, Integer, Smallint

�� Decfloat

�� ��

Bigint, Integer, Smallint ��

Bigint, Integer, Smallint ��

Bigint, Integer, Smallint Decfloat

Bigint, Integer, Smallint ��

�� ��

�� ��

�� Bigint, Integer, Smallint

SQL ����� 45

Page 58: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

8. �� ��� �� (��)

�� ��� �� � ��� ��

�� Decfloat

�� DBCS-open

�� UCS-2 �� UTF-16 ���

DBCS-open ��

DBCS-open UCS-2 �� UTF-16 ���

DBCS-either ��

DBCS-either DBCS-open

DBCS-either UCS-2 �� UTF-16 ���

DBCS �� DBCS-open

DBCS �� DBCS ���

DBCS �� UCS-2 �� UTF-16 ���

DBCS ��� UCS-2 �� UTF-16 ���

UCS-2 �� UTF-16 ��� ��

UCS-2 �� UTF-16 ��� DBCS-open

UCS-2 �� UTF-16 ��� DBCS ���

� �� �� ��

�� �� � ��

� � �� � ���� ���� ��� ����. �� �� ��� ��� � �����. �

� ��, ��� ��� ��� �� ���� �� ����.

CREATE TABLE EX1 (COL1 CHAR(10) DEFAULT 'COL1',COL2 VARCHAR(20) ALLOCATE(10) CCSID 937,COL3 VARGRAPHIC(20) ALLOCATE(10)

NOT NULL WITH DEFAULT)

�� ALTER TABLE�� ��� �, COL2� �� � �� 10� CCSID 937� ����, COL3� �

�� 10� �����.

ALTER TABLE EX1 ALTER COLUMN COL2 SET DATA TYPE VARCHAR(30)ALTER COLUMN COL3 DROP NOT NULL

�� ��

45 ���� � ��

ALTER TABLE�� ALTER COLUMN�� ���� ����� ��� �� � ����.

� ��

ALTER TABLE�� DROP COLUMN�� ���� � ��� � ����.

� (drop)�� ��� ���� � � �����. CASCADE� ��� � � ����

�, � � ����� ���. RESTRICT� ��� �, � �� ����� � ����

� �� � SQLCODE -196� �����.

ALTER TABLE DEPTDROP COLUMN NUMDEPT

46 IBM i: ������ SQL �����

Page 59: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� ��

ALTER TABLE

ALTER TABLE�� �� �� ��

ALTER TABLE�� �� ��� �� ��� �����.

ALTER TABLE�� �� �� ��� � �� �����.

1. ���� (drop)

2. ��� �� ���

3. ��� ��

4. RESTRICT ��� ��

5. �� �(���� CASCADE ��� �� �� � � �)

6. ��� �� ��� �� �� �

7. ���� ���� ��

8. ���� ��

� �� ����, �� ���� �� �� ���� ���, � �� ��� ����. � (drop)

�� ��, �� ��� ALTER TABLE�� ��� ���� � � ��� ���� ���

����� ��� �� �����.

ALIAS �� � ��

� ����� �� ��� �, �� � ��� ���� �� �(PF)� ��� � ��� ���� �

��� ��� � ����. ��� ����� CREATE ALIAS�� ������.

��� �� ��� ��� � ����.

v ��� �� �

v ���� ��

��� ��� �� ���� �� �� �� �����. ����� ���� �� �� ����

SQL��� � ��� ��� � ����. ��� ��, ��� (drop)� � � ��� ������

�.

�� ��, ��� MBR1 � MBR2 � �� � MYLIB.MYFILE� ���, SQL� � ��� �

��� � ��� ��� ��� � ����.

CREATE ALIAS MYLIB.MYMBR2_ALIAS FOR MYLIB.MYFILE (MBR2)

�� insert��� �� MYLIB.MYMBR2_ALIAS� ��� �� MYLIB.MYFILE� �� MBR2�

�����.

INSERT INTO MYLIB.MYMBR2_ALIAS VALUES('ABC', 6)

SQL ����� 47

Page 60: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

��� DDL���� ��� � ����. MYLIB.MYALIAS� MYLIB.MYTABLE ���� �� ��

� �����. �� DROP�� MYLIB.MYTABLE ���� (drop)���.

DROP TABLE MYLIB.MYALIAS

�� ��� ��� ��� drop�� ALIAS ��� ������.

DROP ALIAS MYLIB.MYALIAS

�� ��

CREATE ALIAS

� �� � ��

�� ���� �� ��� ��� �� �� �� ���� � �� � ����. SELECT�� ����

�� ������.

�� ��, �� ���� ��� �� ��� �� ������.

CREATE VIEW CORPDATA.EMP_MANAGERS ASSELECT LASTNAME, WORKDEPT FROM CORPDATA.EMPLOYEEWHERE JOB = 'MANAGER'

�� ��� ��� ���� ����� SQL��� ��� � ����. �� �� �� � ���� �

��� �� � ����. �� SELECT�� EMP_MANAGERS� ��� ����.

SELECT *FROM CORPDATA.EMP_MANAGERS

��� ��� ����.

LASTNAME WORKDEPT

THOMPSON B01

KWAN C01

GEYER E01

STERN D11

PULASKI D21

HENDERSON E11

SPENSER E21

� ���� ��, �, �� �� �� ����� �� ��� �� ��� �� � AS��

���� � ���� �� , �� �� ���� ���� ���. �� ���� �� �

LASTNAME � YEARSOFSERVICE���.

CREATE VIEW CORPDATA.EMP_YEARSOFSERVICE(LASTNAME, YEARSOFSERVICE) AS

SELECT LASTNAME, YEAR (CURRENT DATE - HIREDATE)FROM CORPDATA.EMPLOYEE

� � �� ��� �� ��� ��� �� ���� �� �� �� ����.

48 IBM i: ������ SQL �����

Page 61: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� � ����� AS�� ���� �� � ����� �� �� ��� � ����. �� ��,

��� ����.

CREATE VIEW CORPDATA.EMP_YEARSOFSERVICE ASSELECT LASTNAME,

YEARS (CURRENT_DATE - HIREDATE) AS YEARSOFSERVICEFROM CORPDATA.EMPLOYEE

UNION ��� ���� � ��� �� �� ���� � �� ��� � ����. �� ��,

��� ����.

CREATE VIEW D11_EMPS_PROJECTS AS(SELECT EMPNO

FROM CORPDATA.EMPLOYEEWHERE WORKDEPT = 'D11'

UNIONSELECT EMPNOFROM CORPDATA.EMPPROJACTWHERE PROJNO = 'MA2112' OR

PROJNO = 'MA2113' ORPROJNO = 'AD3111')

� ��� �� ���� ����.

9. UNION�� � �� ��

EMPNO

000060

000150

000160

000170

000180

000190

000200

000210

000220

000230

000240

200170

200220

�� CREATE VIEW�� ���� �� ��� � �� ���� �����. � � �� ��

�� �� CREATE VIEW� �� ���� UCS-2� UTF-16 ��� �� ����.

�� WITH CHECK OPTION�� ���� �� �� ���� ����� ��� � � ��� ���

� �� ��� � ����.

SQL ����� 49

Page 62: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� ��

57 ���� �SELECT�� ���� ��� ��

SELECT�� ��� ��� �� ��� �����. SELECT�� ���� �� �� ���� ��

���� ���� �� � ����.

131 ���� �SQL�� � � � ���

� �� �� �� ��� � �� � � � �� ���� ��� �����. ��� ����

�� ��� ���� �� � ����.

�� ��

95 ���� �UNION ��� ���� �� � ���

UNION ��� ���� � ��� �� �� ���� �� �(fullselect)� ��� � ���

�.

CREATE VIEW

��� WITH CHECK OPTION

WITH CHECK OPTION� REATE VIEW��� � ����. �� �� ���� ����� ���

� � ��� �����.

WITH CHECK OPTION� �� , �� �� ����� ���� �� �� � ��� ��� ��

�. �� �� �� �� � ��� ��� � ���. � ��� �� ��� �� ��� ��

�.

WITH CHECK OPTION�� ���� � �� �� , �� �� ���� �� � �� ��� �

��� ���� ��� ����. �� WITH CHECK OPTION� �� �� �� ����� �

��� �� �� � �� ��� �� � ����. � ��� ���� �� ��� � ��

� ��� �� �� �� �� ����� ��� � ����. �� �� �� �� �� �� � ��

�����.

�� ��

CREATE VIEW

WITH CASCADED CHECK OPTION:

WITH CASCADED CHECK OPTION�� �� �� ����� ���� �� �� � ��� ���

� �����.

�� �� ����� ��� � �� �� �� �� ��� ����. �� � ��� ��� �� ,

�� �� � �� �� � ���.

�� ��, �� ��� �� �� �����.

CREATE VIEW V1 AS SELECT COL1FROM T1 WHERE COL1 > 10

50 IBM i: ������ SQL �����

Page 63: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

WITH CHECK OPTION� ���� ��� ��� ���� �� �� �� ��� ����� ����

�� INSERT�� �����.

INSERT INTO V1 VALUES (5)

WITH CASCADED CHECK OPTION�� ���� V1� �� �� �� ������.

CREATE VIEW V2 AS SELECT COL1FROM V1 WITH CASCADED CHECK OPTION

�� INSERT�� V2� ��� ��� �� �� ��� ��� �����.

INSERT INTO V2 VALUES (5)

V2� �� �� �� �� � �����.

CREATE VIEW V3 AS SELECT COL1FROM V2 WHERE COL1 < 100

V3� V2�� ��� V2�� WITH CASCADED CHECK OPTION� �� ��� �� INSERT��

�����.

INSERT INTO V3 VALUES (5)

�� �� INSERT�� V2� ��� ��� ��� �����. V3�� WITH CASCADED CHECK

OPTION� � ��� ���� V3� ��� ��� �� �� ��� �� ����.

INSERT INTO V3 VALUES (200)

WITH LOCAL CHECK OPTION:

WITH LOCAL CHECK OPTION�� ���� �� ��� � ���� �� �� � �� �� ��

� �� � ��� WITH CASCADED CHECK OPTION�� ����. �� WITH CHECK

OPTION�� ���� � �� �� ����� ���� �� �� �� �� �� �

����.

�� ��, �� ��� �� �� �� �� ��� �� �����.

CREATE VIEW V1 AS SELECT COL1FROM T1 WHERE COL1 > 10

V1� �� � �� ����, ���� WITH LOCAL CHECK OPTION� ������.

CREATE VIEW V2 AS SELECT COL1FROM V1 WITH LOCAL CHECK OPTION

V2� �� ��� V1� � ��� ���� ���� V1� �� ��� ��� ��� �� ��

� �� CASCADED CHECK OPTION ���� ��� INSERT�� �� �����.

INSERT INTO V2 VALUES (5)

V2� �� �� �� �� � �����.

CREATE VIEW V3 AS SELECT COL1FROM V2 WHERE COL1 < 100

SQL ����� 51

Page 64: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� ����� WITH CASCADED CHECK OPTION� ���, V2��� WITH LOCAL CHECK

OPTION�� � V1��� �� ��� ��� �� ��� �� INSERT� �����.

INSERT INTO V3 VALUES (5)

LOCAL� CASCADED CHECK OPTION �� �� � �� ����� ��� � ��� �� �� �

� �� ��� ����� ����.

v WITH LOCAL CHECK OPTION� �� ����� ��� � WITH LOCAL CHECK OPTION �

� WITH CASCADED CHECK OPTION� �� � �� �� �� ��� ���� �����.

v WITH CASCADED CHECK OPTION� �� ����� ��� � �� �� �� �� ��� �

��� �����.

: ����� ���� �� ��:

� ��� � ��� ����� ���� � �� � �� �� �� � ��� ��� ���

�����.

�� ��� � �� �����.

CREATE TABLE T1 (COL1 CHAR(10))

CREATE VIEW V1 AS SELECT COL1FROM T1 WHERE COL1 LIKE 'A%'

CREATE VIEW V2 AS SELECT COL1FROM V1 WHERE COL1 LIKE '%Z'

WITH LOCAL CHECK OPTION

CREATE VIEW V3 AS SELECT COL1FROM V2 WHERE COL1 LIKE 'AB%'

CREATE VIEW V4 AS SELECT COL1FROM V3 WHERE COL1 LIKE '%YZ'

WITH CASCADED CHECK OPTION

CREATE VIEW V5 AS SELECT COL1FROM V4 WHERE COL1 LIKE 'ABC%'

INSERT �� UPDATE��� ���� �� �� ��� �� ��� ����.

v V1� �� ���� V1�� WITH CHECK OPTION� ���� �� ���� ��� ���

���.

v V2� �� ����

– COL1� �� Z� ��� ���, �� A� ��� ��� ���. � ��� LOCAL � � V1

� � ��� ���� �� �� �����.

v V3� �� ����

– COL1� �� Z� ��� ���, �� A� ��� ��� ���. V3� � ��� ���� �

� ���� �� ��� ���� ��� ���. �� V2� �� ��� ��� ���. V3� V2

�� ��� V2� � ��� �� �����.

52 IBM i: ������ SQL �����

Page 65: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

v V4� �� ����

– COL1� ‘AB’� ��� ‘YZ’� ��� ���. V4� WITH CASCADED CHECK OPTION� �

��� ����, V4� �� �� �� �� �� �� ��� ��� ���.

v V5� �� ����

– COL1� ‘AB’� ���� ��� � ‘ABC’ ��� ���. �� V5� �� ��� ����

�� ���� �� ��� ��� ��� �� �����. �� V5� V4� ��� V4� ��

��� ���� � ��� �����, V4, V3, V2 � V1� �� �� �� ��� ��� ��

�. �, COL1� ‘AB’� ��� ‘YZ’� ��� ���.

V5� WITH LOCAL CHECK OPTION�� �� V5� �� ���� �� COL1� ‘ABC’� �

�� ‘YZ’� ��� � �����. LOCAL CHECK OPTION� � ��� ‘C’�� �� ��

����� �����.

�� ��

� � ���� ���� � � �� � ����. �� � � � �� �� ��� �� ���� �

��� � ��� �� � ��� ���.

� � ����� CREATE INDEX�� ������. �� �� CORPDATA.EMPLOYEE �����

LASTNAME � �� � � �����.

CREATE INDEX CORPDATA.INX1 ON CORPDATA.EMPLOYEE (LASTNAME)

�� ���� �� � ���� ��� ��� �� � � ��� �� ����. �� ��, ����

��� ��� ���� � � ��� � ����.

CREATE INDEX CORPDATA.INX2 ON CORPDATA.EMPLOYEE (UPPER(LASTNAME))

SQL�� ���� ���� ��� � � ��� ��� � ����.

���� � � ��� � ����. �� � � ���� ������� � � �� ��� ��

�� ��� � � ����. � � � �� �� �� � (EVI)� ���� ��� � ���� ��

� � ��� ��� � ����.

� � � ��� �� ��� �� �� � � ���� � � � � � � 2� ��� �

����. ��� �� �� 2� ��� �����. � � � ��� �� � � ��� �� �

�(� � � �� � � ��) �� 2� ��� �����. �� � � � �� � ���

� UPDATE��� ���� � � ��� � � ��� ���� ����.

� � CREATE INDEX�� ��� � ��� � �� �����. � �� �� SBCS �� �

�, � � UCS-2 �� UTF-16 ��� �� ����.

SQL ����� 53

Page 66: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� ��

131 ���� �SQL�� � � � ���

� �� �� �� ��� � �� � � � �� ���� ��� �����. ��� ����

�� ��� ���� �� � ����.

� �� ��

�� ��

CREATE INDEX

��� �� �� � ��

��� ��� ���� �� �� �� �� ��� � ����.

��� ��� ����� CREATE VARIABLE�� ������. �� �� ��� ��� ���� �

�� ��� �����.

CREATE VARIABLE USER_CLASS INT DEFAULT (CLASS_FUNC(USER))

� ��� CLASS_FUNC � �� ��� �� �� �� ���� ���. � �� USER ��

���� �� �� ��� �� ���� �� �� �� �� ��� �����.

��� ��� �� ��� � �� �� �������. ��� ��� ���� ��� ��

� � �� �����.

��� ��� ���� ���� ��� ��� ��� � ����. �� ����� A00 ��� �� ��

���� ����. USER_CLASS �� 1 ��� ��� �� �� �� ��� ��� �� ��

�.

SELECT EMPNO, LASTNAME, CASE WHEN USER_CLASS = 1 THEN SALARY ELSE NULL ENDFROM EMPLOYEEWHERE WORKDEPT = 'A00'

��� ��� ��� ���� �� ����� ��� � ����. ��� ���� ��, CREATE

VIEW��� ��� ��� ��� � ����.

�� ���� ��

�� ����� �� (drop)�� � ��� CREATE�� ���� � ����� ��� � ��

��.

�� SQL ����� ��, CREATE SQL�� ���� � ����� ��� ��� � ����.

� ����� � ����� ���� �� ��� (drop)���. �� SQL�� � ��� ����.

v CREATE ALIAS

v CREATE FUNCTION

v CREATE PROCEDURE

v CREATE SEQUENCE

54 IBM i: ������ SQL �����

|

|

|

|

|

|

|

|

|

|

|

|

|||

|

|

|

|

|

|

|

|

|

|

|

Page 67: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

v CREATE TRIGGER

v CREATE VARIABLE

v CREATE VIEW

� ��� ��� �� ��� ���� � ����� �� ��� �����. ���� ���

� ��� �����.

: �� �� �� ��

MYSEQUENCE� �� ���� ����� � �(��� )� ���� ����� �� SQL

�� ������.

CREATE OR REPLACE SEQUENCE MYSEQUENCE AS BIGINT

���� �� ��� �� � �����. ��� � ���� ��� � ���� �����.

���� �� ����

����� ���� ��� � ���� �����. �� QSYS2 ����� �� ��� �� ���

�� ����.

����� SQL ����� ��� � ��� ���� ���� ���� ���� ���� ��� ���

��. ������ SQL ����� ��� �� QSYS2 ����� �����. DECLARE GLOBAL

TEMPORARY TABLE� ���� ���� ����� ���� ����.

�� ��� � ���, ���� ��� �� � ����. ���� ��� ��, �� �� ���

� ���. �� ��� ����� ���� �� �� SELECT ��� �� ��� ���.

�� ��

i5/OS� DB2 ���� ��

�� �� ���� �� ��

SYSTABLES ��� SQL ���� �� � � ����� ��� �� ����. SYSTABLES �� �

��� ��(��� �� �), �����, ����� ���, ����� �� ���� �� ��� ���

��.

�� �� ���� CORPDATA.DEPARTMENT ���� �� ��� ����.

SELECT *FROM CORPDATA.SYSTABLESWHERE TABLE_NAME = 'DEPARTMENT'

�� �� ���� �� ��

SYSCOLUMNS ��� ���� �� � � ���� �� ��� �� ����.

�� � ���� CORPDATA.DEPARTMENT ���� �� �� �� ����.

SQL ����� 55

|

|

|

|

|

|

|

|

|

|

Page 68: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

SELECT *FROM CORPDATA.SYSCOLUMNSWHERE TABLE_NAME = 'DEPARTMENT'

�� � ���� ��� ���� �� � � �� ����.

� � �� �� ��� ��� ��� ��� select�� ������.

SELECT COLUMN_NAME, TABLE_NAME, DATA_TYPE, LENGTH, HAS_DEFAULTFROM CORPDATA.SYSCOLUMNSWHERE TABLE_NAME = 'DEPARTMENT'

� � � ���, select�� ��� ����.

v � �� ���� �

v � ��� ��

v � �� ��

v �� ��� �� ����� ��

��� ��� �����.

COLUMN_NAME TABLE_NAME DATA_TYPE LENGTH HAS_DEFAULT

DEPTNO DEPARTMENT CHAR 3 N

DEPTNAME DEPARTMENT VARCHAR 29 N

MGRNO DEPARTMENT CHAR 6 Y

ADMRDEPT DEPARTMENT CHAR 3 N

���� ���� �(drop)

DROP�� ����� �����. �� ��� �� �� �� ���� � ����� �� ��

��� ����� (drop)� ��� �� � ����.

�� ��, ���� (drop)�� � ���� �� ��, ����, ���, � �� � � ��

�. ����� ��� ��� ������ �� �����.

�� ��, EMPLOYEE ���� (drop)��� �� ���� ������.

DROP TABLE EMPLOYEE RESTRICT

�� ��

DROP

��� �� ��

��� �� ��(DML)� ���� ����� ���� SQL ��� �� ����.

56 IBM i: ������ SQL �����

Page 69: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� ��

7 ���� �SQL� ���

� �� � SQL� ��� ����. ���� � ��� �� ��� ����.

SELECT�� �� �� ��

SELECT�� ��� ��� �� ��� �����. SELECT�� ���� �� �� ���� �� �

��� ���� �� � ����.

SQL� �� ��� ����� �� �� � ��, SQLCODE +100� �����.

SQL� select� �� � ��� ����, �� SQLCODE� �����. SQL� ���� �� ���

��� ���, +326� �����.

�� ��

24 ���� �AS� ���� ��� ���

SELECT�� ���� ���� ��� � ����. �� ��� ���� ����� CREATE

TABLE AS�� ������.

48 ���� �� �� � ���

�� ���� �� ��� ��� �� �� �� ���� � �� � ����. SELECT�� ����

�� ������.

� SELECT�

SELECT�� � ��� ��� � �� �� � � �� ���� ����.

� � �� � �� SQL�� ��� � ����. ���� ����� SQL�� , � �� ��

� ��� ��(���� �� ��)� � ����. ������ ���� SELECT�� ��� � �

���. �����, � ������� SELECT�� �� � ����.

�:

1. � ��� � SQL�� SQL ���� �, ������ �� � �� ��� ��� � ��

��.

2. SQL�� �� �� ���(�: WHERE �� VALUES�� � ���� �� ���)� ��

��� �����. �, ���� ���� ��� ���� ���� ���� ���.

WHERE ADMRDEPT='a00' (does not return a result)

WHERE ADMRDEPT='A00' (returns a valid department number)

���� ���� �� ��� ���� �� �� � �� ���� �� ��� �

���� ���� �� � ����.

SELECT��� ��� � � ����.

1. ��� �� � � �.

SQL ����� 57

Page 70: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

2. ���� ��� �� �� �.

3. ���� ��� ��� �� ���� �� �� ��.

4. ���� ����� � ���� � � �.

5. ���� ��� ��� ��� ��� ���� �� ��.

6. � � �� �� �� ��� � ��� �� ��� �.

SELECT�� ��� �����.

SELECT column namesFROM table or view nameWHERE search conditionGROUP BY column namesHAVING search conditionORDER BY column-name

SELECT � FROM�� ���� ���. �� �� ������.

SELECT� �� � �� � � �� ������. �� ��, ��� ����.

SELECT EMPNO, LASTNAME, WORKDEPT

�� ��� � ����� � 8000�� � ��� � ����. ���� ���� � ��

SELECT�� �� �� ����.

�� � ����(��� ��� ���� �� �� ��), � ���� �� � (*)� ����

��.

SELECT *

FROM�� ���� �� �� ���� �����. � ��� ����� � �� � ����.

SELECT� ���� , FROM�� ���� ���. �� ���� ������.

SELECT *FROM EMPLOYEE

��� EMPLOYEE ���� �� � ����.

SELECT ����� ��, �� ����, �� �� �� �� ��� � � ����. AS�

� ���� �� � �� ��� � ����. �� ��, �� ���� ������.

SELECT LASTNAME, SALARY * .05 AS RAISEFROM EMPLOYEEWHERE EMPNO = '200140'

� ���� ��� ��� ����.

10. �� ��

LASTNAME RAISE

NATZ 1421

58 IBM i: ������ SQL �����

Page 71: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

WHERE�� �� � �� ��

WHERE�� �, �� �� ��� �� ���� �� ��� �����.

�� SQL�� ���� ���� � �� WHERE� �� ��� ����� � �� �� �����.

�� ��� �� ��� ��� ������. ��� SQL� �� ��� �� �� ���� ����

�.

�� ���� WORKDEPT = ‘C01’� ��� WORKDEPT � ‘C01’� ����, ��(=)� � �

�����. �� �� �����(')� �� ��� �� �� �� �� ��� ������. �� SQL

� ��� �� �� ���� ���� �� �� �� ����. �� ��, �� ��� C01 �� �

�� ��� ����� �� ���� ������.

... WHERE WORKDEPT = 'C01'

� , �� ��� ��� ��(WORKDEPT = ‘C01’)� ������.

WHERE� ��� ���� SELECT�� ������. CORPDATA.DEPARTMENT ���� �

� ��� � �� ��� �� ������. C01 ��� �� CORPDATA.DEPARTMENT ����

� �� �� ��� ��� ��� ���. �� ���� ������.

SELECT DEPTNAME, MGRNOFROM CORPDATA.DEPARTMENTWHERE DEPTNO = 'C01'

� ���� ��� � ����.

11. �� ���

DEPTNAME MGRNO

INFORMATION CENTER 000030

�� ��� �� �� UCS-2� UTF-16 ��� ��� , ��� ��� � ��� � �

� � ��� ����. � �� ���� �� , � �� ��� ���� ���

� ���� �� ��� ���� ���.

SQL ����� 59

Page 72: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� ��

131 ���� �SQL�� � � � ���

� �� �� �� ��� � �� � � � �� ���� ��� �����. ��� ����

�� ��� ���� �� � ����.

�� ��

73 ���� ���� �� �� ���

�� ���� � � ��(�: = � >) ��� BETWEEN, IN, EXISTS, IS NULL � LIKE� ��

��� �� � ����.

76 ���� �WHERE�� � �� ���

� �� ��� �� �� ��� ���� ��� ��� � ��� � ����.

WHERE�� � �:

WHERE�� ��� �� �� �� ���� ����� �����.

���� ��� �� � ����.

v � ��� � �����. �� ��, ��� ����.

... WHERE EMPNO = '000200'

EMPNO� 6��� �� ��� �� � �����.

v ��� �� �� �� �� ��(+), ��(-), ��(*), ���(/)� ��� ���(**)��� ��

(CONCAT �� ||) �� �� �����. �� ��� ����� ��� ����.

– ��

– ��� ��

– ��� ��

– �

– �� ����

– �� �� �

– � �� ��

�� ��, ��� ����.

... WHERE INTEGER(PRENDATE - PRSTDATE) > 100

��� �� �� ���� ���, ��� �� �� �����.

1. � � ���

2. ���

3. ��, ���, ��

4. �� � ��

60 IBM i: ������ SQL �����

|

Page 73: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

� �� ���� ���� ���� ����� ����.

v ��� ��� �� ��� �� �����. �� ��, ��� ����.

... WHERE 40000 < SALARY

SALARY� 9�� � �� �(DECIMAL(9,2))�� �� � �����. �� �� 40000� ���

�.

v ��� ��� ����� ������ ��� �����. �� ��, ��� ����.

... WHERE EMPNO = :EMP

v �� ����� ������ ���� ��� �� �� �����. �� ��, ��� ����.

... WHERE LASTNAME = USER

v NULL �� � � � �� �� ��� �����.

... WHERE DUE_DATE IS NULL

�� ��� AND � OR� �� �� ��� ��� � ����. �� ��� ��� ������ ��

��� ��� � TRUE �� FALSE �� �����. ��� �� � � � � �� �� ����.

�, � �� ��� � ��� �� ��� �� ��� ���, ��� � �� ��� �� ��� ��

�� ����.

WHERE�� ��� ����� SQL� �� ��� ��� ��� �� �� ��� �� ���

���. � ��� i� DB2 SQL �� �� ���� ��� ����.

�� ��

123 ���� ��� �� ���

���� ��� � �� ���� �� ���� �� ��� ��� � ����. ��� ��� �

�� ���� �� ��� ��� � ����.

�� ��

73 ���� ���� �� �� ���

�� ���� � � ��(�: = � >) ��� BETWEEN, IN, EXISTS, IS NULL � LIKE� ��

��� �� � ����.

��

� ��:

SQL� � �� � ���� �����.

�� ��� ��

<> �� ¬= �� != �� ��

= ��

< ��

> �

<= �� ¬> �� !> ��(�� �� � ��)>= �� ¬< �� !< ��(�� �� �� ��)

SQL ����� 61

Page 74: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

NOT ���:

�� �� NOT ��� ��� �� �� ���� � �(�, ��� FALSE TRUE)� ���

� ����.

NOT� WHERE�� �� �� ��� ��� � NOT� �� �� ���� ����. �� ��,

�� C01�� �� ��� ��� �� ��� ��� ��� ���� ��� �� ��� � �

���.

... WHERE NOT WORKDEPT = 'C01'

�� ��� ����.

... WHERE WORKDEPT <> 'C01'

GROUP BY�

GROUP BY�� ���� �� �� �� � ��� ��� �� � ����.

GROUP BY�� ��� � SQL� � ��� �� �� ��� �� ���� ��� �� ���

� �� ���� ����. ����, SQL� ��� ��� ���� ��� �� � � ��� �

���. GROUP BY��� �� ��� �� ��� ���� �� ���� � ����. SELECT�

�� ���� ��� ��� �� �� �� � ����� ��� � � ��� �������.

GROUP BY�� � SQL �� �� ������ ��� �� �����. GROUP BY� ��

� �, �� � ��� ���� ��� �� �� �� �����.

�� ��, CORPDATA.EMPLOYEE ���� � �� � �� � � �� �� ��� ��� �

�� ��� �����. � ��� �� ��� �� ��� ���� ��� �����.

SELECT WORKDEPT, DECIMAL (AVG(SALARY),5,0)FROM CORPDATA.EMPLOYEEGROUP BY WORKDEPT

��� � �� �(� ���� ���)���.

WORKDEPT AVG-SALARY

A00 40850

B01 41250

C01 29722

D11 25147

D21 25668

E01 40175

E11 21020

E21 24086

�:

62 IBM i: ������ SQL �����

Page 75: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

1. �� ����� �� � �� ���� �� � ��. ���� � � �� ��� �� ��

��. �� SQL� ���� �� ��� �����. � �� ���� �� ���� �� �

� �� �� ����� ����. ������ ���� ��� ��� ��, �� ��

� ���� �� � ����.

2. GROUP BY�� ���� � ��� �� ��� �� �� ���� �� � � ���

����.

3. ��� UCS-2 �� UTF-16 ��� � �� ���� ��� ��� ��� � ���

� �� ���� ����.

GROUP BY� ��� � SQL� � ���� ����� � �� ��� ����. �� ��,

CORPDATA.PROJECT ���� � � �� ����� �� � �� ��� ��� ��� ��

�. ��� ��� � ����.

SELECT SUM(PRSTAFF), MAJPROJFROM CORPDATA.PROJECTGROUP BY MAJPROJ

��� �� �� �� ����� � ����� �� � �� ��� �� ������.

SUM(PRSTAFF) MAJPROJ

6 AD3100

5 AD3110

10 MA2100

8 MA2110

5 OP1000

4 OP2000

3 OP2010

32.5 ?

�� �� � ��� �� ��� �� ������ � �� ��� �� ����. �� ��,

CORPDATA.EMPLOYEE ���� ���� � ��� �� ���� ���� �� ��� �� �� select

�� ��� � ����. �� �� ��� �� ���� ������.

SELECT WORKDEPT, SEX, DECIMAL(AVG(SALARY),5,0) AS AVG_WAGESFROM CORPDATA.EMPLOYEEGROUP BY WORKDEPT, SEX

��� ��� ����.

WORKDEPT SEX AVG_WAGES

A00 F 49625

A00 M 35000

B01 M 41250

C01 F 29722

D11 F 25817

SQL ����� 63

Page 76: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

WORKDEPT SEX AVG_WAGES

D11 M 24764

D21 F 26933

D21 M 24720

E01 M 40175

E11 F 22810

E11 M 16545

E21 F 25370

E21 M 23830

� ��� WHERE�� �� �����, SQL� CORPDATA.EMPLOYEE ���� �� �� ��

���� �����. SQL� � ��� �� SALARY �� ��� �� �� � �� �� ����

���� ���� (� ����) �� ���� ������.

�� ��

131 ���� �SQL�� � � � ���

� �� �� �� ��� � �� � � � �� ���� ��� �����. ��� ����

�� ��� ���� �� � ����.

�� ��

65 ���� �ORDER BY��

ORDER BY�� �� �� ��� �� �� �����. �� �� �� �� �� ��

��� � �� � ���.

HAVING�

HAVING�� GROUP BY�� � ��� �� �� ��� �����.

HAVING�� � �� �� ��� ���� ��� ��� �� ����. ��� HAVING�� ��

�� �� ��� ��� �� �� �� ����� ��� � ��� ����� ����� ���.

HAVING�� GROUP BY� ��� ��� WHERE�� ��� � �� �� ��� �� ��� �

� ����. �� HAVING�� �� �� ��� � ����. �� ��, � ���� ���� �� �

�� ��� ���. AVG �� �� ��� WORKDEPT� �� �� ���� � SEX = 'F'�

WHERE�� ������.

� ��� �� �� ���� 16(��) ��� �� ��� �� �� �� � ���� ��

����� HAVING�� ������. HAVING�� ��� ����� ������. � ���� �

� ���� MIN(EDLEVEL)� �� �����.

SELECT WORKDEPT, DECIMAL(AVG(SALARY),5,0) AS AVG_WAGES, MIN(EDLEVEL) AS MIN_EDUCFROM CORPDATA.EMPLOYEEWHERE SEX='F'GROUP BY WORKDEPTHAVING MIN(EDLEVEL)>=16

64 IBM i: ������ SQL �����

Page 77: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

��� ��� ����.

WORKDEPT AVG_WAGES MIN_EDUC

A00 49625 18

C01 29722 16

D11 25817 17

HAVING��� AND � OR� ���� � ��� ��� , �� ��� ��� NOT� ��� � �

���.

�: � ����� �� ����� �� DECLARE CURSOR� �� SELECT�� GROUP BY

�� HAVING�� � � ���. � �� ���� �� �� ��� ���.

�� �� �� �� �� ��� WHERE �� HAVING��� ��� � ����. �� WHERE

��� � �� ���� �� �� �����. �� ���� �� ���� �����. HAVING

�� �� ��� �� �� �����.

�� ��� ��� UCS-2 �� UTF-16 ��� � �� ��� �� ��� ��� � ��

� � �� ��� ����.

�� ��

131 ���� �SQL�� � � � ���

� �� �� �� ��� � �� � � � �� ���� ��� �����. ��� ����

�� ��� ���� �� � ����.

�� ��

406 ���� ��� ���

SQL� SELECT�� ��� � ��� ��� �� �� ���� �����. ��� �� ���� �

��� �� ��� �����.

ORDER BY�

ORDER BY�� �� �� ��� �� �� �����. �� �� �� �� �� ��

��� � �� � ���.

�� ��, �� ��� ����� � ���� �� ��� �� ���� �� select�� ��

�� ���.

SELECT LASTNAME,WORKDEPTFROM CORPDATA.EMPLOYEEWHERE SEX='F'ORDER BY WORKDEPT

��� ��� ����.

LASTNAME WORKDEPT

HAAS A00

SQL ����� 65

Page 78: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

LASTNAME WORKDEPT

HEMMINGER A00

KWAN C01

QUINTANA C01

NICHOLLS C01

NATZ C01

PIANKA D11

SCOUTTEN D11

LUTZ D11

JOHN D11

PULASKI D21

JOHNSON D21

PEREZ D21

HENDERSON E11

SCHNEIDER E11

SETRIGHT D11

SCHWARTZ E11

SPRINGER E11

WONG E21

�: ��� �� ��� �����.

ORDER BY�� �� � SELECT�� �� ��� ���. �� ��, �� ���� ��� ��

�� ���� ��� �� �� ���� �����.

SELECT LASTNAME,FIRSTNMEFROM CORPDATA.EMPLOYEEWHERE SEX='F'ORDER BY SALARY DESC

� ����� �� � �� ���� �� AS�� �� � �� ORDER BY�� ���

� ����. AS�� �� �� � ���� ��� ���. �� ��, ����� � ���

�� �� ���� �� select�� ���� ���.

SELECT LASTNAME CONCAT FIRSTNME AS FULLNAMEFROM CORPDATA.EMPLOYEEORDER BY FULLNAME

� select�� ��� ��� �� ��� � ����.

SELECT LASTNAME CONCAT FIRSTNMEFROM CORPDATA.EMPLOYEEORDER BY LASTNAME CONCAT FIRSTNME

�� �� ���� �� � �� ���� ��, ��� ��� � ����. �� ��, ORDER BY

3� � ���� �� ��, ��(results) ���� � � ���� ��� ��� �� ���

��. ��� �� �� � �� ��(results) ���� �� ����� ��� ������.

66 IBM i: ������ SQL �����

Page 79: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� SQL� ��(ASC) �� ���(DESC)�� �� ���� � �� ��� � ����. �

� � �� ������. �� select���, SQL� �� �� �� FULLNAME ��(��� �

� ����)� �� �� ��� , � ��� � �� �� �� �� �� �����. � �� ��

�� ��� �� � �� ����� ��� ������.

... ORDER BY FULLNAME DESC

1� ��� � �� ��� 2� ��� �(�� � ��� ��� �)� ��� � ����. �

� ����, �� �� ��� ���� �� ��� � �� ��� ���� ���� �� ���

� ����. �� �� ��� ��� ������.

... ORDER BY WORKDEPT, FULLNAME

�� �� UCS-2 �� UTF-16 ��� � ORDER BY�� ���� � � ���� ���

��� � ��� � �� �� ���.

�� ��

131 ���� �SQL�� � � � ���

� �� �� �� ��� � �� � � � �� ���� ��� �����. ��� ����

�� ��� ���� �� � ����.

�� ��

62 ���� �GROUP BY��

GROUP BY�� ���� �� �� �� � ��� ��� �� � ����.

�� SELECT�

� SELECT�(SQL ������ �� ���)� INTO�� FROM� ��� ���� ���.

INTO�� ��� ��(� �� �� � ���� ����� ��)� �� �����. SELECT

�� �� � � �� � �� INTO�� � �� � � ��� ��� ��� , � ��

� ��� ��� �����.

SELECT INTO� �� ����� � �� ��� ���. �� ��, CORPDATA.EMPLOYEE ����

� ��� �� EMPNO(�� ��) � ��� ���. WHERE��� EMPNO � �� ��

�� ���� �� SELECT INTO�� ��� ��� � �(�� � �)� ���. � ��� �

� ���� ����� � �� �����. ORDER BY�� ���� � �� ���� ��� �� ��

� � ����. ORDER BY�� ���� �� ���� � � �� �����.

SELECT INTO�� ��� � ��� �� ��� ��� DECLARE CURSOR�� ���� �� �

� � FETCH�� ���� �� ��� ��� �������(� �� �� ��� �).

����� ������ select�� ��� � �� ��� ����� �� ��� ���� ��

����. ��� �� �� �� ��� ����.

1. �� � ���� �� � SELECT�� �� �� INTO�� �� ��� �� ��� �

��� � � � ����.

SQL ����� 67

Page 80: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

2. � �� ����� �� � ��� ���� �SELECT * ...�� ��� � �� ���� ���

�� ���� , INTO��� � � �� �� ��� ��� ��� ���. �� � �

SQLCA� (��� ��)� ����(SQLWARN3� �W�� �). GET DIAGNOSTICS��

��� � RETURNED_SQLSTATE ��� �� ’01503’���.

�� ��

406 ���� ��� ���

SQL� SELECT�� ��� � ��� ��� �� �� ���� �����. ��� �� ���� �

��� �� ��� �����.

� ��

��� �� �� �� ����. ��� � � � ����. 0 �� � �� �� �� ���

�.

WHERE � HAVING��� ���� ��� ��� � ����. �� ��, WHERE�� � �� ��

��� �� � ��� � ����. ��� �� � ���� � � ��� � �� ��

� �� �� �� ��� ����. �� ��� ��� �� ��� ���, ���, � �� ��

���. IS NULL ��� ���� ��� �� ����. ��� ��� �� ��� �� �� ��

�� ���� ��� ��� � ����.

SELECT DEPTNO, DEPTNAME, ADMRDEPTFROM CORPDATA.DEPARTMENTWHERE MGRNO IS NULL

��� ��� ����.

DEPTNO DEPTNAME ADMRDEPT

D01 DEVELOPMENT CENTER A00

F22 BRANCH OFFICE F2 E01

G22 BRANCH OFFICE G2 E01

H22 BRANCH OFFICE H2 E01

I22 BRANCH OFFICE I2 E01

J22 BRANCH OFFICE J2 E01

��� ��� �� ��� �� �� �� �� ����� ��� �� WHERE�� �� � ���

�.

WHERE MGRNO IS NOT NULL

��� � � �� �� ��� � ��� �� ��� DISTINCT �����. �� ��(equal)

�(COL1 = COL2)� ���� � �� � �� � �� �� �� � true�

���. � � ��� false���. �� �� �� ���(� �� �����) ��� ��

�����. DISTINCT ��� ���� ��� �� ��� �����. ��� � � �� �

�� �� �� � � � �� �� COL1 is NOT DISTINCT from COL2� true� �

��.

68 IBM i: ������ SQL �����

Page 81: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� ��, ��� �� �� ����� ��� ��� ���. � � ��� T1� �� ��

� �� C1� ����.

C1

2

1

null

� ��� T2� �� ��� �� C2� ����.

C2

2

null

�� SELECT�� ������.

SELECT *FROM T1, T2WHERE C1 IS DISTINCT FROM C2

��� ��� ����.

C1 C2

1 2

1 -

2 -

- 2

�� ��� �� � � ��� i� DB2 SQL �� �� ���� ������.

SQL�� �� ����

SQL�� �� �� ����� ��� � ����. �� ����(�: CURRENT DATE)� SQL��� �

�� � �� ��� ���.

��� ���� SQL�� , �� ���� � � ��� �� ���� ��� ����.

�� ���� ��

CURRENT CLIENT_ACCTNG

CLIENT ACCTNG

����� ��� �� �� ���.

CURRENT CLIENT_APPLNAME

CLIENT APPLNAME

����� ��� �� ������.

CURRENT CLIENT_PROGRAMID

CLIENT PROGRAMID

����� ��� �� ���� ID.

CURRENT CLIENT_USERID

CLIENT USERID

����� ��� �� ����� ��� ID.

SQL ����� 69

Page 82: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� ���� ��

CURRENT CLIENT_WRKSTNNAME

CLIENT WRKSTNNAME

����� ��� �� � �����.

CURRENT DATE

CURRENT_DATE

�� ��.

CURRENT DEBUG MODE � �� �� � � ��� ��� �.

CURRENT DECFLOAT ROUNDING MODE �� �� �� �� �� � � ��� �� �.

CURRENT DEGREE ������ ���� � ���� �� �� �.

CURRENT IMPLICIT XMLPARSE OPTION ��� � � ���� ��� � XML ���� ��� �

� �� ��.

CURRENT PATH

CURRENT_PATH

CURRENT FUNCTION PATH

��� � SQL��� ���� �� ��� �� �, �

���� � ��� ���� � ���� SQL �.

CURRENT SCHEMA ��� � SQL��� � ��� ���� �� �

����� ���� ��� ���� � ���� ����.

CURRENT SERVER

CURRENT_SERVER

�� �� ��� ������� �.

CURRENT TIME

CURRENT_TIME

�� ��.

CURRENT TIMESTAMP

CURRENT_TIMESTAMP

��� ��� �� �� � ��.

CURRENT TIMEZONE

CURRENT_TIMEZONE

�� ��� ���� �� ��� � ���(UTC)� � �

� �� �� ��.

local time -CURRENT TIMEZONE = UTC

�� QUTCOFFSET ��� ��� �����.

SESSION_USER

USER

� � ��� ���� ID(��� ���).

SYSTEM_USER ������� �� ���� ���� ID(��� ���).

� ���� CURRENT DATE, CURRENT TIME�� CURRENT TIMESTAMP �� ���� ��

CURDATE, CURTIME�� NOW �� �� �� ��� � �� , �� �� � �

� ��� ��� ���.

���� ���� SQL�� , �� ���� �� ��� ����� �����.

�� ���� �� ��� �� ����� ���� , ��� ���� ���� �� ���� ���

�����. �� ���� �� � � ��� DB2 � ��� �� ���� ������.

�� � ��

�� ��� ��� �� ��� ���� ��, ��� �� ��� �� �� ��� ���� �

�� ���� ���.

70 IBM i: ������ SQL �����

|||

Page 83: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� ��, �� ��� (�: �� � ��� �� �� ��� �� ��)� ����, ��� ��

� ���� ��� ��� ��� �� ����� �� � ����. �� ��� ���� �� �

�� ��� ��� �� ��� ���� �� ��� ���� �� �����.

�� �� CAST ��� ���� ��� ��� �� ��� ���� ���� ��� � ���

�. �� ��, DATE� �� �� (BIRTHDATE)� � ��� ��� � ��(10)�

CHARACTER� ����� ��� ������.

SELECT CHAR (BIRTHDATE,USA)FROM CORPDATA.EMPLOYEE

�� CAST ��� ���� ��� ��� �� ��� �� ����.

SELECT CAST(BIRTHDATE AS CHAR(10))FROM CORPDATA.EMPLOYEE

�� ��

��� �� ��� ��

��, �� � ���� �� �

��, �� � ��� � SQL ���� �� �� �� ���� ��� ��� �����.

��, �� � ��� � �� ��� ��� �� �� ��� ��� �� � ����. �����

� ���� ��� ��, �� � ��� ��� ����.

v DATE, TIME �� TIMESTAMP �� �� ���� �

v CURRENT DATE, CURRENT TIME �� CURRENT TIMESTAMP �� ����� ���� �

v ANSI/ISO � ��, �� �� ��� ��(�: DATE ‘1950-01-01’)� �� ��� �

v ��� �� �� ����� �� ����� ��, �� �� ��� �� ���. �� �

�, ����

... WHERE HIREDATE < '1950-01-01'

HIREDATE� �� �� ��� ‘1950-01-01’� ��� �����.

v UPDATE�� SET��� INSERT�� VALUES��� ��, �� �� ��� � ��� �� �

��� �� ��� �� �� ��

�� ��

��� ��

� �� � �� ��:

CURRENT DATE, CURRENT TIME � CURRENT TIMESTAMP �� ���� ��� ����

��� �� ��, �� �� ��� � ��� � ����.

SQL ����� 71

Page 84: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

��� �� ��� �� � ��� ��� �� ��� ��� ���. �� SQL� ��� CURRENT

DATE, CURRENT TIME �� CURRENT TIMESTAMP� �� � �� �� ����. �� ��

�� ���� ��� � EMPLOYEE ���� �� � ��� ��(� ��)� �����.

SELECT YEAR(CURRENT DATE - BIRTHDATE)FROM CORPDATA.EMPLOYEE

CURRENT TIMEZONE �� ����� ���� �� ��� � ���(UTC)� ��� � ����.

�� ��, �� STARTT �� ��� �� DATETIME��� ���� � STARTT� UTC

� ����� �� ���� ��� � ����.

SELECT STARTT - CURRENT TIMEZONEFROM DATETIME

��/�� ��:

��, �� � ��� �� �� � �� �� ���� ���� �����.

��, �� �� ��� � �� ���� �� � ���� � ����. �� ���� ���, ����

��� �� ��� �� ��� � � � ����.

�� ��

SQL��� �� �� ��

� �� � �

ROW CHANGE TIMESTAMP � ROW CHANGE TOKEN ��� ���� �� ����� �

��� ��� � ����.

���� ROW CHANGE TIMESTAMP ��� ����� � � ��� � ��� ���� �

��� ���.

�� ��� �� 4�� �� ��� � �� � ��� ��� ����� �� ��� �� � �

���.

SELECT ORDERNO, ROW CHANGE TIMESTAMP FOR ORDERSFROM ORDERSWHERE ORDER_DATE < CURRENT DATE - 4 WEEKS

ROW CHANGE TOKEN ��� � � ��� � �� ���� � � ��� � � ��� �

� ��� � ����. � ��� � �� � � ����. ���� � � ��� � �� ,

���� ��� �� ����. ���� � � ��� � � , ���� � �� �� ��

�� ��� ��� ��� � � ��� � �� ���� �� ���� ����.

�� � ��

SQL� select�� ��� � select�� �� ��� ���� � �� �� �� ����� � �� ��

��� � ����. �� ���� � �� �� � ����.

�� �� ���� �� DISTINCT ��� ���� �� ��� ��� ��� � ����.

72 IBM i: ������ SQL �����

Page 85: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

SELECT DISTINCT JOB, SEX...

DISTINCT� �� �� �� �� �����. � �� �� ���� �� �� ��� � �

� �����(�� ���� �� ��). �� ��, �� � � ���� ��� �����. �� �

�� �� � �� �� ��� � ��� ���. ���� ��� ��� �� � �� ��

�� � ����, DISTINCT� ���� �� ���� �� �� ����� � � ����.

�� ��� �� ���� ��� �����.

SELECT DISTINCT JOBFROM CORPDATA.EMPLOYEEWHERE WORKDEPT = 'D11'

���� �� ���� ����.

JOB

DESIGNER

MANAGER

SELECT�� DISTINCT� �� �� ��� ���� � �� �� � ����. SQL� ��

��� ���� ��� JOB �� ���� �����. ��� DISTINCT� �� � ��� ����

�.

SELECT�� DISTINCT� � �� �� � �� � ���� �� � � � ��

��. � �� �� ��� �� �� ��� ���� ���. ‘MGR’, ‘Mgr’ � ‘mgr’� �

�� ���� �� � � �� ��� �����.

�� ��

131 ���� �SQL�� � � � ���

� �� �� �� ��� � �� � � � �� ���� ��� �����. ��� ����

�� ��� ���� �� � ����.

��� � �� ��

�� ���� � � ��(�: = � >) ��� BETWEEN, IN, EXISTS, IS NULL � LIKE� ��

��� �� � ����.

�� ���� �� �� �� � � ����.

��� UCS-2 �� UTF-16 ��� ��� , � �� BETWEEN, IN, EXISTS � LIKE��

��� ���� �� ����� ����.

� �� ��� ��� �� ����.

v BETWEEN ... AND ...� ���� �� �� �� ���� � ��� �� ��� ���� �

� ��� �����. �� ��, 1987�� � �� ��� ���� ��� ��� � ����.

SQL ����� 73

Page 86: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

... WHERE HIREDATE BETWEEN '1987-01-01' AND '1987-12-31'

BETWEEN ��� ����. �� ��� ��� �� ����� �� �� ��� ��

� ����.

... WHERE HIREDATE >= '1987-01-01' AND HIREDATE <= '1987-12-31'

v IN� �� ��� �� ���� �� � ��� �� �� ��� ��� �����. �� ��,

�� A00, C01 � E21� �� �� ��� �� ���� ��� ��� � ����.

... WHERE WORKDEPT IN ('A00', 'C01', 'E21')

v EXISTS� �� �� �� ����� � ��� ��� �����. �� ��, ��� 60000�� �

� ��� ��� ��� ��� ��� � ����.

EXISTS (SELECT * FROM EMPLOYEE WHERE SALARY > 60000)

v IS NULL� ��� �� ���� ��� ��� �����. �� ��, ����� ��� �� ��

� ��� ��� ��� ��� � ����.

... WHERE EMPLOYEE.PHONE IS NULL

v LIKE� ��� ���� ���� �� ��� �� ��� ��� �����. LIKE� ����

, SQL� ���� ���� �� ��� �� ���� �����. ���� ��� �� ���

�� ���� �� �� �� ��� �����.

_ ��� ��� � ��� ����.

% ��� ��� 0� ��� ��� � � � ���� ����. ��� ��� �� ���

� ���� SQL�� � ��� � �� 0� ��� ��� �� � ����. ��� ��

�� ���� � � � ���� ���� ���.

�: MIXED ���� �� �� , ��� �� ��� ����. SBCS ��� ��� SBCS

��� �����. ��� ���� �� �� ����� ��� ����. �, ��� ��� ��

��� SBCS �� DBCS ��� �����. LIKE �� � MIXED ���� �� � � ���

i� DB2 SQL �� ��� ������.

�� �� ��� �� ��� ��� �� �� �� �� ��� ��� ������. ��

��, Minneapolis� �� ��� ���� ��� ��� � ����.

... WHERE ADDRESS LIKE '%MINNEAPOLIS%'

SQL� ���� ��� ��� ��� ADDRESS � MINNEAPOLIS ���� �� �� ��

���.

�� ���, �� ’SAN’�� ���� ��� ���� ��� ��� � ����.

... WHERE TOWN LIKE 'SAN%'

�� �� ���� ��� �� � ���� � ��� ���� LIKE ���� ��� ��

� � ����. � ����, ���� �� STREET � ��� ��� �����.

... WHERE UCASE (:address_variable) NOT LIKE '%'||STREET||'%'

74 IBM i: ������ SQL �����

Page 87: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� �� ��� ��� �� �� ���� ����� ESCAPE�� ���� �� ��� ���

���. �� ��, �� ���� �� �� ���� ��� ��� ��� � ����.

... WHERE BUSINESS_NAME LIKE '%@%%' ESCAPE '@'

LIKE ����� � � � ��� ��� ��� �� LIKE ��� ��� �����. ‘@%’ �

�� �� ��� ��� �����.

�� ��

123 ���� ��� �� ���

���� ��� � �� ���� �� ���� �� ��� ��� � ����. ��� ��� �

�� ���� �� ��� ��� � ����.

131 ���� �SQL�� � � � ���

� �� �� �� ��� � �� � � � �� ���� ��� �����. ��� ����

�� ��� ���� �� � ����.

�� ��

59 ���� �WHERE�� ���� �� �� ���

WHERE�� �, �� �� ��� �� ���� �� ��� �����.

60 ���� �WHERE�� ���

WHERE�� ��� �� �� �� ���� ����� �����.

��

LIKE� �� �� ����:

LIKE �� ��� �� � �� ���� ��� ����.

v �� ���� ��� �� �� ��� ��� ���� , �� �� ��� �� ��� ��� �

��. ��� �� ��� ��� � ����.

– ��� � ��� ��� ��� �� ��� �� �.

– ��� ��� �� ��� �� � �� �� ��.

v �� ���� ��� �� �� � �� ��� ��� ���� , ��� ��� �� �� ��

� ��� ��� ��� ��� ���� � �� ���. �� ��� �� ��� ��� �� �

�� ��� ���� �����.

�� ��, �� �� ��� ���� ‘ABC%’ ��� ��� ���� ��� ���� ��� �

�� � �� ��� ����.

'ABCD ' 'ABCDE' 'ABCxxx' 'ABC '

�� � ��� 10 ��� ��� ‘ABC%’ �� ��� ���� ��� ���� �

� �� ��� � ����( ��� 12� ��).

'ABCDE ' 'ABCD ' 'ABCxxx ' 'ABC '

SQL ����� 75

Page 88: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�: �� �� �� ‘ABC’� ��� � 6�� ���� ���. ��� ��� ��� 6�� �

� �� ��� ��� ��� ��� �����.

��� 7�� ���� ��� � �� ��� ��� ���� ��� ����� ‘ABC%%%%%%%’

� ������. ��� � �� � �� ��� ����.

'ABCDEFGHIJ' 'ABCXXXXXXX' 'ABCDE' 'ABCDD'

WHERE�� � ��:

� �� ��� �� �� ��� ���� ��� ��� � ��� � ����.

���� ���� �� ���� � ���� BETWEEN, DISTINCT, IN, LIKE, EXISTS, IS NULL

� IS NOT NULL ��� � � ����.

AND � OR� ���� �� ��� ��� � ����. �� NOT ��� ����, ���� ��

� �� ��� �� �� ��� �� ��� ��� � ����. WHERE��� ��� �� ���

� � ����.

v AND� ��� �� ��, �� �� ��� �� � � ���� � ����. �� ��, 1987�

12� 31 ��� � �� D21� ��� ���� ��� ������.

...WHERE WORKDEPT = 'D21' AND HIREDATE > '1987-12-31'

v OR� ��� �� ��, �� �� ��� �� �� �� � � � ��� ��� � ���

����. �� ��, �� C01 �� D11� �� ��� ���� ��� ��� � ����.

...WHERE WORKDEPT = 'C01' OR WORKDEPT = 'D11'

�: �� IN� ���� � ��� ��� � ����(WHERE WORKDEPT IN ('C01', 'D11')).

v NOT� ���� �� �� NOT �� �� ��� �� ��� � �� ���� ��� �

����. �� ��, � �� ���� �� ��� ��� �� E11� �� �� ��� ����

��� ��� � ����.

...WHERE WORKDEPT = 'E11' AND NOT JOB = 'ANALYST'

SQL� �� ���� �� �� ��� ��� � �� �� �����. SQL� �� NOT�� �

�� , � ���� AND�� OR�� ��� �����.

��� ���� �� �� �� � ����. ��� � �� ��� �� �����. �� ��, ��

E11 � E21�� �� ��� 12�� �� �� ��� ���� ��� ��� � ����.

...WHERE EDLEVEL > 12 AND

(WORKDEPT = 'E11' OR WORKDEPT = 'E21')

��� �� ��� ��� �����. � ����� ���� ��� ���� �� �� ����.

v WORKDEPT � E11 �� E21, ��

76 IBM i: ������ SQL �����

Page 89: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

v 12�� � EDLEVEL �

��� ���� ��

...WHERE EDLEVEL > 12 AND WORKDEPT = 'E11'

OR WORKDEPT = 'E21'

��� ����. � �� ��� ���� ����.

v WORKDEPT = E11 � EDLEVEL > 12, ��

v WORKDEPT = E21(EDLEVEL �� ���)

� ��(equal) �� ���� �� ��� � �� AND� ���� ��� ��� � ���

�.

...WHERE WORKDEPT = 'E11' AND EDLEVEL = 12 AND JOB = 'CLERK'

�� ���� �� �� ����. �� �� ��� ����.

...WHERE (WORKDEPT, EDLEVEL, JOB) = ('E11', 12, 'CLERK')

���� ��� � � � ���� �� � � ��� � ���� �� � � ��� ��

� ��� � � �� �� �����. ��� � ���� �� �� ��� ���. ���� ���

� �� AND� ��� ���� �� ����. ���� �� �� �� �� � ������ ���

� ����.

�� ��

59 ���� �WHERE�� ���� �� �� ���

WHERE�� �, �� �� ��� �� ���� �� ��� �����.

OLAP �� ��

OLAP(Online analytical processing) ��� ��� �� �� �� � � � � ��� ���� � ��

���. RANK, DENSE_RANK � ROW_NUMBER� ��� � ����.

: �� � � �� ��

�� � �� 10�� �� ���� ����. �� ��� ���� � ��� ����.

SELECT EMPNO, SALARY,RANK() OVER(ORDER BY SALARY DESC),DENSE_RANK() OVER(ORDER BY SALARY DESC),ROW_NUMBER() OVER(ORDER BY SALARY DESC)

FROM EMPLOYEEFETCH FIRST 10 ROWS ONLY

SQL ����� 77

Page 90: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

� ��� �� ��� �����.

12. �� ��� ��

EMPNO SALARY RANK DENSE_RANK ROW_NUMBER

000010 52,750.00 1 1 1

000110 46,500.00 2 2 2

200010 46,500.00 2 2 3

000020 41,250.00 4 3 4

000050 40,175.00 5 4 5

000030 38,250.00 6 5 6

000070 36,170.00 7 6 7

000060 32,250.00 8 7 8

000220 29,840.00 9 8 9

200220 29,840.00 9 8 10

� ����, SALARY� �� �� 10�� ��� ����� ����. RANK � � ��� �

� �� ����. �� 2� ��� �� �� �� ����. � ��� �� �� � �� �

���. �� ��� 4 �� ����. RANK� � � ��� �� � � ��� 1� �� �� ��

�� �����. �� �� ��� �� �� �� ��� ����.

��, DENSE_RANK � � � �� �� �� � 3� ����. DENSE_RANK� �� ��

� � �� ���� 1� �� �� �� �� �����. �� �� ��� ��� ���.

ROW_NUMBER� ��� �� ��� �����. �� �� �� � �� �� �� �

��� ��� ����. � ��� ��� �� �� ��� � � �� �� �� �� � ��

��.

: �� �� ��

�� �� �� ��� ��� ���. �� ��� ���� ���� ���� , � ��� �� ��

� ��� � �� ��� �� �����.

SELECT WORKDEPT, INT(AVG(SALARY)) AS AVERAGE,RANK() OVER(ORDER BY AVG(SALARY) DESC) AS AVG_SALARY

FROM EMPLOYEEGROUP BY WORKDEPT

� ��� �� ��� �����.

13. �� ��� ��

WORKDEPT AVERAGE AVG_SALARY

B01 41,250 1

A00 40,850 2

E01 40,175 3

C01 29,722 4

78 IBM i: ������ SQL �����

Page 91: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

13. �� ��� �� (��)

WORKDEPT AVERAGE AVG_SALARY

D21 25,668 5

D11 25,147 6

E21 24,086 7

E11 21,020 8

: �� ��� �� ��

�� ��� ��� �� ���� ��� � �� ���� ����. PARTITION BY�� ����

��� ��� ��� ��� ��� � ����.

SELECT LASTNAME, WORKDEPT, BONUS,DENSE_RANK() OVER(PARTITION BY WORKDEPT ORDER BY BONUS DESC)

AS BONUS_RANK_IN_DEPTFROM EMPLOYEEWHERE WORKDEPT LIKE 'E%'

� ��� �� ��� �����.

14. �� ��� ��

LASTNAME WORKDEPT BONUS BONUS_RANK_in_DEPT

GEYER E01 800.00 1

HENDERSON E11 600.00 1

SCHNEIDER E11 500.00 2

SCHWARTZ E11 500.00 2

SMITH E11 400.00 3

PARKER E11 300.00 4

SETRIGHT E11 300.00 4

SPRINGER E11 300.00 4

SPENSER E21 500.00 1

LEE E21 500.00 1

GOUNOT E21 500.00 1

WONG E21 500.00 1

ALONZO E21 500.00 1

MENTA E21 400.00 2

: � � � ���� �� � �� ��

��� �� �� �� 5�� ��� ���� � ��� ���. ���� department ���� ���

� �� ��� �����. �� � ��� ���� �� �������, ROW_NUMBER ��

���� � �� ��� �� ����. ORDER BY ORDER OF table�� ���� ��� � ���

�.

SQL ����� 79

Page 92: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

SELECT ROW_NUMBER() OVER(ORDER BY ORDER OF EMP),EMPNO, SALARY, DEPTNO, DEPTNAME

FROM (SELECT EMPNO, WORKDEPT, SALARYFROM EMPLOYEEORDER BY SALARY DESCFETCH FIRST 5 ROWS ONLY) EMP,

DEPARTMENTWHERE DEPTNO = WORKDEPT

� ��� �� ��� �����.

15. �� ��� ��

ROW_NUMBER EMPNO SALARY DEPTNO DEPTNAME

1 000010 52,750.00 A00 SPIFFY COMPUTER

SERVICE DIV.

2 000110 46,500.00 A00 SPIFFY COMPUTER

SERVICE DIV.

3 200010 46,500.00 A00 SPIFFY COMPUTER

SERVICE DIV.

4 000020 41,250.00 B01 PLANNING

5 000050 40,175.00 E01 SUPPORT SERVICES

� �� ��� �� ��

�� �� �� ��� � ���� ���. �� ���� �� ���� �� ��� ����� �

�� �� �� ����� � �� �� � ����. � ��� ����� �� �

�� � ��� ��� � ����.

i� DB2��� �� ��, �� �� ��, ��� �� ��, �� �� ��, ��� �� �� � �� �

�� �� ��� ��� �����.

�� �� �� ���

� ��� ���� ��� � �� ��� �����.

v �� �� �� , ����(�� ���)�� � �� �� ���� ���. �� ��

���� ��� ���. �� ���� USING�� ���� ����� ���� � ��� �

� ��� � ��� � ����.

v ��� �� ��� ��� �� SELECT *� ���� , SQL� � � ���� ��

� ���� �� � ���� �� � ��� �����.

v FROM�� �� � ��� �� ��� �� ��� �� ��� ��� ���.

v �� ���, ���� UCS-2 �� UTF-16 ��� � � �� ����.

�� ��:

�� ��� �� � ��� �� �� �� � ����� �����. ��� ��� �� � ��

�� ���� ��� ����.

80 IBM i: ������ SQL �����

Page 93: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� ��� ����, ���� � �� �� �� ��(�� ��) ���� �� �� �� ���

� � ��� �� �����. SQL� ��� �� �� ��� ���� �� ��� ���� ���

�� ��� �� ���� � �����. �� ��� ���� ��� �����. JOIN ���

���� ��� WHERE�� ���� �����.

����� �� ��� �� �� ��� �� ��, � � ���� ��� ��� ���. �,

CORPDATA.EMPLOYEE ���� EMPNO � LASTNAME � CORPDATA.PROJECT ����

PROJNO � ����. �� ‘S’ �� �� ��� ���� ��� ��� ���. � ��� ����

�� ���� ���� ���.

JOIN ��� ��� �� ��:

�� �� ��� ���� ��, ���� ��� �� ��� � ���� ���� FROM�� �

���.

�� ��� ON �� ��� ���� ���� �� ��� �� ��� ��� ��� ����

�. ��� �� � ���� ����, �� ��� ��� ���. ON��� AND ��� ���

� � �� �� ��� ��� � ����. �� ��� ���� �� �� ��� WHERE�� ���

�� ON�� �� ��� �� �����.

SELECT EMPNO, LASTNAME, PROJNOFROM CORPDATA.EMPLOYEE INNER JOIN CORPDATA.PROJECT

ON EMPNO = RESPEMPWHERE LASTNAME > 'S'

� ����, ��� ���� EMPNO � RESPEMP � ���� ���� �� �����. �� ‘S’

���� ���� ��� �����, � �� ��� WHERE��� �����.

� ��� �� ��� �����.

EMPNO LASTNAME PROJNO

000250 SMITH AD3112

000060 STERN MA2110

000100 SPENSER OP2010

000020 THOMPSON PL2100

WHERE�� ��� �� ��:

WHERE�� ���� INNER JOIN ���� ���� �� �� ��� �����, WHERE��� ��

��� �� � ��� � ������.

��� ���� � � ���� FROM�� ����.

SELECT EMPNO, LASTNAME, PROJNOFROM CORPDATA.EMPLOYEE, CORPDATA.PROJECTWHERE EMPNO = RESPEMPAND LASTNAME > 'S'

SQL ����� 81

Page 94: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

� ��� �� ��� �� ��� �����.

USING�� �� �� ��:

�� ��� ���� ��� ���� USING�� ��� � ����. USING�� �� ���� � �

��� ���� �� � �� � ��� �� �����.

�� ��, �� ����� USING�� ������.

SELECT EMPNO, ACSTDATEFROM CORPDATA.PROJACT INNER JOIN CORPDATA.EMPPROJACTUSING (PROJNO, ACTNO)WHERE ACSDATE > '1982-12-31';

� ���� ��� ���� �� ���� �� �� ��� ����.

SELECT EMPNO, ACSTDATEFROM CORPDATA.PROJACT INNER JOIN CORPDATA.EMPPROJACT

ON CORPDATA.PROJACT.PROJNO = CORPDATA.EMPPROJACT.PROJNO ANDCORPDATA.PROJACT.ACTNO = CORPDATA.EMPPROJACT.ACTNO

WHERE ACSTDATE > '1982-12-31';

�� �� ��:

�� �� ��� �� ��� ���� �� �� ��� , � ���� ���� � � � ��

�� �� ��� ��� �� �����.

�� ��� ��� �� ��� " �� �� ����� ��� ���. �� �� ����� ���

�� ��� �� ���. �� ��� �� ‘S’ �� �� ���, � ���� ��� ����

�����.

SELECT EMPNO, LASTNAME, PROJNOFROM CORPDATA.EMPLOYEE LEFT OUTER JOIN CORPDATA.PROJECT

ON EMPNO = RESPEMPWHERE LASTNAME > 'S'

� ��� ���� ���� ��� � � ��� ���. � ��� ��� ����, ����

���� ��� �����.

EMPNO LASTNAME PROJNO

000020 THOMPSON PL2100

000060 STERN MA2110

000100 SPENSER OP2010

000170 YOSHIMURA -

000180 SCOUTTEN -

000190 WALKER -

000250 SMITH AD3112

000280 SCHNEIDER -

000300 SMITH -

000310 SETRIGHT -

82 IBM i: ������ SQL �����

Page 95: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

EMPNO LASTNAME PROJNO

200170 YAMAMOTO -

200280 SCHWARTZ -

200310 SPRINGER -

200330 WONG -

�: RRN �� �� ���� �� �� �� �� �� ���� ���� �� ���� � �� �

� �� ��� ���� ��� �� �� 0 �� �����.

�� �� ��:

��� �� ��� �� ��� ���� �� �� � � ���� �� � � ���� ���

�� �� �� � �� ��� �����. � �� �� ���� �� �� �� ��� ����.

�� �� �� ��� �� ��� ��� �� ��� �� ���� �� ��� � ����.

SELECT EMPNO, LASTNAME, PROJNOFROM CORPDATA.PROJECT RIGHT OUTER JOIN CORPDATA.EMPLOYEE

ON EMPNO = RESPEMPWHERE LASTNAME > 'S'

� ��� ��� �� �� �� �� ��� ����.

� ��:

�� �� ��� � ���� ���� �� � � ���� �� �����.

��� �� ���� ����, �� ������ ��� � ��� �����.

SELECT EMPNO, LASTNAME, PROJNOFROM CORPDATA.EMPLOYEE EXCEPTION JOIN CORPDATA.PROJECT

ON EMPNO = RESPEMPWHERE LASTNAME > 'S'

� ��� �� ��� �����.

EMPNO LASTNAME PROJNO

000170 YOSHIMURA -

000180 SCOUTTEN -

000190 WALKER -

000280 SCHNEIDER -

000300 SMITH -

000310 SETRIGHT -

200170 YAMAMOTO -

200280 SCHWARTZ -

200310 SPRINGER -

200330 WONG -

SQL ����� 83

Page 96: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

NOT EXISTS ��� ���� �� ��� �� ��� ��� � ����. � ��� ��� �� ���

� �� ��� � ����.

SELECT EMPNO, LASTNAMEFROM CORPDATA.EMPLOYEEWHERE LASTNAME > 'S'AND NOT EXISTS

(SELECT * FROM CORPDATA.PROJECTWHERE EMPNO = RESPEMP)

� ���� �� �� � PROJECT ����� �� ��� � �� ����.

�� �� ��� ���� ����� ���� �� �� ��� �� ��� ����.

�� ��:

�� ��(���� � ���� � )� � � ���� � �� � ���� � �� ���� �

� ���� �����.

�� ���� � �� � ���� �� � �� ����. �� ���� � � ��� �� ���

��� � ����.

�� ��� �� ���� ��� � ����. JOIN ��� �����, WHERE�� ���� �

FROM��� � � ���� ���� ��� �� �� ���� ����.

�� ���� ��� �����.

16. ��� A

ACOL1 ACOL2

A1 AA1

A2 AA2

A3 AA3

17. ��� B

BCOL1 BCOL2

B1 BB1

B2 BB2

�� select�� �� ��� ����.

SELECT * FROM A CROSS JOIN B

SELECT * FROM A, B

� SELECT� ��� �� ���� ��� �����.

ACOL1 ACOL2 BCOL1 BCOL2

A1 AA1 B1 BB1

A1 AA1 B2 BB2

84 IBM i: ������ SQL �����

Page 97: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

ACOL1 ACOL2 BCOL1 BCOL2

A2 AA2 B1 BB1

A2 AA2 B2 BB2

A3 AA3 B1 BB1

A3 AA3 B2 BB2

�� �� ��:

�� � ��� �� ��� ����� �� �� ��� ��� � �� ��� �� �����. �

� �� �� ��� ��� � �� ��� �� �� �����.

�� ��� �� � ����� ��� ������. ��� ��� �� ����� �� �� ��

��� ��� � �� � ��� � �� ���. �� ��� �� ‘S’ ��� ����� ��

�� �� �� ���� � ���� ��� � �����.

SELECT EMPNO, LASTNAME, PROJNOFROM CORPDATA.EMPLOYEE FULL OUTER JOIN CORPDATA.PROJECT

ON EMPNO = RESPEMPWHERE LASTNAME > 'S'

� ��� � ����� � ��� ��� �� �� ��� �� �� �����. ��� ���

����.

EMPNO LASTNAME PROJNO

000020 THOMPSON PL2100

000060 STERN MA2110

000100 SPENSER OP2010

000170 YOSHIMURA -

000180 SCOUTTEN -

000190 WALKER -

000250 SMITH AD3112

000280 SCHNEIDER -

000300 SMITH -

000310 SETRIGHT -

200170 YAMAMOTO -

200280 SCHWARTZ -

200310 SPRINGER -

200330 WONG -

�� ���� �� �� �:

�� ��� ��� ��� �� � ��� ���� ���� ���.

SQL ����� 85

Page 98: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� �� , � ��� � ��� �� ����(�� )� ����� EMPLOYEE ��� ,

DEPARTMENT ��� � PROJECT ���� ���� ��� ���� ���. �� ��� �� � �

�� �����.

SELECT EMPNO, LASTNAME, DEPTNAME, PROJNOFROM CORPDATA.EMPLOYEE INNER JOIN CORPDATA.DEPARTMENT

ON WORKDEPT = DEPTNOLEFT OUTER JOIN CORPDATA.PROJECT

ON EMPNO = RESPEMPWHERE LASTNAME > 'S'

EMPNO LASTNAME DEPTNAME PROJNO

000020 THOMPSON PLANNING PL2100

000060 STERN MANUFACTURING SYSTEMS MA2110

000100 SPENSER SOFTWARE SUPPORT OP2010

000170 YOSHIMURA MANUFACTURING SYSTEMS -

000180 SCOUTTEN MANUFACTURING SYSTEMS -

000190 WALKER MANUFACTURING SYSTEMS -

000250 SMITH ADMINISTRATION SYSTEMS AD3112

000280 SCHNEIDER OPERATIONS -

000300 SMITH OPERATIONS -

000310 SETRIGHT OPERATIONS -

� � � ��

��� ��� ���� � �� ���� ��� � ����.

� ��� ���� �� � ��� ���� �� � �� ��� ��� ��� � ���

�. ��� ��� � ��� ��(� ����� � )� �� ��� ���� ���� �

���.

� ��� ��� FROM��� �� �� �����. �� ��, ��� ��, �� ��, � ���

� ���� ��� �� ���� ��� ������. ��� ��� DEPARTMENT ���� �

�� ��� DEPARTMENT ���� EMPLOYEE ��� � �� ���, ���� EMPLOYEE �

��� ����. FROM��� ��� ��� ���� � ��� � ���� �� � ����. �

� � ��� �� ��� ��� T2� ���� � ���� ��� � ����. �� �� �

� T2� ���� � ����� � (� , MAXSAL � WORKDEPT)� �����. �

��� ���� � MAX(SALARY) � �� ��� ��� �� ���� � �����

�. AS�� �� ���� � �����.

SELECT MGRNO, T1.DEPTNO, MAXSALFROM CORPDATA.DEPARTMENT T1,

(SELECT MAX(SALARY) AS MAXSAL, WORKDEPTFROM CORPDATA.EMPLOYEE E1GROUP BY WORKDEPT) T2

WHERE T1.DEPTNO = T2.WORKDEPTORDER BY DEPTNO

86 IBM i: ������ SQL �����

Page 99: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� ��� ��� ����.

MGRNO DEPTNO MAXSAL

000010 A00 52750.00

000020 B01 41250.00

000030 C01 38250.00

000060 D11 32250.00

000070 D21 36170.00

000050 E01 40175.00

000090 E11 29750.00

000100 E21 26150.00

SELECT�, INSERT� �� CREATE VIEW��� �� � �� �� ��� ��� ��� � ��

��. �� ��� �� �� ���� ���� �� �� ��� ��� ��� � ����. �

� ��� ��� �� WITH ��� ���.

�� ��, �� �� ��� �� ���� ��� ��� ��� ���� ��� ������.

�� ��� � � ��� �� ��� ���, �� ‘D’� ���� � ��� �� ‘E’� ���� �

��� ��� ��� ��� ���. �� ��� ��� ���� � ��� �� ���� �

� � ����. ��, � ���� ���� ���. � , �� DT���. �� ��, WHERE�

� ���� SELECT�� ���� �� ��� ���� ���� �� ��� � ����. � ��

� DT��� AVGSAL � ��� ��� ������. UNION� ���� �� ‘E’� �� ���

�� ‘D’� �� ��� �����.

WITH DT AS (SELECT E.WORKDEPT AS DEPTNO, AVG(SALARY) AS AVGSALFROM CORPDATA.DEPARTMENT D , CORPDATA.EMPLOYEE EWHERE D.DEPTNO = E.WORKDEPTGROUP BY E.WORKDEPT)

SELECT 'E', MAX(AVGSAL), MIN(AVGSAL) FROM DTWHERE DEPTNO LIKE 'E%'UNIONSELECT 'D', MAX(AVGSAL), MIN(AVGSAL) FROM DTWHERE DEPTNO LIKE 'D%'

�� ��� ��� ����.

MAX(AVGSAL) MIN(AVGSAL)

E 40175.00 21020.00

D 25668.57 25147.27

‘XXX’ ��� ��� �� � 1000� �� � �� 5� ��(� �� �� ��)� ���� ��� �

� ������� �� ���� ������.

WITH X AS (SELECT ORDER_ID, CUST_IDFROM ORDERSORDER BY ORD_DATE DESCFETCH FIRST 1000 ROWS ONLY),

SQL ����� 87

Page 100: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

Y AS (SELECT CUST_ID, LINE_ID, ORDER_QTYFROM X, ORDERLINEWHERE X.ORDER_ID = ORDERLINE.ORDER_ID)

SELECT LINE_IDFROM (SELECT LINE_ID

FROM YWHERE Y.CUST_ID IN (SELECT DISTINCT CUST_ID

FROM YWHERE LINE.ID = 'XXX' )

GROUP BY LINE_IDORDER BY SUM(ORDER_QTY) DESC)

FETCH FIRST 5 ROWS ONLY

� � �� ��� ��(X)� �� �� 1000� �� ��� �����. ��� ���� ����

� � � � � � �� 1000�� �� ���� �����.

� �� ��� ��(Y)� �� �� 1000� ��� � �� ���� ��� 1000� �� �

�� �� � �� �, � ��, � �� ��� �����.

� select�� � ���� XXX ��� ��� �� 1000� ��� ��� �� �� � ��

� �����. XXX� ��� �� �� �� ��� � ���� ����� ��� � �� � ��

�� � ���.

�����, �� �� � ���� ��� � ����� �� 5� �� ����.

�� �� ��

� ������ ��� � ���� �� � � ���. � ��� ��� ���� ��

� �� ��� �� �� � �� ��� � ����.

�� ��, �� (BOM) ������ �� � ���� �� �� ��� �� � � ���. �� �

�, ��� �� ��� �� � ��� ���� � ����. �� ��� ��� �� ���� ���

� � ����. �� ��� ��� ��� �� � ��� �� �� ���� ���� � � �� �

��� ��� � ����.

�� �� �� ����� ��� �� �� �� � ���� �� ��� �����. ���� ���

� ��� �� � ���� ��� ����.

CREATE TABLE FLIGHTS (DEPARTURE CHAR(20),ARRIVAL CHAR(20),CARRIER CHAR(15),FLIGHT_NUMBER CHAR(5),PRICE INT)

INSERT INTO FLIGHTS VALUES('New York', 'Paris', 'Atlantic', '234', 400)INSERT INTO FLIGHTS VALUES('Chicago', 'Miami', 'NA Air', '2334', 300)INSERT INTO FLIGHTS VALUES('New York', 'London', 'Atlantic', '5473', 350)INSERT INTO FLIGHTS VALUES('London', 'Athens' , 'Mediterranean', '247', 340)INSERT INTO FLIGHTS VALUES('Athens', 'Nicosia' , 'Mediterranean', '2356', 280)INSERT INTO FLIGHTS VALUES('Paris', 'Madrid' , 'Euro Air', '3256', 380)INSERT INTO FLIGHTS VALUES('Paris', 'Cairo' , 'Euro Air', '63', 480)

88 IBM i: ������ SQL �����

Page 101: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

INSERT INTO FLIGHTS VALUES('Chicago', 'Frankfurt', 'Atlantic', '37', 480)INSERT INTO FLIGHTS VALUES('Frankfurt', 'Moscow', 'Asia Air', '2337', 580)INSERT INTO FLIGHTS VALUES('Frankfurt', 'Beijing', 'Asia Air', '77', 480)INSERT INTO FLIGHTS VALUES('Moscow', 'Tokyo', 'Asia Air', '437', 680)INSERT INTO FLIGHTS VALUES('Frankfurt', 'Vienna', 'Euro Air', '59', 200)INSERT INTO FLIGHTS VALUES('Paris', 'Rome', 'Euro Air', '534', 340)INSERT INTO FLIGHTS VALUES('Miami', 'Lima', 'SA Air', '5234', 530)INSERT INTO FLIGHTS VALUES('New York', 'Los Angeles', 'NA Air', '84', 330)INSERT INTO FLIGHTS VALUES('Los Angeles', 'Tokyo', 'Pacific Air', '824', 530)INSERT INTO FLIGHTS VALUES('Tokyo', 'Hawaii', 'Asia Air', '94', 330)INSERT INTO FLIGHTS VALUES('Washington', 'Toronto', 'NA Air', '104', 250)

CREATE TABLE TRAINS(DEPARTURE CHAR(20),ARRIVAL CHAR(20),RAILLINE CHAR(15),TRAIN CHAR(5),PRICE INT)

INSERT INTO TRAINS VALUES('Chicago', 'Washington', 'UsTrack', '323', 90)INSERT INTO TRAINS VALUES('Madrid', 'Barcelona', 'EuroTrack', '5234', 60)INSERT INTO TRAINS VALUES('Washington' , 'Boston' , 'UsTrack', '232', 50)

�� ���� ������ ���� ���� �� ��� � �� ��� �� � ����. Chicago�

� ��� ��� � �� ��� �� � �� � � �� �� ���� ���� �� ��

������. �� ��� � ��� ����.

WITH destinations (origin, departure, arrival, flight_count) AS(SELECT a.departure, a.departure, a.arrival, 1

FROM flights aWHERE a.departure = 'Chicago'

UNION ALLSELECT r.origin, b.departure, b.arrival, r.flight_count + 1

FROM destinations r, flights bWHERE r.arrival = b.departure)

SELECT origin, departure, arrival, flight_countFROM destinations

� ��� �� ��� �����.

18. �� ��� ��

ORIGIN DEPARTURE ARRIVAL FLIGHT_COUNT

Chicago Chicago Miami 1

Chicago Chicago Frankfurt 1

Chicago Miami Lima 2

Chicago Frankfurt Moscow 2

Chicago Frankfurt Beijing 2

Chicago Frankfurt Vienna 2

Chicago Moscow Tokyo 3

Chicago Tokyo Hawaii 4

SQL ����� 89

Page 102: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

� � ��� ��� �����. �� ��� ��� � � ��� �� �� ��� ���.

�� ��� ��� �� �� �� � � �� ����. � ����� Chicago�� �� !��

�� ���� �� flights ����� ����. �� ��� � �� �� ��� �� 1� ���

��.

� ��� � ��� �� ��� ��� �� �� �� �� �� ���� �� �� ����

�. �� � �� ��� ���. �� �� ���� �����. �� �� �� �� � ��

�� ��� ��� �� ������, �� ��� �� �� �� ��� ���� ���

� ������.

��� � � ����� ��� � � � ���� ��� � �� �� ���� �� ����.

��� � �� � ��� � �� ��� ���. � � �� � �� ���� ��� �� �

�� �����. �� � �� �� ��� �� �� �� ��� � � �� ��� ���� �

� � �� ��� ����. � �� ����� � ��� �� ��� � � ��� ���� �

�� � � �� �(+1) �� � � ����.

� �� � �� ��� ��� �����. �� � �� ��� ��� ��� �� �

�� ��� � ����.

CREATE VIEW destinations (origin, departure, arrival, flight_count) ASSELECT departure, departure, arrival, 1

FROM flightsWHERE departure = 'Chicago'

UNION ALLSELECT r.origin, b.departure, b.arrival, r.flight_count + 1

FROM destinations r, flights bWHERE r.arrival = b.departure)

� � ��� ��� �� � ��� � ��� ����. � ��� ��� �� � �� ���

���� �� �� �� �� �����.

: �� �� �

�� ��� � � ���� �� �� Chicago �� New York�� ��� ��� � �� !�

�� �� �� ������.

WITH destinations (departure, arrival, connections, cost) AS(SELECT a.departure, a.arrival, 0, price

FROM flights aWHERE a.departure = 'Chicago' OR

a.departure = 'New York'UNION ALLSELECT r.departure, b.arrival, r.connections + 1,

r.cost + b.priceFROM destinations r, flights bWHERE r.arrival = b.departure)

SELECT departure, arrival, connections, costFROM destinations

90 IBM i: ������ SQL �����

Page 103: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

� ��� �� ��� �����.

19. �� ��� ��

DEPARTURE ARRIVAL CONNECTIONS COST

Chicago Miami 0 300

Chicago Frankfurt 0 480

New York Paris 0 400

New York London 0 350

New York Los Angeles 0 330

Chicago Lima 1 830

Chicago Moscow 1 1,060

Chicago Beijing 1 960

Chicago Vienna 1 680

New York Madrid 1 780

New York Cairo 1 880

New York Rome 1 740

New York Athens 1 690

New York Tokyo 1 860

Chicago Tokyo 2 1,740

New York Nicosia 2 970

New York Hawaii 2 1,190

Chicago Hawaii 3 2,070

�� � �� �� ��� �� �� ��� � �� ��� ����. � ��� �� ��� ���

�� �� ��� �� ���� �� � �� ����.

: ��� ���� �� �

�� Chicago�� ����� ��� ��� �� ��� ��� � �� ��� �� �� ���

���.

�� ��� � ��� �����.

WITH destinations (departure, arrival, connections, flights, trains, cost) AS(SELECT f.departure, f.arrival, 0, 1, 0, price

FROM flights fWHERE f.departure = 'Chicago'

UNION ALLSELECT t.departure, t.arrival, 0, 0, 1, price

FROM trains tWHERE t.departure = 'Chicago'

UNION ALLSELECT r.departure, b.arrival, r.connections + 1 , r.flights + 1, r.trains,

r.cost + b.priceFROM destinations r, flights bWHERE r.arrival = b.departure

UNION ALLSELECT r.departure, c.arrival, r.connections + 1 ,

SQL ����� 91

Page 104: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

r.flights, r.trains + 1, r.cost + c.priceFROM destinations r, trains cWHERE r.arrival = c.departure)

SELECT departure, arrival, connections, flights, trains, costFROM destinations

� ��� �� ��� �����.

20. �� ��� ��

DEPARTURE ARRIVAL CONNECTIONS FLIGHTS TRAINS COST

Chicago Miami 0 1 0 300

Chicago Frankfurt 0 1 0 480

Chicago Washington 0 0 1 90

Chicago Lima 1 2 0 830

Chicago Moscow 1 2 0 1,060

Chicago Beijing 1 2 0 960

Chicago Vienna 1 2 0 680

Chicago Toronto 1 1 1 340

Chicago Boston 1 0 2 140

Chicago Tokyo 2 3 0 1,740

Chicago Hawaii 3 4 0 2,070

� ����� ��� �� �� ���� �� ��� ��� ��(���� �� �� �� ��

�)� ����. � �� �� �� �� � ���� ��� �� ��� �� �� �� � ��

(��� ����� ���� �� �� �� ��� ��� ���� �� �)� ����. � ����

��� �� �� ��� � �� ��� �� �� �� � � ����.

: DEPTH FIRST � BREADTH FIRST ��

�� ��� �� �� ��� ����� �� ��� ����� ��� �� �� � �

�� ��� ����.

�: �� �� � �� ���� ����. � �� ��� ��� �� ���� � �

� �� � ����.

� �� �� �� ���� ��� ���� ��� SEARCH BY�� �� �� � �� �

��� �� � �� � ���. �� ��� ���� , �� ��� �� �� � ��

��� ��, � ��� �� ��� ��� �����. �� �� ��� ���� , �� ��� �

��� �� � ��� �� � �� � � �����.

� � �� �� � �� � ���� ��� �� � ���� ���� �� �

� ������. � � �� �� �� ���� �� �� ��� ORDER BY��� �����

���. � � ORDER BY�� ���� ���, DEPTH FIRST �� BREADTH FIRST �� ���

�����.

92 IBM i: ������ SQL �����

Page 105: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

SEARCH BY � ��� �� ����. ���� ��� ���� � � �� �� ���

���� �� � �� ��� ���� ��� ���. � ���� ��� � ARRIVAL���.

�� ��� � ��� �����.

WITH destinations (departure, arrival, connections, cost) AS(SELECT f.departure, f.arrival, 0, price

FROM flights fWHERE f.departure = 'Chicago'

UNION ALLSELECT r.departure, b.arrival, r.connections + 1,

r.cost + b.priceFROM destinations r, flights bWHERE r.arrival = b.departure)

SEARCH DEPTH FIRST BY arrival SET ordcolSELECT *

FROM destinationsORDER BY ordcol

� ��� �� ��� �����.

21. �� ��� ��

DEPARTURE ARRIVAL CONNECTIONS COST

Chicago Miami 0 300

Chicago Lima 1 830

Chicago Frankfurt 0 480

Chicago Moscow 1 1,060

Chicago Tokyo 2 1,740

Chicago Hawaii 3 2,070

Chicago Beijing 1 960

Chicago Vienna 1 680

� �� ������ Chicago-to-Miami ��� ��� �� ��� Chicago-to-Frankfort �� ��

�� ��� � � ����.

� ���� �� ��� ��� � ��� ��� ��� � ��� ������.

WITH destinations (departure, arrival, connections, cost) AS(SELECT f.departure, f.arrival, 0, price

FROM flights fWHERE f.departure='Chicago'

UNION ALLSELECT r.departure, b.arrival, r.connections + 1,

r.cost + b.priceFROM destinations r, flights bWHERE r.arrival = b.departure)

SEARCH BREADTH FIRST BY arrival SET ordcolSELECT *FROM destinationsORDER BY ordcol

SQL ����� 93

Page 106: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

� ��� �� ��� �����.

22. �� ��� ��

DEPARTURE ARRIVAL CONNECTIONS COST

Chicago Miami 0 300

Chicago Frankfurt 0 480

Chicago Lima 1 830

Chicago Moscow 1 1,060

Chicago Beijing 1 960

Chicago Vienna 1 680

Chicago Tokyo 2 1,740

Chicago Hawaii 3 2,070

� �� ������ Chicago���� �� �� ��� �� ��� �� ��� � � ����. ���

� �� ��� ��� ���� ��� � ���.

: ��

� ����� � �� �� � ��� ��� ��� � �� �� �� �� ���� ���

����. ��� �� �� ��� ��� ���. CYCLE ��� ���� � ������ ���

� ����. � ��� � ��� ��� �� ��� � ���� �� � �� �� �� � ��

��� ��� ��� � �� ���.

�: �� �� � �� ���� ����. � �� ��� ��� �� ���� � �

� �� � ����.

��� ��� , ���� ��� �� ������. ���� �� �� � ����� �� Cairo

�� Paris�� ���� Paris�� Cairo�� ���� ����. �� �� ��� � ���� ���

� , ���� ���� �� ��� ��� ��� � �� � ����.

�� ��� � ��� �����.

INSERT INTO FLIGHTS VALUES('Cairo', 'Paris', 'Euro Air', '1134', 440)

WITH destinations (departure, arrival, connections, cost, itinerary) AS(SELECT f.departure, f.arrival, 1, price,

CAST(f.departure CONCAT f.arrival AS VARCHAR(2000))FROM flights fWHERE f.departure = 'New York'

UNION ALLSELECT r.departure, b.arrival, r.connections + 1 ,

r.cost + b.price, CAST(r.itinerary CONCAT b.arrival AS VARCHAR(2000))FROM destinations r, flights bWHERE r.arrival = b.departure)

CYCLE arrival SET cyclic_data TO '1' DEFAULT '0'SELECT departure, arrival, itinerary, cyclic_data

FROM destinationsORDER BY cyclic_data

94 IBM i: ������ SQL �����

Page 107: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

� ��� �� ��� �����.

23. �� ��� ��

DEPARTURE ARRIVAL ITINERARY CYCLIC_DATA

New York Paris New York Paris 0

New York London New York London 0

New York Los Angeles New York Los Angeles 0

New York Madrid New York Paris Madrid 0

New York Cairo New York Paris Cairo 0

New York Rome New York Paris Rome 0

New York Athens New York London Athens 0

New York Tokyo New York Los Angeles Tokyo 0

New York Paris New York Paris Cairo Paris 1

New York Nicosia New York London Athens Nicosia 0

New York Hawaii New York Los Angeles Tokyo Hawaii 0

� ����� ����� ��� ���� � ��� � ARRIVAL � CYCLE�� ���� ���

�. ��� ���, �� (� �� CYCLIC_DATA)� �� �� � �� �� �� � ‘1’�

����. �� �� ��� ��� � ‘0’� ���. ARRIVAL �� ��� ���, ����� ��

� � �� ���� ���� �� ��� ��� ����. ���� ��� � ��� ��� ���

� ��� �� ���� CYCLIC_DATA � ��� � ����.

UNION ���� �� � �� ��

UNION ��� ���� � ��� �� �� ���� �� �(fullselect)� ��� � ����.

SQL� UNION ��� ��� , ��� �� �� ���� �� ���� ��� � � �� �

� �� �� ���� ��� � �� ���� �� �� ���� �����. select�� ��� �

�� �� ��� ��� � ����.

� �� ����� �� � ���� �� � UNION� ���� �� ��� � ����. �� �

�, ��� �� �� �� �� ���� ��� � ����.

v �� D11� ��

v ���� ���� MA2112, MA2113 � AD3111� �� ��

�� ���� �� ����� ��� ���� �� ����. �� �� ��� ��� ��

����.

SELECT EMPNOFROM CORPDATA.EMPLOYEEWHERE WORKDEPT = 'D11'

UNIONSELECT EMPNOFROM CORPDATA.EMPPROJACTWHERE PROJNO = 'MA2112' OR

PROJNO = 'MA2113' ORPROJNO = 'AD3111'

ORDER BY EMPNO

SQL ����� 95

Page 108: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

� SQL�� ��� ��� ����� SQL� �� �� �� ��� �����.

1��. SQL� � � SELECT�� �����.

SELECT EMPNOFROM CORPDATA.EMPLOYEEWHERE WORKDEPT = 'D11'

��� ��� �� �� ���� �����.

CORPDATA.EMPLOYEE� EMPNO

000060

000150

000160

000170

000180

000190

000200

000210

000220

200170

200220

2��. SQL� � SELECT�� �����.

SELECT EMPNOFROM CORPDATA.EMPPROJACTWHERE PROJNO='MA2112' OR

PROJNO= 'MA2113' ORPROJNO= 'AD3111'

��� �� �� �� ���� �����.

CORPDATA.EMPPROJACT� EMPNO

000230

000230

000240

000230

000230

000240

000230

000150

000170

000190

000170

000190

000150

96 IBM i: ������ SQL �����

Page 109: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

CORPDATA.EMPPROJACT� EMPNO

000160

000180

000170

000210

000210

3��. SQL� �� �� �� ���� ��� , � �� ��� � ��� �� �����.

SELECT EMPNOFROM CORPDATA.EMPLOYEEWHERE WORKDEPT = 'D11'

UNIONSELECT EMPNO

FROM CORPDATA.EMPPROJACTWHERE PROJNO='MA2112' OR

PROJNO= 'MA2113' ORPROJNO= 'AD3111'

ORDER BY EMPNO

��� ���� �� �� �� �� ���� �����.

EMPNO

000060

000150

000160

000170

000180

000190

000200

000210

000220

000230

000240

200170

200220

UNION� ����

v UNION� � ��� �� � ��� ORDER BY�� ���� ���. � ����, ��� �

� � EMPNO� �� �� �����. ORDER BY�� �� �� ���� �� �

�� ���� �����. ORDER BY� ��� ���� ����.

v �� � �� �� �� ORDER BY�� ��� � ����. �� �� �� � select

�� � � �� �� �� �� � �����. AS�� ���� � ���� � �

� �� � ����.

SQL ����� 97

Page 110: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

SELECT A + B AS X ...UNIONSELECT X ... ORDER BY X

�� � �� ���� �� �� ��� ���� �� �� ������. ��� �� �

� �� �� ����� ��� ��� �����.

SELECT A + B ...UNIONSELECT X ... ORDER BY 1

� �� ��� �� �� ����� UNION�� � �� �� � ��� �� ��� ��� �

��. SQL� ��� ��� � ��� �� � �� �� �� �� �� ��� ���. ��

��, ��� ��� � ����.

SELECT A, B, 'A1' ...UNIONSELECT X, Y, 'B2'...

�� ��� � ��� � �� �� ���� ��� �� �(A1 �� B2)� ���. union�

�� �� , SQL� ��� SQL� ��� ���� �� � � � �� ��, SQL DESCRIBE

�� ��� ��� ��� SQLDA� �� � �� �����.

�: � �� UNION ��� �� �� ���� �� ����. � �� UNION �� �

���� ��� �� ��� �����.

�� ��

131 ���� �SQL�� � � � ���

� �� �� �� ��� � �� � � � �� ���� ��� �����. ��� ����

�� ��� ���� �� � ����.

�� ��

48 ���� �� �� � ���

�� ���� �� ��� ��� �� �� �� ���� � �� � ����. SELECT�� ����

�� ������.

UNION ALL ��� ��:

UNION ��� ���� �� ����� UNION �� UNION ALL ��� ������.

� ����� 95 ���� �UNION ��� ���� �� � ������ �� �� � ��� ��

���.

3��. SQL� �� �� �� ���� �����.

SELECT EMPNOFROM CORPDATA.EMPLOYEEWHERE WORKDEPT = 'D11'

UNION ALLSELECT EMPNO

98 IBM i: ������ SQL �����

Page 111: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

FROM CORPDATA.EMPPROJACTWHERE PROJNO='MA2112' OR

PROJNO= 'MA2113' ORPROJNO= 'AD3111'

ORDER BY EMPNO

��� �� �� �� �� ���� �����.

EMPNO

000060

000150

000150

000150

000160

000160

000170

000170

000170

000170

000180

000180

000190

000190

000190

000200

000210

000210

000210

000220

000230

000230

000230

000230

000230

000240

000240

200170

200220

UNION ALL ��� ���� �� ����. �� �� ��� ����.

(SELECT PROJNO FROM CORPDATA.PROJECTUNION ALLSELECT PROJNO FROM CORPDATA.PROJECT)UNION ALLSELECT PROJNO FROM CORPDATA.EMPPROJACT

SQL ����� 99

Page 112: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

� ���� ��� �� ��� �� ����.

SELECT PROJNO FROM CORPDATA.PROJECTUNION ALL(SELECT PROJNO FROM CORPDATA.PROJECTUNION ALLSELECT PROJNO FROM CORPDATA.EMPPROJACT)

�� UNION ���� �� SQL�� UNION ALL� � �, ��� ��� �� �� �� �

���. ��� � ��� ���� ����� �����. ��� �� ��� � �� ��

�� ��� , ���� �� ����� ���� ����� �����.

EXCEPT ��� ��

EXCEPT ��� � � �� �� �� ��� � �� �� ��� �� ��� �� �

� �����.

�� D11� �� ��� � ���� ���� MA2112, MA2113 � AD3111� �� ���

��� �� �� ���� ��� ���.

� ��� ���� MA2112, MA2113 � AD3111�� � �� �� �� D11� �� ��� ����

�.

SELECT EMPNOFROM CORPDATA.EMPLOYEEWHERE WORKDEPT = 'D11'

EXCEPTSELECT EMPNOFROM CORPDATA.EMPPROJACTWHERE PROJNO = 'MA2112' OR

PROJNO = 'MA2113' ORPROJNO = 'AD3111'

ORDER BY EMPNO

� SQL�� ��� ��� ����� SQL� �� �� �� ��� �����.

1��. SQL� � � SELECT�� �����.

SELECT EMPNOFROM CORPDATA.EMPLOYEEWHERE WORKDEPT = 'D11'

� ��� �� �� ���� �����.

CORPDATA.EMPLOYEE� EMPNO

000060

000150

000160

000170

000180

000190

100 IBM i: ������ SQL �����

Page 113: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

CORPDATA.EMPLOYEE� EMPNO

000200

000210

000220

200170

200220

2��. SQL� � SELECT�� �����.

SELECT EMPNOFROM CORPDATA.EMPPROJACTWHERE PROJNO='MA2112' OR

PROJNO= 'MA2113' ORPROJNO= 'AD3111'

� ��� �� �� �� ���� �����.

CORPDATA.EMPPROJACT� EMPNO

000230

000230

000240

000230

000230

000240

000230

000150

000170

000190

000170

000190

000150

000160

000180

000170

000210

000210

3��. SQL� � � �� �� ���� ���� � �� �� ����� ��� �� �� ��

� � �� ��� � ��� �� �����.

SELECT EMPNOFROM CORPDATA.EMPLOYEEWHERE WORKDEPT = 'D11'

EXCEPTSELECT EMPNO

FROM CORPDATA.EMPPROJACT

SQL ����� 101

Page 114: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

WHERE PROJNO='MA2112' ORPROJNO= 'MA2113' ORPROJNO= 'AD3111'

ORDER BY EMPNO

� ��� ���� �� �� �� �� ���� �����.

EMPNO

000060

000200

000220

200170

200220

INTERSECT ��� ��

INTERSECT ��� �� �� �� �� ��� ���� �� �� �� �����.

�� D11� �� ��� ���� ���� MA2112, MA2113 � AD3111� �� ��� �� �

� �� ���� ��� ���.

INTERSECT ��� �� �� �� �� �� ��� �����. �, � ��� ���� MA2112,

MA2113 � AD3111��� � �� D11� �� ��� �����.

SELECT EMPNOFROM CORPDATA.EMPLOYEEWHERE WORKDEPT = 'D11'

INTERSECTSELECT EMPNOFROM CORPDATA.EMPPROJACTWHERE PROJNO = 'MA2112' OR

PROJNO = 'MA2113' ORPROJNO = 'AD3111'

ORDER BY EMPNO

� SQL�� ��� ��� ����� SQL� �� �� �� ��� �����.

1��. SQL� � � SELECT�� �����.

SELECT EMPNOFROM CORPDATA.EMPLOYEEWHERE WORKDEPT = 'D11'

� ��� �� �� ���� �����.

CORPDATA.EMPLOYEE� EMPNO

000060

000150

000160

000170

102 IBM i: ������ SQL �����

Page 115: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

CORPDATA.EMPLOYEE� EMPNO

000180

000190

000200

000210

000220

200170

200220

2��. SQL� � SELECT�� �����.

SELECT EMPNOFROM CORPDATA.EMPPROJACTWHERE PROJNO='MA2112' OR

PROJNO= 'MA2113' ORPROJNO= 'AD3111'

� ��� �� �� �� ���� �����.

CORPDATA.EMPPROJACT� EMPNO

000230

000230

000240

000230

000230

000240

000230

000150

000170

000190

000170

000190

000150

000160

000180

000170

000210

000210

3��. SQL� � � �� �� ���� ���� � �� �� ���� �� � ��� �

� �� ��� � �� ���� ��� �� ��� �� �����.

SELECT EMPNOFROM CORPDATA.EMPLOYEEWHERE WORKDEPT = 'D11'

INTERSECT

SQL ����� 103

Page 116: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

SELECT EMPNOFROM CORPDATA.EMPPROJACTWHERE PROJNO='MA2112' OR

PROJNO= 'MA2113' ORPROJNO= 'AD3111'

ORDER BY EMPNO

� ��� ���� �� �� �� �� ���� �����.

EMPNO

000150

000160

000170

000180

000190

000210

�� �� ��

SQL� ��� � � ��� ��� ���� ��� ����� � ��� ������.

SQL� � �� �� ��� � �� �� ��� ��� ��� � �� �� �� ��� ����

�.

v ��� ��� �� ��� �� ���� ����.

v SQLCA� SQLWARN0 � SQLWARN1� � ‘W’� ���� SQL �� ���

RETURNED_SQLSTATE� ‘01004’� ����.

v ���� ��(�� )� �� �� � ��� ����.

SQL� ��� �� � ��� �� ��� ���� �� �� ��� ����.

v ��� SELECT ���� ���� �� ��� �� ��� �� ���� ��� ��

:

– SQL� ��� �� ��� ���� ���� ��� �� -2� �����.

– SQL� � �� �� ��� �� ���� �����.

– SQL� �� SQLCODE� �����.

v ���� ��� ���� �� , SQL� ���� �� SQLCODE� �����.

��� �� ��� ��� ����.

v +138 - ����� �� �� ���� ����.

v +180 - ��, �� �� ��� � ��� � ��� ���� ����.

v +180 - ��, �� �� ��� � ��� �� ��� �� � ��.

v +183 - ��/�� ���� ���� �� �����. �� �� �� ��� � ��� �� ��

�� ��� � �� ����.

104 IBM i: ������ SQL �����

Page 117: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

v +191 - ��(MIXED) ���� � �������.

v +304 - �� �� ��(�: ��, ��� �� 0�� ��)���.

v +331 - ��� ��� � ���.

v +364 - DECFLOAT �� �����.

v +420 - CAST �� ��� ���� ����.

v +802 - ��� �� �� ��� �� �����.

��� �� ��� , SQLCA� ����� �� ��� � ���. ��� �� � �� � ��

�� ���� ��� -2� ����.

� � FETCH��� ��� �� ��� , SQLSTATE� � � �� ���� SQL ��

�� ��� �� �� ����. SQL� � � ���� ���� �� SQLSTATE� � ��

� �� ��� SQL �� ��� �����.

�� �� SQL�� , ��� SQLSTATE� SQL �� ��� � ���.

�� �� � ���� DISTINCT� � � ���� � ���� �� �� ���� �

� , ��� � � ���� ���� ���� �����. � � � ���� , ���� ��

���� ����.

��� �� ��� ORDER BY�� ��� ��� �� �� ����.

v SELECT INTO �� FETCH�� ��� ��� ���� ��� �� ��� �� ��� ��

�� ��� ORDER BY��� ���� , �� ��� �� �� ��� � ���. �

��� � �� ����(�� �� ��� ��). � ��� ��� ��� �� ���� �� ��

� ���� �����.

v � ���� ��� ���� �� ��� �� ��� �� �� ��� ORDER BY���

���� , �� � �� �� ��� � ���(�� �� ��� ��). ORDER BY��

� � ���� �� , �� � �� ��� � ���. ORDER BY�� � � � ���

� �� , �� �� �� � � � �� �� �� ��� � ���.

– ��� �� ��� *MDY, *DMY, *YMD �� *JUL �� ��, ��� ��� �� ��

� ��� �� �� ��� ����.

– ��� �� �� ��� ��� �� ���.

– ��� �� �� ���� �� �� �� �������.

INSERT�� �� � ��

����� �� � � �� � �� ����� INSERT� ��� ������.

�� �� ��� INSERT�� ���� � �� ����� �� ��� � ����.

v ��� � �� INSERT�� �� �����.

SQL ����� 105

Page 118: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

v �� ��� �� �� �� � �� ���� SQL� ��� �� INSERT�� select�� ��

��.

v ��� INSERT� ��� ���� � �� �����.

���� �� �� ��, � � ��� �� � � � NOT NULL ���� �� �� �

��� ���. ����� �� �� ���� �� INSERT�� ��� ����.

INSERT INTO table-name(column1, column2, ... )

VALUES (value-for-column1, value-for-column2, ... )

INTO�� �� ���� � �� �����. VALUES�� INTO�� �� �� �� �����.

���� ��� � �� �� ��� ����.

v ��. VALUES�� �� �� �����.

v ��. �� NULL� ���� ��� �����. � ��� � � �� ��� ���� ��,

��� �� ��� ����.

v ��� ��. ��� ��� ��� �����.

v ��� ��. ��� ��� ��� �����.

v �� ����. �� ���� �� �����(�: USER).

v ��. ���� ��� ��� �� �����.

v ��� �� �(fullselect). select�� �� �� �� �����.

v DEFAULT ��. � ��� �� �����. �� ��� �� ���� ��� ��� ����

���. ��� �� ��� ����.

INSERT�� ���� �� �� VALUES�� �� ���� ���. ���� �� � VALUES

�� �� �� �� �� � ���� �� � ����. � ��� �� ��� VALUES

�� ��� �� DEFAULT� ��� � ����. � � ��� �� � �����.

��� �� ���, �� ���� �� � �� ���� �� ����.

v ���� INSERT�� �� ����.

v �� �� �� �� �� ����� � � � ����.

v ���� � �� ��� � �� �� ����. ����� � �� �� ���� INSERT�

� ��� �� ����.

��� ����� ���� ��� � ��� , � ����� �� ����� �� ����

��� ���. ��� �� �����. � ��� �� ��� �� ��� �� � �����.

��� �� ��� � � DEFAULT� ��� , SQL� � ��� ��� ��� �� �

������. � �� �� ��� �� �� ��� ����� � ��� ( ��� NOT

NULL� ���� ��) SQL� ��� � ������.

v �� � ��� �� 0���.

v � �� �� �� ��� � ���� �����.

106 IBM i: ������ SQL �����

|

Page 119: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

v � �� 2� � ���� 16� 0���.

v �� �� ��, ��� �� 2� � LOB � ���� 0 �� ������.

v ��, �� � ��� � ��� �� �� ��, �� �� ��� ���. �� ��� ��

�� ��� ��/�� �� ��� ��� � ����� �����. �� ��� �� ��� �

�� ��� �� �� �� �����.

v ��� � � ��� �� DLVALUE(‘’,‘URL’,‘’)� ����.

v � �� � ��� �� ��� �� ��� ��� ����.

v AS IDENTITY� �� �� ROWID � ������ ���� ��� �� ����.

v XML � ��� ��� ���� ���� ���.

����� ���� �� �� �� �� ��� �� ���� � � ��� �� � ����. �

� ��� � �� ��� �� � ��� ���� ��� �� � ����.

v ���� 1� �, � � �� � � � ��� �� ���� ����. �� SQL� SQLCODE -803

� �����.

v ���� 1� �, � � �� � � � �� �� � �� ��� � ����.

SQL� INSERT�� ���� � ��� ���� ��� ��� ����. COMMIT(*ALL),

COMMIT(*CS), COMMIT(*CHG) �� COMMIT(*RR)� ���� �� �� ���� ����. �

���� �� �� �� ��(select�� �� INSERT� ��� insert� ) �����.

COMMIT(*NONE)� ���� �� �� �� ���� ����.

SQL� ���� ���� �� �� ��� ��� *YES� �����. � ������ ���

� �� ��� � ����� �� ���� � ����. CHGPF ��� ���� ��� *NO�

�� � ����. ��� INSERT� �� �� ��� �� ��� � ����.

�� ���� ��� �� ��� �� � ��.

�� � �� ���� SQLCA� SQLERRD(3) �� �� 1���.

�: ��� INSERT� select�� �� INSERT� � ��� �� ��� � ����. ����

� �� SQLCA� SQLERRD(3)� ����. �� GET DIAGNOSTICS�� ROW_COUNT ��

���� ��� �� ����.

�� ��

INSERT

VALUES�� �� � ��

���� � � �� � �� ����� INSERT��� VALUES�� ������.

� ��� DEPARTMENT ���� � �� ���� ����. � �� � ��� ����.

v �� ��(DEPTNO)� ‘E31’���.

v �� �(DEPTNAME)� ‘ARCHITECTURE’���.

SQL ����� 107

|

Page 120: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

v ��� ��(MGRNO)� ‘00390’���.

v � ��(ADMRDEPT) ��� ‘E01’���.

� � �� �� INSERT�� ��� ����.

INSERT INTO DEPARTMENT (DEPTNO, DEPTNAME, MGRNO, ADMRDEPT)VALUES('E31', 'ARCHITECTURE', '00390', 'E01')

�� VALUES�� ���� ���� � �� ��� � ����. �� ��� PROJECT ����

�� �� �����. ���� ��(PROJNO), ���� �(PROJNAME), �� ��(DEPTNO) � �

��(RESPEMP) �� � ���� �����. ���� �� ��(PRSTDATE) �� �� ��� ��

���. ���� ��� �� ���� ��� �� ��� �� ����.

INSERT INTO PROJECT (PROJNO, PROJNAME, DEPTNO, RESPEMP, PRSTDATE)VALUES('HG0023', 'NEW NETWORK', 'E11', '200280', CURRENT DATE),

('HG0024', 'NETWORK PGM', ''E11", '200310', CURRENT DATE)

select�� �� � ��

INSERT� ��� select�� ���� select�� �� ����� ���� �� ��� �� ����� �

� ���� �� � ����.

�� ��� INSERT�� �� � �� �� ��� �� ���� �� ��� ���� ���� ���

� ����. �� ��, ����� �� � ��� �� ��� ��� ���� ��� �����.

EMPNUMBER, PROJNUMBER, STARTDATE � ENDDATE� �� EMPTIME�� �� ���� �

�� � �� INSERT�� ���� ���� ����.

INSERT INTO CORPDATA.EMPTIME(EMPNUMBER, PROJNUMBER, STARTDATE, ENDDATE)

SELECT EMPNO, PROJNO, EMSTDATE, EMENDATEFROM CORPDATA.EMPPROJACT

INSERT�� �� select�� ���� ��� �� ���� select�� ����. FOR READ ONLY,

FOR UPDATE �� OPTIMIZE�� ��� , �� ��, � � ��� ���� ���� �� �

����. SQL� �� ��� ��� �� �� ���� ���� ���� �����. � ����� �

� ���� �� ���� �� ����� �� ���� � ��� ��� �� ����.

���� � �� ��� � �� ��� ��� ���.

�:

1. INSERT�� �� �� ���� ��� �� select�� � �� ��� ���.

2. ��� � ���� select�� � INSERT� ��� � ���� � �� ���� ���.

3. INSERT� �� select�� �� ���� �� �� �� ���� ���� �� ��

SQLCODE 100� �����. �� ���� ���� SQLCA� SQLERRD(3) ��� SQL

� ��� ��� � �� ��� ��� ����. � �� GET DIAGNOSTICS��

ROW_COUNT �� ����� �� �����.

108 IBM i: ������ SQL �����

Page 121: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

4. SQL� INSERT�� ���� � ��� ���� SQL� ��� ����. COMMIT(*CHG),

COMMIT(*CS), COMMIT (*ALL) �� COMMIT(*RR)� ���� , ���� �� �� �

��� � �� SQLCODE� �����. COMMIT(*NONE)� ���� �� ��� ��

�� ���� �����.

� �� INSERT�� �� � ��

��� INSERT�� ���� � INSERT��� � �� ���� ��� � ����.

��� INSERT�� REXX� ��� �� ���� �����. ���� ���� ���� ��� �

� ���� ���. ��� INSERT� � ���� ��� ���� �� � ��� ��� �

� ���� ���.

�� ��, 10�� ��� CORPDATA.EMPLOYEE ���� �����.

INSERT INTO CORPDATA.EMPLOYEE(EMPNO,FIRSTNME,MIDINIT,LASTNAME,WORKDEPT)

10 ROWS VALUES(:DSTRUCT:ISTRUCT)

DSTRUCT� ����� �� 5�� ��� �� �� ����. 5�� ��� EMPNO, FIRSTNME,

MIDINIT, LASTNAME � WORKDEPT� ����. DSTRUCT�� ���� 10�� �� ��� 10

��� ��� ����. ISTRUCT� ����� �� ��� �� ����. ISTRUCT�� ���

�� �� 10� ��� �� �� �� ��� ����.

��� INSERT�� ����� ��� ����� ���� � System i �� �� �����

� �� SQL ������ �� �����.

�� ��

�� SQL �����

�� ���� �� �� �� ��

�� ����� �� ���� ���� ���� , �� ��� ��� ���.

�� �� �� �� ���� ���� ���� , SQL� ��� ���� ����.

v �� �� �� � �

v �� �� 1� � , 1� � � ��

�� �� �� �� ���� ���� ���� :

v �� � � ���� �� �� � �� �� ���� ���� �� �� �� � �� ��� �

��.

v �� �� � � , �� �� �� �� �����. � �� �� �� �� � ,

� � �� �� INSERT� �����.

����� ���� ���(PROJECT)� ��� �� �� �� �� ������.

v �� ���� ���� �� ��(DEPTNO)� �� �� �

SQL ����� 109

Page 122: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

v �� ���� ���� �� ��(RESPEMP)� �� �� �

ALTER TABLE CORPDATA.PROJECT ADD CONSTRAINT RESP_DEPT_EXISTSFOREIGN KEY (DEPTNO)REFERENCES CORPDATA.DEPARTMENTON DELETE RESTRICT

ALTER TABLE CORPDATA.PROJECT ADD CONSTRAINT RESP_EMP_EXISTSFOREIGN KEY (RESPEMP)REFERENCES CORPDATA.EMPLOYEEON DELETE RESTRICT

�� ��� � REFERENCES�� ���� �� ��� ������. �� ���� 1� � �� �

� �� ��� � �� �� � �� ��� � ���� ��� ���.

PROJECT ���� ���� �� ��� �� ���� � DEPTNO �� �� DEPTNO �� ��

� ���(���� ���� DEPTNO� NOT NULL� ���� ��� ��� ���� ��). ��� �

� ���� � EMPNO �� ���� � RESPEMP �� ��� ���.

DEPARTMENT ���� ��� DEPTNO �(‘A01’)� � ��� �� INSERT�� �����.

INSERT INTO CORPDATA.PROJECT (PROJNO, PROJNAME, DEPTNO, RESPEMP)VALUES ('AD3120', 'BENEFITS ADMIN', 'A01', '000010')

�����, EMPLOYEE ���� EMPNO � ‘000011’� � ��� �� INSERT�� �����.

INSERT INTO CORPDATA.PROJECT (PROJNO, PROJNAME, DEPTNO, RESPEMP)VALUES ('AD3130', 'BILLING', 'D21', '000011')

DEPARTMENT ���� ��� DEPTNO � ‘E01’� � EMPLOYEE ���� ��� EMPNO

� ’000010’� �� ��� �� INSERT�� ���� �����.

INSERT INTO CORPDATA.PROJECT (PROJNO, PROJNAME, DEPTNO, RESPEMP)VALUES ('AD3120', 'BENEFITS ADMIN', 'E01', '000010')

ID �� ��

�� ID � �� ����� ���� �� ����� ��� � ����.

�� ��, ���� ORDERNO(ID ), SHIPPED_TO(varchar(36)) � ORDER_DATE(��) � ��

��. �� ���� ���� � ���� �� ��� � ����.

INSERT INTO ORDERS (SHIPPED_TO, ORDER_DATE)VALUES ('BME TOOL', 2002-02-04)

� ID � �� ���� ���� �� ����. �� DEFAULT ��� ���� � ����

��� �� ����.

INSERT INTO ORDERS (SHIPPED_TO, ORDER_DATE, ORDERNO)VALUES ('BME TOOL', 2002-02-04, DEFAULT)

�� ��� IDENTITY_VAL_LOCAL �� ���� ���� � �� �� ��� � ����.

�� ���� ID � �� �����(SELECT� ���� �� INSERT��� ��).

110 IBM i: ������ SQL �����

Page 123: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

INSERT INTO ORDERS OVERRIDING USER VALUE(SELECT * FROM TODAYS_ORDER)

� OVERRIDING USER VALUE� ���� SELECT� ID � �� �� ��� ID � �

� � �� ���� �����. GENERATED ALWAYS�� ���� ID � ���

OVERRIDING USER VALUE� ���� ���. �� GENERATED BY DEFAULT� �����

�. GENERATED BY DEFAULT ID � OVERRIDING USER VALUE� ���� ��� SELECT

�� � �� �� �����.

OVERRIDING SYSTEM VALUE� ���� ���� GENERATED ALWAYS ID � �� SELECT

� �� ����� ��� � ����. �� ��, �� ���� ������.

INSERT INTO ORDERS OVERRIDING SYSTEM VALUE(SELECT * FROM TODAYS_ORDER)

� INSERT�� SELECT� �� �����. ID � �� � �� ��� ����. OVERRIDING

SYSTEM VALUE�� ���� ��� GENERATED ALWAYS� ���� �� ID � �� ��

� � ���.

�� ��

27 ���� �ID �� � ��

ID � �� ���� �� ��� ��� ���� � �� ID �� ����.

�� �

��� ��

SELECT�� FROM�� INSERT�� ���� ���� � �� �� � ����.

���� �� ��� �� ���� , �� ��� �� �� �� � ����. �� �� �� �

� ���.

v � (�: ID, ROWID �� � � ��� ) �

v � ���� ��� �

v � � �� ��� �� ���� �� �� �� �

v �� �� ���� �� � �

�� ����� ��� �� �� ���� �����.

CREATE TABLE EMPSAMP(EMPNO INTEGER GENERATED ALWAYS AS IDENTITY,NAME CHAR(30),SALARY DECIMAL(10,2),DEPTNO SMALLINT,LEVEL CHAR(30),HIRETYPE VARCHAR(30) NOT NULL DEFAULT 'New Employee',HIREDATE DATE NOT NULL WITH DEFAULT)

�� ��� �� �� ��� EMPNO, HIRETYPE � HIREDATE� �� �� ��� �� ���

� ������.

SQL ����� 111

Page 124: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

SELECT EMPNO, HIRETYPE, HIREDATEFROM FINAL TABLE ( INSERT INTO EMPSAMP (NAME, SALARY, DEPTNO, LEVEL)

VALUES('Mary Smith', 35000.00, 11, 'Associate'))

�� �� EMPNO� � �, HIRETYPE� ‘New Employee’, HIREDATE� ��

�����.

UPDATE�� �� �� �� ��

��� �� �� ���� ����� UPDATE�� ������.

UPDATE�� ���� WHERE�� �� ��� ����� � ��� �� ��� �� �� � �

���. UPDATE�� ��� 0� ��� ��� ��� �� ��� � ����(WHERE�� ��

�� ��� ����� � �� �� �). UPDATE�� ��� �����.

UPDATE table-nameSET column-1 = value-1,

column-2 = value-2, ...WHERE search-condition ...

��� ����� ������. CORPDATA.EMPLOYEE ���� ���� ��� ���� �� �

��� ������.

UPDATE CORPDATA.EMPLOYEESET JOB = :PGM-CODE,

PHONENO = :PGM-PHONEWHERE EMPNO = :PGM-SERIAL

��� � � �� � �� ����� SET�� ������. SET�� ��� � ��� �� �

� �����. ��� � �� � ��� ��� ����.

v � ��. � �� �� � �� �� �� � ���� ������.

v ��. � �� �� SET�� �� ��� ������.

v ��. � �� �� NULL ��� ���� ���� ������. ���� ��� � ���

� � ��� � ���� ���. ��� �� ��� ����.

v ��� ��. � �� �� ��� ��� ���� ������.

v ��� ��. � �� �� ��� ��� ���� ������.

v �� ����. � �� �� �� ���� �(�: USER)�� ������.

v ��. � �� �� ��� ��� ��� ��� ������.

v ��� �� �. � �� �� �� ��� ���� ��� ������.

v DEFAULT ��. � �� �� � ��� ��� ������. �� ��� �� ���� ��

� ��� ���� ���. ��� �� ��� ����.

�� UPDATE�� �� ��� �� �����.

UPDATE WORKTABLESET COL1 = 'ASC',

COL2 = NULL,

112 IBM i: ������ SQL �����

|

Page 125: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

COL3 = :FIELD3,COL4 = CURRENT TIME,COL5 = AMT - 6.00,COL6 = COL7

WHERE EMPNO = :PGM-SERIAL

��� �� ����� WHERE�� ������.

v � �� ����� �� ��� �� ��� WHERE�� ������.

v � �� �� ����� ��� �� ��� WHERE�� ������.

WHERE�� �� � ����. ���, SQL� ��� �� �� � �� ���� ���� ��� �

����.

������ ���� UPDATE�� ���� �� ��� ����, ��� �� �� SQLCODE�

�����. COMMIT(*ALL), COMMIT(*CS), COMMIT(*CHG) �� COMMIT(*RR)� ����, ��

�� �� ��� �� � � (� ���� �� �� � �� ��� �� ��� ��� ) .

COMMIT(*NONE)� ����, �� � �� �� ��� ���� ����.

������ ���� �� ��� ����� �� �� � ��, SQLCODE +100� �����.

�: UPDATE�� � ��� �� ���� � ����. �� � �� SQLCA� SQLERRD(3)�

����. � �� GET DIAGNOSTICS�� ROW_COUNT �� ����� �� �����.

UPDATE�� SET�� ��� ���� ���� �� � ��� �� �� �� ��� � ���

�. �� ����� � � �� �� � ����.

UPDATE EMPLOYEESET WORKDEPT = 'D11',

PHONENO = '7213',JOB = 'DESIGNER'

WHERE EMPNO = '000270'

�� �� � ��� � �� �� ���� �� UPDATE�� ��� � ����.

UPDATE EMPLOYEESET (WORKDEPT, PHONENO, JOB)

= ('D11', '7213', 'DESIGNER')WHERE EMPNO = '000270'

�� ��

UPDATE

�� � ��� �� � ��

�� �� �� ���� ���� �� �� ��� � �� ����� �� �� ��� ���

��� � ����.

�� ����� ��� �� ��� ����� �� ����� �� �� � ���. �� ���� �

�� ��� ��� �� �������. �� � ��� � �� ��� ���� ���� ����

���� ���(�� ��� ’000030’�).

SQL ����� 113

Page 126: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

UPDATE PROJECTSET DEPTNO =

(SELECT WORKDEPT FROM EMPLOYEEWHERE PROJECT.RESPEMP = EMPLOYEE.EMPNO)

WHERE RESPEMP='000030'

� �� ��� ���� ���� � ��� �� � ��� ��� � ����.

�� � �� ��� ��

� ���� �� �� �� ���� � ��� ��� � ����.

��� ��� ��� ���� ��� ��� �� ����� ���� �� ������. ��

� �� �� ����� � ��� ���� ����. ����� ��� �� � ���

� (CLASS_CODE)� � � ���.

UPDATE CL_SCHEDSET ROW =

(SELECT * FROM MYCOPYWHERE CL_SCHED.CLASS_CODE = MYCOPY.CLASS_CODE)

� ��� CL_SCHED� �� �� MYCOPY ��� �����.

�� ���� �� � ��

�� ���� ���� , �� �� ��� 1� �� ��� �� ���.

� �� �� ���� �� �� ����� �� � �� �� � �� ���. �� 1� ��

�� ���� ��� ��� � ���.

�� ��

�� ����� UPDATE� ��� � �� ���� �� �� ��� �� ����� �� �� ��

��� �� ����. �� ����� �� �� ��� ���� �� , UPDATE NO ACTION �

�� �����.

UPDATE NO ACTION

�� �� �� �� �� ���� �� ��� � ��� �����. �� �� ��� ��

� , UPDATE� �����. ��� �� � �� � �� �����.

UPDATE RESTRICT

�� �� �� �� �� ���� �� ��� � ��� �����. �� �� ��� ��

� , UPDATE� �����. �� � �� �� �����.

RESTRICT ��� NO ACTION �� �� ��� �� � ���� �� ����� ����� ���

� �� � � � ����. ��(� , UPDATE�) � �� �� ����� ���� ��� � ��

��. �� ���� UPDATE� ���� �� ����� ���� � �� �����. �� ����

UPDATE� �� �, RESTRICT ���� ��(�� �� ���) ��� ����� NO ACTION �

��� ��(��� �� � �� ���) �� �����. ��� � ��� ��� �� ��� ��

��.

114 IBM i: ������ SQL �����

Page 127: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

1. �� ���� UPDATE � � RESTRICT �� NO ACTION ���� �� �� �����.

2. �� ���� RESTRICT ���� �� ��� ����� NO ACTION �� �� �����.

�� ���� ���� , ���� ��� �� �� �� � �� ���� �� � ��� �� 1

� �� ��� ���. �� ��, �� ���� �� ��� �� ���� �� ��� �� ����.

�� ���� ��� ��� �� �� ���(��) ��� �� ��� �� �� ���.

�� ����� �� ���� �� UPDATE� ����, �� �� � �� �� ���� ���

����.

�� ��

143 ���� �����

i� DB2 �� ��� �� �� ��� � �� ��� �����.

144 ���� ��� ���

i� DB2 �� �� ��� ��, �� �� �� ���� ��� �� ��(DDL) ��� �� ����

�� ��� ��� ���� �� ��� � � ��(������ � )� �����.

: UPDATE ��:

�� ��� �� ����� �� ���� �� UPDATE ��� ����.

�� ��, ��� PROJECT ���� �� �� ��� ����� ��� �� ��� DEPARTMENT

����� �� ��� ��� � ���.

PROJECT ���� �� ‘D01’ DEPARTMENT.DEPTNO(WHERE��� �� �� �)� �� �

� �� ��� �� UPDATE�� �����. � UPDATE�� ���� PROJECT ����

DEPARTMENT ��� �� �� ����� ����.

UPDATE CORPDATA.DEPARTMENTSET DEPTNO = 'D99'WHERE DEPTNAME = 'DEVELOPMENT CENTER'

�� ���� DEPARTMENT� 1� � DEPTNO� PROJECT� �� � DEPTNO �� ��� ��

����� ��� ��� �����.

UPDATE CORPDATA.PROJECTSET DEPTNO = 'D00'WHERE DEPTNO = 'D01';

� ���� D01� �� �� ��� �� �� D00�� ��� �����. D00� DEPARTMENT�

1� � DEPTN �� ��� ��� ���� �����.

ID � ��

ID �� �� ��� ����� ���� � �� ��� � � ����.

�� ��, ORDERNO(ID ), SHIPPED_TO(varchar(36)) � ORDER_DATE(��)�� � �� ��

�� ���� �� ���� ���� ID �� ��� � ����.

SQL ����� 115

Page 128: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

UPDATE ORDERSSET (ORDERNO, ORDER_DATE)=

(DEFAULT, 2002-02-05)WHERE SHIPPED_TO = 'BME TOOL'

���� ID � �� �� ���� ����. OVERRIDING SYSTEM VALUE�� ���� ���

� �� ��� �� ��� � ����.

UPDATE ORDERS OVERRIDING SYSTEM VALUESET (ORDERNO, ORDER_DATE)=

(553, '2002-02-05')WHERE SHIPPED_TO = 'BME TOOL'

�� ��

27 ���� �ID �� � ��

ID � �� ���� �� ��� ��� ���� � �� ID �� ����.

��� ��� � �� ��

��� ���� ��� �� �� � ��� � ����.

select��� ��� � �� ���� ��� �� FOR UPDATE OF� ������. �� ��, ��

�� UPDATE�� ������. WHERE CURRENT OF�� ��� �� ���� ��� �����.

FOR UPDATE OF, ORDER BY, FOR READ ONLY �� SCROLL�� DYNAMIC� � ����,

�� � ��� � ����.

� � FETCH�� ���� �� , ��� ��� ��� �� �����. ��� WHERE

CURRENT OF�� UPDATE�� ����, ��� ��� �� �����. �� �� �� ���� ��

, ����� �� � �� ��� ����� ���. �� UPDATE WHERE CURRENT OF�

��� � ����. �� �� �����.

24. ��� ��

���� � SQL� �

EXEC SQL

DECLARE THISEMP DYNAMIC SCROLL CURSOR FOR

SELECT EMPNO, WORKDEPT, BONUS

FROM CORPDATA.EMPLOYEE

WHERE WORKDEPT = ’D11’

FOR UPDATE OF BONUS

END-EXEC.

EXEC SQL

OPEN THISEMP

END-EXEC.

116 IBM i: ������ SQL �����

Page 129: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

24. ��� �� (��)

���� � SQL� �

EXEC SQL

WHENEVER NOT FOUND

GO TO CLOSE-THISEMP

END-EXEC.

EXEC SQL

FETCH NEXT FROM THISEMP

FOR 5 ROWS

INTO :DEPTINFO :IND-ARRAY

END-EXEC.

DEPTINFO � IND-ARRAY� ��

���� ��� �� � � ��

�� �� �����.

D11 ��� ��� $500.00 ��� ���� ��� ��� ������. �� , �

��� � �� $500.00�� ������.

EXEC SQL

FETCH RELATIVE :NUMBACK FROM THISEMP

END-EXEC.

�� ���� ��� ��� ��

� ������.

EXEC SQL

UPDATE CORPDATA.EMPLOYEE

SET BONUS = 500

WHERE CURRENT OF THISEMP

END-EXEC.

� �� $500.00 ��� ��

D11 ��� ��� �� ���� �

����.

EXEC SQL

FETCH RELATIVE :NUMBACK FROM THISEMP

FOR 5 ROWS

INTO :DEPTINFO :IND-ARRAY

END-EXEC.

�� �� �� ��� ��� �

��� ��� �� �����

(NUMBACK -(5 - NUMBACK -

1)).

$500.00 ��� ���� �� ��� ��� � ��� ��� ����� �� ��� �

�����.

�� � ��� �� � ����� �� ������.

CLOSE-THISEMP.

EXEC SQL

CLOSE THISEMP

END-EXEC.

SQL ����� 117

Page 130: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� ��

406 ���� ��� ���

SQL� SELECT�� ��� � ��� ��� �� �� ���� �����. ��� �� ���� �

��� �� ��� �����.

DELETE�� �� ��� � �

����� �� ����� DELETE�� �����.

�� ��� � �� �� �����. DELETE�� ��� �� � ���� ����. DELETE�� �

�� WHERE�� �� �� ��� ���� � �� �� 0� ��� ��� �� ���� ����.

DELETE��� WHERE�� ���, SQL� ����� �� �� �����. DELETE�� ��� �

����.

DELETE FROM table-nameWHERE search-condition ...

�� ��, �� D11� �� ���� ��� �����. ��� �� WORKDEPT �� D11 ��

� �� CORPDATA.EMPLOYEE ����� �����.

DELETE FROM CORPDATA.EMPLOYEEWHERE WORKDEPT = 'D11'

WHERE�� ����� ���� �� �� SQL� � ��. SQL� �� ��� ���� �� ��

� ����� �����. ��� �� ���� � ����� �� �����. WHERE�� ��

� ��� ��� �� ����. WHERE�� � DELETE�� ��� �� ��� �� �� �

��� �����. ��� ��� ��� ��� ����� DROP�� �����.

SQL� DELETE�� ���� � ��� ���� ��� ��� �� �� SQLCODE� ����

�. COMMIT(*ALL), COMMIT(*CS), COMMIT(*CHG) �� COMMIT(*RR)� ���� ���

� �� �� ���� ����(� ����� �� �� �(�� )� �� ��� ���).

COMMIT(*NONE)� �� �� �� �� �� ��� ���� ����.

SQL� �� ��� ���� �� �� � � +100 SQLCODE� �����.

�: DELETE�� � ��� �� ����� � ����. ���� � �� SQLCA� SQLERRD(3)

� ����. � �� GET DIAGNOSTICS�� ROW_COUNT �� ����� �� �����.

�� ��

DROP

DELETE

�� ���� �� ��� � �

���� 1� �� ��� �� ���� � �� ���� �� �� � 1� �� � ,

DELETE�� �� ����� � ���� � ����� �����. ���� 1� �� �� ���

� �� , DELETE�� ���� �� �� �� ��� �� �����.

118 IBM i: ������ SQL �����

Page 131: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� ��� ����� ���� �� ��� �� �� ��� ����� ���. �� ����� ��

�, DELETE ��� �����.

�� ����� DELETE� ��� � �� ���� �� �� ��� �� ����� �� �� ��

��� �� ����. �� ��� ���� �� , DELETE NO ACTION ��� �����.

DELETE NO ACTION

�� �� �� �� �� ���� �� ��� � ��� �����. �� �� ��� ��

� , DELETE� �����. ��� �� � �� � �� �����.

DELETE RESTRICT

�� �� �� �� �� ���� �� ��� � ��� �����. �� �� ��� ��

� , DELETE� �����. �� � �� �� �����.

�� ��, ���� ���� �� �� ��� � ����� ��� �� ��� �� �

���� ��� ��� � ���.

DELETE CASCADE

�� ���� �� �� �� ���� �����. �� ��, �� �� �����.

�� ��, �� ����� � �� ���� ��� ��� � ����. �� ����� ��

���� ��� �����.

v � ��� � �� �� ��� �� �

v � �� �� � �� �� ��

DELETE SET NULL

� �� ��� �� �� � �� ��� � � ��� ��� ��� �����. �� ��

�� ���� �� �� �� �� � ��� ��� ��� �����. �� ���

�� �� ��� ����.

DELETE SET DEFAULT

� �� ��� �� �� � � ��� ��� ��� �����. �� �� �� ���

� �� �� �� �� � ��� ��� ��� �����. �� ��� �� �� �

�� ����.

�� ��, ��� � ��� ������ �� ���(EMPLOYEE)�� ��� ��� � ��

��. � , ����� � � � ��� MGRNO �� �� ���(DEPARTMENT)��

���� ����. ��� �� � � �� ��� �� ��� , � �� �����.

� ��� �� ���� �� �� REPORTS_TO_EXISTS ���� �����.

�� ���� RESTRICT �� NO ACTION �� ��� � �� �� �� � � �� ���, ��

DELETE� �����.

� ���� ����� � ���� , �� � �� SQLCA� SQLERRD(3)�� �����. �

���� DELETE�� �� ����� �� � �� ���. CASCADE ��� �� �� �

�� �� ����. SQLCA� SQLERRD(5)�� �� ���� �� ����� �� ��� �� �

SQL ����� 119

Page 132: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� ���. SQLERRD(3) �� GET DIAGNOSTICS�� ROW_COUNT ����� ��� � �

���. SQLERRD(5) �� DB2_ROW_COUNT_SECONDARY ���� ��� � ����.

RESTRICT ��� NO ACTION �� �� ��� �� � ���� �� ����� ����� ���

� �� � � � ����. ��(� , DELETE�) � �� �� ����� ���� ��� � ��

��. �� ���� DELETE� ���� �� ����� ���� � �� �����. �� ����

DELETE� �� �, RESTRICT ���� ��(�� �� ���) ��� ����� NO ACTION �

��� ��(��� �� � �� ���) �� �����. ��� � ��� ��� �� ��� ��

��.

1. �� ���� DELETE � � RESTRICT �� NO ACTION ���� �� �� �����.

2. �� ���� RESTRICT ���� �� ��� ����� NO ACTION �� �� �����.

: DELETE ��:

DEPARTMENT ����� ��� ���� EMPLOYEE ���� WORKDEPT� � ��� � �

� ��� �� �� �� �����.

�� DELETE�� �� ����.

DELETE FROM CORPDATA.DEPARTMENTWHERE DEPTNO = 'E11'

498 ���� �i� DB2 ����� �� ���� ���� ��� , DEPARTMENT�� � �� �

�� WORKDEPT �� ‘E11’ �� ���� ���� EMPLOYEE ���� �����. ��

���� �� ��(‘?’)� ��� ����. ��� ��� �� ����.

25. DEPARTMENT ���. DELETE�� �� �� ��� �����.

DEPTNO DEPTNAME MGRNO ADMRDEPT

A00 SPIFFY COMPUTER SERVICE DIV. 000010 A00

B01 PLANNING 000020 A00

C01 INFORMATION CENTER 000030 A00

D01 DEVELOPMENT CENTER ? A00

D11 MANUFACTURING SYSTEMS 000060 D01

D21 ADMINISTRATION SYSTEMS 000070 D01

E01 SUPPORT SERVICES 000050 A00

E21 SOFTWARE SUPPORT 000100 E01

F22 BRANCH OFFICE F2 ? E01

G22 BRANCH OFFICE G2 ? E01

H22 BRANCH OFFICE H2 ? E01

I22 BRANCH OFFICE I2 ? E01

J22 BRANCH OFFICE J2 ? E01

�� ‘E11’� � ��� ��� DEPARTMENT ����� ���� �� �� ��� ���.

120 IBM i: ������ SQL �����

Page 133: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

��� DELETE�� ���� ��� �� ��� EMPLOYEE ��� ���� � ��� ���

��.

26. EMPLOYEE ��� �. DELETE� ��� � �����.

EMPNO FIRSTNME MI LASTNAME WORKDEPT PHONENO HIREDATE

000230 JAMES J JEFFERSON D21 2094 1966-11-21

000240 SALVATORE M MARINO D21 3780 1979-12-05

000250 DANIEL S SMITH D21 0961 1960-10-30

000260 SYBIL P JOHNSON D21 8953 1975-09-11

000270 MARIA L PEREZ D21 9001 1980-09-30

000280 ETHEL R SCHNEIDER E11 0997 1967-03-24

000290 JOHN R PARKER E11 4502 1980-05-30

000300 PHILIP X SMITH E11 2095 1972-06-19

000310 MAUDE F SETRIGHT E11 3332 1964-09-12

000320 RAMLAL V MEHTA E21 9990 1965-07-07

000330 WING LEE E21 2103 1976-02-23

000340 JASON R GOUNOT E21 5696 1947-05-05

27. EMPLOYEE ��� �. DELETE� ��� � �����.

EMPNO FIRSTNME MI LASTNAME WORKDEPT PHONENO HIREDATE

000230 JAMES J JEFFERSON D21 2094 1966-11-21

000240 SALVATORE M MARINO D21 3780 1979-12-05

000250 DANIEL S SMITH D21 0961 1960-10-30

000260 SYBIL P JOHNSON D21 8953 1975-09-11

000270 MARIA L PEREZ D21 9001 1980-09-30

000280 ETHEL R SCHNEIDER ? 0997 1967-03-24

000290 JOHN R PARKER ? 4502 1980-05-30

000300 PHILIP X SMITH ? 2095 1972-06-19

000310 MAUDE F SETRIGHT ? 3332 1964-09-12

000320 RAMLAL V MEHTA E21 9990 1965-07-07

000330 WING LEE E21 2103 1976-02-23

000340 JASON R GOUNOT E21 5696 1947-05-05

�� �

����� ��� �� ���� ��, �� �� ����� MERGE�� ������.

MERGE�� ���� �� ���, � ��� �� �� ��� ���� �� ���� ��� � �

���. �� ���� �� ����� ���. �� ��� �� ��� ��� � ������.

�� ���� �� �� ���� ���� ��� ��, MERGE�� � �� ����� ��� ��

�� �� ��� � ����.

SQL ����� 121

|

|

|

|

|

|

Page 134: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� � MERGE� ��� �� �� ��� �� � �� ��� ���� ��� �

��� �����. �� �� ��� ��� SQLCODE �� SQLSTATE� �� �� ��� ���

� ���, MERGE�� ���� �� ��� �����.

� ����� ��� �� �� ����� ���� ���. ��� �� ��� �� �� ���

��. ��� ��� ��� �� ��� �����.

MERGE INTO DEPARTMENT USING(VALUES ('K22', 'BRANCH OFFICE K2', 'E01')) INSROW (DEPTNO, DEPTNAME, ADMRDEPT)

ON DEPARTMENT.DEPTNO = INSROW.DEPTNOWHEN NOT MATCHED THEN

INSERT VALUES(INSROW.DEPTNO, INSROW.DEPTNAME, INSROW.ADMRDEPT)WHEN MATCHED THEN

UPDATE SET DEPTNAME = INSROW.DEPTNAME, ADMRDEPT = INSROW.ASMRDEPT

EMP_PHOTO ���� � �� ���� �� �����. � ����� � ��� �� ��� �

�� � ��� ��� ������. �� ����� ���� ��� ��� �� �� ��� �

� �� ���.

� ����� ��� EMP_PHOTO ���� ���� �� MERGE�� ���� ���.

MERGE INTO EMP_PHOTO target USING TEMP_EMP_PHOTO sourceON target.EMPNO = source.EMPNO

AND target.PHOTO_FORMAT = source.PHOTO_FORMATWHEN NOT MATCHED THEN

INSERT VALUES(EMPNO, PHOTO_FORMAT, PICTURE)WHEN MATCHED THEN

UPDATE SET PICTURE = source.PICTURE

� ���� ��� � �� ���� �� EMPNO � PHOTO_FORMAT � ���� �� ����

�� ����. � � ���� 1� �� ���� ��� ��� �����. �� ���� ��

� EMPNO � PHOTO_FORMAT �� �(NOT MATCHED) �� ���� �� INSERT ��� �

����. � �� ���� EMPNO, PHOTO_FORMAT � PICTURE �� �� � �� ��

���� �����. �� ���� �� ��� �� ��(MATCHED) �� ���� �� �� ���

� �� �� ���� PICTURE ��� ����� ���.

�� �� ���� �� �� � EMP_PHOTO ���� �����.

ALTER TABLE EMP_PHOTO ADD COLUMN LAST_CHANGED TIMESTAMPGENERATED BY DEFAULT FOR EACH ROW ON UPDATE AS ROW CHANGE TIMESTAMP

��, TEMP_EMP_PHOTO ���� ������ ��� �� EMP_PHOTO ���� ��� ��

� �� ���� �� �� �� �����. MERGE� ��� �, �� ��� ���� ��

�� �� ���� ����. �� �� ��� � ���� ��� EMP_PHOTO� ����� �� �

���.

MERGE INTO EMP_PHOTO target USING TEMP_EMP_PHOTO sourceON target.EMPNO = source.EMPNO

AND target.PHOTO_FORMAT = source.PHOTO_FORMATWHEN NOT MATCHED THEN

INSERT VALUES(EMPNO, PHOTO_FORMAT, PICTURE, LAST_CHANGED)

122 IBM i: ������ SQL �����

|

|

|

|

|

|||||||

|

|

|

|

|||||||

|

|

|

|

|

|

|

||

|

|

|

|

|||||

Page 135: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

WHEN MATCHED AND target.LAST_CHANGED < source.LAST_CHANGED THENUPDATE SET PICTURE = source.PICTURE,

LAST_CHANGED = source.LAST_CHANGED

� ���� MATCHED�� �� ��� ������. LAST_CHANGED �� ���� ���

EMP_PHOTO ���� �� ��� ��� �� ��� ��� � �� �� ���� ���� ��

�.

� �� ��

���� ��� � �� ���� �� ���� �� ��� ��� � ����. ��� ��� � �

� ���� �� ��� ��� � ����.

����� �� ��� � � �� � ��� ���� � ��� �����. ���� �� ��� ��

��� ��� �� ��� � �� �����. �� �� �� ��� ���� ���.

� �� ��� ��� �� ���� �� �� �����. �� ���� �� ����� ����

� �� ��� ��� ���.

�� ��

60 ���� �WHERE�� ���

WHERE�� ��� �� �� �� ���� ����� �����.

73 ���� ���� �� �� ���

�� ���� � � ��(�: = � >) ��� BETWEEN, IN, EXISTS, IS NULL � LIKE� ��

��� �� � ����.

SELECT���� � ��

�� ��� SELECT��� �� ��� �� �����.

� WHERE � HAVING��� ��� �, �, �� �� �� ����� ���� �� ���

��� � ����. � �� ����� �� �� �� �� � ����. �� ����� �� �

��� ��� �� � �� ��� � �� � ����. �� ��, �� ����(���� ��

MA2100)�� � �� ��� �� ��, � � � �� ��� ������. ���� �

� ��� ���� ���.

SELECT EMPNO, LASTNAME, JOBFROM CORPDATA.EMPLOYEEWHERE EMPNO ...

�� CORPDATA.EMPLOYEE ���� ���� �� ���� �� �� �� ��� � �� �

�� � ���. CORPDATA.EMP_ACT ���� �� �� SELEC�� ���� � � MA2100 �

����� � ��� � � ���.

SQL ����� 123

|||

|

|

|

Page 136: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

SQL� ���� �� ��� �� ��� SELECT�� ��� � ��� ��� � ����. ��

SELECT�� �� ��� ���. �� ��� �� SELECT�� �� � SELECT� ���. �

� ��� ���� ��� SQL�� ���� MA2100 ������ � ��� �� ��, � �

� �� �� � ����.

SELECT EMPNO, LASTNAME, JOBFROM CORPDATA.EMPLOYEEWHERE EMPNO IN

(SELECT EMPNOFROM CORPDATA.EMPPROJACTWHERE PROJNO = 'MA2100')

� SQL�� ��� �� � ���� �� SQL� �� �� �� ��� �����.

1��: SQL� �� ��� ���� EMPNO � ���� �����.

(SELECT EMPNOFROM CORPDATA.EMPPROJACTWHERE PROJNO= 'MA2100')

� �� ���� ��� ��� ����.

CORPDATA.EMPPROJACT� EMPNO

000010

000110

2��: � �� ���� �� �� SELECT�� �� ���� ���� �� ���. ��� ��

���� ������.

SELECT EMPNO, LASTNAME, JOBFROM CORPDATA.EMPLOYEEWHERE EMPNO IN

('000010', '000110')

� �� ���� ��� ����.

EMPNO LASTNAME JOB

000010 HAAS PRES

000110 LUCCHESSI SALESREP

� �� � � ��:

�� ��� �� ��� � � ����. �� ��� ���� ��� ���� ���� �� ���

�. � ��� ����� �� �� � ����.

�� ���� � � ���� EMPNO� ���� IN���. �� ��� WHERE �� HAVING

�� � � ����. ��� �� ��� � ��� �� ��� � � ����. �� �

� ��� ����� �� ��� �� ��� ��� � �� NOT ��� �� AND � OR

��� �� �� �� ��� � � � ����. �� ��, ��� WHERE�� ��� ����.

124 IBM i: ������ SQL �����

Page 137: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

WHERE (subquery1) = X AND (Y > SOME (subquery2) OR Z = 100)

�� �� ��� �� �� ��� �� ��� ��� � ����. �� �� ��� � ��� ���

� ��� ���. �� ��, �� �� SELECT�� �� �� � �� ��� ��� �� 2�� �

���. SQL� ��� �� 32 � ���� �����.

� �� �� ����:

�� ��� ���� �� ��� ���� �� �� � �� ���� ��� ����.

1. SELECT� � �, �� ��� ��� ��� ��� ������ ��� �� ���� �����

���� � ����(1 - 255�� �� ��).

2. ALL, ANY, SOME �� EXISTS ��� ���� ��� , �� ����� �� � �� 0

�� ��� ��� � �����. �� �� �� ��� , �� � �� 0 �� 1��� ��

�.

3. �� ��� , �� ��� � �� �� ��� � ����. �� �� ��� � �� ��

� ��� �� ��� � ��� �����.

v �� �� �� �� �� ���� � ��

v =ANY, =ALL � =SOME� ���� �� ��

v IN � NOT IN ��

� �� �� ���� �� ��� ����.

v � ���� SELECT *� �� ��� ���. �� �� ���� ���.

v � �� �� � ��� ��� ���. � ��� ��� � � ������. �� ���

�� �� � �� � ��� �� �� ��� ���.

v IN �� NOT IN ��� � ���� ��� ��� ��� � � ���. ��

��� ��� �� ��� ��� ����� CAST� ������.

v �� ���� UNION, EXCEPT� INTERSECT �� �� ��� � � ���.

4. �� ���� ORDER BY, FOR READ ONLY, FETCH FIRST n ROWS, UPDATE �� OPTIMIZE

�� � � ���.

WHERE �� HAVING�� � �� ��:

� �� ��� �, IN �� �� EXISTS ��� ���� WHERE �� HAVING�� ��

��� �� � ����.

� ��

� ��� ��� �� ��� ��� � ����. �� ��� ��� �� ��� � ����. �� �

� �� �� ���� ���� �� �� � �� ��� � ����. SQL� �� �� �� �

�� � ���� �� �� �� � �� ����. �� ��, �� ��� � ��� �� �� �

��� �� ��� �� ��, � � ��� ��� ���.

SQL ����� 125

Page 138: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

SELECT EMPNO, LASTNAME, SALARYFROM CORPDATA.EMPLOYEEWHERE EDLEVEL >

(SELECT AVG(EDLEVEL)FROM CORPDATA.EMPLOYEE)

SQL� �� �� ��� ��� � SELECT�� WHERE��� ��� �����. � ����, ���

� �� �� �� �����. � �� ���� � ��, �� ��� �� �� �� ��� � �

��. �� �� ���� �� ��� � � ���.

��� ��(ALL, ANY � SOME)

�� ALL, ANY �� SOME ��� �� � ��� ��� �� ��� ��� � ����. ��

���� ���� �� ��� ��� �� �� ��� �� ����� �� ��� � ���.

�� ���� ALL, ANY � SOME� ��� � ����.

v ���� ��� �� � ���� �� ��� ���� ��(ALL) �� ��� � ����

ALL� �����. �� ��, ALL� � �� � � ���� ���� �����.

... WHERE expression > ALL (subquery)

� WHERE�� ����� ��� �� �� ��� ���� � �� ���� �� ���(�, �

� ��� �� ). �� ��� � �� ���� (�, � �� �) ��� �����.

v ���� ��� �� � ���� �� ��� ���� �� ��� �� ��� � ����

ANY �� SOME� �����. �� ��, ANY� � �� � � ���� ���� �����.

... WHERE expression > ANY (subquery)

� WHERE�� ����� ��� �� �� ��� ���� � �� ���� �� ���(�,

�� ��� �� ). �� ��� ���� �� � � ��� ���� �� ����.

�: �� ��� ��� ��� �� ��� �� ��� ��� ��� � ��� �� � ����.

IN ��

IN� ���� ��� �� �� ��� ���� � ��� ��� � �� � ����. IN� ��

�� �� =ANY �� =SOME� ���� �� ����. ANY � SOME ��� ���� ��� ��

���. �� �� ��� ���� � ��� �� � � �� ��� �� NOT ��� � IN �

�� ��� �� ����. �� ��, ��� ��� � ����.

... WHERE WORKDEPT NOT IN (SELECT ...)

EXISTS ��

� � �� �� ����, SQL� �� ��� ��� � ��� �� �� SELECT� WHERE�

�� �����. ��, �� EXISTS� ���� SQL� �� ��� �� ��� �� ���

�� ����. �� ��� ���� ����. �� ���� ��� ��� ���� ����. �

� �� ��� ����.

126 IBM i: ������ SQL �����

Page 139: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

SELECT EMPNO,LASTNAMEFROM CORPDATA.EMPLOYEEWHERE EXISTS

(SELECT *FROM CORPDATA.PROJECTWHERE PRSTDATE > '1982-01-01');

����, �� ��� CORPDATA.PROJECT ���� �� ����� �� �� ��� 1982� 1� 1

�����. � ��� EXISTS� �� �� ��� ����. ��� �� �� �� SELECT� �

� �� �� �� �� ��� �����. �� �� �� ��� ���� �� ��� ����.

�� ��� ����� �� �� ��� ��� � ��� ����.

��� � ��, EXISTS�� �� ��� �� � ���� �� ���� ��� ���. ��

SELECT *� ���� ���.

���� ���� ��� �� ��� ��� �� �� ���� NOT ��� � EXISTS �

�� ��� �� ����. ��� ��� � ����.

... WHERE NOT EXISTS (SELECT ...)

�� � ��

�� �� ��(correlated subquery)� �� �� SELECT��� ��� � �(WHERE�)�� ��� �

��(HAVING�)� ��� � SQL� �� ���� � �� �� �� �����.

��� � ����:

�� ��� �� ���� �� ���� �� � ����. ��� �� X.C �����. ��� X�

���� C� X� ��� ���� ����.

FROM�� ��� ���� �� ���� ��� � ����. ���� ���� ���� � ��

�����. �� � � �� ��� �� ����� � � ��� � ����. ��� ��� �

�� �� ���� ���� � ���� ���� ��� ��� � ����.

���� ��� FROM�� �����. � ��� �� �� SELECT�, ��� � �� �� ��

��� � � ����. �� ��, ��� �� �� A, B � C� � , A� B�, B� C� �� �

� �����. C�� ���� ���� B, A �� �� �� SELECT�� ��� � ����. ���

� ����� ���� ��� ���� �����. ����� ��� ��� ��� �� ��� �

�� �� ����� ��� � ��� ��� � � ������. �� FROM�� ���

TABLEA � TABLEB� �� ��� TA � TB� ��� ��� TABLEC� ���� ���� ��

�� ����.

FROM TABLEA TA, TABLEC, TABLEB TB

� �� �� ����� �� ��� �� � ����. �� ��, �� ��� �� ��� �� �

� �� �� SELECT�� ��� , �� �� �� �� ���� ��� � ����.

�� ��� ���� ��, �� � �� �� �� ��� �����.

SQL ����� 127

Page 140: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

: WHERE�� �� � ��:

�� ��� �� ��� �� �� ���� �� �� ��� ���� ����. � ��� ����� SQL�

CORPDATA.EMPLOYEE ���� ���� ���.

���� �� ����, SQL� ��� �� ��� �� ��� �� �� ��� ��� ���. �� �

���, SQL� �� �� �� �� ��� �� �� �� ��� ����� �����. �� �� ��

� ����.

SELECT EMPNO, LASTNAME, WORKDEPT, EDLEVELFROM CORPDATA.EMPLOYEE XWHERE EDLEVEL >

(SELECT AVG(EDLEVEL)FROM CORPDATA.EMPLOYEEWHERE WORKDEPT = X.WORKDEPT)

�� �� ��� �� ��� �� ����� �� ��� ���� �� �� ��� �����. �

���, � �� ��� �� �� FROM���� X.WORKDEPT ����. ���, X ���� �

� SELECT�� FROM�� �� ������. � ���, X� ��� CORPDATA.EMPLOYEE� �

���� �����.

��, ��� CORPDATA.EMPLOYEE �� �� �� ��� ��� � ��� ��� �� ����

�. ���� ��, X.WORKDEPT �� � �� �� WORKDEPT � ��� �����. �� �

�, �� CHRISTINE I HAAS� �� �����. � ��� A00(� �� �� WORKDEPT �)

� �� �� ���� �� ��� ��� ����.

(SELECT AVG(EDLEVEL)FROM CORPDATA.EMPLOYEEWHERE WORKDEPT = 'A00')

��� ��� �� ��, �� ��� Christine ��� �� �� ��� ����. �� �� �� �

���� Christine� � �� ��� ����. WORKDEPT� �� �� � �� �� �� �

��� � �� A00 �� ����. �� �� MICHAEL L THOMPSON �� , � �� B01�

� �� �� ��� �� B01� �� �� �� ��� �����.

���� ��� �� ���� �� ��� ����.

28. �� ��� �� �

EMPNO LASTNAME WORKDEPT EDLEVEL

000010 HAAS A00 18

000030 KWAN C01 20

000070 PULASKI D21 16

000090 HENDERSON E11 16

000110 LUCCHESSI A00 19

000160 PIANKA D11 17

000180 SCOUTTEN D11 17

000210 JONES D11 17

128 IBM i: ������ SQL �����

Page 141: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

28. �� ��� �� � (��)

EMPNO LASTNAME WORKDEPT EDLEVEL

000220 LUTZ D11 18

000240 MARINO D21 17

000260 JOHNSON D21 16

000280 SCHNEIDER E11 17

000320 MEHTA E21 16

000340 GOUNOT E21 16

200010 HEMMINGER A00 18

200220 JOHN D11 18

200240 MONTEVERDE D21 17

200280 SCHWARTZ E11 17

200340 ALONZO E21 16

: HAVING�� �� � ��:

�� ��� � �(WORKDEPT� �� ��� ���� �� ��� �� �� �)� �� �

��� �� �� ��� ���� ����. � ��� ����� SQL� CORPDATA.EMPLOYEE ��

�� ���� ���.

SQL� ���� �� ���� ��� �� ��� � �� �� ��� ����. �� �����,

SQL� �� ��� �� ��� �� �� �� ��� �����. �� �� ��� ����.

SELECT WORKDEPT, DECIMAL(AVG(SALARY),8,2)FROM CORPDATA.EMPLOYEE XGROUP BY WORKDEPTHAVING AVG(SALARY) >

(SELECT AVG(SALARY)FROM CORPDATA.EMPLOYEEWHERE SUBSTR(X.WORKDEPT,1,1) = SUBSTR(WORKDEPT,1,1))

��� CORPDATA.EMPLOYEE ��� �� �� ��� ��� � ��� ��� �� �����.

���� ��, X.WORKDEPT �� � ��� �� WORKDEPT � ��� �����. �� ��,

� � � ��� WORKDEPT ��� A00� �� �� �����. � ��� �� ���� �

� ��� ��� ����.

(SELECT AVG(SALARY)FROM CORPDATA.EMPLOYEEWHERE SUBSTR('A00',1,1) = SUBSTR(WORKDEPT,1,1))

��� ��� ��� ��, �� ��� � �� �� ��� ����. � �� �� �� ����

� ‘A00’ ��� �� ��� ����. WORKDEPT� ‘B01’ �� ��� , �� �� ��� �

� B01� ��� �� �� �����.

SQL ����� 129

Page 142: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

���� ��� �� ���� �� ��� ����.

WORKDEPT AVG SALARY

D21 25668.57

E01 40175.00

E21 24086.66

: select ���� �� � ��:

���, �� � ����� �� �� ��� ���� ����.

���� �� ��� CORPDATA.DEPARTMENT ����� �� � ����. �� DEPARTMENT

�� ����� �� ��� ��� ����. � ��� ����� ���� EMPLOYEE �����

DEPARTMENT ���� ��� ��� ��� �� ��� ��� ��� �� �� ���� ��

�. �� ���� � ��� �����. �� SQL�� ������.

SELECT DEPTNO, DEPTNAME,(SELECT FIRSTNME CONCAT ' ' CONCAT

MIDINIT CONCAT ' ' CONCAT LASTNAMEFROM EMPLOYEE XWHERE X.EMPNO = Y.MGRNO) AS MANAGER_NAME

FROM DEPARTMENT YWHERE MGRNO IS NOT NULL

DEPTNO � DEPTNAME� �� ���� ���, ���� EMPNO = MGRNO � ��� ��

�� �� �����. ���� ��� �� ���� �� ��� ����.

29. �� ��� �� �

DEPTNO DEPTNAME MANAGER_NAME

A00 SPIFFY COMPUTER SERVICE DIV. CHRISTINE I HAAS

B01 PLANNING MICHAEL L THOMPSON

C01 INFORMATION CENTER SALLY A KWAN

D11 MANUFACTURING SYSTEMS IRVING F STERN

D21 ADMINISTRATION SYSTEMS EVA D PULASKI

E01 SUPPORT SERVICES JOHN B GEYER

E11 OPERATIONS EILEEN W HENDERSON

E21 SOFTWARE SUPPORT THEODORE Q SPENSER

: UPDATE�� �� � ��:

UPDATE��� �� �� ��� ��� � ���� ��� �� �����.

�� ��, ����� �� ��� 1983� 9� ��� ����� �� , ��� � ����� �

� ����� �����. �� SQL�� ���� CORPDATA.PROJECT ����� ����� ���

, ��� �� ����� �� PRIORITY (CORPDATA.PROJECT� ��� )� 1(PRIORITY

� ��� �� ��)� ��� � ����.

130 IBM i: ������ SQL �����

Page 143: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

UPDATE CORPDATA.PROJECT XSET PRIORITY = 1WHERE '1983-09-01' >

(SELECT MAX(EMENDATE)FROM CORPDATA.EMPPROJACTWHERE PROJNO = X.PROJNO)

SQL� CORPDATA.EMPPROJACT ����� � �� �����, ����� �� ��� �� � �

� �� ��(EMENDATE)� �����(CORPDATA.PROJECT �����). ����� �� � ��

� �� ��� 1983� 9� ����, CORPDATA.PROJECT ���� �� �� ��� �����.

�� ��� �� ����� ��� �� ���� �����. orders ����� ��� ��� ��

(��), ��� �� ���� �� �� �����.

UPDATE MASTER_ORDERS XSET QTY=(SELECT COALESCE (Y.QTY, X.QTY)

FROM ORDERS YWHERE X.ORDER_NUM = Y.ORDER_NUM)

WHERE X.ORDER_NUM IN (SELECT ORDER_NUMFROM ORDERS)

� ����� MASTER_ORDERS ���� � �� ��� ORDERS ���� � �� ��� �

���. ORDERS ���� ��� �� ��� COALESCE �� ���� QTY � �� ����

�. ORDERS ���� QTY� �� �� �� ���, � �� ���� MASTER_ORDERS �����

QTY � �����. ORDERS ����� QTY �� NULL�� MASTER_ORDERS QTY � �

�� � ��� �����.

: DELETE�� �� � ��:

DELETE��� �� �� ��� ��� � ���� ��� �� ����. SQL� DELETE�� ��

���� ��� � �� �� �� ��� ���� �� ��� � � ��� �����.

CORPDATA.PROJECT ���� �� ���� ���. CORPDATA.EMPPROJACT ����� ��

����� �� �� ���� ���. �� ����� �� ���� ������.

DELETE FROM CORPDATA.EMPPROJACT XWHERE NOT EXISTS

(SELECT *FROM CORPDATA.PROJECTWHERE PROJNO = X.PROJNO)

SQL� CORPDATA.EMP_ACT ���� �� ��� , �� ���� � �� �� ��

CORPDATA.PROJECT ���� ���� ��� �����. ��� �� CORPDATA.EMP_ACT

�� �����.

SQL�� �� �� � ���

� �� �� �� ��� � �� � � � �� ���� ��� �����. ��� ����

�� ��� ���� �� � ����.

SQL ����� 131

Page 144: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

� �� �� ��� SQL��� ���� UCS-2 � UTF-16 ��� �� �����. 1���� 2�

�� �� ��� � �� �� � � ���� ����. � 1��� � � ����� �� 2�

�� � � ���� � , 2��� � � ����� �� 1��� � � ���� ����.

��� ���� �� ���� ��� �� ��� �����. �� CREATE INDEX��� � ��

�� �� � ��� � �(���� �� �� ��)� ����.

�� ��

48 ���� �� �� � ���

�� ���� �� ��� ��� �� �� �� ���� � �� � ����. SELECT�� ����

�� ������.

53 ���� �� ���

� � ���� ���� � � �� � ����. �� � � � �� �� ��� �� ����

���� � ��� �� � ��� ���.

59 ���� �WHERE�� ���� �� �� ���

WHERE�� �, �� �� ��� �� ���� �� ��� �����.

62 ���� �GROUP BY��

GROUP BY�� ���� �� �� �� � ��� ��� �� � ����.

64 ���� �HAVING��

HAVING�� GROUP BY�� � ��� �� �� ��� �����.

65 ���� �ORDER BY��

ORDER BY�� �� �� ��� �� �� �����. �� �� �� �� �� ��

��� � �� � ���.

72 ���� �� � ���

SQL� select�� ��� � select�� �� ��� ���� � �� �� �� ����� � �� ��

��� � ����. �� ���� � �� �� � ����.

73 ���� ���� �� �� ���

�� ���� � � ��(�: = � >) ��� BETWEEN, IN, EXISTS, IS NULL � LIKE� ��

��� �� � ����.

95 ���� �UNION ��� ���� �� � ���

UNION ��� ���� � ��� �� �� ���� �� �(fullselect)� ��� � ���

�.

�� �

ORDER BY � � ��� �� ���� �� ��

��� �� � �� �� � � � � ��� ����.

132 IBM i: ������ SQL �����

Page 145: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

JOB � �� ���� ���� �� ����. ‘Mgr’, ‘MGR’ � ‘mgr’ �� � � ����.

30. STAFF ���

ID NAME DEPT JOB YEARS SALARY COMM

10 Sanders 20 Mgr 7 18357.50 0

20 Pernal 20 Sales 8 18171.25 612.45

30 Merenghi 38 MGR 5 17506.75 0

40 OBrien 38 Sales 6 18006.00 846.55

50 Hanes 15 Mgr 10 20659.80 0

60 Quigley 38 SALES 0 16808.30 650.25

70 Rothman 15 Sales 7 16502.83 1152.00

80 James 20 Clerk 0 13504.60 128.20

90 Koonitz 42 sales 6 18001.75 1386.70

100 Plotz 42 mgr 6 18352.80 0

�� ����� ��� ���� � ���� �� ��� ��� ����.

v *HEX � �

v ENU �� ID� ���� �� �� � �

v ENU �� ID� ���� � �� � �

�: ENU� CRTSQLxxx, STRSQL �� RUNSQLSTM ��� SRTSEQ(*LANGIDUNQ) ��

SRTSEQ(*LANGIDSHR) � LANGID(ENU)� ����� SET OPTION�� ���� �� ID� �

�����.

�� �� � ORDER BY

� �� ORDER BY�� ���� � ��� ��� ���.

�� SQL�� ���� �� ���� JOB � �� �� ���� � ���.

SELECT * FROM STAFF ORDER BY JOB

�� � *HEX � �� ��� ��� �����. �� JOB � EBCDIC �� �� � ���.

� �� ���� ��� ��� � ���.

31. *HEX � �� ��� ��

ID NAME DEPT JOB YEARS SALARY COMM

100 Plotz 42 mgr 6 18352.80 0

90 Koonitz 42 sales 6 18001.75 1386.70

80 James 20 Clerk 0 13504.60 128.20

10 Sanders 20 Mgr 7 18357.50 0

50 Hanes 15 Mgr 10 20659.80 0

30 Merenghi 38 MGR 5 17506.75 0

20 Pernal 20 Sales 8 18171.25 612.45

40 OBrien 38 Sales 6 18006.00 846.55

SQL ����� 133

Page 146: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

31. *HEX � �� ��� �� (��)

ID NAME DEPT JOB YEARS SALARY COMM

70 Rothman 15 Sales 7 16502.83 1152.00

60 Quigley 38 SALES 0 16808.30 650.25

�� ���� � �� � �� �� � � �� ��� ����. JOB � �� � ��

��� �� � ���. � �, ���� �� ��� ��� � ‘mgr’, ‘Mgr’ � ‘MGR’ �� ��

����.

32. ENU �� ID� �� � �� � �� �� ��

ID NAME DEPT JOB YEARS SALARY COMM

80 James 20 Clerk 0 13504.60 128.20

100 Plotz 42 mgr 6 18352.80 0

10 Sanders 20 Mgr 7 18357.50 0

50 Hanes 15 Mgr 10 20659.80 0

30 Merenghi 38 MGR 5 17506.75 0

90 Koonitz 42 sales 6 18001.75 1386.70

20 Pernal 20 Sales 8 18171.25 612.45

40 OBrien 38 Sales 6 18006.00 846.55

70 Rothman 15 Sales 7 16502.83 1152.00

60 Quigley 38 SALES 0 16808.30 650.25

�� ���� �� �� � �� �� � � �� ��� ����. JOB � �� � ��

��� �� � ���. � �� ��, � ���� ��� ���� ��� �����. � ���

�� �� ‘MGR’, ‘mgr’ � ‘Mgr’ �� � ���� ����.

33. ENU �� ID� �� �� �� � �� �� ��

ID NAME DEPT JOB YEARS SALARY COMM

80 James 20 Clerk 0 13504.60 128.20

10 Sanders 20 Mgr 7 18357.50 0

30 Merenghi 38 MGR 5 17506.75 0

50 Hanes 15 Mgr 10 20659.80 0

100 Plotz 42 mgr 6 18352.80 0

20 Pernal 20 Sales 8 18171.25 612.45

40 OBrien 38 Sales 6 18006.00 846.55

60 Quigley 38 SALES 0 16808.30 650.25

70 Rothman 15 Sales 7 16502.83 1152.00

90 Koonitz 42 sales 6 18001.75 1386.70

134 IBM i: ������ SQL �����

Page 147: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� �� � � ��

� �� ��� �� ��� ���.

�� SQL�� JOB �� �� ‘MGR’ �� ����.

SELECT * FROM STAFF WHERE JOB='MGR'

� � ���� *HEX � �� ���� � �� �� ��� ����. JOB � � � �

� ��� �� select�� �� ��� ����. ��� ‘MGR’� ����.

34. *HEX � �� ��� ��

ID NAME DEPT JOB YEARS SALARY COMM

30 Merenghi 38 MGR 5 17506.75 0

� ���� � �� � �� ���� � �� �� ��� ����. ���� ����

�� ��� �����. ��� ‘mgr’� ��� ‘MGR’� �� ��� ���� ����. ��� ��

� ‘mgr’� ��� ����.

35. ENU �� ID� � �� � � �� ��

ID NAME DEPT JOB YEARS SALARY COMM

30 Merenghi 38 MGR 5 17506.75 0

�� ���� �� �� � �� ���� � �� �� ��� ����. ���� ���� �

� ��� ���� ‘JOB’ � � � �� ��� �� ����. ‘mgr’, ‘Mgr’ � ‘MGR’ ��

� ��� ������.

36. ENU �� ID� �� �� �� � �� �� ��

ID NAME DEPT JOB YEARS SALARY COMM

10 Sanders 20 Mgr 7 18357.50 0

30 Merenghi 38 MGR 5 17506.75 0

50 Hanes 15 Mgr 10 20659.80 0

100 Plotz 42 mgr 6 18352.80 0

�� �� � �

�� CREATE VIEW�� ��� � ��� � �� ���� �����.

�� FROM��� ��� � � � �� CREATE VIEW� �� ��� �� �� �����.

�� � �� ����� � �� ���� �����. �� ��� ��� � ��� � ��

��� �� �� ��� UCS-2 ��� �(�� �� UCS-2� UTF-16 ������ �� ��� �

�� � � )� ����.

�� SQL�� ���� �� � � �� ��� ����. �� ���� �� � V1�

SRTSEQ(*LANGIDSHR) � LANGID(ENU)� �� �� � �� ���� �������. CREATE

VIEW�� ��� ����.

SQL ����� 135

Page 148: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

CREATE VIEW V1 AS SELECT *FROM STAFFWHERE JOB = 'MGR' AND ID < 100

37. ″SELECT * FROM V1″

ID NAME DEPT JOB YEARS SALARY COMM

10 Sanders 20 Mgr 7 18357.50 0

30 Merenghi 38 MGR 5 17506.75 0

50 Hanes 15 Mgr 10 20659.80 0

� V1� �� �� ��� �� � �� ���� �� ����� . �� � ���

SRTSEQ(*LANGIDUNQ) � LANGID(ENU)� � �� ���� �����.

38. ENU �� ID� � �� � �� ���� ″SELECT * FROM V1 WHERE JOB = ‘MGR’″

ID NAME DEPT JOB YEARS SALARY COMM

30 Merenghi 38 MGR 5 17506.75 0

�� �� � CREATE INDEX�

� � CREATE INDEX�� ��� � ��� � �� ���� �����.

� � �� ���� ��� ���� ��� � � ��� �����. � ���� �� �� ��

�� UCS-2 � UTF-16 ��� � � ���. ���� � � � �� ��� � �� ���

� �� �� ����.

� � �� � � � ���� ��� , �� �� UCS-2� UTF-16 ��� �� � ��

���� ��� ���. ��� �� ��� �����.

�� ��

� ��� � ��

�� �� � ����

� ����� � � ���� �����. � ����� ���� ���� � �� ���� ��

��, � � �� � �� ���� �����.

�� ����� ���� , �� � �� ��� �� � �� ��� ���.

� ����� ���� � � �� � �� ���� INSERT �� UPDATE � � �����

����� ���� ��� �� ���� �� �� � ����.

ICU �� ��

ICU(International Components for Unicode) � � ���� ���� ������� �� ��

��� ���� ���� ��� �� ���� ��� �����.

136 IBM i: ������ SQL �����

Page 149: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� ��, ICU � � ��� en_us(�� ��)� �� ICU ��� fr_FR(���� ��)� ���

���� � � � ����.

ICU ��(i5/OS �� 39)� ���� �� ���� ��� ����, ���� �� �� �� �

�� ����. ICU � � ���� �� ��, ��� � ���(UTF-8, UTF-16 � UCS-2) ��

�� � � � ����.

�� ��, UTF-8 �� NAME�� �� �� ����(� 16� �� ���).

NAME HEX (NAME)

Gómez 47C3B36D657A

Gomer 476F6D6572

Gumby 47756D6279

*HEX � �� ��� �� NAME �� �����.

NAME

Gomer

Gumby

Gómez

ICU � � ��� en_us� ��� �� NAME �� ���� �����.

NAME

Gomer

Gómez

Gumby

ICU � � ���� ���� , ���� ���� SQL�� ��� ICU� �� � � ���

� ����� *HEX � �� ���� SQL�� ���� �� �� � ����. � �� �� ��

� ���� �� �� ���� �� ICU �� ��� � ��� �����. ICU � � ����

�� � � ��� �� ��� � ��� SQL� ��� ��� �� ��� � ����. �� ICU

� � ���� �� � � � �� ��� � ���� ICU ��� ���� �� ���� ��

� � ����. � � ��� �� ICU �� �� ��� ICU ��� ���� ��� ��

�.

�� ��

���� �� ��� ����

���

��� ���� �� ��� ���� �� � ����.

SQL ����� 137

Page 150: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

UTF-8 �� UTF-16 CCSID ��� �� ���� �� ��� � � ����. �� ��� ����

�� ��� � ���� ��� � ����. �� ��� � � �� ���, ��� ����� ��

��� �� � ��(�: �� � � ���) ��� ��� � ����. �� ��� �� �� �

� �� �� ���� ���� � �� ��� �� �� �� �� �����. �� ��,

���� �� ‘a’� ‘..’� ��� , ���� � �� ‘ä’� ��� �����.

��� ���� ���� �� � ��� ����. ���� ���� �� � ���� �

�� ��� �� ���� ��� ��� �� � ����. �� �� �� � �� �����.

UTF-8 � UTF-16 ��� ���� ���� �� ���� � �� ‘a’� �� � ��� ���

�� ��� ��, �� ‘ä’ ��� �� �� �� �� � ����. � �� �� � �� WHERE

C1 = ‘ä’�� �� ��� ��� ����. �� ���, ���� �� �� ��� � ��

���� �����.

���� �� �� ���� �� ��� ��� ���� �����, ������� ���� ���

�� ���� � ��� � ����. ������� ��� ����� ��� ��� ��

NORMALIZED� ������. � ��� CCSID 1208(UTF-8) �� 1200(UTF-16)�� ��� ��

� ���� �����. ������� ���� �� � �� ��� �����.

NORMALIZED�� � � ���� ����� ��� � ����. �� ���� �� ����

��� � �� ����� ���� �� ��� �� �� ������� �����. �� �

��� ���� �� ��� ����. ���� � �� �� �� ��� ��� ����

�.

QAQQINI �� NORMALIZE_DATA ��� UTF-8 � UTF-16 ���� �� � � � ����

��� ����� ��� ��� �� �����. � ��� SQL�� ���� ���� �� ����

��, ���, ��� �� � ��� ��� ���� ����� ��� �����. ��� ���

���� ��� �����. �� ��� ������ �� ��� �� ���� ���� �� ��

����� �� �� �����, ���� �� ��� �� �� � ��� ����. ��

���� ��� �� ���� ��� � � ����. ���� �� ���� �� �

��� �� ���� ���� ��� ����� ���.

�� ���

�� �� � QAQQINI� ���� ��� �� ��

��� ��

i� DB2 ������� ��� � ������ SQL ���� ��� ��� ���� ���� ��

��� ��� �����.

SQL ���� ��

SQL ����� �� ���� �� ����� ��� �� ��� �� �����.

138 IBM i: ������ SQL �����

Page 151: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

���� SQL GRANT � REVOKE� �� ���� �� ��(EDTOBJAUT), ���� ����

(GRTOBJAUT) � ���� �� ��(RVKOBJAUT) CL ��� �� SQL ���� ��� ��� �

����.

SQL GRANT � REVOKE�� SQL �, SQL ���, SQL ����, �� ��, � ��, �, ��,

���, �, XSR ����, ��� � �� �� � �� �����. �� SQL GRANT � REVOKE�

� � � � �� ��� �����. � , EDTOBJAUT, GRTOBJAUT � RVKOBJAUT� ��

�� �� � ����� �� �� ����� �� ��� ����� ���� ���.

SQL�� �� ��� ��� ���� �, � �� ����� ����� ��� �� ����.

� SQL�� :

v USRPRF �� *USER��, SQL�� ��� ��� � �� ��� ����� �� ���� ��

� ���� ���� ����. SQL�� ���� ��� � �� ��� ����� ��� ��

� ���� ���� ����. *USER� ���(*SYS) ��� ��� ����.

v USRPRF �� *OWNER��, SQL�� ��� ��� � �� ��� ����� �� ��� �

���� ���� ��� ���� ���� ����. SQL�� ���� ��� � �� ��� �

���� �� � � SQL ��� ���� ��� ���� ���� ����. ��� ��

��� ���� �����. *OWNER� SQL(*SQL) ��� ��� ����.

� SQL�� :

v USRPRF �� *USER��, SQL�� ��� ��� � �� ��� ����� �� ���� ��

� ���� ���� ����. SQL�� ���� ��� � �� ��� ����� �� � �

��� ���� ���� ����.

v USRPRF �� *OWNER� DYNUSRPRF� *USER��, SQL�� ��� ��� � �� ��� �

���� �� ��� � ���� ���� ��� ���� ���� ����. SQL�� ��

�� ��� � �� ��� ����� �� � � ��� ���� ���� ����.

v USRPRF �� *OWNER� DYNUSRPRF� *OWNER��, SQL�� ��� ��� � �� ���

����� �� ��� � ���� ���� ��� ���� ���� ����. SQL�� �

��� ��� � �� ��� ����� �� � � SQL ��� ���� ��� ���� ��

�� ����. ��� �� �� ��� ���� �����. �� � ��� DYNUSRPRF�

*OWNER ��� �� ��� �� ���� ���. � ��� ����� ���� �����

��� ���� �� ��� � � ��� �����.

��� SQL�� , ���� �� ���� ��� ��� ��� ����. �� ��� ��

� SQL�� ���� ����.

SQL ����� 139

|

|

|

|

Page 152: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� ��

�� ��

GRANT(��� �� � ��)

REVOKE(��� �� � ��)

�� ID

���� ID(authorization ID)� �� ���� ���� ��� ��� �������. CRTUSRPRF(�

�� ��� ��) ��� ���� ���� ID� ��� � ����.

�� ��� � ���� ��� ���� � ��� �� ��� � ����.

����� ����� ���� �� ��� �� �� ���� � ��� � � ��� �� ���

� ���� � �� � ����. �� SELECT ���� � (�: �� ��)� ���� �����

� �� �� � ��� � ����. �� �� WHERE�� ����(�� ��, �� �� ��� ��

���� � �� ����) � �� ���� �� ��� ��� � ����.

��

i� DB2 ������� �� �� C2 �� ��� ����� ������. C2 ��� �� ��� �

���� ��� ���� �� �����.

i� DB2� ��� �� ��� �� ���� �� ��� �����. ��� ���� ��, ��� ��

�� ��� ���� ��� � ����. ��� � QAUDCTL� ��� ���� �� �� ��� ��

�� ����� ��� �����. CHGUSRAUD(��� �� �) � CHGOBJAUD(���� �� �

) ��� ���� ���� ����� �����. ��� � QAUDLVL� ���� �� ��� ��

���(�: �� ��, ��, ��, �� �� �� ��).

i� DB2� i� DB2 �� ��� �� � ���� ��� � ����.

�� �� �� ��� �� �� �� �� ��� ����. �� ��, �� �� �� ��

� � ���� ��� , �� �� �� �� � ���� ��� � ��� �����. ��

�� ���� �� �� ��� �����. ���� ����� �� ���� �����. �� �� ��

���� ����� ���� ��� ��� � � ��� ���� ����. ��� ���� ��� ��

���.

�� ��

�� ��

�� ��

��� ���� ��� � ���� ��� �� �� ��� ��(�: �� � �� ��)� �� ��

� �� � �, ����� ��, � �� ��� ���(�� �) �� ��� �� ����

�� ��(�: �� �� )��� ���� �����.

140 IBM i: ������ SQL �����

Page 153: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� ��

XA API

���

���(Concurrency)� � ���� ��� ���� ��� �� � ��� �� ��� �� �� �

��� � �� �� � �� �����.

� ��� i� DB2 ������ ���� ���� �����. �� �� ���� ���� ��� �

� ���� ��� ��� ���� �� ��� � �� �� ���� �����.

��, i� DB2� ���� �� �� �� �����. �� � ���� i� DB2� � �

�� �� �� ��� �� �� ���� ���.

�� ��, ��� ��� �� �� �� �� �� ��(��) �� �� ������(�� ���

���� �� DELETE �� UPDATE���) �� ��� �� ��� � ����. � �� FETCH

� ��� � � � � ��� ���� �� �� UPDATE �� �� �� DELETE�� ���

�. ��� ��� �� �� �� �� �� ��(�� � ��) �� �� ������(�� DELETE

�� UPDATE���) �� ��� �� �� �� �� ���� ��� �� ����.

��� � ��� �� �� � �� ���� �� �����. i� DB2� ��� �� �� ��(60)

� ��� � �� ��(*IMMED)�� ���, � � � � �����. � � �� ��� ��� �

� ��(DML) ���� �����. CHGPF(�� � �), CHGLF(�� � �) � OVRDBF(��

���� � ��) CL ��� ���� � �� �� � ����.

�� ��� �� ��(DDL) ���� LOCK TABLE�� ���� � �� ��� � ��� �� �

�(DFTWAIT)���. CHGJOB(� �) �� CHGCLS(��� �) CL ��� ���� � �� �

� � ����.

�� �� �� ��� ��� � �� ��� �����. �� ��, ��� � �� � 1� ��

�� � �� � �� � 2� �� �� �� �����. � � � � � 2� ��� �

� � � � �� ��� ���� � � � � �����. � � � � 1� ���

�� i� DB2� � � � ��� ��� ��� � � � ��� �����.

SQL LOCK TABLE�� ���� ���� �� ���� ��� ���� ���� ��� � � �

���. COMMIT(*RR)� ���� �� ���� � �� � ���� ��� � ���.

��� ���� ��, i� DB2� �� � ��� �(ODP)� � ��� �����. � �� ���

ODP�� ���� ���� �� �� �����, �� �� �� ���� ����. ���� ��

�� ���, �� � � � ���� �� ��� ���� � �� ����. �� ����

i� DB2� �� � � �� ��� ��� ��� � ��� � � � ��� ��� ��� �

����. ���� i� DB2� � ���� ��� �� ���� ���� � �� ODP� ���

(��� �� ��).

SQL ����� 141

Page 154: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�: � �� ���� �� ��� ��� �� �� � � ODP� �� ��� �� ���. ���

�� ��� �����.

LOCK TABLE�� ���� ��� �� ���� ���, COMMIT(*ALL) �� COMMIT(*RR)� �

��� , ��� � �� �� ���� �� �� � � �� �� � ����. ��, ���

� SQL�� ��� � ����� �� �� �� �����(�: FETCH ). �� ��� , ���

� SQL� �� ��� ����� ���� �� �� �� �� � ����(�: OPEN ).

v ALWCPYDTA(*OPTIMIZE)� ��� Optimizer� ��� �� ���� �� �� ���� �

� ��� � ���� ��� ������.

v � ����� ������ ���� �� �� ���� ���� ���. �� �� ���� ���

� ��� � � �� ���� ��� ����. �� �� ���� ���� ��� �� ��

� SQL �� �� ����� DECLARE CURSOR� ������.

v � �� ��� ��� � � �����.

�� � � �� ��� ���� ���� �� ��� ��� � ����. � ��� ��� ��� �

��� �� � ��� ���� ��� �� ������ ����� �����.

�� � � �� ��� �� �� �����.

� �� ��

������. � �� �� �� �� �� �� �� �� ���� ��� � ������

���� �� �� ��� ����� �����. �� �� �� �� �� �� ���

����. � ��� COMMIT(*NONE) �� COMMIT(*CHG)�� �� �� �� ���

��� ����.

��� ��� ��

� �� �� �� �� �� �� �� �� ���� ��� � ������ ���� ��

�� ��� �� �� �� ��� ��� ��� � ��� �����. �� �� �� �

� �� �� �� � ����. � ��� COMMIT(*CS) �� �� � ��� �

�� ��� �� �����.

�� ��� ���

� �� �� � ��� �� ������ ���� �� ���� �����. � ��

� ��� COMMIT(*CS) �� COMMIT(*ALL) �� �� �� ����.

USE CURRENTLY COMMITTED � SKIP LOCKED DATA� �� � � �� �� ���� �

��� ��� ���� ��� � ����. �� � ��� ����� ��� ��� � � ����

��� � ���� ���.

��� �� �� � � �� �� ��� � ����.

v select�, SELECT INTO, �� UPDATE �� �� DELETE� �� ��� ���� concurrent-

access-resolution�� �.

v CRTSQLxxx �� RUNSQLSTM ���� CONACC ��� ����.

142 IBM i: ������ SQL �����

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

Page 155: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

v SET OPTION��� CONACC �� �.

v PREPARE�� attribute-string��.

������ �� �� � � �� ��� ��� �� QAQQINI �� �� ���

SQL_CONCURRENT_ACCESS_RESOLUTION �� �����.

�� ��

LOCK TABLE

���

i� DB2 �� ��� �� �� ��� � �� ��� �����.

��� ��� ���� ���� �� ��� ��� ��� �� ���� ���� �� � ��

��. �� ��� ���� ��� �� ���� ����� ��� � ����.

SQL ���� ��� � ����� �� � �� ���� �����. SQL� �� � �� ���� ��

� � CREATE SCHEMA�� ASP�� �� ��� �� ��� �(ASP)��� �����. �

� �� ���� ��� � ASP� �� ��� ��� � ����, ��� ���� ��� ���

ASP�� �� �� �� ���� ��� � ����.

���� ���� ��� � ����� i� DB2� ��� ��(QSQJRN)� ���� ������. ��

���� �� ���� �� QSQJRN ��� � ����� ��� � ���� �����

�. � � ��, �� �� ���� ��, �� ��� � ��� �� ��� ���� ���� ��

��� �����. �� ��, ���� ���� ���� ��� ��� �� �� �� ���

����. ���� ���� �� �� ��� ����. �, ���� �� ��� ��� ��

��� �� ��� ������. ���� �� ��� ���� �� �� ��� ���� ���

�.

SQL ����� �� ��� �� SQL ���� �� �� ���� ��� � ���� �����.

�� ��� �� �� ���� SQL ���� �� ��� ���� � ����.

���� �� �� ���� ���� �� ���� �� � ��� �� �� �� ������ �

� �� �� ���� ���. NO ACTION, CASCADE, SET NULL �� SET DEFAULT �� �

�� ���� �� ����� �� ����� ���� � �� �� � �� ��� ����.

��� �� ���� COMMIT(*NONE)� ��� ������ �� ��� � ����. �

� ��� � �� ��� ���� �� �� ��� ��� ���� ���.

SQL ����� 143

|

|

|

|

Page 156: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� ��

�� ��

�� ��

114 ���� ��� ����� �� ��� ���

�� ���� ���� , �� �� ��� 1� �� ��� �� ���.

�� ��

i� DB2 �� �� ��� ��, �� �� �� ���� ��� �� ��(DDL) ��� �� �����

� ��� ��� ���� �� ��� � � ��(������ � )� �����.

�� ��� �� ��� ����� �����. �� ��� �� ��� ������ �����. ��

� ����� ��� � �� � �� ��� ���� �� ��� � ����. �� ��� � �� ��

�� ����� �� ��� � ����. �� �� ��� ����.

v SQL COMMIT�

v CL COMMIT�

v �� �� ���(�: RPG COMMIT�)

�� ��� � �� �� �� ����� �� ��� � ����. �� �� ��� ����.

v SQL ROLLBACK�

v CL ROLLBACK ��

v �� �� ���(�: RPG ROLBK�)

����� ��� � � SQL�� ��� ����.

v DROP SCHEMA

v �� ����� �� �� ��� ��� GRANT �� REVOKE

COMMIT(*NONE)� �� �� �� ��� SQL�� ����� RELEASE�� ��� � �� ���

�� ���� �� , i� DB2� CL �� STRCMTCTL(�� �� ��)� ���� ���� ��

�� �� ����. i� DB2� STRCMTCTL ���� LCKLVL ���� � NFYOBJ(*NONE)

� CMTSCOPE(*ACTGRP) ���� �����. �� LCKLVL ���� CRTSQLxxx(SQL ��),

STRSQL(SQL ��� � ��) � RUNSQLSTM(SQL� ��) ��� COMMIT ���� � ��

���. REXX��, �� LCKLVL ���� SET OPTION�� � �����. STRCMTCTL ��

� ���� �� CMTSCOPE, NFYOBJ �� LCKLVL ���� ��� � ����. CMTSCOPE(*JOB)

� ���� � �� �� ��� ���� i� DB2� ��� ��� ���� ����� �� �

�� �� ��� �����.

�:

v �� ��� ��� � ��� �� ��(DML) ���� �� ����� ����� ���� �

��� ����� ���.

144 IBM i: ������ SQL �����

Page 157: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

v �� LCKLVL ���� �� ��� � �����. �� ��� ����, SET

TRANSACTION SQL�� CRTSQLxxx, STRSQL �� RUNSQLSTM ��� COMMIT ��

�� �� � ��� ��� � ��� �����. �� LCKLVL ���� i5/OS � �

�� ����(SQL)� �� ���� �� �� ���� ����. LCKLVL ���� ��

� ��� SET TRANSACTION�� �� ���� ���� ���� SQL �� ��� ��

���� �� ��� �� ����.

�� �, GROUP BY �� HAVING� ��� �� �� �� �� ��� , ROLLBACK

HOLD� �� ��� ��� �� ����. �� �� �� �� �� ��� ����.

v �� �� ��� COMMIT(*CHG)� (ALWBLK(*NO) �� (ALWBLK(*READ))� ���

COMMIT(*CHG)� ������ ���� ��� ��� � �(CPI430B)� �����.

v �� ��� KEEP LOCKS�� �� COMMIT(*ALL), COMMIT(*RR) �� COMMIT(*CS)� �

� i� DB2� �� �(*SHRNUP)�� �� �� ���� ����. ��� �� ����

� �� �� �� ���� �� �� �� ��� ��� �� �� ���� ���. �� ��

��� KEEP LOCKS�� �� COMMIT(*ALL), COMMIT(*RR) �� COMMIT(*CS)� ���

��� ���� ��� ��� � �(SQL7902 �� CPI430A)� �����. � � SQL0595� ��

� �� ����.

KEEP LOCKS�� �� COMMIT(*ALL), COMMIT(*RR) �� COMMIT(*CS)� ��� ���� �

� ����� �� �� ���� ��� ��� i� DB2� �� �(*SHRNUP)�� �� ��

���� ����. ��� �� �� �� �� ���� �� �� �� ��� ��� ��� �� ��

�� ���. COMMIT(*ALL)� ������ ���� ��� ��� � �(SQL7902 �� CPI430A)

� �����. � � SQL0595� ��� �� ����.

����� ����� � ALWBLK(*ALLREAD) � COMMIT(*CHG)� �� �� �� ��

��� � ���� ��� ROLLBACK HOLD� �� ��� ���� ����.

COMMIT(*RR)� �� ���� ��� � � � ������. ��� �� �� ���

� ����(*SHRNUP). ��� �� �� �� ���� ����(*EXCLRD). �� ���� ��

� ���� ���� � �� ��� ���� ���� �� � �� ����.

COMMIT(*RR)� ���� �� �! ���, ������ ������ � �� ���� ��

� ����� ���� �� SQL0913� ��� � ��� ����� � �� ����.

COMMIT(*NONE)� �� �� �� ��� �� ���� ������ ROLLBACK� ����� �

� ��� ���� ���� (�� �� ��� *JOB� �� ), � �� ��� �� �

� ��, ��, �� � DDL ��� ������. ������ COMMIT� ����� �� ���

���� ���� , � �� ��� �� �� ��, ��, �� � DDL ��� �����.

i� DB2� � ��� ���� �� �� � � � ���� � ��� ��� �� �� ��

���. COMMIT(*ALL)� �� �� �� �� �� �� ���� � ��� ���� ��

SQL ����� 145

Page 158: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� ���� �� � � ��� ��� ���. � �� � � ��� �� �� �� � ��

��. ��� �� � ��� �� �� �� �� ��� ����. �� �� �� � �

�� �� ���� �� �����.

�� ��� ��� � ���� 5 � �� � � ���� �����. COMMIT(*ALL) ��

COMMIT(*RR)� ��� �� �� �� ��� ���. (�� ��� � ���� � ��

����� ��� ��� �� � �� �����.) ���� �� ��� ��� ��� � �

�� � � � ��� ��� � � � ���� �� �� �� ���� � �� � ���.

� ���� ���� � �� �� ���� �� ����.

COMMIT HOLD � ROLLBACK HOLD� ��� � ��� ����� OPEN�� �� ���� �

�� ��� ��� � ��� ���. System i ��� � ��� ������� ��� � HOLD

�� ��� � ���. �� DECLARE CURSOR� WITH HOLD ��� ���� �� �� ��

� � ��� ��� � ����. �� ��� ��� System i ��� � ��� �������

��� � �����. �� ��� ���� ���.

39. � � �� ��

SQL� COMMIT ����(� 5 �

�)

� �� �� � �� ��

SELECT INTO

SET ��

VALUES INTO

*NONE

*CHG

*CS(� 6 ��)

*ALL(� 2 � 7 ��)

� �

� �

� ��� � � ��

�� ���� ROLLBACK �� COMMIT �

READ

READ

FETCH(�� �� ��) *NONE

*CHG

*CS(� 6 ��)

*ALL(� 2 � 7 ��)

� �

� �

�� ���� �� FETCH �

�� ���� ROLLBACK �� COMMIT �

READ

READ

FETCH(�� �� �� ��

��) (� 1 ��)

*NONE

*CHG

*CS

*ALL

�� �� �� ���� ��

�� ���� �� FETCH �

�� ��� �

�� ���� �� FETCH �

�� ��� �

�� ���� �� DELETE �

�� �� �� ���� ��

�� ���� �� FETCH �

�� �� �� ����

�� ���� COMMIT �� ROLLBACK �

�� �� �� ���� ��

�� ���� �� FETCH �

�� �� �� ����

�� ���� COMMIT �� ROLLBACK �

�� ���� ROLLBACK �� COMMIT �

UPDATE

UPDATE

UPDATE

UPDATE

INSERT(�� ���)

MERGE, INSERT

�� ���

*NONE

*CHG

*CS

*ALL

� �

�� ���� ROLLBACK �� COMMIT �

�� ���� ROLLBACK �� COMMIT �

�� ���� ROLLBACK �� COMMIT �

UPDATE

UPDATE

UPDATE3

INSERT(�� �� ���) *NONE

*CHG

*CS

*ALL

� �

� �

�� �� ��� � ��

�� ���� ROLLBACK �� COMMIT �

READ

READ

146 IBM i: ������ SQL �����

|

|

|

Page 159: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

39. � � �� �� (��)

SQL� COMMIT ����(� 5 �

�)

� �� �� � �� ��

UPDATE(�� ��) *NONE

*CHG

*CS

*ALL

���� �� ��� � ��

�� ���� ROLLBACK �� COMMIT �

�� ���� ROLLBACK �� COMMIT �

�� ���� ROLLBACK �� COMMIT �

UPDATE

UPDATE

UPDATE

UPDATE

DELETE(�� ��) *NONE

*CHG

*CS

*ALL

���� �� ��� � ��

�� ���� ROLLBACK �� COMMIT �

�� ���� ROLLBACK �� COMMIT �

�� ���� ROLLBACK �� COMMIT �

UPDATE

UPDATE

UPDATE

UPDATE

UPDATE(��� ��)

MERGE, UPDATE

�� ���

*NONE

*CHG

*CS

*ALL

�� ���� �� FETCH �

�� ���� ROLLBACK �� COMMIT �

�� ���� ROLLBACK �� COMMIT �

�� ���� ROLLBACK �� COMMIT �

UPDATE

UPDATE

UPDATE

UPDATE

DELETE(��� ��)

MERGE, DELETE

�� ���

*NONE

*CHG

*CS

*ALL

�� ��� � � ���

�� ���� ROLLBACK �� COMMIT �

�� ���� ROLLBACK �� COMMIT �

�� ���� ROLLBACK �� COMMIT �

UPDATE

UPDATE

UPDATE

UPDATE

�� ��(�� �� �� �

� �� �� UPDATE ��

DELETE ��)

*NONE

*CHG

*CS

*ALL(� 2 ��)

�� ���� �� FETCH �

�� ���� �� FETCH �

�� ���� �� FETCH �

�� ���� ROLLBACK �� COMMIT �

READ

READ

READ

READ

�� ��(�� �� �� �

� SELECT INTO)

*NONE

*CHG

*CS

*ALL

� �

� �

�� �� ��� � ��

�� ���� ROLLBACK �� COMMIT �

READ

READ

�:

1. �� ���� �� ��� �� �� ��� ��� ��� UPDATE �� DELETE �� ��� ��.

v ��� FOR UPDATE�� �����.

v ��� FOR UPDATE, FOR READ ONLY �� ORDER BY� � ���� ����� �� �� ��� ���.

– �� ���� ���� �� UPDATE

– �� ���� ���� �� DELETE

– EXECUTE �� EXECUTE IMMEDIATE�� ALWBLK(*READ) �� ALWBLK(*NONE)� CRTSQLxxx ��� �������.

2. COMMIT(*ALL)� ����� �� ��� �� �� ���� �� � ����. UNION� �� �� �� ����� �� ���

�� ��� ���� �� , ��� ��� ���� ���� ���� �� �� �� �����.

3. �� ���� �� �� UPDATE �� �� � ���� �� �� READ �.

4. � �� ��� ����� �� ��� �� �� ���� �� � ����. � �� � �� �� �� �� �����. �� �

� ��� �� ��� *ALL� ����.

5. � �� ��(*RR) � �� *ALL� �� � �� ����.

6. KEEP LOCKS�� *CS� � �� , �� �� ��� ��� COMMIT �� ROLLBACK� ��� � � �����. ���

�� ���� ��� � �� SQL�� ��� � � �����.

7. *RS �� *RR �� ��� � USE AND KEEP EXCLUSIVE LOCKS�� �� �� �� UPDATE �� READ � ��

�����.

SQL ����� 147

|

|

|

|

|

|

Page 160: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� ��

�� ��

�� ��

DECLARE CURSOR

��� ��

XA API

��

�� � � �� � �� � �� �� � ���� ��� ���� �� ������. ���� ��

�� � ��� � ����. ����� ���� , ���� ���� ����� ��� �� ��

�� �������.

SAVEPOINT SQL�� ���� �� � �� � ����. �� ��, STOP_HERE�� �� � �

�����.

SAVEPOINT STOP_HEREON ROLLBACK RETAIN CURSORS

������ ���� ��� ������ ��� � �� �� ������ �� �� �����

� ��� ������� �� �� � �� � ����� ��� ����.

�� � �� SAVEPOINT�� � ����� ��� � �� � ���� , UNIQUE ���

������. ��� �� SAVEPOINT��� �� �� �� ���� �� ����� ����

� �� � �� �� � ���� �����. �� SAVEPOINT�� ���� ���� ,

UNIQUE ��� ���� ��� ���. �� SQL�� START_OVER�� � �� � ����.

SAVEPOINT START_OVER UNIQUEON ROLLBACK RETAIN CURSORS

�� �� ����� ROLLBACK�� TO SAVEPOINT�� � ������. �� ��� SAVEPOINT

� ROLLBACK TO SAVEPOINT� ��� ����.

�� ����� ��� ��� ��� ���� ��� � ��� �����. ��� ��� � ��

��� ���� ��� � �� ��� �� �� �� ����. � 3� �� � �����.

got_reservations =0;EXEC SQL SAVEPOINT START_OVER UNIQUE ON ROLLBACK RETAIN CURSORS;

if (SQLCODE != 0) return;

for (i=0; i<3 & got_reservations == 0; ++i){Book_Air(dates(i), ok);if (ok){Book_Hotel(dates(i), ok);if (ok) got_reservations = 1;else

148 IBM i: ������ SQL �����

Page 161: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

{EXEC SQL ROLLBACK TO SAVEPOINT START_OVER;if (SQLCODE != 0) return;

}}

}

EXEC SQL RELEASE SAVEPOINT START_OVER;

�� � RELEASE SAVEPOINT�� ���� �����. �� � ���� ���� � RELEASE

SAVEPOINT�� ���� �� , �� �� �� �� � �� ���� �� � �����. ��

���� START_OVER �� � �����.

RELEASE SAVEPOINT START_OVER

�� � ����� ����� ��� � �����. �� �� ���� �� ���� ��� �

�� ������. COMMIT �� ROLLBACK�� ���� �� � �� �� � �����.

�� �� �� ���� ��� ���� ��� �� �� �� �� �� �� �� ���� �

����.

�� � � ���� � �����. �� � � �� ������ ���� �� ��� ����

��� ����� ����. �� � �� � � � � ������ ���� �� ��������

����.

� ���� ���� �� ���� ��� �� �, ��� �� �� ����� ��� � ���

�. �� ����� ���. � ��� ��� ���� � � �� ��� �����. � ��

��� �� �� � �� ����� �� ������ �� ��� ������.

�� � �� � �� �� �� ��(�� �) ���� ��� � ����. ROLLBACK TO

SAVEPOINT�� ���� �� �� �� ��� � �� �� ��� � ���. �����,

RELEASE SAVEPOINT�� ���� �� �� �� ��� � �� � ��� � ���. ��

����� �� ��� �� � ���� ��� ���� ����.

� ��� �� ���� �� �� ��� �� ��� ��

� � ��� ��� � COMMIT �� ROLLBACK� ��� �

���� ��� � ���� ��� �

��� �� �� ��� � ��� �� �� ���� ��� �

�� ����� ��� NEW SAVEPOINT LEVEL�� ��

�� � �� ����� ��� �

�� ����� ���� ��� �

ATOMIC �� SQL�� �� BEGIN� �� � ATOMIC �� SQL�� �� END� �� �

�� ���� � �� � � �� ��� ��� � ���� �����.

�� ��

COMMIT(*CHG), COMMIT(*CS) �� COMMIT(*ALL) ���� ��� � �� ��� �(atomic)

� ���.

SQL ����� 149

Page 162: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�, �� ��� ����� ���� �� ��� ����. �� �� ����� ���(�: ��

�, �� � �� �� � ��)�� �� �� ��� ��� ����.

�� COMMIT(*NONE)� ��� � � ������ ��� �� �� �(atomic)�

� ��. �� SQL ��� �� ���� �(atomic)� ���.

v ALTER TABLE(� 1 ��)

v COMMENT(� 2 ��)

v LABEL(� 2 ��)

v GRANT(� 3 ��)

v REVOKE(� 3 ��)

v DROP TABLE(� 4 ��)

v DROP VIEW(� 4 ��)

v DROP INDEX

v DROP PACKAGE

v REFRESH TABLE

�:

1. ��� ��� � �� ��� ����� �� �� ���� �� ��� � �� ���

�����. ��� �� SQL�� �(atomic)� � ��. �� �� ��� ����.

v ���� ��

v RESTRICT ��� �� (drop)

v �� �� �� ���(DROP COLUMN CASCADE, ALTER COLUMN, ADD COLUMN)

v ���� ��

2. COMMENT �� LABEL�� �� � � �� � � �� ��� �����. ���

�� SQL�� �(atomic)� ����, � �� �� ����� �� COMMENT ��

LABEL� �� ���.

3. GRANT �� REVOKE�� �� � ���, SQL ��� �� ���� �� ����

� �� ��� �����. ��� �� SQL�� �(atomic)� ����, � �� ���� �

� GRANT �� REVOKE� �� ���.

4. DROP TABLE �� DROP VIEW � �� �� (drop)�� �� � �� �� � �

� ��� �����, �� SQL�� �� � ��.

�� ��� �� ���� � ��� ������ ��� ����� �� � ��.

v ALTER FUNCTION

v ALTER PROCEDURE

v ALTER SEQUENCE

v CREATE ALIAS

150 IBM i: ������ SQL �����

Page 163: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

v CREATE TYPE

v CREATE FUNCTION

v CREATE INDEX

v CREATE PROCEDURE

v CREATE SCHEMA

v CREATE SEQUENCE

v CREATE TABLE

v CREATE TRIGGER

v CREATE VARIABLE

v CREATE VIEW

v DROP ALIAS

v DROP FUNCTION

v DROP PROCEDURE

v DROP SCHEMA

v DROP SEQUENCE

v DROP TRIGGER

v DROP TYPE

v DROP VARIABLE

v RENAME(� 1 ��)

�: RENAME� � �� ����� ��� �� ����. � � ��� RENAME�

�� � ��.

�� ��, CREATE TABLE�� i� DB2 �� �(PF)� �� �, ��� ���� �� ����

� ����. ��� create�� ��� ���� ���� ����� (drop)� � �� ���

� � �� ����. DROP SCHEMA�� ���� �� (drop)��� CL �� DLTLIB(��

�� ��)� ���� ���� ��� ��� ���� � �� ����.

����

i� DB2 ������� �, �� � � ����� �����.

� ����� �� �� ���� ���� �����. �� ����� �� ���� �� �� ��

�� �� �� �� �� ���� ��� �� �� �� �� �����. � ����� ���

�� ���� ���� �� ���� �����.

i� DB2� ��� �� ��(DML) ����� ����� ���� ����. �� �� ��(�: ��

��� ��)��� ����� ���� � � ���. � DML�� i� DB2� ����� ����

� � � � �� � ����.

SQL ����� 151

|

|

Page 164: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

v � ����� � �� �����. � ����� ���� � � ���� �� , EDTRBDAP(�

� �� �� ��) ��� ���� �� ���� �� � � �� � ����.

v i� DB2� �� �� ������ � ����� �� ��� ��� , ����� � �� �

�� �� ��� �����. EDTCPCST(� �� ���� ��) ��� ���� �� ����

�� � � �� � ����.

�� ��

11 ���� ������

����(constraint)� ����� ��, �� �� ��� � �� �� ������ ���� �����

�� �����.

�� ���� � � ��:

� ����� �� ���� ���� �� ���� �� � �� �� � ���� ���� �

���.

� ����� ����� (drop)��� SQL CREATE TABLE � ALTER TABLE�� �����

�.

� ����, �� ���� �� � �� ����, � �� ���� �� �� ��� ����

COL2� �� � ����� �����.

CREATE TABLE T1 (COL1 INT, COL2 INT CHECK (COL2>0), COL3 INT)

� ���� �� ���� �����.

INSERT INTO T1 VALUES (-1, -1, -1)

COL2� ���� �� � ����� ���� �� �����(�, -1� 0�� � ��).

�� ���� �����.

INSERT INTO T1 VALUES (1, 1, 1)

� �� ���� �� ���� �����.

ALTER TABLE T1 ADD CONSTRAINT C1 CHECK (COL1=1 AND COL1<COL2)

� ALTER TABLE�� COL1�� ���� �� 1� ���� � � ����� ��� COL2

� �� 1�� �� �� ��� ���� ���� ���. � ����� ���� ����. ����

� � ��� � ����� ���� �� �����(COL2� ‘1’ �� COL1� ‘1’ ��� ��

��).

152 IBM i: ������ SQL �����

Page 165: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� ��

ALTER TABLE

CREATE TABLE

�� � �� ��

IBM i �� � �� ��� SQL ����� �� (�� �) �� �� �� ���� � �����.

�� ��� i5/OS ����� ����� �� ��� � ����. �� � �� ��� �� ���,

� ���� �� ��� �� � �� ��� � ����� ��� � �� ���. �� ��� �

���� ���� � ��� �� ��� �����. �� ��� ���� �� ��� ��� �� ��

���� ���� ����� �� ���� ���� ��� � ����.

SQL ����, SQL � �� �� ���� �� ���� �� �� ����� ���� , �

�� ������ �� ����� �� �� �� SYSROUTINES � SYSPARMS ����� �

��� �����. QSYS� �� SQL ����� ��� � SQL ����� ���� ����. ��

CREATE PROCEDURE �� CREATE FUNCTION��� �� �� ���� �� �� �����

SYSROUTINES� �� ���� � ��� ��� � � ����. ��� �� ��� ��

�, � �� ����� ��� � SYSROUTINES � SYSPARMS�� �����.

SQL ���� ��� � ���� �� �� SQL ���� �� ��� �����. SQL ��� ���

SYSTRIGGERS, SYSTRIGDEP, SYSTRIGCOL � SYSTRIGUPD ����� ���� �����. SQL

CREATE TRIGGER��� ���� ���� ����� SQL ���� �� � ��� � �� � ��

���. ������ ���� ���� ���� �� � ��� ����� ����. � ����� SQL

��� �� � �� �� ���� �� ���� �� ���.

��� �� ��� �� *SQLUDT ����� ��� � SYSTYPES ����� ��� �� ��� �

��� �����. ��� �� ��� �� �� �� ��� ��� � �� � ��� �� �

� �� �����.

�� �� *DTAARA� ��� � SYSSEQUENCES ����� �� ���� �����. ����

� ���� ���� ���, *DTAARA� ����� �� ��� � �� SQL9020 ��� � �

� � ��� �����.

��� ��� �� *SRVPGM� ��� � SYSVARIABLES ����� ��� ���� �����. �

���� ���� ���� ���, ����� ��� ��� ��� � ���. ���� � �

� �� �� , ����� �� ���� ���� ��� ��� ��� � � ����.

�� SQL ���� �� �� SQL ���� �� ���� �� � ��� � ����. ��� � �

���� �� SQL ���� �� � ����� ��� � SQL ���� � �� � ����.

�� �� �� � �� SQL ����� SQL ���� ��(CRTSQLPKG� ��� � ��) �� �

���� ��� ��� � ����. SQL ���� �� ����� ��� �� ���.

SQL ����� 153

|

|

|

Page 166: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�: ���� �� ���� �� �� �� �� ���� ���� ��, �� ��� �� IDDU �

�(�� )� ���� ����. ���� �� �� �� ���� ����, � ���� ���

� �� �� ���� ����� ����. �� QSYS2� ���� �� �� ����� ��

����.

�� �� ��

i� DB2 ������� �� ��� �� ��� ���� �� �� � ��� ����� �����.

�� ��, ���, � � � RAID(Redundant Array of Independent Disk)� � �� �� � �

��� � � ����. i� DB2 ��� �� �� ��� ��� ��� ��� ��� �� ��

��� �� ��� ����.

DROP ��� ��� ��� �� �����. ��� ��� ��� �� ���, �, SQL ���,

� , ����, � �� � ��� ��� �� ����� ��� � ����.

�� ��� ���� �� �� �� ��� �� ���� i� DB2 ������ ���� ��

�� ��� � �� � �� �� �� � ����.

�� ��

i� DB2 ������� � ��� ���� �� � �� �� �����.

v ��� �� � ��

EDTRCYAP(� � �� �� �� ��) CL ��� ���� ��� �� �� �� � � ���

� �� � � ���� � ��� ��� �� ���� � ����� i� DB2� ��� � ���

�. ���� ��� ���� ��� ��� ���� ����� �� ��� �� ���� ����

�.

v � ���

i� DB2� �� �� ��� �� � � �� � � ���� ��� ��� �� � ��� �

� �����. � � ����� ��� ������ ��� � � � ���� ����� �

� � � ���� ���� ������ ���� � ���. SQL � � ���� ���� ���

�. �� STRJRNAP(�� � � � ��) CL ��� ���� i� DB2�� �� � � ���

� � ����.

v � ��

���� �� � �� � � ������ ��� ���� ���� ��� ����. SQL � �

*IMMED ���� ���� �����.

�� �� �� �� ��� �� � �, ��� � �� ��� � � ���� ��� �

�� �� � � ������ ���� ���� �� ���� ��� � �� � �� ����. �

��� �� � �� ��� � � ���� �� ��� ���� �� ��� ����. UNIQUE

��� �� �� SQL � � *IPL �� ���� �����(� � i5/OS ����� ��� �� �

154 IBM i: ������ SQL �����

Page 167: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� ���� ��). �� �� SQL � � *AFTIPL �� ���� �����(����� ���

� �� � � � ����� ���� ��). IPL �, ������ ���� �� � � �

�� �� ��� ��� ��� � � ����. ������ �� ��� ��� � ����.

v � �� � ��

��/�� �� ���� SAVOBJ(���� ��) �� SAVLIB(���� ��) CL ����

ACCPTH(*YES)� ���� ���� ��� � � � ��� � ����. � � �� � ��

� � � � ���� ��� ���. ��� �� � ���� �� � � ������ ����

�� ����, ����� �����.

���� ��

����� ��� �� ����� �� ��, i� DB2 ������� ���� ����� ��� ��

�� ��� ��� ���� ����� � SQL ����� �� � ��� ���� ����

���.

����� ���� ���� ����� SQL�, i5/OS CL ��, System/38 � CL ��, System/36 �

� �� System i ��� �� ���� ����� �� ���� �������. �� ��, SQL

DROP�� �����, i5/OS DLTF(� ��) CL �� �� System/38 DLTF(� ��) CL ��� �

����, WRKF �� WRKOBJ ���� �� 4� ���� ���� ��� � ����. ���� ��

�� �� ���� ����� ���, ������ ���� ���� ��� � ������ ���

�� �����. �� � ��� �� ����� �� �� ��� ����.

40. ����� �� ��� � ��

�� ��� �� �

���� ���� �� ��� ����� ���

����� ���� �� �� ��� ������ ���

���� ���� �� ��� ����� ���

����� ���� �� �� ��� ������ ���

���� ���� �� ��� ����� ���

���� � �� � ������ �� ���

���� ���(���) � ������ ��� ���

���� ��� � ������ ��� ���

����� ���� �� �� ��� ������ ���

���� ���� �� ��� ����� ���

���� � � ������ ����� � ���

��� �� ���� �

CREATE SCHEMA��� ASP�� ���� ��� �� ��� �(ASP)� ���� ��� � ���

�.

�� ���� ��(CRTLIB) ��� ���� ��� ASP� ����� ��� � ����. �� �

� SQL ���, � � � � ���� � � ����� ��� � ����.

SQL ����� 155

Page 168: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� ��

� � ��

�� ��

�� �� ���� �

� �� �� ����� ��� ������� ��� � �����.

�� ��� � �� �� ����. 1�, 2� � ��� �� � ���(UDFS)���. 1� �

�� �� ������� ��� � �����.

� ������� �� � � � ����. ���� ��� ������(�� SYSBAS� )� ��

��� ��� ������� �� � � � �� ��� �����. ��� ������� System i

Navigator� �� �� ���� ��� � �� �� ���� ����� �����. � ��

�� ��� System i Navigator� Databases ��� �� ������� ����.

�� ��

�� ��

��

�� ��� ���� �� ��� � �� � �� ���� �����.

�� ����

����(� �� ����� � )� ��� ���� �� ��� � �� �������. �����

� ��� ���� SQL�� � � � � ����. SQL� ����� ��� ��� �����

�� � � �����.

DB2 �� ����� ����� ��� � SQL�� �� ����� ��� � �� ��� SQL ��

���� �����. �� � �� DB2 ����� � �� �� ����� ��� � ����. ��

����� ��� � � ��� �� ������ ����� ���� �� �����

�� ��� CALL�� ���� ����� ���� �� � � ��� � ��� ���.

����� SQL ���� �� �� ����� ��� � ����. �� ����� ���� � ��

����(System/36 ���� � ���� ��) �� REXX ���� � ����. ����� SQL��

�� ��� ��� SQL�� � � ����. SQL ����� ��� SQL� ����, SQL �

��� �� SQL�� � � ����.

�� ����� ����� ���� ��� ���� ���.

v CREATE PROCEDURE�� �� �� ���� ��

v CALL�� �� �� ���� ��

v ��� �� ��

v ����� ���� ������ �� ��� ���� �� ��

156 IBM i: ������ SQL �����

Page 169: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

CREATE PROCEDURE�� ���� �� ����� ��� � ����. CREATE PROCEDURE��

SYSROUTINES � SYSPARMS ���� ���� ���� � ��� ��� �����. �� ��

��� SQL CALL�� �� �� ��� � �� � ����.

�� ���� �� SQL ����� ����� SQL CREATE PROCEDURE�� ��� � ����.

�� ����� �� ����� ��� ���� � ���� SQL�, �� ����� ���� ��

�� ��� �� �� � �� ���� �� ��� ����.

�� ����� �� � � ��� iSeries®� DB2 Universal Database™� �� ����, ��� � �

�� �� � � ������.

�� ��

12 ���� ��� �����

�� ����� SQL CALL��� ��� � �� �������.

Java SQL �

�� ��

480 ���� �DRDA �� ���� ����

i5/OS �� ��� ������ ��(DRDA) ��� �� ������ �� ��� �� � ��� �

����.

CREATE PROCEDURE

�� ���� ��

�� ����� �� CREATE PROCEDURE�� ���� �� ��� , ���� ��� ���

��� � ����� ��� � ���� ���� ����� �� �� ��� �����.

�� �� �����.

CREATE PROCEDURE P1(INOUT PARM1 CHAR(10))EXTERNAL NAME MYLIB.PROC1LANGUAGE CGENERAL WITH NULLS

� CREATE PROCEDURE�� ��� �����.

v ���� P1 �� �����.

v �� ���� �� ���� ���� ��� ���� �����. ���� �� 10� �� �

���. ���� IN, OUT �� INOUT ��� ��� ��� � ����. ��� ��� ��

�� �� �����(� ������) ���� ��� �����.

v ����� ��� ����� �� �����. MYLIB.PROC1� ����� CALL��� ��� �

���� �������.

SQL ����� 157

Page 170: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

v ���� P1(���� MYLIB.PROC1)� C� ���� ����. ��� ��� � �� ���� �

�� ��� ��� ����. �� ���� ����� ���� ��� ��� ���(�� ��, ILE

C ����� ��, ���, ��, �� � ��� ���� �� NUL ���(terminator)� �

��).

v GENERAL WITH NULLS� ��� CALL ��� �����. �� ����� ���� ���

� � ���, ��� CALL�� ����� ���� �� �� ��� ����. �� �� N

�� short ��� ����. ��� N� CREATE PROCEDURE�� �� ���� ����

�. � ����, ���� ���� �� � ��� ��� ���.

���� �� ����� ���� ��� �� � ����. �� � ����� �� CREATE

PROCEDURE �� DECLARE PROCEDURE�� ���� ��� �� � ��, CALL�� �� �

���� ��� � �� ���� � ��� �����. �� ��, NULL ���� �� ��� �

���.

�� ��

165 ���� ����� ��� ��� �� �� CALL� ���

���� CREATE PROCEDURE�� � CALL�� �� ��� ���� �����.

SQL ���� ��

SQL ����� CREATE PROCEDURE�� ����� ��� ���� � ��� ����, ��

��� ��� � ���� ����� �� �� ��� ��� ���� �� �����.

���� �� ����� �� ��� ���� � SQL����.

�� ��� ��� ���� �� ��� ��� ���� �� � ��� �����.

CREATE PROCEDURE UPDATE_SALARY_1(IN EMPLOYEE_NUMBER CHAR(10),IN RATE DECIMAL(6,2))LANGUAGE SQL MODIFIES SQL DATAUPDATE CORPDATA.EMPLOYEESET SALARY = SALARY * RATEWHERE EMPNO = EMPLOYEE_NUMBER

� CREATE PROCEDURE�� ��� �����.

v UPDATE_SALARY_1 ����� �����.

v �� ������ ��� 6 �� ��� �� EMPLOYEE_NUMBER ���� �� ���

��� �� ��� �� RATE ���� �����.

v ����� SQL ���� ���� SQL ������ ����.

v ���� �� � UPDATE��� �����. ����� ����, EMPLOYEE_NUMBER � RATE

� �� �� �� ���� UPDATE�� �����.

� UPDATE� �� SQL ���� ���� SQL ����� ��� ��� � ����. SQL ����

�� ����� ���� ����.

158 IBM i: ������ SQL �����

Page 171: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

v ���

v CALL�

v CASE�

v ���

v FOR�

v GET DIAGNOSTICS�

v GOTO�

v IF�

v ITERATE�

v LEAVE�

v LOOP�

v REPEAT�

v RESIGNAL�

v RETURN�

v SIGNAL�

v WHILE�

�� ����� �� ��� ��� �� � �� ��� ���� ����. ����� CASE�� ��

�� ��� �� �� �� � ���� �����.

CREATE PROCEDURE UPDATE_SALARY_2(IN EMPLOYEE_NUMBER CHAR(6),IN RATING INT)LANGUAGE SQL MODIFIES SQL DATA

CASE RATINGWHEN 1 THENUPDATE CORPDATA.EMPLOYEESET SALARY = SALARY * 1.10,BONUS = 1000WHERE EMPNO = EMPLOYEE_NUMBER;

WHEN 2 THENUPDATE CORPDATA.EMPLOYEESET SALARY = SALARY * 1.05,BONUS = 500WHERE EMPNO = EMPLOYEE_NUMBER;

ELSEUPDATE CORPDATA.EMPLOYEESET SALARY = SALARY * 1.03,BONUS = 0WHERE EMPNO = EMPLOYEE_NUMBER;

END CASE

� CREATE PROCEDURE�� ��� �����.

v UPDATE_SALARY_2 ����� �����.

SQL ����� 159

Page 172: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

v �� ������ ��� 6 �� ��� �� EMPLOYEE_NUMBER ���� �� ���

��� �� ��� �� RATING ���� �����.

v ����� SQL ���� ���� SQL ������ ����.

v ���� �� �����. ����� ����, �� ��� RATING� �� � UPDATE

�� �����.

���� ���� ����� � ���� ��� � ����. ��� ��� �� �� SQL�� ���

� ����. �� SQL ��, �� � ��� ��� � ����.

�� ����� �� ��� ���� ����. � ��� �� ��� � ��� ���� �� � �

�� �� �� �����.

CREATE PROCEDURE RETURN_DEPT_SALARY(IN DEPT_NUMBER CHAR(3),OUT DEPT_SALARY DECIMAL(15,2),OUT DEPT_BONUS_CNT INT)LANGUAGE SQL READS SQL DATAP1: BEGINDECLARE EMPLOYEE_SALARY DECIMAL(9,2);DECLARE EMPLOYEE_BONUS DECIMAL(9,2);DECLARE TOTAL_SALARY DECIMAL(15,2)DEFAULT 0;DECLARE BONUS_CNT INT DEFAULT 0;DECLARE END_TABLE INT DEFAULT 0;DECLARE C1 CURSOR FORSELECT SALARY, BONUS FROM CORPDATA.EMPLOYEEWHERE WORKDEPT = DEPT_NUMBER;

DECLARE CONTINUE HANDLER FOR NOT FOUNDSET END_TABLE = 1;

DECLARE EXIT HANDLER FOR SQLEXCEPTIONSET DEPT_SALARY = NULL;

OPEN C1;FETCH C1 INTO EMPLOYEE_SALARY, EMPLOYEE_BONUS;WHILE END_TABLE = 0 DO

SET TOTAL_SALARY = TOTAL_SALARY + EMPLOYEE_SALARY + EMPLOYEE_BONUS;IF EMPLOYEE_BONUS > 0 THENSET BONUS_CNT = BONUS_CNT + 1;

END IF;FETCH C1 INTO EMPLOYEE_SALARY, EMPLOYEE_BONUS;

END WHILE;CLOSE C1;SET DEPT_SALARY = TOTAL_SALARY;SET DEPT_BONUS_CNT = BONUS_CNT;

END P1

� CREATE PROCEDURE�� ��� �����.

v RETURN_DEPT_SALARY ����� �����.

v �� ������ ��� 3 �� ��� �� DEPT_NUMBER ���� �� ������ �

� ��� �� DEPT_SALARY �� � � �� �� ���� �� ��� ��

DEPT_BONUS_CNT ���� �����.

v ����� SQL ���� �� SQL ������ ����.

160 IBM i: ������ SQL �����

Page 173: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

v ���� �� �����.

– EMPLOYEE_SALARY � TOTAL_SALARY SQL ��� �� �� �����.

– ����� 0�� �� BONUS_CNT � END_TABLE SQL ��� �����.

– �� ����� � ��� C1 ��� �����.

– NOT FOUND� �� �� ��(���� END_TABLE ��� 1� �)� �����. FETCH

� ��� � � �� �� � ��� �����. ��� ���� SQLCODE � SQLSTATE�

0�� �� �����.

– SQLEXCEPTION� �� �� ��� �����. ����, DEPT_SALARY� NULL� ��

��� ��� �����. � ��� ��� ��� �, SQLSTATE ���� ‘00’, ‘01’ �� ‘02’

� ��� �����. ����� �� SQL ����� ���� ��� ����� ��� �

DEPT_SALARY� ���� �� -1���. � ��� ���� SQLCODE � SQLSTATE� 0

�� �� �����.

SQLEXCEPTION� �� ��� ���� � �� ���� ���� �� ��� ���, �

�� ��� ��� SQLCA�� ��� �����. ����� ����� SQLCA� �� SQL

������� �����.

– C1 ��� OPEN, FETCH � CLOSE� ���. �� CLOSE� ���� �� , CREATE

PROCEDURE�� SET RESULT SETS� ���� ��� ��� ��� ��� �� � ���.

– ��� �� � � � � � � ��� � WHILE�� �� � . � � �� ��

TOTAL_SALARY� ���� ��� ���� 0�� ��� BONUS_CNT� �����.

– DEPT_SALARY � DEPT_BONUS_CNT� �� ���� �����.

���� �(atomic)� � � ���� ��� �� ��� ��� �� �� ���� �����.

�(atomic) ���� SAVEPOINTS� ���� �����. ���� ����, ����� �����.

�� ����� �� ��� ���� ����. EMPLOYEE_BONUS ���� ��� � � ����

�� �� � �� ��� �� �����. ����� ���� �� �� ��� � ��� �����.

CREATE PROCEDURE CREATE_BONUS_TABLE(IN DEPT_NUMBER CHAR(3),INOUT CNT INT)LANGUAGE SQL MODIFIES SQL DATACS1: BEGIN ATOMICDECLARE NAME VARCHAR(30) DEFAULT NULL;DECLARE CONTINUE HANDLER FOR SQLSTATE '42710'

SELECT COUNT(*) INTO CNTFROM DATALIB.EMPLOYEE_BONUS;

DECLARE CONTINUE HANDLER FOR SQLSTATE '23505'SET CNT = CNT - 1;

DECLARE UNDO HANDLER FOR SQLEXCEPTIONSET CNT = NULL;

IF DEPT_NUMBER IS NOT NULL THENCREATE TABLE DATALIB.EMPLOYEE_BONUS

(FULLNAME VARCHAR(30),BONUS DECIMAL(10,2),PRIMARY KEY (FULLNAME));

SQL ����� 161

Page 174: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

FOR_1:FOR V1 AS C1 CURSOR FORSELECT FIRSTNME, MIDINIT, LASTNAME, BONUS

FROM CORPDATA.EMPLOYEEWHERE WORKDEPT = CREATE_BONUS_TABLE.DEPT_NUMBER

DOIF BONUS > 0 THENSET NAME = FIRSTNME CONCAT ' ' CONCAT

MIDINIT CONCAT ' 'CONCAT LASTNAME;INSERT INTO DATALIB.EMPLOYEE_BONUS

VALUES(CS1.NAME, FOR_1.BONUS);SET CNT = CNT + 1;

END IF;END FOR FOR_1;

END IF;END CS1

� CREATE PROCEDURE�� ��� �����.

v CREATE_BONUS_TABLE ����� �����.

v �� ������ ��� 3 �� ��� �� DEPT_NUMBER ���� �/�� �����

� �� ��� �� CNT ���� �����.

v ����� SQL ���� ���� SQL ������ ����.

v ���� �� �����.

– NAME SQL ��� �� ��� �����.

– SQLSTATE 42710(���� �� �)� �� �� ��� �����. EMPLOYEE_BONUS

���� �� ���, ��� ���� ���� �� �� ����. SQLCODE �

SQLSTATE� 0�� ��� FOR�� �� �����.

– SQLSTATE 23505(� �)� �� �� ��� �����. ����� ���� �� ��� �

� ���� ����, ��� ���� CNT� ������. INSERT� ��� SET�� ��

�����.

– SQLEXCEPTION� �� UNDO ��� �����. ����, �� ���� ��� CNT� 0

�� ��� ��� ��� ��� �����. � , ��� ��� ���� � ��� ���

�� �����.

– FOR�� ���� EMPLOYEE ����� ��� �� C1 ��� �����. FOR� ��� �

������� �� �� �� ���� SQL ��� �����. � �� ��

FIRSTNME, MIDINIT � LASTNAME � ���� ��� ��� ���� � ���� ��

� NAME SQL ����� �����. NAME � BONUS SQL ��� EMPLOYEE_BONUS �

��� �����. ����� ��� � � ��� ��� ��� ��� ��� �� ��� ��

��� ��� � FOR�� �� ���� ��� ���.

��� �� FOR� �� ���� ��� �� ���� SQL �� �� ��� � ����.

���� FOR_1.BONUS� � � �� �� BONUS �� SQL ��� �����.

CS1.NAME� �� ��� CS1� ���� ���� �� NAME �����. �� ������

���� ��� �� ��� � ����. CREATE_BONUS_TABLE.DEPT_NUMBER�

162 IBM i: ������ SQL �����

Page 175: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

CREATE_BONUS_TABLE ����� DEPT_NUMBER ������. ���� �� SQL ��

�� �� ���� SQL��� ��� �� �� �� �� , �� � ��

�� � �����.

�� SQL ������ � SQL� ��� � ����. �� ��� �� ��� �� ��� ��

�� �����. �� ��� ����� ���� ���� ����� �����.

CREATE PROCEDURE CREATE_DEPT_TABLE (IN P_DEPT CHAR(3))LANGUAGE SQL

BEGINDECLARE STMT CHAR(1000);DECLARE MESSAGE CHAR(20);DECLARE TABLE_NAME CHAR(30);DECLARE CONTINUE HANDLER FOR SQLEXCEPTION

SET MESSAGE = 'ok';SET TABLE_NAME = 'CORPDATA.DEPT_' CONCAT P_DEPT CONCAT '_T';SET STMT = 'DROP TABLE ' CONCAT TABLE_NAME;PREPARE S1 FROM STMT;EXECUTE S1;

SET STMT = 'CREATE TABLE ' CONCAT TABLE_NAME CONCAT'( EMPNO CHAR(6) NOT NULL,

FIRSTNME VARCHAR(12) NOT NULL,MIDINIT CHAR(1) NOT NULL,LASTNAME CHAR(15) NOT NULL,SALARY DECIMAL(9,2))';

PREPARE S2 FROM STMT;EXECUTE S2;SET STMT = 'INSERT INTO ' CONCAT TABLE_NAME CONCAT'SELECT EMPNO, FIRSTNME, MIDINIT, LASTNAME, SALARYFROM CORPDATA.EMPLOYEEWHERE WORKDEPT = ?';

PREPARE S3 FROM STMT;EXECUTE S3 USING P_DEPT;

END

� CREATE PROCEDURE�� ��� �����.

v CREATE_DEPT_TABLE ����� �����.

v �� ������ ��� 3 �� ��� �� P_DEPT ���� �����.

v ����� SQL ������ ����.

v ���� �� �����.

– STMT SQL ��� TABLE_NAME SQL ��� ��� �����.

– CONTINUE ��� �����. ����� ���� �� ��� ���� (DROP)�

� �����. ���� ��� ���, � � EXECUTE� �����. ��� ���� �

�� �����.

– TABLE_NAME ��� ‘DEPT_’� �� � P_DEPT ���� �� ��� ��� �� � �

�� ‘_T’� ��� ����.

– STMT ��� DROP��� �� ���� �� � �����.

– STMT ��� CREATE��� �� ���� �� � �����.

SQL ����� 163

Page 176: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

– STMT ��� INSERT��� �� ���� �� � �����. ��� ��� WHERE��

�����. ���� ����, P_DEPT ��� USING�� �����.

��� �� ‘D21’ �� ���� ����� ����, DEPT_D21_T ���� ���� ���� ‘D21’

��� �� �� ���� �����.

�� ���� ��

SQL CALL�� �� ����� �����.

CALL���, �� ����� �� �� �����. �� ��, �� ����, ��� �� ��

��� � � ����. CALL�� �� �� �� ������ ��� CREATE PROCEDURE��

�� ���. SQL ����� �� ����� CREATE PROCEDURE�� �� ����� ���

���� ��� � ����.

����� ��� ���� ������, CALL CL �� ��� �� ����� ���� � ��

�� ����. CALL CL ��� �� � �� ���� ���� �� ���� ��� ���� ���,

����� ��� ��� ���� ����� ���� ���� ����.

�� ��� CALL�� ���� ���. i� DB2 ������� ���� �� ��� �� �� ��

���.

v ���� ��� ��� � �� �� CALL�

v ���� ��� ��� �� �� CALL�

v CREATE PROCEDURE� ��� �� � CALL�

�:

��� �� ��� �����.

v ��� �� ���� CALL�

v ��� ��� ����(�� ��, STRSQL �� �� �� ����� ��) CALL�

v EXECUTE IMMEDIATE��� ���� CALL�

���� �� ��� �� CALL� ��:

� ��� CALL�� CREATE PROCEDURE ���� ����� ���� � � ��� �� �� �

�� ����.

�� PL/I ��� � CREATE PROCEDURE�� ���� CALL�� ����.

DCL HV1 CHAR(10);DCL IND1 FIXED BIN(15);

:EXEC SQL CREATE P1 PROCEDURE

(INOUT PARM1 CHAR(10))EXTERNAL NAME MYLIB.PROC1LANGUAGE C

164 IBM i: ������ SQL �����

|

|

|

|

Page 177: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

GENERAL WITH NULLS;:

EXEC SQL CALL P1 (:HV1 :IND1);:

� CALL�� ����, MYLIB/PROC1 ���� ��� ���� �� �� �����. ����

��� ILE C�� ��� � � �� HV1 ��� ��� ��� �� 11� ��� C NUL ��

������. ILE C ���� �� � SQL� ���� ��, ���, ��, �� �� ��� ���

��� ���� ��� ��� ��� ��� �����. � �� ���� ����. �

�� CREATE PROCEDURE�� ��� ���� �� ��� ��� �� �����. � �� ��

��� �� � IND1 ���� ��� ��� ���.

� � ���� INOUT�� ���� ��� SQL� ��� ������ ���� �� HV1 ���

��� IND1 ���� ��� MYLIB.PROC1�� �� ��� �����.

�:

1. CREATE PROCEDURE � CALL�� �� ������ ���� SQL ���� � �

�� �� � � ����� ��� ��� ���.

2. REATE PROCEDURE�� DECLARE PROCEDURE�� � � ��� �� CALL��

, DECLARE PROCEDURE�� �����.

���� �� ��� � �� ��� CALL� ��:

���� CREATE PROCEDURE�� � CALL�� �� ��� ���� �����.

v �� ��� �� �� INOUT �� ���� �����.

v CALL ��� GENERAL���( ���� �� ���� ��).

v ��� ����� CALL� �� ������ ���� �� ��� ��� �����.

v ��� ����� ��� ����� � ����� �� ��� ��� �����.

�: ���� ��� �� �� � �� CALL�

�� PL/I ��� ���� ��� ��� �� �� CALL�� ����.

DCL HV2 CHAR(10);:

EXEC SQL CALL P2 (:HV2);:

CALL�� ����, SQL� � SQL �� ��� ��� ����� ��� �����. �� ���

, *SYS(��� ��) �� ��� ��� DFTRDBCOL ���� SQL PL/I ���� ��

(CRTSQLPLI) ��� ���� ��� ������. � , ���� ����� P2�� �����

�����. �� ��� GENERAL��� ���� ��� ����� �� �� ���� ���

�.

SQL ����� 165

Page 178: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�: ���� ��� CALL�� ��� CALL�� ��� � �� 0�� �� , ����� ��

��� ��� ��� � ��� ���� ��� ����.

P2 ����� ���� ����� �� � �� ����, HV2 ��� ��� ��� CALL��� �

���� ��� P2� ��� ��� �� P2�� �� �� �� ��� ��� �����.

CALL��� �� �� ��� , ��� ��� ��� ����.

v �� �� ��� ���(fullword) 2� ��� �����.

v �� �� ��� � �� ��� �����. ��� � ��� �� �� ��� �����. ��

��, � 123.45� � ��(5,2)�� �����. �����, � 001.01� ��� 5� �� 2� ���

��.

v �� �� �� ��� ���� �� �� �� �����.

� CALL�� �� �� ����� ��� ��� �� ��� ��� ��� �����.

CURRENT DATE

ISO ��� 10��� �� ����� �����.

CURRENT TIME

ISO ��� 8��� �� ����� �����.

CURRENT TIMESTAMP

IBM SQL ��� 26��� �� ����� �����.

SQLDA� �� ��� CALL� ��:

�� � ��� �� CALL�(���� ��� ���� ��� �� � ��)��, ��� ����

�� SQLDA� ��� � ����.

�� C ���� ��� �� ��� �����. �� ����� �� ���� ���� ���

��. � �� SHORT INT ��� �� ��� 4 CHAR �����.

�: � ��� ���� 528 ���� �� ���� � ���� ��� ��� ���� ����.

#define SQLDA_HV_ENTRIES 2#define SHORTINT 500#define NUL_TERM_CHAR 460

exec sql include sqlca;exec sql include sqlda;...typedef struct sqlda Sqlda;typedef struct sqlda* Sqldap;...main(){Sqldap dap;short col1;char col2[4];int bc;

166 IBM i: ������ SQL �����

Page 179: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

dap = (Sqldap) malloc(bc=SQLDASIZE(SQLDA_HV_ENTRIES));/* SQLDASIZE is a macro defined in the sqlda include */

col1 = 431;strcpy(col2,"abc");strncpy(dap->sqldaid,"SQLDA ",8);dap->sqldabc = bc; /* bc set in the malloc statement above */dap->sqln = SQLDA_HV_ENTRIES;dap->sqld = SQLDA_HV_ENTRIES;dap->sqlvar[0].sqltype = SHORTINT;dap->sqlvar[0].sqllen = 2;dap->sqlvar[0].sqldata = (char*) &col1;dap->sqlvar[0].sqlname.length = 0;dap->sqlvar[1].sqltype = NUL_TERM_CHAR;dap->sqlvar[1].sqllen = 4;dap->sqlvar[1].sqldata = col2;...EXEC SQL CALL P1 USING DESCRIPTOR :*dap;...}

�� ����� �� ��� ���, � �� ����� �� CALL��� ���� ��� ���

� ��� � ����. �� �� ��� ����.

...main(){char proc_name[15];...strcpy (proc_name, "MYLIB.P3");...EXEC SQL CALL :proc_name ...;...}

�� ����, MYLIB.P3� ���� ���� �� ����� �� USING DESCRIPTOR��

���� �� SQLDA� ��� ���� ��� � ����.

������ �� �� ��� ��� CALL��� ��� CREATE PROCEDURE ���� ���

��� � ��� ��� �����. ������ ��� ��� ��� � ���.

CREATE PROCEDURE � �� CALL� ��:

� ��� CREATE PROCEDURE ��� � � � CALL�� ��� �����.

v �� �� IN �� ���� �����.

v CALL ��� GENERAL���( ���� �� ���� ��).

v ��� ����� CALL � �� ��� �� ������ �� �����.

v ��� ����� ��� ����� � ����� �� ��� ��� �����.

�: CREATE PROCEDURE� �� � CALL�

�� C ���� ��� � CALL�� �����.

SQL ����� 167

Page 180: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

char hv3[10],string[100];:

strcpy(string,"CALL MYLIB.P3 ('P3 TEST')");EXEC SQL EXECUTE IMMEDIATE :string;

:

� ��� EXECUTE IMMEDIATE�� �� ���� � CALL�� �����. ‘P3 TEST’� �

� �� ��� ���� ��� ���� MYLIB.P3 ����� �����.

�� ����� �� CALL�� ��� ��� ��� � ������� �� � ��� ��� �

��. ���� MYLIB.P3� � 5�� �� ��� ��� �� ��� ��� 2�� �����

�� �����.

�: �� ���, ���� ��� ��� �� ��� ���� ��� CALL�� �� ��� ���

���� �� � �����. � SQL� , PREPARE � EXECUTE�� ���� ���

CALL� �� ��� ��� ��� � ����.

: CALL�:

� �� CALL�� �� � �� ��� �� ����� ���� ��� �� ����� �� ���

���� ��� �����.

1: ILE C ������ ���� ILE C � PL/I ����:

� �� P1 � P2 ����� ���� �� CREATE PROCEDURE ��� ���� ILE C �����

�����. ���� P1� ILE C� ������ 10�� ���� ��� ����. ���� P2� PL/I

� ������ 10�� ���� ��� ����.

P1 � P2 ���� ��

EXEC SQL CREATE PROCEDURE P1 (INOUT PARM1 CHAR(10),INOUT PARM2 INTEGER,INOUT PARM3 SMALLINT,INOUT PARM4 FLOAT(22),INOUT PARM5 FLOAT(53),INOUT PARM6 DECIMAL(10,5),INOUT PARM7 VARCHAR(10),INOUT PARM8 DATE,INOUT PARM9 TIME,INOUT PARM10 TIMESTAMP)

EXTERNAL NAME TEST12.CALLPROC2LANGUAGE C GENERAL WITH NULLS

EXEC SQL CREATE PROCEDURE P2 (INOUT PARM1 CHAR(10),INOUT PARM2 INTEGER,INOUT PARM3 SMALLINT,INOUT PARM4 FLOAT(22),INOUT PARM5 FLOAT(53),INOUT PARM6 DECIMAL(10,5),INOUT PARM7 VARCHAR(10),INOUT PARM8 DATE,

168 IBM i: ������ SQL �����

Page 181: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

INOUT PARM9 TIME,INOUT PARM10 TIMESTAMP)

EXTERNAL NAME TEST12.CALLPROCLANGUAGE PLI GENERAL WITH NULLS

�: � ��� ���� 528 ���� �� ���� � ���� ��� ��� ���� ����.

P1 � P2 ���� ��

/**************************************************************//*********** START OF SQL C Application ***********************/

#include <stdio.h>#include <string.h>#include <decimal.h>main(){EXEC SQL INCLUDE SQLCA;char PARM1[10];signed long int PARM2;signed short int PARM3;float PARM4;double PARM5;decimal(10,5) PARM6;struct { signed short int parm7l;

char parm7c[10];} PARM7;

char PARM8[10]; /* FOR DATE */char PARM9[8]; /* FOR TIME */char PARM10[26]; /* FOR TIMESTAMP */

/*******************************************************//* Initialize variables for the call to the procedures *//*******************************************************/strcpy(PARM1,"PARM1");PARM2 = 7000;PARM3 = -1;PARM4 = 1.2;PARM5 = 1.0;PARM6 = 10.555;PARM7.parm7l = 5;strcpy(PARM7.parm7c,"PARM7");strncpy(PARM8,"1994-12-31",10); /* FOR DATE */strncpy(PARM9,"12.00.00",8); /* FOR TIME */strncpy(PARM10,"1994-12-31-12.00.00.000000",26);

/* FOR TIMESTAMP *//***********************************************//* Call the C procedure *//* *//* *//***********************************************/EXEC SQL CALL P1 (:PARM1, :PARM2, :PARM3,

:PARM4, :PARM5, :PARM6,:PARM7, :PARM8, :PARM9,:PARM10 );

if (strncmp(SQLSTATE,"00000",5)){/* Handle error or warning returned on CALL statement */}

SQL ����� 169

Page 182: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

/* Process return values from the CALL. */:

/***********************************************//* Call the PLI procedure *//* *//* *//***********************************************//* Reset the host variables before making the CALL *//* */:EXEC SQL CALL P2 (:PARM1, :PARM2, :PARM3,

:PARM4, :PARM5, :PARM6,:PARM7, :PARM8, :PARM9,:PARM10 );

if (strncmp(SQLSTATE,"00000",5)){/* Handle error or warning returned on CALL statement */

}/* Process return values from the CALL. */:}

/******** END OF C APPLICATION **********************************//****************************************************************/

���� P1

/******** START OF C PROCEDURE P1 *******************************//* PROGRAM TEST12/CALLPROC2 *//****************************************************************/

#include <stdio.h>#include <string.h>#include <decimal.h>main(argc,argv)int argc;char *argv[];{char parm1[11];long int parm2;short int parm3,i,j,*ind,ind1,ind2,ind3,ind4,ind5,ind6,ind7,

ind8,ind9,ind10;float parm4;double parm5;decimal(10,5) parm6;char parm7[11];char parm8[10];char parm9[8];char parm10[26];/* *********************************************************//* Receive the parameters into the local variables - *//* Character, date, time, and timestamp are passed as *//* NUL terminated strings - cast the argument vector to *//* the proper data type for each variable. Note that *//* the argument vector can be used directly instead of */

170 IBM i: ������ SQL �����

Page 183: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

/* copying the parameters into local variables - the copy *//* is done here just to illustrate the method. *//* *********************************************************/

/* Copy 10 byte character string into local variable */strcpy(parm1,argv[1]);

/* Copy 4 byte integer into local variable */parm2 = *(int *) argv[2];

/* Copy 2 byte integer into local variable */parm3 = *(short int *) argv[3];

/* Copy floating point number into local variable */parm4 = *(float *) argv[4];

/* Copy double precision number into local variable */parm5 = *(double *) argv[5];

/* Copy decimal number into local variable */parm6 = *(decimal(10,5) *) argv[6];

/**********************************************************//* Copy NUL terminated string into local variable. *//* Note that the parameter in the CREATE PROCEDURE was *//* declared as varying length character. For C, varying *//* length are passed as NUL terminated strings unless *//* FOR BIT DATA is specified in the CREATE PROCEDURE *//**********************************************************/strcpy(parm7,argv[7]);

/**********************************************************//* Copy date into local variable. *//* Note that date and time variables are always passed in *//* ISO format so that the lengths of the strings are *//* known. strcpy works here just as well. *//**********************************************************/strncpy(parm8,argv[8],10);

/* Copy time into local variable */strncpy(parm9,argv[9],8);

/**********************************************************//* Copy timestamp into local variable. *//* IBM SQL timestamp format is always passed so the length*//* of the string is known. *//**********************************************************/strncpy(parm10,argv[10],26);

/**********************************************************//* The indicator array is passed as an array of short *//* integers. There is one entry for each parameter passed *//* on the CREATE PROCEDURE (10 for this example). *//* Below is one way to set each indicator into separate *//* variables. *//**********************************************************/

ind = (short int *) argv[11];ind1 = *(ind++);ind2 = *(ind++);

SQL ����� 171

Page 184: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

ind3 = *(ind++);ind4 = *(ind++);ind5 = *(ind++);ind6 = *(ind++);ind7 = *(ind++);ind8 = *(ind++);ind9 = *(ind++);ind10 = *(ind++);:

/* Perform any additional processing here */:

return;}/******** END OF C PROCEDURE P1 *******************************/

���� P2

/******** START OF PL/I PROCEDURE P2 **************************//******** PROGRAM TEST12/CALLPROC *****************************//**************************************************************/

CALLPROC :PROC( PARM1,PARM2,PARM3,PARM4,PARM5,PARM6,PARM7,PARM8,PARM9,PARM10,PARM11);

DCL SYSPRINT FILE STREAM OUTPUT EXTERNAL;OPEN FILE(SYSPRINT);DCL PARM1 CHAR(10);DCL PARM2 FIXED BIN(31);DCL PARM3 FIXED BIN(15);DCL PARM4 BIN FLOAT(22);DCL PARM5 BIN FLOAT(53);DCL PARM6 FIXED DEC(10,5);DCL PARM7 CHARACTER(10) VARYING;DCL PARM8 CHAR(10); /* FOR DATE */DCL PARM9 CHAR(8); /* FOR TIME */DCL PARM10 CHAR(26); /* FOR TIMESTAMP */DCL PARM11(10) FIXED BIN(15); /* Indicators */

/* PERFORM LOGIC - Variables can be set to other values for *//* return to the calling program. */

:

END CALLPROC;

� 2: ILE C ������ ��� REXX ����:

� ��� ILE C ������ �� REXX ����� ����.

REXX ���� ��

EXEC SQL CREATE PROCEDURE REXXPROC(IN PARM1 CHARACTER(20),IN PARM2 INTEGER,IN PARM3 DECIMAL(10,5),IN PARM4 DOUBLE PRECISION,IN PARM5 VARCHAR(10),IN PARM6 GRAPHIC(4),

172 IBM i: ������ SQL �����

Page 185: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

IN PARM7 VARGRAPHIC(10),IN PARM8 DATE,IN PARM9 TIME,IN PARM10 TIMESTAMP)

EXTERNAL NAME 'TEST.CALLSRC(CALLREXX)'LANGUAGE REXX GENERAL WITH NULLS

�: � ��� ���� 528 ���� �� ���� � ���� ��� ��� ���� ����.

REXX ���� ��

/**************************************************************//*********** START OF SQL C Application ***********************/

#include <decimal.h>#include <stdio.h>#include <string.h>#include <wcstr.h>/*-----------------------------------------------------------*/exec sql include sqlca;exec sql include sqlda;/* ***********************************************************//* Declare host variable for the CALL statement *//* ***********************************************************/char parm1[20];signed long int parm2;decimal(10,5) parm3;double parm4;struct { short dlen;

char dat[10];} parm5;

wchar_t parm6[4] = { 0xC1C1, 0xC2C2, 0xC3C3, 0x0000 };struct { short dlen;

wchar_t dat[10];} parm7 = {0x0009, 0xE2E2,0xE3E3,0xE4E4, 0xE5E5, 0xE6E6,

0xE7E7, 0xE8E8, 0xE9E9, 0xC1C1, 0x0000 };

char parm8[10];char parm9[8];char parm10[26];main(){

/* *************************************************************//* Call the procedure - on return from the CALL statement the *//* SQLCODE should be 0. If the SQLCODE is non-zero, *//* the procedure detected an error. *//* *************************************************************/strcpy(parm1,"TestingREXX");parm2 = 12345;parm3 = 5.5;parm4 = 3e3;parm5.dlen = 5;strcpy(parm5.dat,"parm6");strcpy(parm8,"1994-01-01");strcpy(parm9,"13.01.00");strcpy(parm10,"1994-01-01-13.01.00.000000");

EXEC SQL CALL REXXPROC (:parm1, :parm2,

SQL ����� 173

Page 186: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

:parm3,:parm4,:parm5, :parm6,:parm7,:parm8, :parm9,:parm10);

if (strncpy(SQLSTATE,"00000",5)){/* handle error or warning returned on CALL */:}

:}

/****** END OF SQL C APPLICATION ************************************//**********************************************************************/

/**********************************************************************//****** START OF REXX MEMBER TEST/CALLSRC CALLREXX ********************//**********************************************************************/

/* REXX source member TEST/CALLSRC CALLREXX *//* Note the extra parameter being passed for the indicator*//* array. *//* *//* ACCEPT THE FOLLOWING INPUT VARIABLES SET TO THE *//* SPECIFIED VALUES : *//* AR1 CHAR(20) = 'TestingREXX' *//* AR2 INTEGER = 12345 *//* AR3 DECIMAL(10,5) = 5.5 *//* AR4 DOUBLE PRECISION = 3e3 *//* AR5 VARCHAR(10) = 'parm6' *//* AR6 GRAPHIC = G'C1C1C2C2C3C3' *//* AR7 VARGRAPHIC = *//* G'E2E2E3E3E4E4E5E5E6E6E7E7E8E8E9E9EAEA' *//* AR8 DATE = '1994-01-01' *//* AR9 TIME = '13.01.00' *//* AR10 TIMESTAMP = *//* '1994-01-01-13.01.00.000000' *//* AR11 INDICATOR ARRAY = +0+0+0+0+0+0+0+0+0+0 */

/**********************************************************//* Parse the arguments into individual parameters *//**********************************************************/parse arg ar1 ar2 ar3 ar4 ar5 ar6 ar7 ar8 ar9 ar10 ar11

/**********************************************************//* Verify that the values are as expected *//**********************************************************/if ar1<>"'TestingREXX'" then signal ar1tagif ar2<>12345 then signal ar2tagif ar3<>5.5 then signal ar3tagif ar4<>3e3 then signal ar4tagif ar5<>"'parm6'" then signal ar5tagif ar6 <>"G'AABBCC'" then signal ar6tagif ar7 <>"G'SSTTUUVVWWXXYYZZAA'" then ,signal ar7tagif ar8 <> "'1994-01-01'" then signal ar8tag

174 IBM i: ������ SQL �����

Page 187: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

if ar9 <> "'13.01.00'" then signal ar9tagif ar10 <> "'1994-01-01-13.01.00.000000'" then signal ar10tagif ar11 <> "+0+0+0+0+0+0+0+0+0+0" then signal ar11tag

/************************************************************//* Perform other processing as necessary .. *//************************************************************/

:/************************************************************//* Indicate the call was successful by exiting with a *//* return code of 0 *//************************************************************/exit(0)

ar1tag:say "ar1 did not match" ar1exit(1)ar2tag:say "ar2 did not match" ar2exit(1)::

/************ END OF REXX MEMBER **********************************/

�� ������� �� �� ��

�� ����� �� ���� ���� � ��� CALL�� ���� ������� �� �(�,

�� ������ � ��� �� �� ���)� ��� � ����. �� ������ �� ��

� ���� �� � �� �� �� � ����.

���� �� �� ��� ��� ��� �� ����. ��� ��� ��� DECLARE CURSOR��

���� ����� ��� ��� �� � ����. �� SET RESULT SETS�� �� �� ��

�� �� �� �� �����. ��� �� ������ �� ��� RETURN TO CALLER

��� ��� ��� �����. �� �� �� ��� ����� ��� ������� ��� ��

�� �� ����� RETURN TO CLIENT ��� ��� DECLARE CURSOR�� �����.

��� �� ������ � ����� ��� � �� ����� �� �� ��� � ����.

��� �� ������ �� �� ���� �� ��� , WITHOUT RETURN ��� ���

DECLARE CURSOR�� �����.

�: COBOL� ���� , COBOL ���� � ��� �� �� ���� ���. EXIT

PROGRAM�� EXIT PROGRAM AND CONTINUE RUN UNIT� �� �� �� ����

���.

�� ������ ��� �� �� ���� �� ������� �� ��� �� ��� � �

���� � ����. �� ��, ���� �� ���� �� ��� �� ������ �� �

���� ����� ���� ���� �� ��� ���� ��� ���. ��, ���� � �� �

�� �� ��� ���� �� �� ����� ��� � �� ��� �����. �� �����

� ��� � �� � � � ����� �� ����� � �� �� ��� � ���

SQL ����� 175

Page 188: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

��, �� ������� ���� ��� �� ��� �� � ����. �� �� �� ���

� ��� �� �� � �� �� ���� � ����� ���� �����.

�� ���� �� �� �� � � � � �� ������ JDBC, CLI � ODBC� ����. �

� API ����� ���� �� ���� �� �� �� � � �� �� ��� �� ���

�� ����.

� 1: �� �� ��� ��� �� ���� ��:

� ��� ODBC(�� ������ ���) ������ ���� �� �� ���� �� �� ��

��� ��� � �� API ��� ����.

� ���� DECLARE CURSOR��� �� ���� ���� �� ��� ������. �� ��

� �� ����� �� , RETURN TO CLIENT� ��� ��� �� RETURN TO CALLER�

��� ��� ����� ���� �� �� ��� � �� ���. �� �� ����� DYNAMIC

RESULT SETS�� ���� ���� ������. SQL ����� , �� ����� �� ��

���� �� � �� �����.

�� ���� ��:

PROCEDURE prod.resset

CREATE PROCEDURE prod.resset () LANGUAGE SQLDYNAMIC RESULT SETS 1BEGINDECLARE C1 CURSOR FOR SELECT * FROM QIWS.QCUSTCDT;OPEN C1;RETURN;END

ODBC ������

�: � ��� �������.

�: � ��� ���� 528 ���� �� ���� � ���� ��� ��� ���� ����.

:strcpy(stmt,"call prod.resset()");rc = SQLExecDirect(hstmt,stmt,SQL_NTS);if (rc == SQL_SUCCESS){// CALL statement has executed successfully. Process the result set.// Get number of result columns for the result set.rc = SQLNumResultCols(hstmt, &wNum);if (rc == SQL_SUCCESS)

// Get description of result columns in result set{ rc = SQLDescribeCol(hstmt,à);if (rc == SQL_SUCCESS)

:

{// Bind result columns based on attributes returned

176 IBM i: ������ SQL �����

Page 189: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

//rc = SQLBindCol(hstmt,à);

:// FETCH records until EOF is returned

rc = SQLFetch(hstmt);while (rc == SQL_SUCCESS){ // process result returned on the SQLFetch

:rc = SQLFetch(hstmt);

}:}// Close the result set cursor when done with it.rc = SQLFreeStmt(hstmt,SQL_CLOSE);:

� 2: ��� ������� �� ��� ��� �� ���� ��:

� ��� � �� ����� � �� ��� ����� �� �� ���� ��� ����.

� �� ����� �� ��� �� ��� ����� �� �� ����� RETURN TO CLIENT

��� ��� DECLARE CURSOR� �� SET RESULT SETS��� ���� �� ��� �����

��� ������� ��� ���� ��� ���. � � ����� ������ �� ��

�(� �� � �� �, �� �� �� �)� ��� ������. ODBC� JDBC ��

��� ����� � � �� ����� � ��� ��� ����.

�� ���� ��

CREATE PROCEDURE prod.rtnnested () LANGUAGE CL DYNAMIC RESULT SET 2EXTERNAL NAME prod.rtnnested GENERAL

CREATE PROCEDURE prod.rtnclient () LANGUAGE RPGLEEXTERNAL NAME prod.rtnclient GENERAL

�: � ��� ���� 528 ���� �� ���� � ���� ��� ��� ���� ����.

�� ���� prod.rtnnested� CL ��

PGMCALL PGM(PROD/RTNCLIENT)

�� ���� prod.rtnclient� ILE RPG ��

DRESULT DS OCCURS(20)D COL1 1 16AC 1 DO 10 X 2 0C X OCCUR RESULTC EVAL COL1='array result set'C ENDDOC EVAL X=X-1C/EXEC SQL DECLARE C2 CURSOR WITH RETURN TO CLIENTC+ FOR SELECT LSTNAM FROM QIWS.QCUSTCDT FOR FETCH ONLYC/END-EXECC/EXEC SQL

SQL ����� 177

Page 190: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

C+ OPEN C2C/END-EXECC/EXEC SQLC+ SET RESULT SETS FOR RETURN TO CLIENT ARRAY :RESULT FOR :X ROWS,C+ CURSOR C2C/END-EXECC SETON LRC RETURN

ODBC ������

//*******************************************************************//// Module:// Examples.C//// Purpose:// Perform calls to stored procedures to get back result sets.

//// *******************************************************************

#include "common.h"#include "stdio.h"

// *******************************************************************//// Local function prototypes.//// *******************************************************************

SWORD FAR PASCAL RetClient(lpSERVERINFO lpSI);BOOL FAR PASCAL Bind_Params(HSTMT);BOOL FAR PASCAL Bind_First_RS(HSTMT);BOOL FAR PASCAL Bind_Second_RS(HSTMT);

// *******************************************************************//// Constant strings definitions for SQL statements used in// the auto test.//// *******************************************************************//// Declarations of variables global to the auto test.//// *******************************************************************#define ARRAYCOL_LEN 16#define LSTNAM_LEN 8char stmt[2048];char buf[2000];

UDWORD rowcnt;char arraycol[ARRAYCOL_LEN+1];char lstnam[LSTNAM_LEN+1];SDWORD cbcol1,cbcol2;

178 IBM i: ������ SQL �����

Page 191: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

lpSERVERINFO lpSI; /* Pointer to a SERVERINFO structure. */

// ********************************************************************//// Define the auto test name and the number of test cases// for the current auto test. These informations will// be returned by AutoTestName().//// ********************************************************************

LPSTR szAutoTestName = CREATE_NAME("Result Sets Examples");UINT iNumOfTestCases = 1;

// *******************************************************************//// Define the structure for test case names, descriptions,// and function names for the current auto test.// Test case names and descriptions will be returned by// AutoTestDesc(). Functions will be run by// AutoTestFunc() if the bits for the corresponding test cases// are set in the rglMask member of the SERVERINFO// structure.//// *******************************************************************struct TestCase TestCasesInfo[] ={

"Return to Client","2 result sets ",RetClient

};

// *******************************************************************//// Sample return to Client:// Return to Client result sets. Call a CL program which in turn// calls an RPG program which returns 2 result sets. The first// result set is an array result set and the second is a cursor// result set.////// *******************************************************************SWORD FAR PASCAL RetClient(lpSERVERINFO lpSI){

SWORD sRC = SUCCESS;RETCODE returncode;HENV henv;HDBC hdbc;HSTMT hstmt;

if (FullConnect(lpSI, &henv, &hdbc, &hstmt) == FALSE){

SQL ����� 179

Page 192: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

sRC = FAIL;goto ExitNoDisconnect;

}// ********************************************************// Call CL program PROD.RTNNESTED, which in turn calls RPG// program RTNCLIENT.// ********************************************************strcpy(stmt,"CALL PROD.RTNNESTED()");// **************************************************************// Call the CL program prod.rtnnested. This program will in turn// call the RPG program proc.rtnclient, which will open 2 result// sets for return to this ODBC application.// *************************************************************returncode = SQLExecDirect(hstmt,stmt,SQL_NTS);if (returncode != SQL_SUCCESS){

vWrite(lpSI, "CALL PROD.RTNNESTED is not Successful", TRUE);}else{

vWrite(lpSI, "CALL PROC.RTNNESTED was Successful", TRUE);}// **************************************************************// Bind the array result set output column. Note that the result// sets are returned to the application in the order that they// are specified on the SET RESULT SETS statement.// *************************************************************if (Bind_First_RS(hstmt) == FALSE){

myRETCHECK(lpSI, henv, hdbc, hstmt, SQL_SUCCESS,returncode, "Bind_First_RS");

sRC = FAIL;goto ErrorRet;

}else{

vWrite(lpSI, "Bind_First_RS Complete...", TRUE);}// **************************************************************// Fetch the rows from the array result set. After the last row// is read, a returncode of SQL_NO_DATA_FOUND will be returned to// the application on the SQLFetch request.// **************************************************************returncode = SQLFetch(hstmt);while(returncode == SQL_SUCCESS){wsprintf(stmt,"array column = %s",arraycol);vWrite(lpSI,stmt,TRUE);returncode = SQLFetch(hstmt);}if (returncode == SQL_NO_DATA_FOUND) ;else {

myRETCHECK(lpSI, henv, hdbc, hstmt, SQL_SUCCESS_WITH_INFO,returncode, "SQLFetch");

sRC = FAIL;goto ErrorRet;

}// ********************************************************

180 IBM i: ������ SQL �����

Page 193: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

// Get any remaining result sets from the call. The next// result set corresponds to cursor C2 opened in the RPG// Program.// ********************************************************returncode = SQLMoreResults(hstmt);if (returncode != SQL_SUCCESS){myRETCHECK(lpSI, henv, hdbc, hstmt, SQL_SUCCESS, returncode, "SQLMoreResults");sRC = FAIL;goto ErrorRet;}// **************************************************************// Bind the cursor result set output column. Note that the result// sets are returned to the application in the order that they// are specified on the SET RESULT SETS statement.// *************************************************************

if (Bind_Second_RS(hstmt) == FALSE){

myRETCHECK(lpSI, henv, hdbc, hstmt, SQL_SUCCESS,returncode, "Bind_Second_RS");

sRC = FAIL;goto ErrorRet;

}else{

vWrite(lpSI, "Bind_Second_RS Complete...", TRUE);}// **************************************************************// Fetch the rows from the cursor result set. After the last row// is read, a returncode of SQL_NO_DATA_FOUND will be returned to// the application on the SQLFetch request.// **************************************************************returncode = SQLFetch(hstmt);while(returncode == SQL_SUCCESS){wsprintf(stmt,"lstnam = %s",lstnam);vWrite(lpSI,stmt,TRUE);returncode = SQLFetch(hstmt);}if (returncode == SQL_NO_DATA_FOUND) ;else {

myRETCHECK(lpSI, henv, hdbc, hstmt, SQL_SUCCESS_WITH_INFO,returncode, "SQLFetch");

sRC = FAIL;goto ErrorRet;

}

returncode = SQLFreeStmt(hstmt,SQL_CLOSE);if (returncode != SQL_SUCCESS){

myRETCHECK(lpSI, henv, hdbc, hstmt, SQL_SUCCESS,returncode, "Close statement");

sRC = FAIL;goto ErrorRet;

}else{

SQL ����� 181

Page 194: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

vWrite(lpSI, "Close statement...", TRUE);}

ErrorRet:FullDisconnect(lpSI, henv, hdbc, hstmt);if (sRC == FAIL){

// a failure in an ODBC function that prevents completion of the// test - for example, connect to the servervWrite(lpSI, "₩t₩t *** Unrecoverable RTNClient Test FAILURE ***", TRUE);

} /* endif */

ExitNoDisconnect:

return(sRC);} // RetClient

BOOL FAR PASCAL Bind_First_RS(HSTMT hstmt){RETCODE rc = SQL_SUCCESS;rc = SQLBindCol(hstmt,1,SQL_C_CHAR,arraycol,ARRAYCOL_LEN+1, &cbcol1);if (rc != SQL_SUCCESS) return FALSE;return TRUE;

}BOOL FAR PASCAL Bind_Second_RS(HSTMT hstmt){RETCODE rc = SQL_SUCCESS;rc = SQLBindCol(hstmt,1,SQL_C_CHAR,lstnam,LSTNAM_LEN+1,&dbcol2);if (rc != SQL_SUCCESS) return FALSE;return TRUE;

}

JDBC ������

//-----------------------------------------------------------// Call Nested procedures which return result sets to the// client, in this case a JDBC client.//-----------------------------------------------------------import java.sql.*;public class callNested{public static void main (String argv[]) // Main entry point{try {Class.forName("com.ibm.db2.jdbc.app.DB2Driver");

}catch (ClassNotFoundException e) {e.printStackTrace();

}

try {

182 IBM i: ������ SQL �����

Page 195: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

Connection jdbcCon =

DriverManager.getConnection("jdbc:db2:lp066ab","Userid","xxxxxxx");jdbcCon.setAutoCommit(false);CallableStatement cs = jdbcCon.prepareCall("CALL PROD.RTNNESTED");cs.execute();ResultSet rs1 = cs.getResultSet();int r = 0;

while (rs1.next()){r++;String s1 = rs1.getString(1);System.out.print("Result set 1 Row: " + r + ": ");System.out.print(s1 + " " );System.out.println();}cs.getMoreResults();r = 0;ResultSet rs2 = cs.getResultSet();while (rs2.next()){r++;String s2 = rs2.getString(1);System.out.print("Result set 2 Row: " + r + ": ");System.out.print(s2 + " ");System.out.println();}

}catch ( SQLException e ) {

System.out.println( "SQLState: " + e.getSQLState() );System.out.println( "Message : " + e.getMessage() );e.printStackTrace();

}} // main

}

�� ������� �� ��� �� ���� �� SQL ���� ��

��� � �� � ��� �� � �� ��� ��� �� ��� �� �� �� �� ����

��� �� �� ����� ����� ��� � ����.

��� ��� �� �� ���� �� ���� �����, �� ��� �� �� ����� ��

���� �� �� ����� ����� ����� �� ��� ���� ��� ���.

�� � �� � ��� ��� ����.

1. ��� � �� �� �� �� ��� ��� ������.

� �� �� �� ���� ��� , ��� � �� � �� � �� �� ��� �� �

�� ���� ������.

2. �� ����� ��� SQL �� �� �����.

CALL�� SQLCODE� +466 , �� ����� �� �� ��� ����.

3. �� ����� ���� �� � �� ������.

SQL ����� 183

|

|

|

|

|

|

|

|

|

|

|

|

Page 196: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� ����� ���� �� � �� �� � ��� � ��� �� � ����.

DESCRIBE PROCEDURE SQL�� ���� �� � �� ������. DESCRIBE PROCEDURE�

SQLDA �� SQL ��� �� �� �� ��� �����.

SQL ��� , DESCRIBE PROCEDURE�� ���� �� �� �� � ����.

v DB2_RESULT_SETS_COUNT�� �� ����� ���� �� � �� ���.

v � �� �� �� ��� �� � ��� �����.

– DB2_CURSOR_NAME�� �� ����� �� �� ���� � ���� ���� �

��.

– DB2_RESULT_SET_ROWS�� �� �� �� � �� ���. � -1� �� �� �

� ���� ��� � �� ����.

– DB2_RESULT_SET_LOCATOR�� �� �� �� �� � �� ��� �� ���.

SQLDA� , �� ����� ��� � �� � �� � �� ��� � ��� SQLDA� �

�� �����. DESCRIBE PROCEDUREE�� ���� SQLDA� �� �� �� ���.

v SQLD�� �� ����� ���� �� � �� ���.

v � SQLVAR ��� �� �� �� ��� �����. SQLVAR ����,

– SQLNAME ��� �� ����� �� �� ���� � ���� ���� ���.

– SQLIND ��� �� �� �� � �� ���. � -1� �� �� � � ���� �

�� � �� ����.

– SQLDATA ��� �� �� �� �� � �� ��� �� ���.

4. �� � �� ���� �� �� � ����.

ASSOCIATE LOCATORS SQL�� ���� �� � �� ���� �� �� � � � ���

�. ASSOCIATE LOCATORS�� �� � �� ��� ��� �� ����. ���� �� �

��� �� ���� �� ���� , �� �� ���� �����.

��� DESCRIBE PROCEDURE�� ��� , SQL ��� DB2_RESULT_SET_LOCATOR

�� �� SQLDA� SQLDATA ��� �� � �� ��� �� �� � ����. �� �

�� �� � �� ��� ��� �� ���� ����� ASSOCIATE LOCATORS�� ���

� �� ��� � ����.

ASSOCIATE LOCATORS �� DESCRIBE PROCEDURE�� ���� �� ������ ��

�� ���� CALL��� �� �� �������� ���.

5. �� ��� �� ���� �� ��� �����.

ALLOCATE CURSOR SQL�� ���� � �� �� ��� � ����. � �� �� ��

��� ALLOCATE CURSOR�� ������. ���� �� ����� ���� �� � ����.

6. �� �� ��� ������.

184 IBM i: ������ SQL �����

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

Page 197: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� �� ��� �� � ��� � ��� �� � ����.

DESCRIBE CURSOR SQL�� ���� �� �� ��� ��� SQL �� �� SQLDA�

� ��� ������. � �� �� �� �� �� �� � �� �� ��� � �� ��

SQLDA� ���� ���.

��� ALLOCATE CURSOR� ��� ��� ���� DESCRIBE CURSOR� ��� � ���

�.

DESCRIBE CURSOR� ��� ��� �� �� �� ��� WITH HOLD� �� SQL

��� �� DB2_CURSOR_HOLD� �� � ����. SQLDA� , SQLDA�� SQLDAID

�� 8� ���� �� �� 1� ����.

7. ALLOCATE CURSOR�� ���� �� ��� ���� �� ��� ��� ��� �� ���

���.

DESCRIBE CURSOR�� ��� , �� ���� �� �� ��� ������.

a. ��� �� � ���� ��� �� ���� �����. DESCRIBE CURSOR�� SQL

�� �� SQLDA� ��� ���� � ��� ��� ��� ��� �� ������.

b. � ��� ��� ��� ��� SQLDA� � SQLDATA �� ������.

c. � ���� ��� ��� ��� SQLDA� � SQLIND �� ������.

�� ��� �� ���� �� ����� �� ���� �� ����.

�� ��� �� � ��� ���� C ��� ����. �� ��� ��� �����.

�� ��� ���� �� � � � �� �� ��� � �� �� � �� ��� ���

�.

/*************************************************************//* Declare result set locators. For this example, *//* assume you know that two result sets will be returned. *//* Also, assume that you know the format of each result set. *//*************************************************************/EXEC SQL BEGIN DECLARE SECTION;static volatile SQL TYPE IS RESULT_SET_LOCATOR loc1, loc2;EXEC SQL END DECLARE SECTION;

.../*************************************************************//* Call stored procedure P1. *//* Check for SQLCODE +466, which indicates that result sets *//* were returned. *//*************************************************************/EXEC SQL CALL P1(:parm1, :parm2, ...);if(SQLCODE==+466){/*************************************************************//* Establish a link between each result set and its *//* locator using the ASSOCIATE LOCATORS. */

SQL ����� 185

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|||||||||||||||||||||||

Page 198: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

/*************************************************************/EXEC SQL ASSOCIATE LOCATORS (:loc1, :loc2) WITH PROCEDURE P1;

.../*************************************************************//* Associate a cursor with each result set. *//*************************************************************/EXEC SQL ALLOCATE C1 CURSOR FOR RESULT SET :loc1;EXEC SQL ALLOCATE C2 CURSOR FOR RESULT SET :loc2;

/*************************************************************//* Fetch the result set rows into host variables. *//*************************************************************/while(SQLCODE==0){EXEC SQL FETCH C1 INTO :order_no, :cust_no;

...}while(SQLCODE==0){EXEC SQL FETCH C2 :order_no, :item_no, :quantity;

...}

}

�� ��� ���� �� � � �� �� �� ��� ��� �� � �� ��� ����.

/*************************************************************//* Declare result set locators. For this example, *//* assume that no more than three result sets will be *//* returned, so declare three locators. Also, assume *//* that you do not know the format of the result sets. *//*************************************************************/EXEC SQL BEGIN DECLARE SECTION;static volatile SQL TYPE IS RESULT_SET_LOCATOR loc1, loc2, loc3;EXEC SQL END DECLARE SECTION;

.../*************************************************************//* Call stored procedure P2. *//* Check for SQLCODE +466, which indicates that result sets *//* were returned. *//*************************************************************/

EXEC SQL CALL P2(:parm1, :parm2, ...);if(SQLCODE==+466){/*************************************************************//* Determine how many result sets P2 returned, using the *//* statement DESCRIBE PROCEDURE. :proc_da is an SQLDA *//* with enough storage to accommodate up to three SQLVAR *//* entries. *//*************************************************************/EXEC SQL DESCRIBE PROCEDURE P2 INTO :proc_da;

.../*************************************************************/

186 IBM i: ������ SQL �����

|||||||||||||||||||||||||||||||

|

|||||||||||||||||||||||||||||||||

Page 199: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

/* Now that you know how many result sets were returned, *//* establish a link between each result set and its *//* locator using the ASSOCIATE LOCATORS. For this example, *//* we assume that three result sets are returned. *//*************************************************************/EXEC SQL ASSOCIATE LOCATORS (:loc1, :loc2, :loc3) WITH PROCEDURE P2;

.../*************************************************************//* Associate a cursor with each result set. *//*************************************************************/EXEC SQL ALLOCATE C1 CURSOR FOR RESULT SET :loc1;EXEC SQL ALLOCATE C2 CURSOR FOR RESULT SET :loc2;EXEC SQL ALLOCATE C3 CURSOR FOR RESULT SET :loc3;

/*************************************************************//* Use the statement DESCRIBE CURSOR to determine the *//* format of each result set. *//*************************************************************/EXEC SQL DESCRIBE CURSOR C1 INTO :res_da1;EXEC SQL DESCRIBE CURSOR C2 INTO :res_da2;EXEC SQL DESCRIBE CURSOR C3 INTO :res_da3;

.../*************************************************************//* Assign values to the SQLDATA and SQLIND fields of the *//* SQLDAs that you used in the DESCRIBE CURSOR statements. *//* These values are the addresses of the host variables and *//* indicator variables into which DB2 will put result set *//* rows. *//*************************************************************/

.../*************************************************************//* Fetch the result set rows into the storage areas *//* that the SQLDAs point to. *//*************************************************************/while(SQLCODE==0){EXEC SQL FETCH C1 USING :res_da1;

...}while(SQLCODE==0){EXEC SQL FETCH C2 USING :res_da2;

...}while(SQLCODE==0){EXEC SQL FETCH C3 USING :res_da3;

...}

}

SQL ����� 187

||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

Page 200: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� ��� SQL ��� ���� �� �� ���� ��� ����.

��� SQL ����� ��� ����.

create procedure owntbl()dynamic result sets 1begindeclare c1 cursor forselect name, dbname from qsys2.systableswhere creator = system_user ;

open c1 ;return ;

end

�� �� ��� ����� ��� ����.

#include <string.h>#include <stdio.h>#include <stdlib.h>

EXEC SQL INCLUDE SQLCA;/*************************************************************//* Declare result set locators. For this example, *//* you know that only one result set will be returned, *//* so only one locator is declared. *//*************************************************************/EXEC SQL BEGIN DECLARE SECTION;static volatile SQL TYPE IS RESULT_SET_LOCATOR loc1;struct {short len;char data[128];

} tblName; /* table name */

struct {short len;char data[128];

} schName; /* schema name */EXEC SQL END DECLARE SECTION;

void main(int argc, char* argv[]){/*************************************************************//* Call the procedure that might return a result set. Check *//* the returned SQLCODE to see if result sets were returned. *//*************************************************************/int noMoreData = 0;EXEC SQL WHENEVER SQLERROR GOTO error;EXEC SQL CALL OWNTBL ;if (SQLCODE != 466) {goto error;

}/*************************************************************//* Since you know only one result set can be returned from *//* this procedure, associate a locator with the result set *//* and define a cursor to be used with it. *//*************************************************************/

EXEC SQL ASSOCIATE LOCATORS (:loc1) WITH PROCEDUREOWNTBL ;EXEC SQL ALLOCATE C1 CURSOR FOR RESULT SET :loc1 ;

188 IBM i: ������ SQL �����

|

|

|||||||||

|

||||||||||||||||||||||||||||||||||||||||||

Page 201: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

/*************************************************************//* Define the descriptor to use for fetching data from the *//* cursor. *//*************************************************************/EXEC SQL ALLOCATE DESCRIPTOR 'desc' WITH MAX 10 ;EXEC SQL DESCRIBE CURSOR C1 USING SQL DESCRIPTOR 'desc' ;EXEC SQL WHENEVER NOT FOUND GOTO enddata;while ( noMoreData == 0 ) {

EXEC SQL FETCH C1 INTO SQL DESCRIPTOR 'desc' ;memset(tblName.data,0x00,sizeof(tblName.data));memset(schName.data,0x00,sizeof(schName.data));EXEC SQL GET DESCRIPTOR 'desc' VALUE 1 :tblName = DATA;EXEC SQL GET DESCRIPTOR 'desc' VALUE 2 :schName = DATA;printf("Table: %s Schema: %s ₩n",

tblName.data,schName.data);}

enddata:printf("All rows fetched.₩n");return;

error:printf("Unexpected error, SQLCODE = %d ₩n", SQLCODE);return;

}

�� ��� SQL ����� ���� �� �� ���� ��� ����. �� �� SQL �����

�� ����.

DECLARE RESULT1 RESULT_SET_LOCATOR VARYING;DECLARE RESULT2 RESULT_SET_LOCATOR VARYING;...CALL TARGETPROCEDURE();

ASSOCIATE RESULT SET LOCATORS(RESULT1,RESULT2)WITH PROCEDURE TARGETPROCEDURE;

ALLOCATE RSCUR1 CURSOR FOR RESULT1;ALLOCATE RSCUR2 CURSOR FOR RESULT2;

WHILE AT_END = 0 DOFETCH RSCUR1 INTO VAR1;SET TOTAL1 = TOTAL1 + VAR1;

END WHILE;

WHILE AT_END = 0 DOFETCH RSCUR2 INTO VAR2;SET TOTAL2 = TOTAL2 + VAR2;

END WHILE;...

�� ���� � ��� �� ��� ���� �� ��

CALL� � � ��� ���� �� ��� ��� REXX ����� ���� ������ �� �

�� � ����.

SQL ����� 189

|||||||||||||||||||||||||

|

|

||||||||||||||||||||||||

|

Page 202: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

��� ��� �� ���� � ��, ��� �� �� ��� ��� ��� �����. SQL ��

� ��� � ���� �� �� � ���. � �� �� �� �� � ��� ��� �� �

�� ��� ���� ����� ��� �� �� ����. � ���� � ��� �� ���

���� ��� ��� ���� �� ����. ��� �� ��� i� DB2� � ��� ��� � �

�� ���� ��� ����. ��� ����� ��� ��� �� � ���� ��� ��

� ���� �� ��� ����. SQL ���� �� �� ��� � �� SQL ��� ��� ���

�� ���� � ���� �� ����.

41. ���� ��� ��

SQL ��� �� C � C++ CL COBOL � ILE COBOL

SMALLINT short PIC S9(4) BINARY

INTEGER long PIC S9(9) BINARY

BIGINT long long PIC S9(18) BINARY

�: ILE COBOL� ��

�����.

DECIMAL(p,s) decimal(p,s) TYPE(*DEC) LEN(p s) PIC S9(p-s)V9(s)

PACKED-DECIMAL

�: ���� 18 ���� ��

�.

NUMERIC(p,s) PIC S9(p-s)V9(s) DISPLAY

SIGN LEADING

SEPARATE

�: ���� 18 ���� ��

�.

DECFLOAT _Decimal32, _Decimal64,

_Decimal128

�: C� �� �����.

REAL �� FLOAT(p) float COMP-1

�: ILE COBOL� ��

�����.

DOUBLE PRECISION ��

FLOAT �� FLOAT(p)

double COMP-2

�: ILE COBOL� ��

�����.

CHARACTER(n) char ... [n+1] TYPE(*CHAR) LEN(n) PIC X(n)

VARCHAR(n) char ... [n+1] �� �� �� ���

VARCHAR(n) FOR BIT

DATA

VARCHAR ��� �� �� �� �� ���

CLOB CLOB ��� �� CLOB ��� ��

�: ILE COBOL� �� �

����.

190 IBM i: ������ SQL �����

Page 203: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

41. ���� ��� �� (��)

SQL ��� �� C � C++ CL COBOL � ILE COBOL

GRAPHIC(n) wchar_t ... [n+1] PIC G(n) DISPLAY-1 ��

PIC N(n)

�: ILE COBOL� ��

�����.

VARGRAPHIC(n) VARGRAPHIC ��� �� �� �� ��� ���

�: ILE COBOL� ��

�����.

DBCLOB DBCLOB ��� �� DBCLOB ��� ��

�: ILE COBOL� �� �

����.

BINARY BINARY ��� �� BINARY ��� ��

VARBINARY VARBINARY ��� �� VARBINARY ��� ��

BLOB BLOB ��� �� BLOB ��� ��

�: ILE COBOL� �� �

����.

DATE char ... [11] TYPE(*CHAR) LEN(10) PIC X(10)

�: ILE COBOL� ��,

FORMAT DATE.

XML XML ��� �� XML ��� ��

TIME char ... [9] TYPE(*CHAR) LEN(8) PIC X(8)

�: ILE COBOL� ��,

FORMAT TIME

TIMESTAMP char ... [27] TYPE(*CHAR) LEN(26) PIC X(26)

�: ILE COBOL� ��,

FORMAT TIMESTAMP

ROWID ROWID ��� �� ROWID ��� ��

��� �

���� �� short PIC S9(4) BINARY

42. ���� ��� ��

SQL ��� �� Java™ ���� �� JAVA

Java ���� ��

DB2GENERAL PL/I

SMALLINT short short FIXED BIN(15)

INTEGER int int FIXED BIN(31)

BIGINT long long

DECIMAL(p,s) BigDecimal BigDecimal FIXED DEC(p,s)

NUMERIC(p,s) BigDecimal BigDecimal

DECFLOAT BigDecimal BigDecimal

SQL ����� 191

||||

||||

Page 204: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

42. ���� ��� �� (��)

SQL ��� �� Java™ ���� �� JAVA

Java ���� ��

DB2GENERAL PL/I

REAL �� FLOAT(p) float float FLOAT BIN(p)

DOUBLE PRECISION ��

FLOAT �� FLOAT(p)

double double FLOAT BIN(p)

CHARACTER(n) ��� ��� CHAR(n)

VARCHAR(n) ��� ��� CHAR(n) VAR

VARCHAR(n) FOR BIT

DATA

byte[ ] com.ibm.db2.app.Blob CHAR(n) VAR

CLOB java.sql.Clob com.ibm.db2.app.Clob CLOB ��� ��

GRAPHIC(n) ��� ���

VARGRAPHIC(n) ��� ���

DBCLOB java.sql.Clob com.ibm.db2.app.Clob DBCLOB ��� ��

BINARY byte[ ] com.ibm.db2.app.Blob BINARY ��� ��

VARBINARY byte[ ] com.ibm.db2.app.Blob VARBINARY ��� ��

BLOB java.sql.Blob com.ibm.db2.app.Blob BLOB ��� ��

XML AS CLOB java.sql.CLOB

XML AS BLOB java.sql.BLOB

DATE �� ��� CHAR(10)

TIME �� ��� CHAR(8)

TIMESTAMP ��� ��� CHAR(26)

ROWID byte[] com.ibm.db2.app.Blob ROWID ��� ��

��� �

� java.sql.Array

���� �� FIXED BIN(15)

43. ���� ��� ��

SQL ��� �� REXX RPG ILE RPG

SMALLINT � ���� �� ��� �

�. ��� �� �� 43� B(��

� 2�� ), �� 52� 0.

��� ��. ��� �� ��

40� B(��� <= 4�� ), ��

41 - 42� 00.

��

��� ��. ��� �� �� 40�

I(��� 5�� ), �� 41 - 42�

00.

INTEGER ��(� � �� ��)

� � �� ���

� ���� �� ��� �

�. ��� �� �� 43� B(��

� 4�� ), �� 52� 0.

��� ��. ��� �� ��

40� B(��� <=09 � >=05��

), �� 41 - 42� 00.

��

��� ��. ��� �� �� 40�

I(��� 10��� ), �� 41 - 42�

00.

192 IBM i: ������ SQL �����

||||

||||

||||

Page 205: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

43. ���� ��� �� (��)

SQL ��� �� REXX RPG ILE RPG

BIGINT ��� ��. ��� �� ��

40� I(��� 20��� ), ��

41 - 42� 00.

DECIMAL(p,s) ��(� � �� ��)

� �� �� ���

� ���� �� ��� �

�. ��� �� �� 43� P� �

� 52� 0 - 9. �� �� �� �

� �� �� �.

��� ��. ��� �� ��

40� P� �� 41 - 42� 00 - 31.

NUMERIC(p,s) � ���� �� ��� �

�. ��� �� �� 43� ���

�� 52� 0 - 9.

��� ��. ��� �� ��

40� S �� �� 40� ��� ��

41 - 42� 00 - 31.

DECFLOAT

REAL �� FLOAT(p) ��� �� ���, �

�� E, (� �� �

��), � �� ��

��� ��. �� 40� F(��� 4

�� )

DOUBLE PRECISION

�� FLOAT ��

FLOAT(p)

��� �� ���, �

�� E, (� �� �

��), � �� ��

��� ��. �� 40� F(��� 8

��� )

CHARACTER(n) ����� �� n�

� ��� �� ���

���� � ��� �� ��

� ���� �� ��� �

�. ��� �� �� 43 � 52�

��. �� �� �� �� �� �

� �.

��� ��. ��� �� ��

40� A �� �� 40 � 41 - 42�

��.

VARCHAR(n) ����� �� n�

� ��� �� ���

��� ��. ��� �� ��

40� A �� �� 40 � 41 - 42�

��� �� 44 - 80� ��

VARYING.

VARCHAR(n) FOR

BIT DATA

����� �� n�

� ��� �� ���

��� ��. ��� �� ��

40� A �� �� 40 � 41 - 42�

��� �� 44 - 80� ��

VARYING.

CLOB CLOB ��� ��

GRAPHIC(n) G’� ���� ���, �

�� n�� 2��� ��,

� �� ’

��� ��. ��� �� ��

40� G.

VARGRAPHIC(n) G’� ���� ���, �

�� n�� 2��� ��,

� �� ’

��� ��. ��� �� ��

40� G� �� 44 - 80� ��

VARYING.

DBCLOB DBCLOB ��� ��

BINARY BINARY ��� ��

VARBINARY VARBINARY ��� ��

BLOB BLOB ��� ��

XML XML ��� ��

SQL ����� 193

||||

Page 206: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

43. ���� ��� �� (��)

SQL ��� �� REXX RPG ILE RPG

DATE ����� �� 10

�� ��� �� ���

���� � ��� �� ��

� ���� �� ��� �

�. ��� �� �� 43 � 52�

��. ��� 10�. �� �� ��

�� �� �� �.

��� ��. ��� �� ��

40� D. �� 44 - 80�

DATFMT(*ISO).

TIME ����� �� 8�

� ��� �� ���

���� � ��� �� ��

� ���� �� ��� �

�. ��� �� �� 43 � 52�

��. ��� 8�. �� �� �� �

� �� �� �.

��� ��. ��� �� ��

40� T. �� 44 - 80�

TIMFMT(*ISO).

TIMESTAMP ����� �� 26

�� ��� �� ���

���� � ��� �� ��

� ���� �� ��� �

�. ��� �� �� 43 � 52�

��. ��� 26�. �� �� ��

�� �� �� �.

��� ��. ��� �� ��

40� Z.

ROWID ROWID ��� ��

��� �

���� �� ��(� � �� ��)

� � �� ���.

� ���� �� ��� ��.

��� �� �� 43� B(��� 2�

� ), �� 52� 0.

��� ��. ��� �� �� 40�

B(��� <= 4�� ), �� 41 -

42� 00.

�� ��

�� SQL �����

Java SQL �

���� �� � �� ����

���� ��� �� ��� ��� CALL�� � ���� �� ��� �����(� ������)

��� � ����.

�� ��� ��� ��� �� ��� �� ���� ��� �� � -1, -2, -3, -4 �� -6��

����. ���� ��� �� CALL�� ��� �� �����.

v ���� ��� �� CALL�� �� ��� ��� �� ��� �� ��� ����

��� ��� �� ��� �����.

v ���� ��� ��� �� ��� ��� ���� ��� ��� �� ��� �����.

*EXTIND �� � �� �� ����� SQL ����� ���� �� ���� � -5 �

-7� ��� � ����. CALL�� �� ��� �����. *EXTIND ��� ���� �� �� �

���� ���� �� ���� �� ��� � ����.

194 IBM i: ������ SQL �����

||||

Page 207: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� ��� ����� �� ���� ������ ���� �� ���� ����. ���� �

�� ���� ��� �� ��� �� ��� ��� ���� �� ���� ��� �� � �

� ����.

�� ��� CALL���� ���� �� ��� �����. ��� �� ��� ���� �� ��

�� �� �� ���� � ������. �� ���� ��� ���� PROC1� ���� ���

������(2��� � �� ���� � ����).

�: � ��� ���� 528 ���� �� ���� � ���� ��� ��� ���� ����.

����� ��� �� ���� �� �����. ILE RPG ����� �� ����� ����� �

������.

CREATE PROCEDURE PROC1(INOUT DECIMALOUT DECIMAL(7,2), INOUT DECOUT2 DECIMAL(7,2))EXTERNAL NAME LIB1.PROC1 LANGUAGE RPGLEGENERAL WITH NULLS)

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++Program CRPG++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

D INOUT1 S 7P 2D INOUT1IND S 4B 0D INOUT2 S 7P 2D INOUT2IND S 4B 0C EVAL INOUT1 = 1C EVAL INOUT1IND = 0C EVAL INOUT2 = 1C EVAL INOUT2IND = -2C/EXEC SQL CALL PROC1 (:INOUT1 :INOUT1IND , :INOUT2C+ :INOUT2IND)C/END-EXECC EVAL INOUT1 = 1C EVAL INOUT1IND = 0C EVAL INOUT2 = 1C EVAL INOUT2IND = -2C/EXEC SQL CALL PROC1 (:INOUT1 :INOUT1IND , :INOUT2C+ :INOUT2IND)C/END-EXECC INOUT1IND IFLT 0C* :C* HANDLE NULL INDICATORC* :C ELSEC* :C* INOUT1 CONTAINS VALID DATAC* :C ENDIFC* :C* HANDLE ALL OTHER PARAMETERSC* IN A SIMILAR FASHIONC* :C RETURN

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++End of PROGRAM CRPG++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

SQL ����� 195

Page 208: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++Program PROC1++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

D INOUTP S 7P 2D INOUTP2 S 7P 2D NULLARRAY S 4B 0 DIM(2)C *ENTRY PLISTC PARM INOUTPC PARM INOUTP2C PARM NULLARRAYC NULLARRAY(1) IFLT 0C* :C* CODE FOR INOUTP DOES NOT CONTAIN MEANINGFUL DATAC* :C ELSEC* :C* CODE FOR INOUTP CONTAINS MEANINGFUL DATAC* :C ENDIFC* PROCESS ALL REMAINING VARIABLESC*C* BEFORE RETURNING, SET OUTPUT VALUE FOR FIRSTC* PARAMETER AND SET THE INDICATOR TO A NON-NEGATIVEC* VALUE SO THAT THE DATA IS RETURNED TO THE CALLINGC* PROGRAMC*C EVAL INOUTP2 = 20.5C EVAL NULLARRAY(2) = 0C*C* INDICATE THAT THE SECOND PARAMETER IS TO CONTAINC* THE NULL VALUE UPON RETURN. THERE IS NO POINTC* IN SETTING THE VALUE IN INOUTP SINCE IT WON'T BEC* PASSED BACK TO THE CALLER.C EVAL NULLARRAY(1) = -1C RETURN

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++End of PROGRAM PROC1++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

�� ������ �� � ��

SQL � �� ����� � �� ���� �� ������ �� ��� �����.

SQL ����� , ������ ���� �� ��� SQLCA� ���� �����. SIGNAL �

RESIGNAL ���� ���� �� ��� ��� �� ����.

�� ����� , �� ��� ���� �� ��� ����. CALL�� ���� SQL �����

� ��� ���� � �� ��� �� INOUT �� ���� ��� ������� ���� ��

�� ��� ����. ���� ����� � ������ �� ��� � �� ���.

CALL�� ���� SQL ������ ��� ���� � �� ��� ����� ���� �� ����

(����� ��� ���� QSQCALL)�� �� � �� ���� ����. ����� ���� ��

����� QSQCALL���. � ���� ��� ����� � �� ���� ��� ����. � �

196 IBM i: ������ SQL �����

Page 209: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

����� �� �� ��� ����� ��� �� ���� ������. � �� ������,

QSQCALL� ��� SQLCODE/SQLSTATE -443/38501� ����.

�� ��

SQL ���

DB2�� �� ����� ���� ��

DB2� ����� ���� �� ���� �� ���� �����. ��� ���� ��� �� �

���� �����.

�� ����� �� ��� �� �����. �� ����� ���� ���� �

� ���� ������ � ����.

�� ������ ���� ��� ��� �, � ���� �� �� ��� � ���� �

�� ���� �� ����� ���� ���. ���� �� ��� ����� ��� ����

��� ��� ��� �� ���� � �� ��� � ����. � ����� ���� ��

�� ���� ��� ������� �� �� ���� �� � ����.

�� ����� �� ��� � ��� ���� ��� ��� ����. ���, ��� ���� ��

������ �� ����� ���� ��� ����.

���� �� SQL:

SQL ��� ��� � � SQL� �����.

��� ��� ����, ���� ��� �� �� ����� �����.

SQL-parameter

� �� ����� ���� �� DB2�� ����. � �� n� ����. n� ���� �

�� �� ���� ����. � ��� ��� �� CALL�� �� ���� ����

�. CREATE PROCEDURE�� �� ���� ��� ���� ����. �: INPUT�� �

� ���� ���� �� � DB2�� �����.

SQL-parameter-ind

� �� ����� ���� �� DB2�� ����. ��� SQL-parameter� � � ��

� ���� �� ������ ��� � ����. n� SQL-parameter-ind� n� SQL-parameter

� ����(�� � ��). � ����� 2��� ��� ��� �����. �� � ��

� ����.

��

� SQL-parameter � SQL-parameter-ind

SQL-state procedure-name specific-name �

� diagnostic-messagedbinfo

��

SQL ����� 197

||||||||||||||||||||||||||||||||

|||||||||||||||

||

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

Page 210: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

0 ���� ��� �� � ��.

-1 ���� ����.

�: INPUT ���� ��� ����� �� ���� �� � DB2�� �����.

SQL-state

� �� SQLSTATE� ��� CHAR(5) ����.

� ���� � �������� ‘00000’�� ���� ����� �� ��� ����� �

� �� � ����. �� SQLSTATE� �� �� ��� ���, ��� �� ������

� �� �� ��� ��� � ��� � ����.

01Hxx ���� �� ��� ������. SQL � ����. xx� ��� � ��

��� ��� � � ����.

38xxx ���� �� �� ��� ������. SQL ��� ����. xxx� ��� � ��

��� ��� � � ����.

procedure-name

� �� ����� ���� �� DB2�� ����. �� ���� �� ���� ����

� �� �� VARCHAR(139) ����.

���� ������ ��� ��� ����.

<schema-name>.<procedure-name>

� ���� �� ���� ��� ��� � ��� � ���� ���� ���� �� �

�� � �����. �: � ���� ����� �����. ������ �� ��� � �

��� DB2�� �����.

specific-name

� �� ����� ���� �� DB2�� ����. �� ���� �� ���� ����

� �� �� �� VARCHAR(128) ����.

procedure-name� ��, � ���� �� ���� ��� ��� � ��� � ���� �

��� ���� �� ��� � �����. �: � ���� ����� �����. �����

� �� ��� � ���� DB2�� �����.

diagnostic-message

� �� ����� ���� �� DB2�� ����. ����� SQLSTATE �� ��

��� �� � ����� � � ���� ���� �� ��� � �� VARCHAR(70) ���

�.

����� �� ���� ������� �� ��� � ��� � ������ �� �

����. SQL-state ���� ����� �� ��� ��� � � ���� DB2�� ���

��.

198 IBM i: ������ SQL �����

||

||

|

|

|

|

|

|

||

|

||

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

Page 211: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

dbinfo � �� ����� ���� �� DB2�� ����. ����� �� CREATE PROCEDURE

�� DBINFO ��� ���� �� ����. �� � ��� sqludf include�

�� �����.

���� �� GENERAL:

GENERAL ��� ��� ����, ���� CREATE PROCEDURE�� �� ��� �� ���

�� ���� �����.

��� ��� ����.

��

� SQL-parameter

��

SQL-parameter

� �� ����� ���� �� DB2�� ����. � �� n� ����. n� ���� �

�� �� ���� ����. � ��� ��� �� CALL�� �� ���� ����

�. CREATE PROCEDURE�� �� ���� ��� ���� ����. �: INPUT�� �

� ���� ���� �� � DB2�� �����.

���� �� GENERAL WITH NULLS:

GENERAL WITH NULLS ��� ��� ��� �� � ���� � � � �� ����� ��

���.

� ��� ��� ����, ���� ��� �� ����� �����.

��

� SQL-parameter

SQL-parameter-ind-array��

SQL-parameter

� �� ����� ���� �� DB2�� ����. � �� n� ����. n� ���� �

�� �� ���� ����. � ��� ��� �� CALL�� �� ���� ����

�. CREATE PROCEDURE�� �� ���� ��� ���� ����. �: INPUT�� �

� ���� ���� �� � DB2�� �����.

SQL-parameter-ind-array

� �� ����� ���� �� DB2�� ����. �� ��� SQL-parameter� � � �

�� ���� �� ������ ��� � ����. 2���� �� �� ��( ����) �

���. n� � �� n� SQL-parameter� ����. � � ��� �� � ���

����.

0 ���� ��� �� � ��.

SQL ����� 199

||

|

|

|

|

|

|

||||||||||||||||

|

|

|

|

|

|

|

|

|

|

|||||||||||||||||||||||

|

|

|

|

|

|

|

|

|

|

|

||

Page 212: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

-1 ���� ����.

����� � ��� �� ��� ���. �: INPUT�� �� ���� ��� ���

� � ��� �� ���� �� � DB2�� �����.

���� �� DB2GENERAL:

DB2GENERAL ��� ��� Java ������ �����.

�� ��

Java SQL �

���� �� Java:

Java ��� ��� SQLJ Part 1: SQL Routines �� �� �����.

�� ��

Java SQL �

��� �� �� ��

SQL ����� �� � ������� � ��� ��� ��� �� �(UDF)� ����� �

�� � ����. � ��� ����� ���� �� ��� � � ��� UDF� �� ��� �

� � �� � ����.

�� ��, � ��� �� ���� ����� ��� � �� ��� UDF� �� ������ � �

����. �� ��� ��� � �� ��� SQL�� �� �� ��� � ����. �������

� �� �� ��� �� ��� ���� �����. �� ��, DECIMAL�� DOUBLE � ��

�� ������� �� ���� �� ��� ��� ��� �� �� � ����.

�� , ������� ���� �� ������ ���� �� UDF� ���� ��� �� �

��� � ����. �� ��� �� ��� ���� �� ��� � �� �� � � ���

���. �� � � � ���� �� ���� ����.

� ���� ��� � ����� �����. SELECTION_CRITERIA() �� �� � �� �

� �� ���� � ����. ������ �� select�� ��� � ����.

SELECT A, B, C FROM T

������ � �� ����, ���� �� ����� SELECTION_CRITERIA �� ���� ���

�� ��� ��� ��� ��� �����. ���, T ���� �� �� ������ �� ����

���. �� SELECTION_CRITERIA()� UDF� �� , ������ �� ���� ��� � �

���.

SELECT C FROM T WHERE SELECTION_CRITERIA(A,B)=1

� , �� �� ��� � ������ ������ �� ������ �����.

200 IBM i: ������ SQL �����

||

|

|

|

|

|

|

|

|

|

|

Page 213: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

UDF� ���� � � ��� � �� � �� � �� ����(LOB)� ���� ���. LOB

��� � ��� ���� �� �� ������. ������ ���� �� � ��� ���

�� �� ������ �� ��� � ����. �� �� LOB �� ������ �� ��� �

��� ���� ��� �����. � �� UDF� ���� �� �� �� �� �� ���

� ����.

�� ��

13 ���� ���� �� ��

��� �� �� � �� �� ����� ��� � �� �������.

UDF ��

��� �� �(UDF)� CREATE FUNCTION�� �� DB2 ������ ���� ��� SQL��

� ��� � �� ����. UDF� �� � �� SQL � � ����.

�� �

� �� ��� �� ����.

v ��. �������� ��� ������� � ���� ����. SUBSTR()� � ����.

v ��� �. DISTINCT TYPE� ��� � ������ ��� ���� ��� ����. �

� �� DISTINCT TYPE� � �� �� �� ��� �����.

v ��� ��. ���� ��� ������� �� ����.

�� � �� �� �, �� � �� ��� �� ��� � ����.

�� �� ��� ��� � � ��� �����. �� ��, SUBSTR() � �� �� �� �

�� �� ����� �� ����. ��� � �� �� �� ����. �� UDF� SQL

� �� ��(C� �� ����� ��� ���) �� ��(� � ��� ��) ����.

�� �� �� � �(��� )� ��� � � ���� � � ��� �����. � � �

� �� �� ����. �� �� �� AVG() � �� ����. �� UDF� �� �� ��

� �� ���. �� �� UDF� �� �� � ���� �� ���� �� �� ���

��. ��� �� ��� �����. �� ��, INTEGER � ��� ���� �� SHOESIZE ��

��� ��� UDF AVG(SHOESIZE)� �� �� �� � AVG(INTEGER)�� �� �� �

� �� ��� � ����.

��� �� �� ���� SQL�� ���� �����. SELECT� FROM��� ����� ���.

��� �� ���� DB2 ���� �� ���� SQL �� �� ��� ���� �� ����

DB2 ���� ��� � ����. �� ��, �� ��� ���� ��� WWW�� ����

��� ���� ���� Lotus Notes® ������� � �� � � ��, ���, ���� �� �

� �� �� ��� ��� � ����. � ��� ������� �� ���� ��� � ����.

��� �� �� � �� SQL �� ��� � ����. �� �� ��� �� ���.

SQL ����� 201

Page 214: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

��� ��

*SQL ��� ���� �� �� �� <schema-name>.<function-name>���.

*SYS ���� �� �� �� <schema-name>/<function-name>���. DML���� *SYS ��

� ���� � �� ��� � ���.

�� ���� ���� � �� �� ��� � ����. �� ��, ��� ����.

QGPL.SNOWBLOWER_SIZE SMITH.FOO QSYS2.SUBSTR QSYS2.FLOOR

�� <schema-name>.� �� � ����. � , DB2� ���� ���� �� ���� ��

�. �� ��, ��� ����.

SNOWBLOWER_SIZE FOO SUBSTR FLOOR

��

�� ��� schema-name� ���� �� DB2� ���� �� ��� ���� ����. �

� ���� �� UDF � UDT ��� ���� � ���� �� ��� � ������. ��

�� � ��� ���� �� �� ��� , �� ��� �� � �� ���� � ��

���. � SQL� �� ���� ���� SQLPATH ���� ����. � SQL�

�� SET PATH��� ����. �� ���� ���� � � SQL�� SQL ��� ���� ��

�� , � ��� �� ��� ����.

"QSYS","QSYS2","<ID>"

�� � SQL� � SQL � �� ����(��� <ID>� �� ��� ���� ID� ���).

�� ��� � � SQL�� ��� ��� ���� ���� , ��� �� *LIB���.

���� ���

��� ���� � ����. ���� � �(�� ������)� �� �� �� � ��

� �����. �� �� �� �� ��� �� �� ���. � ��� �� �� � �

� �� �� �� �� � ���� ��� �����.

�� �

���� ��� � �� ��� �� ���� ���� �� ���� �� � ��� ��

� ��� �� � �� � �����. � �� �� �� �� �� � � � ���

�� �����. � �� � ��� � ��� ��� ����. ��� �� ��� �� ��

����� � �� �� ��� �� ���� ��� � ����.

UDF ���� ��

UDF� �� ���� �� � �� �� ���� ���� �� �� SQL� �� ��� ��

���. � ��� ������ �� ���� UDF� ���� ���.

202 IBM i: ������ SQL �����

Page 215: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� �� ���� ���� ��� UDF� ���� �� � UDF �� �� �� �� ���� ��

��(� � �)� ����. �� ��� �� UDF� ���� SQL�� �� ��� � � � �

� ����. �� �� ���� � UDF� �� ��(� � �� � ��)� ��� � �� ���

���� �� �� ����. �� �� �� ��� ���� �� �� ��� ������� �� �

� ��� UDF� ����� �� ��. UDF� � �� �� ���� ���, UDF� ���� SQL

�� �����.

�������� ���� ��� UDF �� ��� �� UDF� �� ��� � ��� ��� � ���

��� ���. �� �� �� UDF� � �� ��� ���� �� INI ��� UDF_TIME_OUT

��� ���� �� ��� �� � ����. �� UDF_TIME_OUT� �� �� �� ��� �

������ ��� �� � �� ��� ��� ������.

UDF� ���� �� ��� ���� ��� UDF� �� SQL�� � �� ��� �� � � �

� ���� ��� ������ SQL��� �� ��� ���� ��� ���� �� �� ��

��. ��, UDF� � ����� � ��, �� �� �� ��� ���� ���� ��� ���.

�� ���

�� �� � QAQQINI� ���� ��� �� ��

UDF� SQL ��� ��

SQL �� CREATE FUNCTION�� ���� ��, �� � ���� ��� �� �(UDF)���.

SQL �� SQL ���� ����, ��� ���� ��� �� CREATE FUNCTION� �� ���

���. SQL �� ���� UDF� ����, �� �� �� ��� �� �� ��� �

� �� ���� ������� �����.

: SQL �� UDF:

� ��� ��� ��� ��� ���� �� �� ����.

CREATE FUNCTION PRIORITY(indate DATE) RETURNS CHAR(7)LANGUAGE SQLBEGINRETURN(

CASE WHEN indate>CURRENT DATE-3 DAYS THEN 'HIGH'WHEN indate>CURRENT DATE-7 DAYS THEN 'MEDIUM'ELSE 'LOW'

END);

END

�� ��, ��� �� �� ��� � ����.

SELECT ORDERNBR, PRIORITY(ORDERDUEDATE) FROM ORDERS

: SQL � UDF:

�� ��� ��� ��� ���� ���� ��� �� ����.

SQL ����� 203

Page 216: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

CREATE FUNCTION PROJFUNC(indate DATE)RETURNS TABLE (PROJNO CHAR(6), ACTNO SMALLINT, ACTSTAFF DECIMAL(5,2),

ACSTDATE DATE, ACENDATE DATE)LANGUAGE SQLBEGINRETURN SELECT * FROM PROJACTWHERE ACSTDATE<=indate;

END

�� ��, ��� �� �� ��� � ����.

SELECT * FROM TABLE(PROJFUNC(:datehv)) X

SQL ��� ��� �� ��� RETURN�� ��� ���.

UDF� �� ��� ��

SQL ��� �� ��� �� ��� ��� �� �(UDF) �� ��� � ����.

� ��� SQL ��� �� ��� ���, ����� �� �� ��� ��� � ��� ���

� �����. �� ��� �� ���� �� �� ����� � � ����.

Java�� �� �� ��� � ����.

�� ��

Java SQL �

UDF :

��� �� �(UDF)� ������� ���� SQL� �� �� ��� � ����. CREATE

FUNCTION�� ���� UDF� ��� � ����.

DETERMINISTIC, ALLOW PARALLEL � RETURNS NULL ON NULL INPUT� �� ��� �

���� ���� ����� ��� �� ��� � ����. �� ��� ���� ������� �

� �� �� ������ �� � ��� �� ���� ��� � ����.

�� �� ���� ��� ���� ��� �� UDF� ���� ���. UDF� ��� ���� ��

��� � ����. �� UDF �� �� � ����� UDF� ���� � ��� ���� � ���

� �� ����.

�� ��

CREATE FUNCTION

: ���:

�� �� � ���� ���� �� �� �� ��� MATH ���� �� ���� �����

�.

CREATE FUNCTION MATH.EXPON (DOUBLE, DOUBLE)RETURNS DOUBLEEXTERNAL NAME 'MYLIB/MYPGM(MYENTRY)'

204 IBM i: ������ SQL �����

Page 217: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

LANGUAGE CPARAMETER STYLE DB2SQLNO SQLDETERMINISTICNO EXTERNAL ACTIONRETURNS NULL ON NULL INPUTALLOW PARALLEL

� ����� � ��� NULL�� ��� NULL� �� �� �� ��� RETURNS NULL

ON NULL INPUT� �����. EXPON� � � ��� � ��� ALLOW PARALLEL �

� �����.

: ��� �:

�� �� ��� ���� � �� �� ��� �� �� ����(CLOB) � ��� �� ��

��� �� �(UDF)� ���� ������. UDF� ���� ��� CLOB � ��� ���, ��

�� 0� �����.

C ����� FLOAT ��� ����� �������. � ����� SQL�� ���� ��� � �

�� INTEGER� ���� �� ������. �� �� ��� � ����.

CREATE FUNCTION FINDSTRING (CLOB(500K), VARCHAR(200))RETURNS INTEGERCAST FROM FLOATSPECIFIC FINDSTRINGEXTERNAL NAME 'MYLIB/MYPGM(FINDSTR)'LANGUAGE CPARAMETER STYLE DB2SQLNO SQLDETERMINISTICNO EXTERNAL ACTIONRETURNS NULL ON NULL INPUT

CAST FROM�� UDF ����� ��� FLOAT �� ����� ���� � ����� UDF� ��

� SQL�� �� ���� �� �� INTEGER� ���� ���. �� �� �� �� �� �

��� ���. UDF� ��� ����� ���� ��� ��� RETURNS NULL ON NULL INPUT

� ������.

: BLOB ��� �:

FINDSTRING �� �� �� ����(CLOB)� �� 2� �� ����(BLOB)� ���� ����

� ��� ������. �� �����, BLOB� � � ���� ��� �� FINDSTRING �

� ������.

CREATE FUNCTION FINDSTRING (BLOB(500K), VARCHAR(200))RETURNS INTEGERCAST FROM FLOATSPECIFIC FINDSTRING_BLOBEXTERNAL NAME 'MYLIB/MYPGM(FINDSTR)'LANGUAGE CPARAMETER STYLE DB2SQL

SQL ����� 205

Page 218: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

NO SQLDETERMINISTICNO EXTERNAL ACTIONRETURNS NULL ON NULL INPUT

� ��� UDF � ����� �� � UDF� �� ����� ��� � ��� ����.

CLOB� BLOB� �� �� �� �� �� �� ��� � ��� ������. DB2� UDF

���� �� BLOB � CLOB� ����� ��� ���(�� ��� ���� ��� �) � ��

��� ����� �� � ���.

: ��� �� �(UDT)� �� ��� �:

2� �� ����(BLOB) ��� ������ FINDSTRING �� ����� �� BLOB �� ���

���� BOAT �� ��� ���� ������.

FINDSTRING� ��� ��� BOAT �� ���� ���� ���� �� FINDSTRING �� �

�����. � �� BLOB �� �� ���� FINDSTRING�� �� �����. � ����

FINDSTRING �� ����� ��� ����.

CREATE FUNCTION FINDSTRING (BOAT, VARCHAR(200))RETURNS INTSPECIFIC "slick_fboat"SOURCE SPECIFIC FINDSTRING_BLOB

� FINDSTRING �� 205 ���� ��: BLOB ��� ������ FINDSTRING �� �� ��

� ���� � ���� ��� ���. SOURCE�� ���� ��� EXTERNAL NAME� ��

� ��� ���� �� ��� ��� � ���. �� ��� �� ��� �����. ����

�, �� � �� � 205 ���� ��: BLOB ��� ���� �� �� ��� ���� ���

��� � ����. �� ���� �� ���� ��� � �� �� ���� ���� � �� �

�� ���. ��� �� ��� ���� ����.

: ��� �� �(UDT)� �� AVG:

� ����� CANADIAN_DOLLAR �� ��� �� AVG �� �� �����.

��� ���� � �� ���� �� AVG �� ��� � ���. CANADIAN_DOLLAR� �

� ��� DECIMAL����� AVG(DECIMAL) � �� ��� �� �� ���� AVG� ���

���.

CREATE FUNCTION AVG (CANADIAN_DOLLAR)RETURNS CANADIAN_DOLLARSOURCE "QSYS2".AVG(DECIMAL(9,2))

SQL �� � �� AVG �� ���� � �� � ��� SOURCE��� ��� ����

� ������.

: ��:

206 IBM i: ������ SQL �����

Page 219: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

� �� �� ���� 1� ��� ��� ��� ��� 1� �����. � �� SQL �� ��

� ����. ������ ��� ���� ���� �� NOT DETERMINISTIC ����.

SCRATCHPAD� ���� �� ��� �� �����. �� ��� ��� � �� ���� ���

��.

CREATE FUNCTION COUNTER ()RETURNS INTEXTERNAL NAME 'MYLIB/MYFUNCS(CTR)'LANGUAGE CPARAMETER STYLE DB2SQLNO SQLNOT DETERMINISTICNOT FENCEDSCRATCHPAD 4DISALLOW PARALLEL

��� ��� ���� �� ��� � ���� ������. � �� SCRATCHPAD� ��� �

�� �� NO FINAL CALL� �����. � � ���� �� 4���(���� ��)��

����. COUNTER �� ��� ����� � � ���� ���� ��� DB2� ��

� ���� ��� DISALLOW PARALLEL� �����.

: �� ID� ��� � ��:

��� �� �(� � ���)� �� ��� ���( � ���)� �� ��� � ��

� �� � �� ID � ���� �� ���� ��� �� ���� ������.

�� ��� �� �(UDF)� ��� ��� �����.

CREATE FUNCTION DOCMATCH (VARCHAR(30), VARCHAR(255))RETURNS TABLE (DOC_ID CHAR(16))EXTERNAL NAME 'DOCFUNCS/UDFMATCH(udfmatch)'LANGUAGE CPARAMETER STYLE DB2SQLNO SQLDETERMINISTICNO EXTERNAL ACTIONNOT FENCEDSCRATCHPADNO FINAL CALLDISALLOW PARALLELCARDINALITY 20

� � ��� ��� �� �� ���� ����� DETERMINISTIC�� �����. RETURNS

�� � DOC_ID� �� DOCMATCH� ��� �����. � ��� �� ���� FINAL

CALL� ���� ��� ���. ��� �� � ��� � ��� DISALLOW PARALLEL �

�� �����. DOCMATCH� �� �� �� ��� �� ��� CARDINALITY 20� � �

�� Optimizer� �� ��� ���� �� �� �����.

�� � ��� �� ��� �� �� ���� �� �� ����� ���� �����.

SQL ����� 207

Page 220: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

SELECT T.AUTHOR, T.DOCTEXTFROM DOCS AS T, TABLE(DOCMATCH('MATHEMATICS', 'ZORN''S LEMMA')) AS FWHERE T.DOCID = F.DOC_ID

FROM��� ��� �� ���� �� �� ��(TABLE ��)� ������. � ����

DOCMATCH() ��� �� ZORN’S LEMMA� ���� MATHEMATICS ��� �� �

DOC_ID� �� �� �� �����. �� DOC_ID �� ��� �� ���� ���� ���� �

� �� ���� ����.

DB2�� �� ��� �� ��:

DB2� ��� �� �(UDF)� ���� �� ���� �� ���� �����. ��� ����

��� �� �� �����.

�� ����� �� ��� �� �����. �� ����� ���� � ��

���� ������ � ����.

UDF�� ���� ��� ��� �, � ���� �� �� ��� � ���� ��� �

��� �� ����� ���� ���. ���� �� ��� ����� ��� ���� ���

��� ��� �� ���� � �� ��� � ����. � �� ���� �� �� ����

��� ������� �� �� ���� �� � ����.

�� UDF� �� ��� � ��� ���� ��� ��� ����. ���, ��� ���� �� �

����� �� ����� ���� ��� ����.

���� �� SQL:

SQL ��� ��� � � SQL� �����. � ��� ��� �� ��� �� �(UDF)�

�� ��� � ����.

��� ��� ����, ���� ��� �� �� ����� �����(�� ���).

SQL-argument

� �� UDF� ���� �� DB2�� ����. � �� n� ����. n� � ��� �

� ���� ����. � � ��� �� � ��� �� ���� �����. create

function�� �� ���� ��� ���� ����. �: � ���� ����� ����

�. UDF�� �� ��� � ���� DB2�� �����.

SQL-result

� �� DB2� ���� �� UDF� ����. ������� ���� ���� ����

��

� SQL-argument

SQL-result

� SQL-argument-ind

SQL-result-ind SQL-state �

� function-name specific-name diagnostic-message ��

208 IBM i: ������ SQL �����

Page 221: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�. ���� ��� �����, ��� ���� ����� �� ���� �����. ���

���� CREATE FUNCTION�� �� �� ���� ��� �� ���� �����.

CREATE FUNCTION�� CAST FROM�� ���� DB2� CAST FROM�� �� �

� �� ���� �����. ��� �� DB2� RETURNS�� �� �� UDF� ��

���� �����.

SQL-argument-ind

� �� UDF� ���� �� DB2�� ����. ��� SQL-argument� � � ��� �

��� �� UDF�� ��� � ����. n� SQL-argument-ind� n� SQL-argument� �

���(�� � ��). � ����� 2��� ��� ��� �����. �� � ���

����.

0 �� ��� �� � ��.

-1 �� ����.

�� RETURNS NULL ON NULL INPUT�� �� UDF� ��� �� ��� ��

� ���. �� CALLS ON NULL INPUT�� �� , �� �� NULL� � � ��

�� UDF� � ��� �� ��� ���.

�: � ���� ����� �����. UDF�� �� ��� � ���� DB2�� ���

��.

SQL-result-ind

� �� DB2� ���� �� UDF� ����. ������� ���� ���� ����

�. �� 2��� ��� ��� �����. �� ��� � ������� � ���

�� �����. 0 �� �� ��� � ������� SQL-result�� ���� �� �

����. ������� ��� ����� ���� �����. ���� ��� �����,

��� ���� �� ����� �� ���� �����.

SQL-state

� �� SQLSTATE� ��� CHAR(5) ����.

� ���� � �������� ‘00000’�� ���� �� �� ��� �� �� �

� � ����. �� SQLSTATE� �� �� ��� ���, ��� �� ������� ��

�� ��� ��� � ��� � ����.

01Hxx � �� ��� ������. SQL � ����. xx� ��� � �� ��

� ��� � � ����.

38xxx � �� �� ��� ������. SQL ��� ����. xxx� ��� � �� ��

� ��� � � ����.

function-name

� �� UDF� ���� �� DB2�� ����. �� � �� ���� �� �� �

� VARCHAR(139) ����.

���� ��� ��� ��� ����.

SQL ����� 209

Page 222: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

<schema-name>.<function-name>

� ���� �� ���� ��� ��� � ��� � UDF ���� � �� ��� �

�����. �: � ���� ����� �����. UDF�� �� ��� � ���� DB2

�� �����.

specific-name

� �� UDF� ���� �� DB2�� ����. �� � �� ���� �� �� �

� �� VARCHAR(128) ����.

function-name� ��, � ���� �� ���� ��� ��� � ��� � UDF ����

� �� ��� � �����. �: � ���� ����� �����. UDF�� �� �

�� � ���� DB2�� �����.

diagnostic-message

� �� UDF� ���� �� DB2�� ����. UDF� SQLSTATE �� �� ���

�� � UDF� � � ���� ���� �� ��� � �� VARCHAR(70) ����.

UDF� �� ���� ������� �� ��� � ��� � UDF�� �� � ���

�. SQL-state ���� UDF� �� ��� ��� � � ���� DB2�� �����.

�� ��

SQL � � � �

���� �� DB2SQL:

DB2SQL ��� ��� ����, �� ���� �� ��� �� SQL ��� ���� �

� ������ �� ����� ��� � ����. �� DB2SQL� ���� �� � ���

� ��� � ����.

��� �� � ��� � ��� UDF ��� ��� ��� �� ��� UDF� �

����. �� ���� ���� ��� �� SQL� ������. � ��� ��� �� � ��

� UDF � �� ��� � ����.

�� �� :

��

� SQL-argument

SQL-result

� SQL-argument-ind

SQL-result-ind SQL-state �

� function-name specific-name diagnostic-messagescratchpad call-type dbinfo

��

��� �� :

210 IBM i: ������ SQL �����

Page 223: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

��

� SQL-argument

� SQL-result

� SQL-argument-ind

� SQL-result-ind SQL-state �

� function-name specific-name diagnostic-messagescratchpad

call-typedbinfo

��

scratchpad

� �� UDF� ���� �� DB2�� ����. UDF� �� CREATE FUNCTION��

SCRATCHPAD ��� ��� �� ����. � �� �� ��� �� �����.

v � ���� ��� �� INTEGER.

v UDF� �� ���� �� DB2� �� � 2� 0�� �� �� � ���.

� ���� � ���� �� ���� UDF�� ��� � ����.

��� �� , � ���� CREATE FUNCTION� FINAL CALL� �� UDF

� �� FIRST �� ��� �� �� �����. � �� ��� � ��� ��� ���

��� � �� �� �� ���. DB2� ��� � ���� ��� ����� ��� ��

��. � ���� ���� �� �����. �� ���� � ��� DB2� � �� �

�� � ���� ����.

��� �� �� NO FINAL CALL� ����� ���� � � ���� OPEN

���� �� �� ��� � ��� ��� OPEN �� ��� ��� ��� � �� �

� ���. �� �� �� �� ��� ���� ��� �� �� �� � ����. OPEN

�� ��� � ���� ��� ������ �� CREATE FUNCTION�� FINAL CALL

� ���� ���. �� OPEN, FETCH � CLOSE �� �� FINAL CALL� ����, �

�� �� � ��� ���� � �� �� ��� FIRST � FINAL ��� �����.

call-type

� �� UDF� ���� �� DB2�� ����. �� �� ���� UDF� �� CREATE

FUNCTION�� FINAL CALL ��� �� �� ����. �� ��� ��

�� �� ����. scratchpad �� diagnostic-message �(scratchpad �� � ) �

�� ����. � �� INTEGER � ��� �����.

�� �� :

-1 � ���� �� UDF� � � �����. � � ��� �� SQL � �� ��

�� �� �����.

0 �� �����. (�� �� �� � �� �����.)

1 � �����. SQL-argument �� SQL-argument-ind �� ���� ����. UDF�

SQL-result, SQL-result-ind �, SQL-state �� diagnostic-message �� ���� �

� ��� ���� ��� ���. � �� UDF�� ��� � ����� �����.

SQL ����� 211

Page 224: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

��� �� :

-2 � ���� �� UDF� � � �����. � � ��� �� SQL � �� ��

�� �� �����.

-1 � ���� �� UDF� � �����. � ���� NO FINAL CALL� ��

� �����. �� �� ���� ����. �� SQL � �� �����.

0 �� �����. DB2� ��� �� ��� �� ���� ���, SQLSTATE �

’02000’� � ���� � ��� ��� ��� �����.

1 � �����. � ��� OPEN ��� ��� ��� �� CLOSE �� � �� ��

� ���� �� ��� � ����.

2 � �����. SQL-argument �� SQL-argument-ind �� ���� ����. UDF�

SQL-result, SQL-result-ind �, SQL-state �� diagnostic-message �� ���� �

� ��� ���� ��� ���. � �� UDF�� ��� � ����� �����.

dbinfo � �� UDF� ���� �� DB2�� ����. UDF� �� CREATE FUNCTION��

DBINFO ��� ���� �� ����. �� � ��� sqludf include� ��

�����.

���� �� GENERAL:

GENERAL ��� ��� ����, ���� CREATE FUNCTION�� �� ��� �� �� �

���� ���� �����. � ��� ��� �� ��� �� �(UDF)��� ��� � ��

��.

��� ��� ����.

�� �SQL-result = func ( )SQL-argument

��

SQL-argument

� �� UDF� ���� �� DB2�� ����. � �� n� ����. n� � ��� �

� ���� ����. � � ��� �� � ��� �� ���� �����. CREATE

FUNCTION�� �� ���� ��� ���� ����. �: � ���� ����� ��

���. UDF�� �� ��� � ���� DB2�� �����.

SQL-result

� �� UDF�� �����. DB2� �� ������ ���� �����. �� ���� �

���� � �� � �� ��� ���. ������� CREATE FUNCTION�� ��

���� �� �� ��� �����. CREATE FUNCTION�� CAST FROM�� ����

DB2� CAST FROM�� �� �� �� ���� �����. ��� �� DB2�

RETURNS�� �� �� UDF� �� ���� �����.

212 IBM i: ������ SQL �����

Page 225: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

� �� � �� ��� ��� ������ �, ��� �� GENERAL� ����

� �� �� ����� ����� ���.

���� �� GENERAL WITH NULLS:

GENERAL WITH NULLS ��� ��� �� ��� �� �(UDF)��� ��� � ����.

��� ��� ����, ���� ��� �� �� ����� �����(�� ���).

�� SQL-result = funcname ( �

SQL-argumentSQL-result-ind )

SQL-argument-ind-array��

SQL-argument

� �� UDF� ���� �� DB2�� ����. � �� n� ����. n� � ��� �

� ���� ����. � � ��� �� � ��� �� ���� �����. CREATE

FUNCTION�� �� ���� ��� ���� ����. �: � ���� ����� ��

���. UDF�� �� ��� � ���� DB2�� �����.

SQL-argument-ind-array

� �� UDF� ���� �� DB2�� ����. �� ��� SQL-arguments� � � ��

� ���� �� UDF�� ��� � ����. 2���� �� �� ��( ����) ���

�. n� � �� n� SQL-argument� ����. � � ��� �� � ��� �

���.

0 �� ��� �� � ��.

-1 �� ����.

UDF� � ��� �� ��� ���.

�: � ���� ����� �����. UDF�� �� ��� � ���� DB2�� ���

��.

SQL-result-ind

� �� DB2� ���� �� UDF� ����. ������� ���� ���� ����

�. �� 2��� ��� ��� �����. �� ��� � ������� � ���

�� �����. 0 �� �� ��� � ������� SQL-result�� ���� �� �

����. ������� ��� ����� ���� �����. ���� ��� �����,

��� ���� �� ����� �� ���� �����.

SQL-result

� �� UDF�� �����. DB2� �� ������ ���� �����. �� ���� �

���� � �� � �� ��� ���. ������� CREATE FUNCTION�� ��

���� �� �� ��� �����. CREATE FUNCTION�� CAST FROM�� ����

DB2� CAST FROM�� �� �� �� ���� �����. ��� �� DB2�

RETURNS�� �� �� UDF� �� ���� �����.

SQL ����� 213

Page 226: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

� �� � �� ��� ��� ������ �, ��� �� GENERAL WITH NULLS

� ���� � �� �� ����� ����� ���.

�:

1. CREATE FUNCTION�� �� �� �� �� �� � ����� ���� � �

�� � ����. �� �� �� � �� ��� ���� �� ���� �����. �

� �� � ��� �� �� �����. �� ��� �� ����� �� ���

� ����. ������� � ��� � �� �� ��� ��� �� ��

�� ����� ���� �����. �� ��, �� ��� �� ��

CREATE FUNCTION X(INT) RETURNS INTLANGUAGE CEXTERNAL NAME 'MYLIB/MYPGM(MYENTRY)'

and the source for the program was:

void myentry(int*inint*out,... .

��� ��� myentry� �� � ������� ��� MYENTRY� ��� �����

�� ������� � ��� �� ���.

2. C++ ��� �� �� ����� C++ �� ��� ���� � �� �� extern

″C″� ��� � ����. ��� �� C++ ��� ��� ‘�� ��(name

mangling)’� ��� ������� �� �� ���.

���� �� DB2GENERAL:

DB2GENERAL ��� ��� Java ��� �� �(UDF)�� �����.

�� ��

Java SQL �

���� �� Java:

Java ��� ��� SQLJ Part 1: SQL Routines �� �� �����.

�� ��

Java SQL �

� �� ����:

�� ��� �� ���� SQL�� ���� ���� ��� �� �(UDF)���. ��� � ��

� SELECT�� FROM���� �����.

��� � �� � ��� ������.

214 IBM i: ������ SQL �����

Page 227: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

v ��� �� ���� ������ DB2� UDF �� �� ����� � �� � ����. ���

� �� ��� �� ��(OPEN, FETCH, CLOSE, FIRST � FINAL)���. FIRST � FINAL �

�� �� UDF �� ��� �� ����. �� �� ��� � �� �� �� �� �� ��

��� �� ��� ���� � �����.

v DB2� ��� �� �� � �� ���� � ����� ��� �� ��� � ��� ��

���. SQL-result �� ��� � �, CREATE FUNCTION�� RETURNS TABLE�� ��

�� ��� � ���� �� ����. ����� SQL-result-ind �� SQL-result ���� �

� � ���� �� ����.

v ��� �� CREATE FUNCTION�� RETURNS�� �� �� �� � ����� ��

�� � ��. CREATE FUNCTION� DBINFO �� � ���� dbinfo �� �� ��� �

��� ��� � � ����� �� ���� ���.

v �� �� �� ����� �� �� ��� �� ��� ���.

v ��� �� CREATE FUNCTION��� CARDINALITY n ��� ����. ���� � ��� �

��� � �� � DB2 Optimizer� �� �� ��� �� � ��� Optimizer� �� ���

�� �� � ����. ��� �� CARDINALITY� �� ��� ��� �� ������ �

��� �(�, FETCH �� � �� �� ���� �)� ��� ������. DB2� �� �

� ��� �� ���� � ��� �����. ��� ���� � ��� ���� �� ��� �

(SQL �� � ’02000’)� � �� �� ��� ����.

UDF� �� �� ��:

��� �� �(UDF) �� � ��� ��� , ���� �� ��� �� ��� �����.

��� �� �� ��

��� � ��� �� �� �� ��� ��� ����.

1. FIRST ��� ����, �� ��� ����� ����.

2. FIRST ��� ����, � OPEN, FETCH � CLOSE ��� ���� FINAL ��� �� �

�����.

3. OPEN ��� ����, FETCH �� CLOSE ��� ����� ����.

4. OPEN ��� ����, FETCH � CLOSE ��� ������.

5. FETCH ��� ����, �� FETCH ��� ����� ��� CLOSE ��� ������.

�: � ��� ��� UDF� �� �� ��� ����. ��� �� �� �� �� � ��

, �� �� ��� ���� ��� ����� �� � ����.

��� �� �� ��

FINAL CALL ��� ���� �� UDF �� �� �� �� ��� ��� ����.

1. FIRST ��� ����, �� ��� ����� ����.

SQL ����� 215

Page 228: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

2. FIRST ��� ����, ��� ��� ��� �� �� NORMAL ��� ���� FINAL ���

�� ������.

3. NORMAL ��� ����, �� NORMAL ��� ����� ��� FINAL ��� ������

(FINAL CALL� ��� ). �� FIRST �� � ��� ���� FINAL ��� ����� ��

��� �� �� UDF� ���� � �����.

�: � ��� �� UDF� �� �� ��� ����. ��� �� �� �� �� � ��

, �� �� ��� ���� ��� ����� �� � ����.

��� ����:

FENCED� �� ��� �� �(UDF)� �� ���� SQL�� �� � �� �����. �

� UDF� SQL�� �� ��� ��� ��� ���� �����.

UDF� SQL�� �� � �� ���� ��� SQL�� �� �� � �� �����. ��

�� ���� ���� ��� �� �� ���� ����.

v UDF� SQL�� ��� ���� �� �� ��� �����. �� �� �� �� ��� ��

���.

v UDF� SQL�� �� � � ������ � �� ������ �� ��� ���� ����. UDF

��� UDF ���� ��� �� �� �� SQL�� �� ���� ���� ���.

v UDF� 2� ���� ���� ��� �� ��� ��� � ���.

�� ��

���� �����

���(fenced) �� ��(unfenced) ����

��� �� �(UDF) �� � UDF� ��(unfenced) UDF� � � � ��� �����.

� ��:

��� ����� ��� �� �(UDF)� ��� � ����.

�� �� UDF ����� � ���� ��� �� � ��� �����. ��� UDF�

ALLOW PARALLEL� �� , �� �� � � ����.

��� �� ��� �� � ��� �� ���. ��� � �� � DISALLOW PARALLEL�

���� ���.

�� ��

���� �����

��(fenced) �� ��(unfenced) ����:

��� �� �(UDF) �� � UDF� ��(unfenced) UDF� � � � ��� �����.

216 IBM i: ������ SQL �����

Page 229: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

��� UDF� ��(unfenced) UDF� �����. ��(fenced)� ������� ��� ����

UDF� ���� � ����. ��� UDF� , � SQL ��� �� �� �� �� �

����� �� ��� �����. �� ��� "��� ��� �� �� ��� �� �� UDF

� ��(fenced) UDF� ���� ��� �����. NOT FENCED ��� ���� �� UDF� �

��� UDF� ��� �� �� �� ��� � UDF� ��� � ��� ��� ��� ����

��� ����. �������� ��(unfenced)� ����, ��(fenced) UDF� �� ���� UDF

� ����� ��� � ����.

CREATE FUNCTION QGPL.FENCED (parameter1 INTEGER)RETURNS INTEGER LANGUAGE SQLBEGINRETURN parameter1 * 3;END;

CREATE FUNCTION QGPL.UNFENCED1 (parameter1 INTEGER)RETURNS INTEGER LANGUAGE SQL NOT FENCED-- Build the UDF to request faster execution via the NOT FENCED optionBEGINRETURN parameter1 * 3;END;

�� ��

216 ���� ��� ����

FENCED� �� ��� �� �(UDF)� �� ���� SQL�� �� � �� �����. �

� UDF� SQL�� �� ��� ��� ��� ���� �����.

�� � �� ����:

ILE �� ���� �� �� ����� �� �� �� ��� � �� ���� �� �� ��

�� ������ �� ��� ���� �����.

*PGM �� *SRVPGM ����� �� � � ��� �� �� ���� ���� , ����� �

���� ���� �����. �� ��� ��� � � , ����� ���� ���� ���

���� � ����� �� �� ���� ���. �� ����� ���� �� �� �� ���

��� � ����.

v �� ���� ����� QSYS �� QSYS2� ���� ���.

v CREATE FUNCTION�� ��� � �� ����� ��� ���.

v �� ����� ILE *PGM �� *SRVPGM ������ ���.

v �� ���� �� �� ������ � ��� SQL�� ��� ���.

���� ����� ��� � � , �� �����.

: UDF ��

�� ��� SQL �� �� �� ���� ��� �� �(UDF) �� ���� ��� ����.

: �� UDF� ��:

SQL ����� 217

Page 230: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

��� ��� ���� �� ��� ������.

�� ���� ��� ����.

SELECT SQUARE(myint) FROM mytable

�: � ��� ���� 528 ���� �� ���� � ���� ��� ��� ���� ����.

�� ��� � �� ���� UDF� ���� ��� ����.

SQL �� ��

CREATE FUNCTION�� ��� ����.

CREATE FUNCTION SQUARE( inval INT) RETURNS INTLANGUAGE SQLSET OPTION DBGVIEW=*SOURCEBEGINRETURN(inval*inval);END

� ���� ���� � �� SQL �� �����.

�� ��, ���� �� SQL ��

CREATE FUNCTION�� ��� ����.

CREATE FUNCTION SQUARE(INT) RETURNS INT CAST FROM FLOATLANGUAGE CEXTERNAL NAME 'MYLIB/MATH(SQUARE)'DETERMINISTICNO SQLNO EXTERNAL ACTIONPARAMETER STYLE SQLALLOW PARALLEL

�� ��� ����.

void SQUARE(int *inval,double *outval,short *inind,short *outind,char *sqlstate,char *funcname,char *specname,char *msgtext){if (*inind<0)

*outind=-1;else{*outval=*inval;*outval=(*outval)*(*outval);*outind=0;}

return;}

218 IBM i: ������ SQL �����

Page 231: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

���� � ��� �� �� ����� ����� ��� ������.

CRTCMOD MODULE(mylib/square) DBGVIEW(*SOURCE)CRTSRVPGM SRVPGM(mylib/math) MODULE(mylib/square)EXPORT(*ALL) ACTGRP(*CALLER)

�� ��, ���� �� GENERAL ��

CREATE FUNCTION�� ��� ����.

CREATE FUNCTION SQUARE(INT) RETURNS INT CAST FROM FLOATLANGUAGE CEXTERNAL NAME 'MYLIB/MATH(SQUARE)'DETERMINISTICNO SQLNO EXTERNAL ACTIONPARAMETER STYLE GENERALALLOW PARALLEL

�� ��� ����.

double SQUARE(int *inval){double outval;outval=*inval;outval=outval*outval;return(outval);}

���� � ��� �� �� ����� ����� ��� ������.

CRTCMOD MODULE(mylib/square) DBGVIEW(*SOURCE)

CRTSRVPGM SRVPGM(mylib/math) MODULE(mylib/square)EXPORT(*ALL) ACTGRP(*CALLER)

: ���:

SELECT�� �� �� ��� �� ���. ��� ���� ��� ���� ��� �� �(UDF)�

�����.

�: � ��� ���� 528 ���� �� ���� � ���� ��� ��� ���� ����.

� ��� DB2 SQL ��� �� � � ���� � �� �� �����.

CREATE FUNCTION COUNTER()RETURNS INTSCRATCHPADNOT DETERMINISTICNO SQLNO EXTERNAL ACTIONLANGUAGE CPARAMETER STYLE DB2SQLEXTERNAL NAME 'MYLIB/MATH(ctr)'DISALLOW PARALLEL

/* structure scr defines the passed scratchpad for the function "ctr" */

SQL ����� 219

Page 232: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

struct scr {long len;long countr;char not_used[92];

};

void ctr (long *out, /* output answer (counter) */short *outnull, /* output NULL indicator */char *sqlstate, /* SQL STATE */char *funcname, /* function name */char *specname, /* specific function name */char *mesgtext, /* message text insert */struct scr *scratchptr) { /* scratch pad */

*out = ++scratchptr->countr; /* increment counter & copy out */*outnull = 0;return;

}/* end of UDF : ctr */

� UDF� �� �� ��� � ����.

v �� �� SQL �� �� �� �����.

v � �� � �� �(SQL-state, function-name, specific-name � message-text) ��� � ���

�� �� �����.

v ���� � ���� ��� �� ��� � ����.

v �� ���� ���� �� ����. �� ��� ���� ����.

v SCRATCHPAD� ���� ���, DB2� � ��� �� �� ��� ��� � ���

��.

v NOT DETERMINISTIC�� ������. SQL �� �� �� ��� �����(� �).

v DISALLOW PARALLEL� ���� ������. � � ������ UDF� ��� ��� �

� �����.

: �� � ��:

��� � ��� �� �� ��� ���� ��� �� ���� ������.

�: � ��� ���� 528 ���� �� ���� � ���� ��� ��� ���� ����.

�� ����� ��� � �� �� ���� �� ��� �� �� ���� ����. �

���� �� ��� ��� �� ���� �� ����. � ��� �� ��� ��� ����.

#include <stdlib.h>#include <string.h>#include <stdio.h>#include <sqludf.h> /* for use in compiling User Defined Function */

#define SQL_NOTNULL 0 /* Nulls Allowed - Value is not Null */#define SQL_ISNULL -1 /* Nulls Allowed - Value is Null */

220 IBM i: ������ SQL �����

Page 233: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

#define SQL_TYP_VARCHAR 448#define SQL_TYP_INTEGER 496#define SQL_TYP_FLOAT 480

/* Short and long city name structure */typedef struct {char * city_short ;char * city_long ;

} city_area ;

/* Scratchpad data */ (See note 1)/* Preserve information from one function call to the next call */typedef struct {/* FILE * file_ptr; if you use weather data text file */int file_pos ; /* if you use a weather data buffer */

} scratch_area ;

/* Field descriptor structure */typedef struct {char fld_field[31] ; /* Field data */int fld_ind ; /* Field null indicator data */int fld_type ; /* Field type */int fld_length ; /* Field length in the weather data */int fld_offset ; /* Field offset in the weather data */

} fld_desc ;

/* Short and long city name data */city_area cities[] = {{ "alb", "Albany, NY" },{ "atl", "Atlanta, GA" },...{ "wbc", "Washington DC, DC" },/* You may want to add more cities here */

/* Do not forget a null termination */{ ( char * ) 0, ( char * ) 0 }

} ;

/* Field descriptor data */fld_desc fields[] = {{ "", SQL_ISNULL, SQL_TYP_VARCHAR, 30, 0 }, /* city */{ "", SQL_ISNULL, SQL_TYP_INTEGER, 3, 2 }, /* temp_in_f */{ "", SQL_ISNULL, SQL_TYP_INTEGER, 3, 7 }, /* humidity */{ "", SQL_ISNULL, SQL_TYP_VARCHAR, 5, 13 }, /* wind */{ "", SQL_ISNULL, SQL_TYP_INTEGER, 3, 19 }, /* wind_velocity */{ "", SQL_ISNULL, SQL_TYP_FLOAT, 5, 24 }, /* barometer */{ "", SQL_ISNULL, SQL_TYP_VARCHAR, 25, 30 }, /* forecast *//* You may want to add more fields here */

/* Do not forget a null termination */{ ( char ) 0, 0, 0, 0, 0 }

} ;

/* Following is the weather data buffer for this example. You *//* may want to keep the weather data in a separate text file. *//* Uncomment the following fopen() statement. Note that you */

SQL ����� 221

Page 234: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

/* need to specify the full path name for this file. */char * weather_data[] = {

"alb.forecast"," 34 28% wnw 3 30.53 clear","atl.forecast"," 46 89% east 11 30.03 fog",..."wbc.forecast"," 38 96% ene 16 30.31 light rain",/* You may want to add more weather data here */

/* Do not forget a null termination */( char * ) 0

} ;

#ifdef __cplusplusextern "C"#endif/* This is a subroutine. *//* Find a full city name using a short name */int get_name( char * short_name, char * long_name ) {

int name_pos = 0 ;

while ( cities[name_pos].city_short != ( char * ) 0 ) {if (strcmp(short_name, cities[name_pos].city_short) == 0) {

strcpy( long_name, cities[name_pos].city_long ) ;/* A full city name found */return( 0 ) ;

}name_pos++ ;

}/* can not find such city in the city data */strcpy( long_name, "Unknown City" ) ;return( -1 ) ;

}

#ifdef __cplusplusextern "C"#endif/* This is a subroutine. *//* Clean all field data and field null indicator data */int clean_fields( int field_pos ) {

while (fields[field_pos].fld_length !=0 ) {memset( fields[field_pos].fld_field, '₩0', 31 ) ;fields[field_pos].fld_ind = SQL_ISNULL ;field_pos++ ;

}return( 0 ) ;

}

#ifdef __cplusplusextern "C"

222 IBM i: ������ SQL �����

Page 235: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

#endif/* This is a subroutine. *//* Fills all field data and field null indicator data ... *//* ... from text weather data */int get_value( char * value, int field_pos ) {

fld_desc * field ;char field_buf[31] ;double * double_ptr ;int * int_ptr, buf_pos ;

while ( fields[field_pos].fld_length != 0 ) {field = &fields[field_pos] ;memset( field_buf, '₩0', 31 ) ;memcpy( field_buf,

( value + field->fld_offset ),field->fld_length ) ;

buf_pos = field->fld_length ;while ( ( buf_pos > 0 ) &&

( field_buf[buf_pos] == ' ' ) )field_buf[buf_pos--] = '₩0' ;

buf_pos = 0 ;while ( ( buf_pos < field->fld_length ) &&

( field_buf[buf_pos] == ' ' ) )buf_pos++ ;

if ( strlen( ( char * ) ( field_buf + buf_pos ) ) > 0 ||strcmp( ( char * ) ( field_buf + buf_pos ), "n/a") != 0 ) {

field->fld_ind = SQL_NOTNULL ;

/* Text to SQL type conversion */switch( field->fld_type ) {case SQL_TYP_VARCHAR:

strcpy( field->fld_field,( char * ) ( field_buf + buf_pos ) ) ;

break ;case SQL_TYP_INTEGER:

int_ptr = ( int * ) field->fld_field ;*int_ptr = atoi( ( char * ) ( field_buf + buf_pos ) ) ;break ;

case SQL_TYP_FLOAT:double_ptr = ( double * ) field->fld_field ;*double_ptr = atof( ( char * ) ( field_buf + buf_pos ) ) ;break ;

/* You may want to add more text to SQL type conversion here */}

}field_pos++ ;

}return( 0 ) ;

}

#ifdef __cplusplusextern "C"#endifvoid SQL_API_FN weather( /* Return row fields */

SQLUDF_VARCHAR * city,

SQL ����� 223

Page 236: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

SQLUDF_INTEGER * temp_in_f,SQLUDF_INTEGER * humidity,SQLUDF_VARCHAR * wind,SQLUDF_INTEGER * wind_velocity,SQLUDF_DOUBLE * barometer,SQLUDF_VARCHAR * forecast,/* You may want to add more fields here */

/* Return row field null indicators */SQLUDF_NULLIND * city_ind,SQLUDF_NULLIND * temp_in_f_ind,SQLUDF_NULLIND * humidity_ind,SQLUDF_NULLIND * wind_ind,SQLUDF_NULLIND * wind_velocity_ind,SQLUDF_NULLIND * barometer_ind,SQLUDF_NULLIND * forecast_ind,/* You may want to add more field indicators here */

/* UDF always-present (trailing) input arguments */SQLUDF_TRAIL_ARGS_ALL

) {

scratch_area * save_area ;char line_buf[81] ;int line_buf_pos ;

/* SQLUDF_SCRAT is part of SQLUDF_TRAIL_ARGS_ALL *//* Preserve information from one function call to the next call */save_area = ( scratch_area * ) ( SQLUDF_SCRAT->data ) ;

/* SQLUDF_CALLT is part of SQLUDF_TRAIL_ARGS_ALL */switch( SQLUDF_CALLT ) {

/* First call UDF: Open table and fetch first row */case SQL_TF_OPEN:

/* If you use a weather data text file specify full path *//* save_area->file_ptr = fopen("tblsrv.dat","r"); */save_area->file_pos = 0 ;break ;

/* Normal call UDF: Fetch next row */ (See note 2)case SQL_TF_FETCH:

/* If you use a weather data text file *//* memset(line_buf, '₩0', 81); *//* if (fgets(line_buf, 80, save_area->file_ptr) == NULL) { */if ( weather_data[save_area->file_pos] == ( char * ) 0 ) {

/* SQLUDF_STATE is part of SQLUDF_TRAIL_ARGS_ALL */strcpy( SQLUDF_STATE, "02000" ) ;

break ;}memset( line_buf, '₩0', 81 ) ;strcpy( line_buf, weather_data[save_area->file_pos] ) ;line_buf[3] = '₩0' ;

/* Clean all field data and field null indicator data */clean_fields( 0 ) ;

224 IBM i: ������ SQL �����

Page 237: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

/* Fills city field null indicator data */fields[0].fld_ind = SQL_NOTNULL ;

/* Find a full city name using a short name *//* Fills city field data */if ( get_name( line_buf, fields[0].fld_field ) == 0 ) {

save_area->file_pos++ ;/* If you use a weather data text file *//* memset(line_buf, '₩0', 81); *//* if (fgets(line_buf, 80, save_area->file_ptr) == NULL) { */if ( weather_data[save_area->file_pos] == ( char * ) 0 ) {

/* SQLUDF_STATE is part of SQLUDF_TRAIL_ARGS_ALL */strcpy( SQLUDF_STATE, "02000" ) ;break ;

}memset( line_buf, '₩0', 81 ) ;strcpy( line_buf, weather_data[save_area->file_pos] ) ;line_buf_pos = strlen( line_buf ) ;while ( line_buf_pos > 0 ) {

if ( line_buf[line_buf_pos] >= ' ' )line_buf_pos = 0 ;

else {line_buf[line_buf_pos] = '₩0' ;line_buf_pos-- ;

}}

}

/* Fills field data and field null indicator data ... *//* ... for selected city from text weather data */get_value( line_buf, 1 ) ; /* Skips city field */

/* Builds return row fields */strcpy( city, fields[0].fld_field ) ;memcpy( (void *) temp_in_f,

fields[1].fld_field,sizeof( SQLUDF_INTEGER ) ) ;

memcpy( (void *) humidity,fields[2].fld_field,sizeof( SQLUDF_INTEGER ) ) ;

strcpy( wind, fields[3].fld_field ) ;memcpy( (void *) wind_velocity,

fields[4].fld_field,sizeof( SQLUDF_INTEGER ) ) ;

memcpy( (void *) barometer,fields[5].fld_field,sizeof( SQLUDF_DOUBLE ) ) ;

strcpy( forecast, fields[6].fld_field ) ;

/* Builds return row field null indicators */memcpy( (void *) city_ind,

&(fields[0].fld_ind),sizeof( SQLUDF_NULLIND ) ) ;

memcpy( (void *) temp_in_f_ind,&(fields[1].fld_ind),sizeof( SQLUDF_NULLIND ) ) ;

memcpy( (void *) humidity_ind,

SQL ����� 225

Page 238: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

&(fields[2].fld_ind),sizeof( SQLUDF_NULLIND ) ) ;

memcpy( (void *) wind_ind,&(fields[3].fld_ind),sizeof( SQLUDF_NULLIND ) ) ;

memcpy( (void *) wind_velocity_ind,&(fields[4].fld_ind),sizeof( SQLUDF_NULLIND ) ) ;

memcpy( (void *) barometer_ind,&(fields[5].fld_ind),sizeof( SQLUDF_NULLIND ) ) ;

memcpy( (void *) forecast_ind,&(fields[6].fld_ind),sizeof( SQLUDF_NULLIND ) ) ;

/* Next city weather data */save_area->file_pos++ ;

break ;

/* Special last call UDF for clean up (no real args!): Close table */ (See note 3)case SQL_TF_CLOSE:

/* If you use a weather data text file *//* fclose(save_area->file_ptr); *//* save_area->file_ptr = NULL; */save_area->file_pos = 0 ;break ;

}

}

� UDF �� �� �� ���� �� ��� ������.

1. � ���� �����. row ��� OPEN �� � ����, iptr � � nbr_rows ���

� mystery �� �� �����.

2. FETCH� �� � �� ���� iptr �� ��, iptr� �� ���� out_c1, out_c2 �

out_c3 �� � �� ���� ��� ���� �� �����.

3. CLOSE� OPEN�� ���� � ���� �� ���� ���.

� UDF� CREATE FUNCTION�� ��� ����.

CREATE FUNCTION tfweather_u()RETURNS TABLE (CITY VARCHAR(25),

TEMP_IN_F INTEGER,HUMIDITY INTEGER,WIND VARCHAR(5),WIND_VELOCITY INTEGER,BAROMETER FLOAT,FORECAST VARCHAR(25))

SPECIFIC tfweather_uDISALLOW PARALLELNOT FENCEDDETERMINISTICNO SQLNO EXTERNAL ACTION

226 IBM i: ������ SQL �����

Page 239: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

SCRATCHPADNO FINAL CALLLANGUAGE CPARAMETER STYLE DB2SQLEXTERNAL NAME 'LIB1/WEATHER(weather)';

� ��� � ��� , �� ��� ������.

v ��� ��� ���, 7�� �� � �����.

v SCRATCHPAD� ����� DB2� � ��� �� �� ��� ���� �����.

v NO FINAL CALL� �����.

v � ��� SQL �� �� �� ���� �� NOT DETERMINISTIC�� �����. �, mystery

�� �� ��� ���� ��� �� � �� �����.

v CARDINALITY 100(��� �)� DB2 Optimizer� ���� ���� �� � �� ������.

v DBINFO� ���� ���, �� ���� �� ���� ��� �� � ���� �� �� �

��� ����.

� ��� �� ��� �� � ���� �� ��� ������.

SELECT *FROM TABLE (tfweather_u())x

SQL��� UDF ��

��� ��� �� �� !�� �� � ��� �� �(UDF)� SQL� ��� ��� � ���

�. SELECT�� FROM��� ��� UDF� ��� � ����. ���� UDF ��� �� � �� �

���� ��� ����.

v � ����� UDF � ��� � �� ��� � ���. �� � ������ ���� UDF

� ��� � � �� �� �� ��� � � ���.

v SQL�� �� ��� �� ��� ��(ALWCPYDTA(*YES) �� (*OPTIMIZE))�� ��� ��

UDF, SQL UDFS, DLVALUE, DLURLPATH, DLURLPATHONLY, DLURLSCHEME,

DLURLCOMPLETE � DLURLSERVER � �� �� ORDER BY �� GROUP BY��� �

�� � ���.

���� �� �� � � �� ��� ��:

��� �� �� ��� � �� ��� � ���. � ��� � � ��� �� ��� ���

�� ��� ��� ��� ��� � ���.

��� ��� �� ���.

BLOOP(?)

��

BLOOP(NULL)

SQL ����� 227

Page 240: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

CAST ��� ���� � ��� ��� � �� ��� ��� ��� �� �� ��� ��� � �

���.

BLOOP(CAST(? AS INTEGER))

��

BLOOP(CAST(NULL AS INTEGER))

��� �� �� ��:

�� � ��� ���� , ��� � ��� �� ���� ��� � ����.

�� ��, �� ���� ����.

SELECT PABLO.BLOOP(COLUMN1) FROM T

PABLO ���� BLOOP �� ����. ��� SERGE� BLOOP �� ����� �� BLOOP

�� ��� ��� ��� ����. �� ��� PABLO� ���� �� BLOOP �� ���

� ������.

CREATE FUNCTION BLOOP (INTEGER) RETURNS ...CREATE FUNCTION BLOOP (DOUBLE) RETURNS ...

��� BLOOP� PABLO ��� ��� �����, � � � ��� COLUMN1 �� ���

��� �� �� BLOOP� ����. � , PABLO.BLOOP� � � �� �� ��� COLUMN1

� �� �� ��� ��� ���� �����. ��, COLUMN1� SMALLINT �� INTEGER

�� � �� � � BLOOP� ��� COLUMN1� DECIMAL �� DOUBLE�� � BLOOP

� ����.

� ��� �� � �� �� ��� ����.

1. � ��� ����. � � BLOOP� INTEGER ���� ���� ����� ��� SMALLINT

�� ��� � ����. � � � ��� �� ��� �� �� ��� ���� DB2� �

��� � ��� �����.

2. � �� ��� SMALLINT �� INTEGER �� ���� � BLOOP� ����� ��� �

� ����� �� ��� ��� ���.

SELECT PABLO.BLOOP(DOUBLE(COLUMN1)) FROM T

3. DECIMAL �� DOUBLE �� ���� � � BLOOP� ����� �� �� �� ���

�����.

SELECT PABLO.BLOOP(INTEGER(COLUMN1)) FROM TSELECT PABLO.BLOOP(FLOOR(COLUMN1)) FROM T

228 IBM i: ������ SQL �����

Page 241: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� ��

����� �� � �� ���

�� � �� �� ���� �� � ��� ��� � ����. ��� �� ��� � DB2�

�� � �� ���� ��� �����.

259 ���� �UDT ���

CREATE DISTINCT TYPE�� ���� ��� �� ��(UDT)� �����.

���� � �� �� ��:

�� � �� �� ���� �� � ��� ��� � ����. ��� �� ��� � DB2�

�� � �� ���� ��� �����.

DROP FUNCTION � COMMENT ON FUNCTION�� , �� ���� ID(���� *SQL ���

�� ���� �� ) �� *SYS ��� *LIBL� ���� ��� �����. ��� � �

� �� � �� ���� ��� �� �(�� )� �� �� ����. �� ��, ����

PABLO� � SQL�� ��� �� ������(��� COLUMN1� INTEGER ��� ���).

SELECT BLOOP(COLUMN1) FROM T

�� � �� �� ���� �� BLOOP �� ����� � ��� ���� �����.

�� ��� � �� ���� , COLUMN1� INTEGER�� ��� QSYS �� QSYS2� ��

�� BLOOP� �� � � BLOOP� ����.

"QSYS","QSYS2","PABLO"

�� �� ��� ��� ��� � �� ����� � �� �� �� "�� ������.

� � ��� SQLPATH ���� ���� ���� �� � � ��� �� �� � ��

�� ��� ������.

"KATHY","QSYS","QSYS2","PABLO"

KATHY ���� BLOOP �� �� , � �� � �� �� � ��� � ��� ����

�� � �����. DB2� ���� �� � � � �� ���� ��� ����� ����

����. �������� ���� �� ��� ��� ��� ��� ���� �� ���� ����

�.

�� ��

228 ���� ��� � �� ���

�� � ��� ���� , ��� � ��� �� ���� ��� � ����.

�� �� ��:

�� � ��� ���� �� �� � �� , � � � ��� ��� �, �� �� �

� �� ���, �� � ���� ������ �� �� � ���� �� � ��� ��

�(� �� �� ��� �� � � �)� �����.

SQL ����� 229

Page 242: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

� ��� �� �� ��� �� ���� � �� ���� �� ��� � � �

��� �� �����. � ��� �� �� ��� �� ���� �� � �� �� �

���. �� �� �� �� �� ����� �� ���� �� ��� �� ��

� �� �� ��� �����.

���� ��� � ��� �� � ��� ����(� �� �� ��� �����). ��

�� UDF� �� � �� �� �� ����. �� �� �� ���� �� � �� �

���� ����.

�� ��� ���� ��� ����.

CREATE FUNCTION BLOOP (INTEGER) RETURNS INTEGER ...CREATE FUNCTION BLOOP (DOUBLE) RETURNS INTEGER ...

�� �� ���� �����.

SELECT BLOOP( BLOOP(COLUMN1)) FROM T

COLUMN1� DECIMAL �� DOUBLE ��, �� BLOOP ��� �� �� � BLOOP�

�����. � BLOOP� INTEGER� ���� ��� �� BLOOP� � � BLOOP� �����.

�� COLUMN1� SMALLINT �� INTEGER ��, �� BLOOP ��� �� �� � � BLOOP

� �����. � BLOOP� INTEGER� ���� ��� �� BLOOP� � � BLOOP� �����.

� , � �� � ��� �� ���.

� ��� �� � �� �� �� ��� ����.

v SQL ��� ��� �� ���� �� ��� � ����. �� ��, �� ��� BOAT �

� �� "+" ���� ��� ��� ��� � �� ������. �� UDF� ��� � ����.

CREATE FUNCTION "+" (BOAT, BOAT) RETURNS ...

�� ��� �� SQL�� ��� � ����.

SELECT "+"(BOAT_COL1, BOAT_COL2)FROM BIG_BOATSWHERE BOAT_OWNER = 'Nelson Mattos'

�� ��� �� ��� ���(�: >, =, LIKE, IN �)� ���� �� ���.

v � � � ��� �� � �� � �� ���� ��� ����. �� BLOOP �(��

��� �� ���)� ������.

CREATE FUNCTION BLOOP (INTEGER) RETURNS INTEGER ...CREATE FUNCTION BLOOP (DOUBLE) RETURNS CHAR(10)...

�� �� SELECT�� ���� ������.

SELECT 'ABCDEFG' CONCAT BLOOP(SMALLINT_COL) FROM T

SMALLINT �� ���� �� �� �� �� � � BLOOP��� CONCAT� �

����� INTEGER ��� ���� �����. CONCAT� ���� �� �� ���

230 IBM i: ������ SQL �����

Page 243: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

VARCHAR� ����� ���� �� ��� ���� �� � ����. � � BLOOP� �

�, �� BLOOP� ��� ��� ��� �����.

v ��� LOB ��(BLOB, CLOB �� DBCLOB)� �� ��� �� ��� ���� UDF� ���

� ����. ���� �� �� ���� �� ����� �� LOB �� ������(� ���

LOB locator ��� �� �� �). �� ��, C �� ������ �� �� �� ���

���.

EXEC SQL BEGIN DECLARE SECTION;SQL TYPE IS CLOB(150K) clob150K ; /* LOB host var */SQL TYPE IS CLOB_LOCATOR clob_locator1; /* LOB locator host var */char string[40]; /* string host var */

EXEC SQL END DECLARE SECTION;

:clob150K �� :clob_locator1 ��� ��� �� ���� CLOB(500K)� �� �� ��

�����. �� � 205 ���� ��: ��� ���� �� FINDSTRING� ���� ��

������ �����.

... SELECT FINDSTRING (:clob150K, :string) FROM ...

... SELECT FINDSTRING (:clob_locator1, :string) FROM ...

v AS LOCATOR ���� ���� LOB �� ��� �� �� UDF ��� �� ��� ���

� ����. � , �� LOB �� �� �� ����� ����. ��, LOB LOCATOR� UDF�

�����.

LOB� ��� �� �� ��� �� UDF ������ � ��� ��� � ����. � ���

�� UDF� �����. �� �� �� �� ��� ��� LOB � � ��� ������.

LOCATOR �� ��� �� ��� ��� ���� ���. ��� �� �� ���� �� �

��� �� UDF ��� � �� ���� AS LOCATOR� ���� �� ��� �����.

v �� ��� ��� �� ��� ���� UDF� ��� � ����. DB2� �� ��� �� ���

�� ���� UDF� �� �����.

���� ��� ���� � �� ���� �� ���� �� UDF� �� ���� ��

�� �� �� ��� ���� ���� ���. �� ��� ��� �� ��� ���. DB2

� ��� ��� �� ��� ���. ��� �� ��� ��� � ����. ��� BOAT ��

� ����� �� ��� BLOB� ���� �� BOAT �� ��� �����. �� C ��

����� ����� :ship ��� ��� BOAT_COST �� ��� BLOB �� �����.

EXEC SQL BEGIN DECLARE SECTION;SQL TYPE IS BLOB(150K) ship;

EXEC SQL END DECLARE SECTION;

�� ���� � � :ship ��� ��� BOAT ���� ���� ��� � � BOAT_COST

�� ��� �����.

... SELECT BOAT_COST (BOAT(:ship)) FROM ...

... SELECT BOAT_COST (CAST(:ship AS BOAT)) FROM ...

SQL ����� 231

Page 244: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

������� BOAT �� ��� � � ��� �� ���� BOAT UDF� � � ���, �

�� ���� ���. ��� �� �� � � ��� �� � ����.

��

���� �� ����� ��� �� � ��� ��� � ���� ���� �� ����.

� ��� SQL INSERT, UPDATE �� DELETE����, ����� ����� ��, �� �� �

� � �� ���� � � ����. ���� ��� �� �, �� ��� ��� � � �� �

��� �� �� � �����.

���� SQL �� �� ���� ��� � ����.

�� ���� CRTPFTRG CL ��� �����. ��� �� �� �� ����� ����

�� � ���� ��� � ����. �� ���� insert, update, delete �� read ���� � � �

���.

SQL ���� CREATE TRIGGER�� �����. ��� ����� ���� SQL� ����

�����. SQL ���� ��, �� �� �� ���� � � ����.

���� ��� �� �� ����, ��� ��� ����� �, �� ����� �� �� ���� �

� ��� �� �� � ��� ��� ��� ��� ����� �����. �� ���� �� SQL

��� � �� ���� ��� � ����. ��� SQL ���� ��� � ����. � ��� ��

�� � 200�� ���� ��� � ����.

���� �� ��� � ��� � �� � �� �� ��� ���� ��� � ����. �� ��

�� � �� ��� ���� �� ���� ��� � ����. ��� ���� �� ��� ���� �

�� � ����.

v �� ��� ��

v �� ��� ��

v �� ��� ��

v �� ��� ��

v �� ��� ��

v �� ��� ��

v �� �� ���(�� ����)

�� �� ��� � ��� ��, �� �� �� �� �� �� �� ��� instead of ���� ��

� � ����. �� ��� ��� � ����.

v �� �� ���

v �� �� ���

v �� �� ���

232 IBM i: ������ SQL �����

Page 245: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� ���

�������� �� ��� ���

SQL ��

SQL CREATE TRIGGER�� ��, �� �� �� ��� ��� ��� ��� � � ��� ���

��, ��� � ��� � �� ��� ������ �� ���� �����.

SQL ���� �� ���� SQL ��, �� �� �� ��� ��� ��� �����. SQL ����

�� ���� �� ��� �� �� ���� ���� ��� � �� ��� ��� � ����.

�� ����� �� SQL ���� ������� �� ��� � ���. ��, ��, �� �� ��

�� �� � ������ �� ���� SQL ���� �����. SQL ���� �� ��� �����

� �� ���� ���� ���� �� SQL ��� �� �� ��� � ������ �� ����

�����.

CREATE TRIGGER SQL�� ���� SQL ���� ��� � ����. CREATE TRIGGER��� �

��� �� ����(�: ��� � �)� ��� ���. ��� �� , ���� ���� ���

�. SQL ���� � �� �� ���� SQL� �� ����(*PGM) ����� �����. ���

�� ��� � ���� ��� ���� �����. �� ���� SYSTRIGGERS, SYSTRIGDEP,

SYSTRIGCOL � SYSTRIGUPD SQL ����� �����.

�� ��

241 ���� �SQL � ���

CREATE PROCEDURE, CREATE FUNCTION �� CREATE TRIGGER��� SET OPTION

DBGVIEW = *SOURCE� ���� SQL� ���� � ������ ��� ���� � ����.

�� ��

SQL ���

CREATE TRIGGER

BEFORE SQL ��:

BEFORE ���� ���� �� � �� �� �� � � ����� �� �� ���� �

� ��� � ��� � ����.

�� ����, ���� �� ���� �� ���� �� �� � ��� ��� � �����.

CREATE TABLE TransactionTable (DateOfTransaction DATE, FiscalQuarter SMALLINT)

CREATE TRIGGER TransactionBeforeTrigger BEFORE INSERT ON TransactionTableREFERENCING NEW AS new_rowFOR EACH ROW MODE DB2ROWBEGINDECLARE newmonth SMALLINT;

SET newmonth = MONTH(new_row.DateOfTransaction);IF newmonth < 4 THENSET new_row.FiscalQuarter=3;

SQL ����� 233

Page 246: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

ELSEIF newmonth < 7 THENSET new_row.FiscalQuarter=4;

ELSEIF newmonth < 10 THENSET new_row.FiscalQuarter=1;

ELSESET new_row.FiscalQuarter=2;

END IF;END

��� SQL insert�� , �� ��� 2000� 11� 14�� ″FiscalQuarter″ � 2� ����.

INSERT INTO TransactionTable(DateOfTransaction)VALUES(CURRENT DATE)

SQL ���� ��� �� ��(UDT) � �� ����� �� � �� ����� �� ��� � ��

��. �� ����, SQL ���� ���� ��� ��� ���� ��(� , ���� �� �

��� ��� � ��� ��) �� ����� �����.

CREATE DISTINCT TYPE enginesize AS DECIMAL(5,2) WITH COMPARISONS

CREATE DISTINCT TYPE engineclass AS VARCHAR(25) WITH COMPARISONS

CREATE PROCEDURE SetEngineClass(IN SizeInLiters enginesize,OUT CLASS engineclass)

LANGUAGE SQL CONTAINS SQLBEGINIF SizeInLiters<2.0 THENSET CLASS = 'Mouse';

ELSEIF SizeInLiters<3.1 THENSET CLASS ='Economy Class';

ELSEIF SizeInLiters<4.0 THENSET CLASS ='Most Common Class';

ELSEIF SizeInLiters<4.6 THENSET CLASS = 'Getting Expensive';

ELSESET CLASS ='Stop Often for Fillups';

END IF;END

CREATE TABLE EngineRatings (VariousSizes enginesize, ClassRating engineclass)

CREATE TRIGGER SetEngineClassTrigger BEFORE INSERT ON EngineRatingsREFERENCING NEW AS new_rowFOR EACH ROW MODE DB2ROWCALL SetEngineClass(new_row.VariousSizes, new_row.ClassRating)

��� SQL insert�� , ″VariousSizes″ � �� 3.0�� ″ClassRating″ � ″Economy Class″�

����.

INSERT INTO EngineRatings(VariousSizes) VALUES(3.0)

SQL��� SQL ���� ���� �� �� ���, ��� �� �, ���� � ��� �� ���

��� ���. �� ����, �� ���, �� ���� � ��� �� ��� ��� �� ��� ��

���.

234 IBM i: ������ SQL �����

Page 247: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

AFTER SQL ��:

after ���� ��� ��, �� �� �� ���� ���� � �� �����.

WHEN ��� SQL ����� ���� ��� ��� � ����. ��� true� ���� , SQL �

�� � �� SQL�� �����. ��� false� ���� , SQL ��� � �� SQL�� �

��� � ��� ������ ����� �����.

�� ����� ��� � �� ���� ���� ���� � ����� ��� ��� ���� ��

��� �����.

CREATE TABLE TodaysRecords(TodaysMaxBarometricPressure FLOAT,TodaysMinBarometricPressure FLOAT)

CREATE TABLE OurCitysRecords(RecordMaxBarometricPressure FLOAT,RecordMinBarometricPressure FLOAT)

CREATE TRIGGER UpdateMaxPressureTriggerAFTER UPDATE OF TodaysMaxBarometricPressure ON TodaysRecordsREFERENCING NEW AS new_rowFOR EACH ROW MODE DB2ROWWHEN (new_row.TodaysMaxBarometricPressure>

(SELECT MAX(RecordMaxBarometricPressure) FROMOurCitysRecords))

UPDATE OurCitysRecordsSET RecordMaxBarometricPressure =

new_row.TodaysMaxBarometricPressure

CREATE TRIGGER UpdateMinPressureTriggerAFTER UPDATE OF TodaysMinBarometricPressureON TodaysRecordsREFERENCING NEW AS new_rowFOR EACH ROW MODE DB2ROWWHEN(new_row.TodaysMinBarometricPressure<

(SELECT MIN(RecordMinBarometricPressure) FROMOurCitysRecords))

UPDATE OurCitysRecordsSET RecordMinBarometricPressure =

new_row.TodaysMinBarometricPressure

�� �� �� ���� �� �����.

INSERT INTO TodaysRecords VALUES(0.0,0.0)INSERT INTO OurCitysRecords VALUES(0.0,0.0)

��� SQL update�� OurCitysRecords� RecordMaxBarometricPressure� UpdateMaxPressureTrigger

� �� �����.

UPDATE TodaysRecords SET TodaysMaxBarometricPressure = 29.95

�� � TodaysMaxBarometricPressure� �� 29.91�� RecordMaxBarometricPressure� ���� �

���.

UPDATE TodaysRecords SET TodaysMaxBarometricPressure = 29.91

SQL ����� 235

Page 248: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

SQL��� � ���� ��� �� � ���� ��� �����. �� ����� �� AFTER

UPDATE ��� UpdateMaxPressureTrigger � UpdateMinPressureTrigger� ����. � ���� �

�� TodaysRecords� �� � ���� �� ������.

AFTER ���� ���� ��� � ����. �� ����, UPDATE ��� � ���� ��

��. ��� �� � �� ��� ��� ���. ������ �� ���� � ��� ��� ���

���� ��� �����. � ��� ��� ���� �� �� �� �� ��� ����� ��

� ��� ���� �� �� � ����. ��� ��� � �� ����� ��� ���� ���

��� ��� �� �� ��� ���.

INSTEAD OF SQL ��:

INSTEAD OF ���� SQL UPDATE, DELETE �� INSERT� “��” ���� SQL ������.

SQL BEFORE � AFTER ����� ��, INSTEAD OF ���� ���� ��� �� ���� ��

� � ����.

INSTEAD OF ���� ���� ��� �� ���, �� ��� �� �� ���� �� ��, ��

�� ��� � ����. �� ��, �� �� � �� �� �� �� � � ��� CREATE VIEW�

������.

SQL INSTEAD OF ���� �� �� �, ��� �� �� ��� �� ��, �� � �� ��� �

��� ��� � ����. INSTEAD OF ���� �� ������ �� ���� �� ��� ���

��.

�� ���� ���� �� � �� ��� � ����. INSTEAD OF ���� ���� �� � �

��� ����� ��� � ����.

INSTEAD OF �� ��

�� � V1� ��� �� ��, �� �� � �� �����.

CREATE TABLE T1 (C1 VARCHAR(10), C2 INT)CREATE VIEW V1(X1) AS SELECT C1 FROM T1 WHERE C2 > 10

�� insert�� ��� T1� C1�� ‘A’ �� ����. C2�� ��� ����. ���� �,

� �� � V1� �� � � C2 > 10� ��� ����.

INSERT INTO V1 VALUES('A')

INSTEAD OF ��� IOT1� ���� ��� �� �� �� �� ��� � ����.

CREATE TRIGGER IOT1 INSTEAD OF INSERT ON V1REFERENCING NEW AS NEW_ROWFOR EACH ROW MODE DB2SQLINSERT INTO T1 VALUES(NEW_ROW.X1, 15)

� �� ����� �

�� �� � V3� ��� �� ���, �� ��� �� �� ��� �����.

236 IBM i: ������ SQL �����

Page 249: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

CREATE TABLE A (A1 VARCHAR(10), A2 INT)CREATE VIEW V1(X1) AS SELECT A1 FROM A

CREATE TABLE B (B1 VARCHAR(10), B2 INT)CREATE VIEW V2(Y1) AS SELECT B1 FROM B

CREATE VIEW V3(Z1, Z2) AS SELECT V1.X1, V2.Y1 FROM V1, V2 WHERE V1.X1 = 'A' AND V2.Y1 > 'B'

INSTEAD OF ��� IOT2� ���� � V3� �� ���� ���.

CREATE TRIGGER IOT2 INSTEAD OF DELETE ON V3REFERENCING OLD AS OLD_ROWFOR EACH ROW MODE DB2SQLBEGINDELETE FROM A WHERE A1 = OLD_ROW.Z1;DELETE FROM B WHERE B1 = OLD_ROW.Z2;

END

� �����, �� DELETE�� �����. � ���� ‘A’� A1 �� �� �� �� �� ���

A�� ��� , ‘X’� B1 �� �� �� �� �� ��� B�� �����.

DELETE FROM V3 WHERE Z1 = 'A' AND Z2 = 'X'

� ��� � �� INSTEAD OF ��

V1� �� �� � V2� �� ��� � �� ���, �� ��� �� �� ������.

CREATE TABLE T1 (C1 VARCHAR(10), C2 INT)CREATE TABLE T2 (D1 VARCHAR(10), D2 INT)CREATE VIEW V1(X1, X2) AS SELECT C1, C2 FROM T1UNION SELECT D1, D2 FROM T2

CREATE VIEW V2(Y1, Y2) AS SELECT X1, X2 FROM V1

NSTEAD OF ��� IOT1� V1� ���� V2� �� ���� ����.

CREATE TRIGGER IOT1 INSTEAD OF UPDATE ON V1REFERENCING OLD AS OLD_ROW NEW AS NEW_ROWFOR EACH ROW MODE DB2SQLBEGINUPDATE T1 SET C1 = NEW_ROW.X1, C2 = NEW_ROW.X2 WHERE

C1 = OLD_ROW.X1 AND C2 = OLD_ROW.X2;UPDATE T2 SET D1 = NEW_ROW.X1, D2 = NEW_ROW.D2 WHERED1 = OLD_ROW.X1 AND D2 = OLD_ROW.X2;

END

� V2� �� ��� ��� �����. � V2� �� ��� �� ��� ��� ���� �����.

BEFORE � AFTER �� � �� INSTEAD OF �� ��

INSTEAD OF ���� �� ���� � ���� �� BEFORE � AFTER ���� ���� ��

��.

CREATE TABLE T1 (C1 VARCHAR(10), C2 DATE)CREATE TABLE T2 (D1 VARCHAR(10))

SQL ����� 237

Page 250: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

CREATE TRIGGER AFTER1 AFTER DELETE ON T1REFERENCING OLD AS OLD_ROWFOR EACH ROW MODE DB2SQLDELETE FROM T2 WHERE D1 = OLD_ROW.C1

CREATE VIEW V1(X1, X2) AS SELECT SUBSTR(T1.C1, 1, 1), DAYOFWEEK_ISO(T1.C2) FROM T1

CREATE TRIGGER IOT1 INSTEAD OF DELETE ON V1REFERENCING OLD AS OLD_ROWFOR EACH ROW MODE DB2SQLDELETE FROM T1 WHERE C1 LIKE (OLD_ROW.X1 CONCAT '%')

� V1� �� �� �� �� AFTER DELETE ��� AFTER1� ������. ��� IOT1� ���

T1� �� ��� ���� �����. ��� T1� �� ��� AFTER1 ���� ������ ���.

� � � INSTEAD OF ��

INSTEAD OF ���� �� ��� � � ��� INSTEAD OF ���� �� �� ���� , �

��� �� �� ��� �� �� ���� ��� ���� ��� �� �� UPDATE, DELETE

� INSERT � � �� INSTEAD OF ���� ���� ���.

SQL ��� ��:

SQL ���� ��� ���� ��� ��� � �� SQL�� ��� � �� ��� �� �

�� ��� � �� ��� SQL ���� �����.

�� ���� �� ��� ���� ����. �� ��� ���� �� ��� SQL ��� ��

�� �� �����.

CREATE TABLE ExcessInventory(Description VARCHAR(50), ItemWeight SMALLINT)

CREATE TABLE YearToDateTotals(TotalWeight SMALLINT)

CREATE TABLE FailureLog(Item VARCHAR(50), ErrorMessage VARCHAR(50), ErrorCode INT)

CREATE TRIGGER InventoryDeleteTriggerAFTER DELETE ON ExcessInventoryREFERENCING OLD AS old_rowFOR EACH ROW MODE DB2ROWBEGINDECLARE sqlcode INT;DECLARE invalid_number condition FOR '22003';DECLARE exit handler FOR invalid_numberINSERT INTO FailureLog VALUES(old_row.Description,

'Overflow occurred in YearToDateTotals', sqlcode);DECLARE exit handler FOR sqlexceptionINSERT INTO FailureLog VALUES(old_row.Description,

'SQL Error occurred in InventoryDeleteTrigger', sqlcode);UPDATE YearToDateTotals SET TotalWeight=TotalWeight +

old_row.itemWeight;END

��, ���� �� �� �����.

238 IBM i: ������ SQL �����

Page 251: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

INSERT INTO ExcessInventory VALUES('Desks',32500)INSERT INTO ExcessInventory VALUES('Chairs',500)INSERT INTO YearToDateTotals VALUES(0)

���� � � SQL delete�� ��� � �� ″Desks″� ItemWeight� YearToDateTotals ���� �

� TotalWeight� ��� �����. � SQL delete�� ��� �, �� ″Chairs″� ItemWeight�

TotalWeight� ��� ��� � ��� ����. � 32767 �� �� ���� �����. ��

� ��� invalid_number �� ��� ��� �� FailureLog ���� �����. �� ��, ��

�� YearToDateTotals ���� ���� sqlexception �� ��� �����. � ����� ����

� �� ��� � ��� ��� ���� ��� �����.

DELETE FROM ExcessInventory WHERE Description='Desks'DELETE FROM ExcessInventory WHERE Description='Chairs'

SQL �� � �:

SQL ���� SQL ��, �� �� �� ��� �� ���� �� �� ���� � � ����. ��

��, ���� MIN �� MAX� �� �� �� ���� �� �� � ��� ���. �� �

�� OLD_TABLE � NEW_TABLE �� ���� ��� � ����.

�� ���� ���� StudentProfiles ���� ���� �� �� MAX �� �� ����.

CREATE TABLE StudentProfiles(StudentsName VARCHAR(125),StudentsYearInSchool SMALLINT, StudentsGPA DECIMAL(5,2))

CREATE TABLE CollegeBoundStudentsProfile(YearInSchoolMin SMALLINT, YearInSchoolMax SMALLINT, StudentGPAMinDECIMAL(5,2), StudentGPAMax DECIMAL(5,2))

CREATE TRIGGER UpdateCollegeBoundStudentsProfileTriggerAFTER UPDATE ON StudentProfilesREFERENCING NEW_TABLE AS ntableFOR EACH STATEMENT MODE DB2SQLBEGINDECLARE maxStudentYearInSchool SMALLINT;SET maxStudentYearInSchool =

(SELECT MAX(StudentsYearInSchool) FROM ntable);IF maxStudentYearInSchool >

(SELECT MAX (YearInSchoolMax) FROMCollegeBoundStudentsProfile) THEN

UPDATE CollegeBoundStudentsProfile SET YearInSchoolMax =maxStudentYearInSchool;

END IF;END

�� ���� ���� FOR EACH STATEMENT ���� ���� ��� ���� update�� ���

��� � � �����. �� ���� ���� ���� ���� �� ���� � � �� ���

��� �� ���� ��� �� �� ���� ��� ���.

�� ��

�� ���� , *PGM ����� ���� ���� � ��� ��� �� �� ����

� ��� � ����.

SQL ����� 239

Page 252: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

��� ������ SQL� ��� � ����. �� ���� �����, ��� ����� ��� �

� � ��� ��(ADDPFTRG) CL ��� ���� ���� ����� System i Navigator� ���

� ��� � ����. ���� ���� ����� ��� ���� ���.

v ��� ��.

v �� �� ��.

v ���� ��� ��� ���� ���� ��.

�� ���

�������� �� ��� ���

SQL ������� �� ��

SQL ����� � ��� ���� ��� �����. �� ������ �� ���� ���,

�� �� �� ���� ��� �� ��� ���� ���� ��� �����.

SQL �� ������, �� � ����� ���� �� ��� � ����. ��, �� �

���� � ���� ��� � � ��� � ���� �� �� � �� ���� ��� �� �

� �� �����. �� �� �� �� � ��� ��� �����.

1

� ����� �� ���� sub � main� �����. ���� main� � ���� ���� 6

�� ��� �� �����. �� �� �� ���� sum�� �����. � ����� �� �

� �� �� ��� �� ��� ��� main�� �����. ���� sum� �� �� �� ���

� CARDINALITY �� � �� � �� ��� �����.

CREATE TYPE intArray AS INTEGER ARRAY[100]

CREATE PROCEDURE sum(IN inList intArray, OUT total INTEGER)BEGINDECLARE i, n INTEGER;

SET n = CARDINALITY(inList);

SET i = 1;SET total = 0;

WHILE (i <= n) DOSET total = total + inList[i];SET i = i + 1;

END WHILE;

END

CREATE PROCEDURE main(OUT arrayTotal INTEGER)BEGINDECLARE numList intArray;

SET numList = ARRAY[1,2,3,4,5,6];

240 IBM i: ������ SQL �����

|

|

|

|

|

|

|

|

|

|

|

|||||||||||||||||||||||

Page 253: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

CALL sum(numList,arrayTotal);

END

2

� ����� �� � ��� ��(intArray � stringArray)�, �� (id � name)� �� persons

���� �����. ���� processPersons� �� �� � � ���� ��� �� ‘a’�

�� � �� ID ���� �� �� �����. ���� ��� ID � �� �� �

(ids � names)� ����. � �� UNNEST �� �� �����. � �� �� � 2�

���� �� , � ��� persons ���� �����. �����, ����� ��� SET��

ARRAY_AGG �� �� ���� �� ���� �� �����.

CREATE TYPE intArray AS INTEGER ARRAY[100]

CREATE TYPE stringArray AS VARCHAR(10) ARRAY[100]

CREATE TABLE persons (id INTEGER, name VARCHAR(10))

INSERT INTO persons VALUES(2, 'Tom'),(4, 'Gina'),(1, 'Kathy'),(3, 'John')

CREATE PROCEDURE processPersons(OUT witha stringArray)BEGINDECLARE ids intArray;DECLARE names stringArray;

SET ids = ARRAY[5,6,7];SET names = ARRAY['Denise', 'Randy', 'Sue'];

INSERT INTO persons(id, name)(SELECT t.i, t.n FROM UNNEST(ids, names) AS t(i, n));

SET witha = (SELECT ARRAY_AGG(name ORDER BY id)FROM personsWHERE name LIKE '%a%');

END

SQL �� ��

CREATE PROCEDURE, CREATE FUNCTION �� CREATE TRIGGER��� SET OPTION

DBGVIEW = *SOURCE� ���� SQL� ���� � ������ ��� ���� � ����.

RUNSQLSTM ���� ���� DBGVIEW(*SOURCE)� ��� �� ����. �� RUNSQLSTM

� �� �� ����.

SQL ����� 241

||||

|

|

|

|

|

|

|

||||||||||||||||||||||||||

Page 254: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� �� ���� �� � ��� � ����� �� � QSQDSRC� �����. ����

� ��� � �� QTEMP�� QSQDSRC� �����. �� �� ���� �� �� ������

���� ����. � �� ����� �� � �� ��� ��� ��� �����. ��� � �

� �� � ���� ���� �����.

�� �� � ���� ��� �� ����. ���� ����� ��� ��� � ���� ���.

��� �� ������ �����. ���� ������� ���� �����. ���� �� ��

� �� ����� �����. ��� ����� FOR�� ����� ����� ����. � ��

���� ��� ���� � �� ����. �� ��� �� ��� � � ���. �� ���

���� ��� ��� ����� ���. �� ��� �� ��� �� ����. �� �� ��

�� ��� �� ���. ��� ���� � ��� ���� �� ��� � �� �� ���

� ����� ����.

SQL �� C� ����, C��� SQL �� ����� ��� �� ����� ����. SQL �

�� �� �� �� C�� ��� � ���. �� �� �� �� ����, � ��

������ ����� ������. �� ��� ��� ����� �� � ��� *� ������.

���� ���� �� � ��� �� �� ����� ����, ��� SQL ��� ��� ��

�� ��� ���. ��� ���� ����� ��� ���� � �� �� �� ��

��.

��� ����� ��� ����� ���� � � ���� � � �����. �� �� FOR

��� ���� �� ��� ��� � ����.

SQL ������� ���� SQL � ��� ���� ��� �� ��� ����. � ����

� C ������ �� ���� � �����. C ��� ��, SQL �� ��� 1���. �

� 5� ��� ���� EVAL ���� � � 5� ������(EVAL TSTARR.ABC[5]). �

� � ���� � � ���� ���� �� ���� ����. �� �� �� ��� �� � �

� ��� ����. ��� � �� ���, � � �� � EVAL ��� ���� ���.

�� ��, ��� �� 25�� ��� ��� EVAL TSTARR.ABC[1..25]� �����. EVAL ���

� ��� ��� ���� ��� ����. NULL � ��� �� ��� �� ��� NULL

� �����. �� � ��� ���� ��� � ��� �� ��� ��� � ���. � ��

� ��� ��� �� �� ����� ����.

�� ��� ���� SQL � ��� ���� �� � ��. �� ���� ��� � ���(EVAL

TSTARR.ABC[5] = 3). ‘&’ �� ���� ���� ��� � ���(EVAL &TSTARR.ABC[3]). �

� WATCH ��� ��� � ��� � ���. � ��� ��� �� ���� ��� EVAL

%LOCALVARS ��� �� ��� ����.

���� � ��� �� ��

�� ���� �� ��� �� �(UDF) �� � SQL ���� �� �� �� �� �� �� �

� ��� �� � ��. �� ������ �� �� �� �� ��� ���� � ����.

242 IBM i: ������ SQL �����

|

|

|

|

|

|

|

|

|

|

|

|

|

Page 255: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

� ���� � �� � � ���� ��� ����. �� ��, C �� ��� ���

��� ���� ��� SQL ���� �� �� ��� �� ��� �� ��� �� �� �� �� �

� � ��� ������ �� ��� �� � ����. �� ��� �� �� ����, � �

���� ��� �� ��� � ����.

IBM i 6.1 ������ SQL � ��� � �� ��� �� �������. IBM i 6.1 ���

�� ��� �� SQL ����� �� ���, ����� �� �� � ��� ����� �

� (drop)� ���� �� �����.

SQL ����� ��� ����� � �� ��� ��� PROGRAM TYPE SUB�� ���� ���

�. ���� PROGRAM TYPE MAIN� CREATE PROCEDURE(SQL)��� ����, ILE C ��

��(*PGM)� ����� �� ����. PROGRAM TYPE SUB� � ILE C �� ����

(*SRVPGM)� ����� �� ����. PROGRAM TYPE SUB ��� ��� �� �����

��� �� ���� ����� �� ����. ILE ����� �� � ����� �, ILE ��

����� �� �� � � ���� �� ��� PROGRAM TYPE SUB ����� ����. ILE

��� �� ���� �, ���, ��� �, �� �, ���� ��� �� �����.

PROGRAM TYPE SUB �� � � � � �� �� � EXTERNAL_NAME �

QSYS2.SYSROUTINES ���� ��� �� ������ � ���� �� ��� �� ���

�� ����.

���� � �� � ��

� �� ��� � �� ����� �� ��� ��� � ��� ���.

�� �� ��� �� ��� �� ������ � � ����� �� �� �����.

v NOT FENCED ��� ����� UDF� ���� �� ���� �����.

v �� ��� �� ��� ���� ���� � UDF� DETERMINISTIC ��� �����. �

� Optimizer� � �� ��� ���� �� ����� �� ���� ��� ��� � ��

� ���� � � ����.

v � �� ���� ��� ���� �� UDF� �� NO EXTERNAL ACTION ��� ����

�. �� ��� ��� ���� ��� ���� �� �� �� �� ���� ����.

SQL � �� ���� �� ��� ��� C ����� ��� ��� ��� ��� � � ���

�. � � �� �� � �� C �� ��� ����� �� ���� ��� SQL�� ����

�� � ����. �� �� ��� �� � �� C �� � � SQL�� ��� � ��� ���.

v ��� ��� ��� NOT NULL� �����. �� � �� �� �� ���

��� ��� ���. �� ��� NOT NULL� �� ��� ����. NOT NULL� ���

��� �� ���� ���. ��� ��� �� ���� ��� �� ��� � � ����. �

� ��� �� ���� �� � ��� �� ��� ���� �� �� �� ���� �

� � ����. ��� �� �� �� �� ����. ��� � �� ���� �� �� �����

� ��� ���� �� �����.

SQL ����� 243

|

|

|

|

|

|

|

|

|

|

|

|

|

Page 256: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

v ��� �� � �� ��� ��� ���� ����. �� �� ��, �� 0, 1, 2 �� 3 �

�� ���� ��� ����. � �� �� �� � �� ��� ���� , �� � �� ���

��� ��� �� ��� ����.

v 0 ��� �� �� ��� �����(��, ��� ���� ���� ).

v �� ��� ���� ����. �� ��� ������.

IF M_days<=30 THENSET I = M_days-7;SET J = 23RETURN decimal(M_week_1 + ((M_month_1 - M_week_1)*I)/J,16,7);END IF

� ��� �� �� � �� ��� � ����.

IF M_days<=30 THENReturn decimal(M-week_1 + ((M_month_1 - M_week_1)* (M_days-7))/23,16,7);END IF

v �� �� SET�� ��� ����� �����. �� CCSIDS �� ��� ���� � C ��

�� � � ���� ����.

SET var1 = function1(var2);SET var2 = function2();

��� ����� �� ��� � ����.

SET var1 = function1(var2), var2 = function2();

v SET��� � ��� �� ���� ��� � �� �� C ��� ��� � ����.

SET array_var[1] = 10, array_var[2] = 20;

��� �� �� ���� ���.

SET array_var[1] = 10;SET array_var[2] = 20;

v ���� �� ���� IF (x AND y) �� IF () ELSE IF () ... ELSE ... ��� �����.

v ��� �� SELECT��� �����.

SELECT A INTO Y FROM B;SET Y=Y||'X';

� ��� �� �����.

SELECT A || 'X' INTO Y FROM B

v ���� �� �� ��� �� �� �� �� ���� ����. �� �� �� ����

�� ��� ��� �� �� ���� �� ��� ���� ��� �� ��� � ����.

�� �� ��� � �� �����. �� ���� �� �� � C �� ��� � ���

� �� �����.

v ��� � � ��� ��� ��� ���. �� ��, ��� IF� ���� ��� IF�� ��

����� ��� ��� ����� ���. ��� �� ��� ���� IF�� ����� �

�� ����.

244 IBM i: ������ SQL �����

|

|

|

||

Page 257: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

v ��� � ��� � SELECT��� �����. �� � �� ������.

SET vnb_decimal = 4;cdecimal:

FOR vdec AS cdec CURSOR FORSELECT nb_decimalFROM K$FX_RULESWHERE first_currency=Pi_curl AND second_currency=P1_cur2DOSET vnb_decimal=SMALLINT(cdecimal.nb_decimal);

END FOR cdecimal;

IF vnb_decimal IS NULL THENSET vnb_decimal=4;END IF;SET vrate=ROUND(vrate1/vrate2,vnb_decimal);RETURN vrate;

� � �� �� ���� ��� � �� �� � ����.

RETURN( SELECTCASEWHEN MIN(nb_decimal) IS NULL THEN ROUND(Vrate1/Vrate2,4)ELSE ROUND(Vrate1/Vrate2,SMALLINT(MIN(nb_decimal)))ENDFROM K$FX_RULESWHERE first_currency=Pi_curl AND second_currency=Pi_cur2);

v C �� ���� � � CCSID� �� , CCSID ��� 65535 , CCSID� UTF8

� �� , �� �� ��� ��� ���� �� � �� ��� � � ��� ��� �

����. ��� CCSID� ���� �� CCSID� ����� ��� � � ���� ����.

� ��� � CCSID� ��� ���� �� ��� ���. �� � �� �����

*JOBRUN� �� C �� �� �� �� �� � ���.

v ��� � ���� �� ��� �� ��� ��, �� � ��� �����. ��� ����

�� C �� �� � ����.

DECLARE v1, v2 INT;SET v1 = 100;SET v1 = v2;

v � ��� � �� ��� �� �� ��� ���� ��, ��, varchar, �� � �� ���

C �� �� � ����. CCSID ��� ��� �� ����� SQL SET�� ��� � ��

����.

v � ��� ���� �� C� ��� ����. � �� ��� ��� � �� �� ���

�� �� �� ��� � ��� � �� � ����.

�� ��� �� �� ��

�� �� ��� � ����� ����� �� ��� ��� ���� �� � ����. � , �

���� ��� �� �(UDF)� �� ��� �� ��� �� ��� � �� ���� ��� �

�� � �� ���.

��� � �� � � � ��� ��� ����.

SQL ����� 245

|

|

|

|

|

Page 258: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

� � �� ����� ���� ������ �� �� � ��(SQL��� ��� � �� � �

�� �� �� ��� �� �) �� ��� ����. �� �� ��� ���� �� �� � � �

� ����.

�� ��� � �� �� ���� �� ��� �� � ��� �� �� ����� ����. �

� ��, �� SELECT�� ���� �� � �� ����� � �� �� � � ���� �

�� �����. �� �� � � �� �� � SELECT ��� ���� ��� �� � ��

� ��� ��� ��� ���� � ����.

�� � ���� ���� �� �� � ��� ����� ���. � �� �� ��� �� ,

� ��� ��� ��� ���� ��� � �� �� �� ����. ����� ��� ���

��� �� � ���� ���� �� ����. ��� ��� � � � ����

�� ���� SQL� ��� � �� � ��� ���� �� �� ����. ��� ���

�� � ����� ���� , � ��� ���� ��� ��� ����.

�� ���� lab2 ��� � ���� ���� SQLSTATE ‘22H11’ ��� ��� �� ��

����. lab2 �� ��� �� �� ���� ���� � ��� �� �� �� ���� ����.

lab1 � lab2 �� � �� �� ���� �� SQLEXCEPTION ��� ��� �� �� ����.

�����, �� c1� � �� �� ��� lab2 ��� ����� �����.

Lab1: BEGINDECLARE var1 INT;DECLARE EXIT HANDLER FOR SQLEXCEPTION

RETURN -3;lab2: BEGIN

DECLARE EXIT HANDLER FOR SQLSTATE '22H11'RETURN -1;

DECLARE c1 CURSOR FOR SELECT col1 FROM table1;OPEN c1;CLOSE c1;

END lab2;END Lab1

�� �� ����� �� ��� ���� ��� ������ ���� ���� �� �� ��

����� ���� �� ������. �� �� ���� ���� ��� �� �� ��

��� � � �� ��� ��� ��� ��� � ��� ���� ����. �� ��� ��

�� ����� �� � �� �� ��� ! � ����� � �� �� �

�� ���� ��� ���.

�� ��� �� ��

INTEGER � CHARACTER� �� ���� ��� ���� �� �� ��� ���. �� � �

�� ��� ���� ����� �� �� �� �� ���� ��� ���.

246 IBM i: ������ SQL �����

Page 259: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� ����

�� ����(LOB)� � �� 0��� - 2GB(GB� 1,073,741,824���� ��) ��� ��� �

����.

VARCHAR, VARGRAPHIC � VARBINARY ��� ��� ��� ��� 32KB(KB� 1024���

� ��)���. ���� � � �� ��� ����� � ��� ��� � ���, ������ �

� �� ��� ��� ���� ���. �� ���, ��, ��, �� ��� � ���, ���� ��

� �� �� ��� ��� ���� � �� ����. � ��� ��� �� ��� ����� 2GB

�� ����� ��� � ����.

�� ��� ����� 2� �� ����(BLOB), 1��� �� �� ����(CLOB) � 2��� ��

�� ����(DBCLOB)� ����. � ����� �� �� �� LOB ���� ����. �� ��

� LOB �� �� � �� 3.5GB� �� � ��, ���� �� 256GB� LOB ����

� � ����.

�� ��� ����� �� ��� ��� ���� LOB� ��� ��� � ����. �� ���

��� LOB �� ����� ��� � �� �� �� ���� ���� �����, � �� �� �

��� ���� � �� ����. �� ���� ������ ���� �� ���� �� �� � ���

LOB � ��� ���� � �����. � �� ��� �� ���� �(�� �� �� ��)� �

�����(� �������) ��� ���� � �����.

�� ���� �� �

��� 2� �� ����(BLOB), �� �� ����(CLOB) � 2��� �� �� ����(DBCLOB)

� �����.

v 2� �� ����(BLOB) — 2� ���� �� � ���� � ���� �����. � ���

��� VARBINARY(32K ��)�� � 2� ���� ��� � ����. � ��� ����� ���,

��, ���� �� ��� ��� �� ����� �� ���� ��� � ����.

v �� �� ����(CLOB) — �� ���� �� � ���� �� 1��� ��� �����. �

��� ��� ��� �� VARCHAR ��� ��� ��(32KB ��)� �� ��� � �� �

�� � ��� ���� � ����. ��� � ��� ��� �����.

v 2��� �� �� ����(DBCLOB) — �� ���� �� � ���� �� 2��� ��� �

����. � ��� ��� 2��� �� �� ���� ��� � ��� ���� � ����.

��� � ��� ��� �����.

�� ���� �� ���

�� ����(LOB) �� ���� �� � �� ���� �� ���� � ���� �� ����.

��, LOB �� ���� ����� ������ ��� �� LOB �� ���� �� ���� ���

��� �� 4��� ����. LOB �� ���� ����, ��� ��� �� ��� LOB �

� ������ �����. LOB �� ���� ���� LOB �� ���� �������(��

� ��) ���� ��� ���.

SQL ����� 247

Page 260: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

LOB �� ���� ��������� � �� �� ��� ��� ��� LOB �� �����. ���

LOB �� ��� �� ���� �� �� ���� �� �� �� ��� �� �� � �� ���

� �� ��� ��� � ���. �� ���� �� �� � ��� ����� �� ���� ��

�� ��� � �( � �� ��� � �) �����. FREE LOCATOR�� �� ��

� �� ���� �����. ��� ����, �� � �� ��� ����� ���� �� LOB ��

���� �����.

LOB �� ���� UDF� ����� UDF�� ��� �� ����. UDF ���, LOB ���� ��

���� �� ���� LOB �� ���� LOB �� ��� � ����.

LOB �� �� � �� ��� �����.

v ��� ��� � �� LOB �� ����. �� LOB �� ��� ��� �����.

v LOB �� ���� � LOB �� ����. LOB �� ��� ��� ��� ��� ���� �

���.

v � �� ��� � �� LOB �� ����. LOB �� �� � ��� �� �����.

������ LOB �� ���� ��� ������ �� ��� ���� � ��� � � ����.

LOB �� �� �� ��� �� SQL�� �� �� ���� ��� . �� ����� �� �

�����.

�� ��� �� LOB �� ����� ��� �� LOB� ��� � �� �� ���� �

��. � �� �� ��� ��� ����. �� � �� ��� ��� � �� �� ��

� ����. �� �� ���� � LOB �� �� �� ����� ��� ��� �� ��

� ����.

�� ��

253 ���� �LOB � �� ���

� �� ��� ��� ��� ��� �� � ��� ��(� �� � ��� ���) ����

���� �� ���� �� ��� ��� ��� �����.

��: �� ���� ��� CLOB �� �� � �

����� ����� �� �� ����(CLOB) �� �� ���� �� � �� ���� ���

� CLOB ��� ���� ���� ���.

: �� ���� ��� CLOB � �� �

����� ����� �� �� ����(CLOB) �� �� ���� �� � �� ���� ����

CLOB ��� ���� ���� ���.

����� � ��� ���� CLOB ���� � ��� ��� ���� ����( �� �����

��). ��, ����� ��� ���� ��� �� ��� ���� ���.

248 IBM i: ������ SQL �����

Page 261: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

� LOBLOC ���� �� ��

�� ������ CLOB �� ��� ��� �� � �� �� ��� ����.

1. ��� �� �����. CLOB �� ��� ��� ��� �����.

2. CLOB �� �� ��� ��� ��� �����. CURSOR � FETCH �� �������� CLOB

�� ��� �� ��� ��� ��� ���� �� �����.

3. CLOB �� ��� �����. � ���� ���� CLOB �� ���� ����, ��� ��

��� �� ���� �����.

�� ��

247 ���� ��� ���� �� ����

�� ����(LOB) �� ���� �� � �� ���� �� ���� � ���� �� ����.

: C� ��� LOBLOC:

C� �� � � ����� �� ���� ���� CLOB �� ����.

�: � ��� ���� 528 ���� �� ���� � ���� ��� ��� ���� ����.

#include <stdio.h>#include <stdlib.h>#include <string.h>

EXEC SQL INCLUDE SQLCA;

int main(int argc, char *argv[]) {

EXEC SQL BEGIN DECLARE SECTION;char number[7];long deptInfoBeginLoc;long deptInfoEndLoc;SQL TYPE IS CLOB_LOCATOR resume; [1]SQL TYPE IS CLOB_LOCATOR deptBuffer;short lobind;char buffer[1000]="";char userid[9];char passwd[19];

EXEC SQL END DECLARE SECTION;

printf( "Sample C program: LOBLOC₩n" );

if (argc == 1) {EXEC SQL CONNECT TO sample;

}else if (argc == 3) {

strcpy (userid, argv[1]);strcpy (passwd, argv[2]);EXEC SQL CONNECT TO sample USER :userid USING :passwd;

}else {

printf ("₩nUSAGE: lobloc [userid passwd]₩n₩n");return 1;

} /* endif */

SQL ����� 249

Page 262: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

/* Employee A10030 is not included in the following select, becausethe lobeval program manipulates the record for A10030 so that it isnot compatible with lobloc */

EXEC SQL DECLARE c1 CURSOR FORSELECT empno, resume FROM emp_resume WHERE resume_format='ascii'AND empno <> 'A00130';

EXEC SQL OPEN c1;

do {EXEC SQL FETCH c1 INTO :number, :resume :lobind; [2]if (SQLCODE != 0) break;if (lobind < 0) {

printf ("NULL LOB indicated₩n");} else {

/* EVALUATE the LOB LOCATOR *//* Locate the beginning of "Department Information" section */EXEC SQL VALUES (POSSTR(:resume, 'Department Information'))

INTO :deptInfoBeginLoc;

/* Locate the beginning of "Education" section (end of "Dept.Info" */EXEC SQL VALUES (POSSTR(:resume, 'Education'))

INTO :deptInfoEndLoc;

/* Obtain ONLY the "Department Information" section by using SUBSTR */EXEC SQL VALUES(SUBSTR(:resume, :deptInfoBeginLoc,

:deptInfoEndLoc - :deptInfoBeginLoc)) INTO :deptBuffer;

/* Append the "Department Information" section to the :buffer var. */EXEC SQL VALUES(:buffer || :deptBuffer) INTO :buffer;

} /* endif */} while ( 1 );

printf ("%s₩n",buffer);

EXEC SQL FREE LOCATOR :resume, :deptBuffer; [3]

EXEC SQL CLOSE c1;

EXEC SQL CONNECT RESET;return 0;

}/* end of program : LOBLOC */

: COBOL� ��� LOBLOC:

COBOL� �� � � ����� �� ���� ���� CLOB �� ����.

�: � ��� ���� 528 ���� �� ���� � ���� ��� ��� ���� ����.

Identification Division.Program-ID. "lobloc".

Data Division.Working-Storage Section.

EXEC SQL INCLUDE SQLCA END-EXEC.

250 IBM i: ������ SQL �����

Page 263: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

EXEC SQL BEGIN DECLARE SECTION END-EXEC.01 userid pic x(8).01 passwd.49 passwd-length pic s9(4) comp-5 value 0.49 passwd-name pic x(18).

01 empnum pic x(6).01 di-begin-loc pic s9(9) comp-5.01 di-end-loc pic s9(9) comp-5.01 resume USAGE IS SQL TYPE IS CLOB-LOCATOR. [1]01 di-buffer USAGE IS SQL TYPE IS CLOB-LOCATOR.01 lobind pic s9(4) comp-5.01 buffer USAGE IS SQL TYPE IS CLOB(1K).

EXEC SQL END DECLARE SECTION END-EXEC.

Procedure Division.Main Section.

display "Sample COBOL program: LOBLOC".

* Get database connection information.display "Enter your user id (default none): "

with no advancing.accept userid.

if userid = spacesEXEC SQL CONNECT TO sample END-EXEC

elsedisplay "Enter your password : " with no advancingaccept passwd-name.

* Passwords in a CONNECT statement must be entered in a VARCHAR* format with the length of the input string.

inspect passwd-name tallying passwd-length for charactersbefore initial " ".

EXEC SQL CONNECT TO sample USER :userid USING :passwdEND-EXEC.

* Employee A10030 is not included in the following select, because* the lobeval program manipulates the record for A10030 so that it is* not compatible with lobloc

EXEC SQL DECLARE c1 CURSOR FORSELECT empno, resume FROM emp_resumeWHERE resume_format = 'ascii'AND empno <> 'A00130' END-EXEC.

EXEC SQL OPEN c1 END-EXEC.

Move 0 to buffer-length.

perform Fetch-Loop thru End-Fetch-Loopuntil SQLCODE not equal 0.

* display contents of the buffer.display buffer-data(1:buffer-length).

EXEC SQL FREE LOCATOR :resume, :di-buffer END-EXEC. [3]

SQL ����� 251

Page 264: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

EXEC SQL CLOSE c1 END-EXEC.

EXEC SQL CONNECT RESET END-EXEC.End-Main.

go to End-Prog.

Fetch-Loop Section.EXEC SQL FETCH c1 INTO :empnum, :resume :lobind [2]

END-EXEC.

if SQLCODE not equal 0go to End-Fetch-Loop.

* check to see if the host variable indicator returns NULL.if lobind less than 0 go to NULL-lob-indicated.

* Value exists. Evaluate the LOB locator.* Locate the beginning of "Department Information" section.

EXEC SQL VALUES (POSSTR(:resume, 'Department Information'))INTO :di-begin-loc END-EXEC.

* Locate the beginning of "Education" section (end of Dept.Info)EXEC SQL VALUES (POSSTR(:resume, 'Education'))

INTO :di-end-loc END-EXEC.

subtract di-begin-loc from di-end-loc.

* Obtain ONLY the "Department Information" section by using SUBSTREXEC SQL VALUES (SUBSTR(:resume, :di-begin-loc,

:di-end-loc))INTO :di-buffer END-EXEC.

* Append the "Department Information" section to the :buffer varEXEC SQL VALUES (:buffer || :di-buffer) INTO :buffer

END-EXEC.

go to End-Fetch-Loop.

NULL-lob-indicated.display "NULL LOB indicated".

End-Fetch-Loop. exit.

End-Prog.stop run.

���� �� � LOB �� ���

����� ������ �� ��� ��� , ��� ��� ��� ��� ���� ���

�� NULL�� ���� �� �� ����. �� LOB �� ���� ���� �� ���

�� ����.

�� ��� ��� �� ��� NULL� � � ���, �� ���� �� �� LOB �� ����

� LOB �� NULL�� ����. NULL ��� ���� �� �� ���� ������ ��

��� �����. ��� ��� �� ���� �� ��� ��� ����.

252 IBM i: ������ SQL �����

Page 265: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

LOB �� �� ��

� �� ��� ��� ��� ��� �� � ��� ��(� �� � ��� ���) ���� �

��� �� ���� �� ��� ��� ��� �����.

LOB �� ���� LOB �� ���(�� � ) ��� � �� ��� �� ����(�

� � ). ������ ��, �� � ��� � �� ��� ���� � LOB �� ����� ��

� ����.

�� � ����� �� �� ������. ���� LOB� ���� ������� ���

� �� ������ �� �� ���� �����. � �� ��� ���� LOB ��� ���

��� ���. ����� � �� ��� ���� LOB ���� �� � ��� ��� �� ��

���� ���� �����. LOB ��� ��� ���� �� ������ ��� ��� ���� �

� � �� �� ���� �� ��� ��� ���.

�: � �� ��� �� �� ����� ���� ����� � � ���� ���(� ���

� ��� ��� �). �� ����� �� �����.

� �� ��� ��� ��� BLOB, CLOB �� DBCLOB���. ��� ��(��)� ��� ��(�

�)�� �����. � �� ���� �� �� �� �� �� ��� �� � ����(���

���). �� ��� ����� ������ �����. � �� ��� ��� �� ��� ��

� ���� ����. ���� ��� ��� ����� ���� �� ��, �� ���� � ��

� ��� ����.

� �� ��� ��� � �� � �� � �� �� �� ��� ����. � �� �� ����

file_options �� ��� �� �� ��� ��� ���. �� � �� � � � ��� �

� �� � ���� ��� ����.

�� � �� ��� ��� � �(C� �� ��) � ��� ��� ����.

v SQL_FILE_READ( �) — � ��� �� 2���. , � , � � �� ����. DB2

� �� � �� �� ���� ��(���)� �����. �� �� DB2� � �� �� ��

� data_length �� �� ��� �����. COBOL �� SQL-FILE-READ���.

�� � �� ��� ��� � � � ��� ��� ����.

v SQL_FILE_CREATE(� �) — � ��� �� 8���. � ��� � �� �����. �� �

� ��� �� � �� �����. COBOL �� SQL-FILE-CREATE���.

v SQL_FILE_OVERWRITE(� ����) — � ��� �� 16���. � ��� �� �� ��

� �� � � �� �����. �� �� ��� � ���� �� ��� �� �����.

COBOL �� SQL-FILE-OVERWRITE���.

v SQL_FILE_APPEND(� ��) — � ��� �� 32���. � ��� ��� �(��� )�

����� ���. ��� �� � �� �����. COBOL �� SQL-FILE-APPEND���.

SQL ����� 253

Page 266: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�: OPEN��� LOB � �� ��� ���� ��� � � � LOB � �� ��� ��

�� ���� ����.

�� ��

247 ���� ��� ���� �� ����

�� ����(LOB) �� ���� �� � �� ���� �� ���� � ���� �� ����.

�� � ���

: CLOB ��� ��� ��

����� �� �� �� �� ����(CLOB) ��� ��� ���.

� LOBFILE ���� �� ��

�� ������ CLOB � �� ��� �� � �� �� ��� ����.

1. ��� �� �����. CLOB � �� ��� ��� �����. ��� ��, �� �� �

� ��� �� ��� �� ��� �����.

2. CLOB �� �� ��� ��� ����. � ��� ��� ����. ���� �� ��

� ��� ���� ���� �� ���� �����. ��� ���(/) ��� ���� ���

���� ����.

3. ��� CLOB �� �� ��� ��� �� �����. resume �� ���� ��� ���� �

��� ���� ����.

: C� ��� LOBFILE:

C� �� � � ����� ����� �� �� CLOB ���� �����.

�: � ��� ���� 528 ���� �� ���� � ���� ��� ��� ���� ����.

#include <stdio.h>#include <stdlib.h>#include <string.h>#include <sql.h>

EXEC SQL INCLUDE SQLCA;

int main(int argc, char *argv[]) {

EXEC SQL BEGIN DECLARE SECTION;SQL TYPE IS CLOB_FILE resume; [1]short lobind;char userid[9];char passwd[19];

EXEC SQL END DECLARE SECTION;

printf( "Sample C program: LOBFILE₩n" );

if (argc == 1) {EXEC SQL CONNECT TO sample;

else if (argc == 3) {

254 IBM i: ������ SQL �����

Page 267: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

strcpy (userid, argv[1]);strcpy (passwd, argv[2]);EXEC SQL CONNECT TO sample USER :userid USING :passwd;

else {printf ("₩nUSAGE: lobfile [userid passwd]₩n₩n");return 1;

} /* endif */

strcpy (resume.name, "RESUME.TXT"); [2]resume.name_length = strlen("RESUME.TXT");resume.file_options = SQL_FILE_OVERWRITE;

EXEC SQL SELECT resume INTO :resume :lobind FROM emp_resume [3]WHERE resume_format='ascii' AND empno='000130';

if (lobind < 0) {printf ("NULL LOB indicated ₩n");

} else {printf ("Resume for EMPNO 000130 is in file : RESUME.TXT₩n");

} /* endif */

EXEC SQL CONNECT RESET;return 0;

}/* end of program : LOBFILE */

: COBOL� ��� LOBFILE:

COBOL� �� � � ����� ����� �� �� CLOB ���� �����.

�: � ��� ���� 528 ���� �� ���� � ���� ��� ��� ���� ����.

Identification Division.Program-ID. "lobfile".

Data Division.Working-Storage Section.

EXEC SQL INCLUDE SQLCA END-EXEC.

EXEC SQL BEGIN DECLARE SECTION END-EXEC.01 userid pic x(8).01 passwd.49 passwd-length pic s9(4) comp-5 value 0.49 passwd-name pic x(18).

01 resume USAGE IS SQL TYPE IS CLOB-FILE. [1]01 lobind pic s9(4) comp-5.

EXEC SQL END DECLARE SECTION END-EXEC.

Procedure Division.Main Section.

display "Sample COBOL program: LOBFILE".

* Get database connection information.display "Enter your user id (default none): "

with no advancing.accept userid.

SQL ����� 255

Page 268: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

if userid = spacesEXEC SQL CONNECT TO sample END-EXEC

elsedisplay "Enter your password : " with no advancingaccept passwd-name.

* Passwords in a CONNECT statement must be entered in a VARCHAR* format with the length of the input string.

inspect passwd-name tallying passwd-length for charactersbefore initial " ".

EXEC SQL CONNECT TO sample USER :userid USING :passwdEND-EXEC.

move "RESUME.TXT" to resume-NAME. [2]move 10 to resume-NAME-LENGTH.move SQL-FILE-OVERWRITE to resume-FILE-OPTIONS.

EXEC SQL SELECT resume INTO :resume :lobind [3]FROM emp_resumeWHERE resume_format = 'ascii'AND empno = '000130' END-EXEC.

if lobind less than 0 go to NULL-LOB-indicated.

display "Resume for EMPNO 000130 is in file : RESUME.TXT".go to End-Main.

NULL-LOB-indicated.display "NULL LOB indicated".

End-Main.EXEC SQL CONNECT RESET END-EXEC.

End-Prog.stop run.

: CLOB �� �� ��

� ��� :hv_text_file� ���� �� ���� CLOB(character large object) � ����

��� �����.

�� C ���� ���� � ���,

v userid� ��� � �� ���� ����.

v dirname� �userid�� ������� ����.

v filnam.1� ���� ����� �� ��� �� � � ����.

v clobtab� CLOB ��� ��� �������.

strcpy(hv_text_file.name, "/home/userid/dirname/filnam.1");hv_text_file.name_length = strlen("/home/userid/dirname/filnam.1");hv_text_file.file_options = SQL_FILE_READ; /* this is a 'regular' file */

EXEC SQL INSERT INTO CLOBTABVALUES(:hv_text_file);

256 IBM i: ������ SQL �����

Page 269: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

LOB �� �� ��

CL ��(�: DSPPFM(�� � �� �))� ���� �� ����(LOB) � ���� ���� ��

� �� ��� �� �� LOB ���� ��� ����. ������� �� LOB � ��

�� �� ����.

� �� �� ��� ��� ����.

v 16� 0� 13 - 28���

v *POINTER� ��� �� ��� �� 16���

�� � � ��� �� ��� �� �� � ��� 16��� �� ��� � ��� ���

����.

�� ��, �� ColumnOne Char(10), ColumnTwo CLOB(40K) � ColumnThree BLOB(10M)�

���� ���� �� , � ���� DSPPFM� ���� ���� � �� ��� ����.

v ColumnOne: �� ���� ��� 10���

v ColumnTwo: 16� 0�� ��� 22���� ’*POINTER ’� ��� 16���

v ColumnThree: 16� 0�� ��� 16���� ’*POINTER ’� ��� 16���

� ���� LOB � ��� �� �� ��� ����.

v DSPPFM(�� � �� �)

v � *PRINT� TOFILE ��� �� CPYF(� ��)

v DSPJRN(�� �)

v RTVJRNE(�� �� �)

v ENTFMT ��� *TYPE1, *TYPE2, *TYPE3 � *TYPE4� �� RCVJRNE(�� �� �

�)

LOB �� �� � ��

�� ��� ����� �� �� ����(LOB) ���� �� �� �� ���� ���� ��� �

����.

v ENTFMT ��� *TYPEPTR �� �� RCVJRNE(�� �� ��) CL ��

v QjoRetrieveJournalEntries(�� �� �) API

� ���� LOB � ��� ��� ����.

v 16� 0� 0 - 15���

v ’00’x� � ��� ��� 1���

v �� �� �� �� LOB ���� ��� ���� 4���

v 16� 0� 8���

v �� ��� �� LOB ���� �� �� ���� 16���

SQL ����� 257

Page 270: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

� ��� � � ��� LOB ���� �� ��� �� 16��� �� �� ����. � ��

��� �� LOB � ���� � ��� �� ����. � � � ��� ��� ���� ��� �

� ��� ��� LOB � �� �� �� ��� ������.

��� �� �� �

��� �� �� ��(UDT)� �� ��� �� ��� �� ���� DB2 ��� ���� �� ���

����.

��� �� �� ��� ���� DB2� � ��� ��� ��� � ����. �� � �� ��� ��

�� ��� ���� ���� ���� ���� ��� ��� ���� ��� �� ��� �� �

� �����. �� ��� ��� ���� �� ������ ��� �� ��� � ����.

UDT� �� � � ��� ����.

v �� .

� ��� ����� ������ ���� �� DB2� ���� �� �� ��� �� � ��

��.

v �� .

��� �� �(UDF)� ���� � ��� ��� ��� ���� ����� ��� � �� ���

���� ��� � ����.

v ��� ��.

��� ��� �� UDT� �� �����. UDT� �� �� UDT ���� �� � ���

�����.

v ��.

UDT� ��� UDT� �� � �� �� ���� �����. ��� ����� ��� ���

�� ���� �� �� �� � �� ���� �� ���� �����.

v �� ��� ��.

��� �� ��� �� �� ��� ���� UDT ��� �� �� ��� ��� � ����.

v ���� � ��� ��.

UDT� ���� ���� �� ��� ����. ���� �� ��� �� �� �� ��� ��

��.

258 IBM i: ������ SQL �����

Page 271: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� ��

13 ���� ���� �� ���

��� �� ��� ������ �� ���� ���� ��� ��� ��� ��� � �� ��� �

����.

UDT ��

CREATE DISTINCT TYPE�� ���� ��� �� ��(UDT)� �����.

CREATE DISTINCT TYPE�� �� �� ��� ������.

1. � UDT� �� �� ���� ���� �� � � ����.

2. UDT� �� ��� UDT� ���� ��� �� ���� ���� �����. �� ���, UDT

� �� ��� ����� ���. ��� �� UDT� �� UDT� �� ���� ��� � ��

�.

���� UDT ��� ��, �� �� �� ��� ��� �����.

v �� ��� � �� ���� UDT�� �� ���� �����. �� ��, FLOAT� ��

�� ��� ���� DOUBLE�� �� �� �� �����.

v �� ���� UDT� �����.

� �� ���� UDT� ���� � ����.

� �� �� ��� �� CREATE, DROP �� COMMENT ON�� � ���� � �

�� , ���� �� �� � �� �� �� ��� ���� �� �����.

�� ��

228 ���� ��� � �� ���

�� � ��� ���� , ��� � ��� �� ���� ��� � ����.

CREATE TYPE

: ��:

��� ��� ���� ������ �� � ���� � ��� �� ��� �� ���� ���

� �� DB2�� ���� ��� �� ���.

�� ��� �� �� ��� ��� ����� � �����. ��� ��� �� UDT� ����

�( ��� � � �� ���� ���).

CREATE DISTINCT TYPE US_DOLLAR AS DECIMAL (9,2)CREATE DISTINCT TYPE CANADIAN_DOLLAR AS DECIMAL (9,2)CREATE DISTINCT TYPE EURO AS DECIMAL (9,2)

: ��:

� ���� � � ����� ��� ���� �� �� ���� �� ������ ���

���� ������.

SQL ����� 259

Page 272: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� �� ��� ��� ���� ��� ��� �� � � �� �� ���� �� � � ��

� ��� ��� ����� UDT� ������.

CREATE DISTINCT TYPE PERSONAL.APPLICATION_FORM AS CLOB(32K)

UDT� �� � ��

� �� ��� �� ��(UDT)� ��� ��� ��� UDT � �� ��� ��� ��� � ���

�.

: �:

� ����� � �� ��� �� ���� ���� ������.

��� �� ���� ������.

CREATE TABLE US_SALES(PRODUCT_ITEM INTEGER,MONTH INTEGER CHECK (MONTH BETWEEN 1 AND 12),YEAR INTEGER CHECK (YEAR > 1985),TOTAL US_DOLLAR)

CREATE TABLE CANADIAN_SALES(PRODUCT_ITEM INTEGER,MONTH INTEGER CHECK (MONTH BETWEEN 1 AND 12),YEAR INTEGER CHECK (YEAR > 1985),TOTAL CANADIAN_DOLLAR)

CREATE TABLE GERMAN_SALES(PRODUCT_ITEM INTEGER,MONTH INTEGER CHECK (MONTH BETWEEN 1 AND 12),YEAR INTEGER CHECK (YEAR > 1985),TOTAL EURO)

�� ���� UDT� 259 ���� ��: ����� �� CREATE DISTINCT TYPE�� ����

�����. �� ��� � ����� ��� ������.

: �� ��:

���� �� ���� ��� ���� �� ���� ���� �� �����.

��� �� ���� �����.

CREATE TABLE APPLICATIONS(ID INTEGER,NAME VARCHAR (30),APPLICATION_DATE DATE,FORM PERSONAL.APPLICATION_FORM)

��� ���� ���� ���� ID� ��� � ��� � �� ��� �����, UDT �

� ��� �������. �� � � �� ��� ���� �� ��� DB2� �� � �� �

���� �� ���� ��� ���� �� �� ��� �� �� � �� ����.

260 IBM i: ������ SQL �����

Page 273: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

UDT ��

��� ��� ��� �� ��(UDT)� ���� �� �����. ��� ��� UDT� �� � �

���� � ���� �� � ��� �����.

��� ��� ��� UDT� ���� ���� � �� � ����. �� ��, �� �� �� �

�� �� �� �� ���� �� �� ��� , � �� �� ���� ��� �� �

� ���� �� ����. � �� ���� � �� ��� ��� �����.

��� ��� ���, DB2� �� �� ���� UDT ���� UDT �� ��� ���� ���

��� ���� ��� ���. �� ���, DB2� ���� �� ��� �� �� UDT� �

�� ��� ���. UDT� ���� �� ��� ���� ���� � �� �� �� ���

���� ���� ���. �� � ��, � �� UDT ���� ��� ���� UDT� ��

�� �� �� ��� ��� UDT ���� ���� ���.

: UDT ��

� �� ��� ���� ��� �� ��(UDT) �� ��� �����.

: UDT� �� �� �:

1988� 7�� ���� � ��� US $100,000.00� �� ��� �� �� ������.

SELECT PRODUCT_ITEMFROM US_SALESWHERE TOTAL > US_DOLLAR (100000)AND month = 7AND year = 1998

�� �� �� ��� �� � ���(�, DECIMAL)� �� �� � � ��� DECIMAL�

� �� ��� ��� �� DB2� ���� �� �� ������. �� DB2� ���� ��

�� �(�, �� ��� DECIMAL� ���� �)� ��� ��� DECIMAL� ���

� ����. UDT�� �� �� UDT� ������ ��� �� �� �� �� �� �

�� ���� ��� ��� � ����. ��� �� � ��� ���� � ����.

SELECT PRODUCT_ITEMFROM US_SALESWHERE TOTAL > CAST (100000 AS us_dollar)AND MONTH = 7AND YEAR = 1998

: UDT �� ��:

�� �� �� �� ���� ��� �� �(UDF)� ���� ���.

DB2 ���� ���� ��� �� ��� ��� � ����. �� �� �� �� �� ���

�� �� � �� � ��� �� � �� ���� UDF� �����.

�� ��� �� UDF� ���� �� �� � � ����. �� �� C ��� DECIMAL �

� ���� �� � ��. �� �� ��� ���� UDT� DECIMAL� �������. ��� UDF�

SQL ����� 261

Page 274: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

DOUBLE �� ��� ���� ���. �� �� ��� ���� ���� � DECIMAL �� �

� � �� C�� ���� �� ��� ���� �����. ��� UDF� ��� �� ���� ��

�.

CREATE FUNCTION CDN_TO_US_DOUBLE(DOUBLE) RETURNS DOUBLEEXTERNAL NAME 'MYLIB/CURRENCIES(C_CDN_US)'LANGUAGE CPARAMETER STYLE DB2SQLNO SQLNOT DETERMINISTIC

�� �� �� � ��� ��� UDF� �� ��� �� � ����, NOT DETERMINISTIC

�� �����.

��� �� �� � UDF� ��� UDF�� �� �� ���� �����. �� ��

DECIMAL �� ����� ���. DECIMAL �� DOUBLE� ����� ���. �� ����

DOUBLE �� DECIMAL� ��� DECIMAL �� �� �� ����� �� ���.

�� ��� ���� �� ��� �� �� ��� � �� ��� ��� ��� �� ��

UDF� ��� � ���� DB2� �� ���� �����. ��� �� �� UDF� ���� ��

�. � �� DOUBLE �� DECIMAL �� �����. �� DECIMAL �� UDT� ����

�. ��� ������.

CREATE FUNCTION CDN_TO_US_DEC (DECIMAL(9,2)) RETURNS DECIMAL(9,2)SOURCE CDN_TO_US_DOUBLE (DOUBLE)

CREATE FUNCTION US_DOLLAR (CANADIAN_DOLLAR) RETURNS US_DOLLARSOURCE CDN_TO_US_DEC (DECIMAL())

C1� �� � ��� US_DOLLAR(C1)��� �� US_DOLLAR �� ��� ��� ��� ��

�� �� ����.

US_DOLLAR (DECIMAL(CDN_TO_US_DOUBLE (DOUBLE (DECIMAL (C1)))))

�, C1(�� ��)� ��� ��� , ��� �� CDN_TO_US_DOUBLE �� ���� double ��

�����. � �� �� �� � ��� double �(�� � �� ����)� �����. �

double �� ��� �� � �� �� �����.

��� �� �� ���� �� �� �� �����.

CREATE FUNCTION EURO_TO_US_DOUBLE(DOUBLE)RETURNS DOUBLEEXTERNAL NAME 'MYLIB/CURRENCIES(C_EURO_US)'LANGUAGE CPARAMETER STYLE DB2SQLNO SQLNOT DETERMINISTIC

CREATE FUNCTION EURO_TO_US_DEC (DECIMAL(9,2))RETURNS DECIMAL(9,2)

262 IBM i: ������ SQL �����

Page 275: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

SOURCE EURO_TO_US_DOUBLE(DOUBLE)

CREATE FUNCTION US_DOLLAR(EURO) RETURNS US_DOLLARSOURCE EURO_TO_US_DEC (DECIMAL())

: UDT� ��� �:

2003� 3� �� ��� ����� ���� ��� ��� ��� �� �� ������.

�� SELECT�� ������.

SELECT US.PRODUCT_ITEM, US.TOTALFROM US_SALES AS US, CANADIAN_SALES AS CDN, GERMAN_SALES AS GERMANWHERE US.PRODUCT_ITEM = CDN.PRODUCT_ITEMAND US.PRODUCT_ITEM = GERMAN.PRODUCT_ITEMAND US.TOTAL > US_DOLLAR (CDN.TOTAL)AND US.TOTAL > US_DOLLAR (GERMAN.TOTAL)AND US.MONTH = 3AND US.YEAR = 2003AND CDN.MONTH = 3AND CDN.YEAR = 2003AND GERMAN.MONTH = 3AND GERMAN.YEAR = 2003

�� � �� ���� �� �� �� �� � � ��� UDF� ���� �� ��

�� �� �� ��� UDF� ���� ���� �� �� �� ������. �� �

� ��� �� �� �� ��� �� �� � � ��� �� � DECIMAL� ��� �

� DECIMAL �� �� � ���.

: UDT� ��� �� UDF:

���� �� SUM� ���� �� �� SUM �� �� ��� �� �(UDF)� ���� ���

���.

� ���� ��� ����.

CREATE FUNCTION SUM (EURO)RETURNS EUROSOURCE SYSIBM.SUM (DECIMAL())

2004�� � ��� �� ���� � ��� �� ���. � ��� �� �� ���� ��

�.

SELECT PRODUCT_ITEM, US_DOLLAR (SUM (TOTAL))FROM GERMAN_SALESWHERE YEAR = 2004GROUP BY PRODUCT_ITEM

���� ��� ���� �� �� �� SUM �� ���� ���� SUM (US_DOLLAR (TOTAL))�

��� � ���.

SQL ����� 263

Page 276: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� ��

265 ���� ��: �� UDT� �� ��

�� � �� �� �� SUM� ���� �� �� SUM �� �� ��� �� �(UDF)� �

��� �����.

: UDT ��� ��:

� ���� �� ���� ��� ������� ���� ���.

��� ��� ��� �� ���� �� ��� �� �� ��� ��� ������.

EXEC SQL BEGIN DECLARE SECTION;SQL TYPE IS CLOB(32K) hv_form;

EXEC SQL END DECLARE SECTION;

/* Code to fill hv_form */

INSERT INTO APPLICATIONSVALUES (134523, 'Peter Holland', CURRENT DATE, :hv_form)

�� ���� UDT personal.application_form�� ���� �� �� �� ���� ����

����. DB2��� UDT �� ��� ���� � UDT� �� ��� �� � �� �����.

�� ��

��: � SQL��� ��

� SQL� ���� �� ��� ����� ��� ��� ��� � ����.

: �� SQL��� ��:

� SQL� ���� �� ��� ����� ��� ��� ��� � ����.

���� ��� ����.

EXEC SQL BEGIN DECLARE SECTION;long id;char name[30];SQL TYPE IS CLOB(32K) form;char command[80];

EXEC SQL END DECLARE SECTION;

/* Code to fill host variables */

strcpy(command,"INSERT INTO APPLICATIONS VALUES");strcat(command,"(?, ?, CURRENT DATE, ?)");

EXEC SQL PREPARE APP_INSERT FROM :command;EXEC SQL EXECUTE APP_INSERT USING :id, :name, :form;

��� �� ��� CLOB(32K)(UDT � � ��� ��)�� DB2� ��� �� DB2� �� �

�� ������. ��� ��� UDT� ���� ����, UDT ��� ��� ��� ��� � ��

�. ��� ��� ��� ��� UDT�� ��� � ���.

264 IBM i: ������ SQL �����

Page 277: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� ��

264 ���� ��: UDT� �� ��

� ���� �� ���� ��� ������� ���� ���.

: � UDT ��� ��:

�� � �� �� �� SUM� ���� �� �� SUM �� �� ��� �� �(UDF)� ��

�� �����.

CREATE FUNCTION SUM (CANADIAN_DOLLAR)RETURNS CANADIAN_DOLLARSOURCE SYSIBM.SUM (DECIMAL())

CREATE FUNCTION SUM (US_DOLLAR)RETURNS US_DOLLARSOURCE SYSIBM.SUM (DECIMAL())

��� � ��� �� � ��� �� ��, �� ���� ��� ���� ������� ����

���� �����.

CREATE TABLE US_SALES_04(PRODUCT_ITEM INTEGER,TOTAL US_DOLLAR)

CREATE TABLE GERMAN_SALES_04(PRODUCT_ITEM INTEGER,TOTAL US_DOLLAR)

CREATE TABLE CANADIAN_SALES_04(PRODUCT_ITEM INTEGER,TOTAL US_DOLLAR)

INSERT INTO US_SALES_04SELECT PRODUCT_ITEM, SUM (TOTAL)FROM US_SALESWHERE YEAR = 2004GROUP BY PRODUCT_ITEM

INSERT INTO GERMAN_SALES_04SELECT PRODUCT_ITEM, US_DOLLAR (SUM (TOTAL))FROM GERMAN_SALESWHERE YEAR = 2004GROUP BY PRODUCT_ITEM

INSERT INTO CANADIAN_SALES_04SELECT PRODUCT_ITEM, US_DOLLAR (SUM (TOTAL))FROM CANADIAN_SALESWHERE YEAR = 2004GROUP BY PRODUCT_ITEM

�� UDT� �� �� � ��� ���� �� � � �� �� �� �� �����.

UDT� ��� � �� ���� ��� � ���� �� �� ��� ��� � ���.

SQL ����� 265

Page 278: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� ��

263 ���� ��: UDT� �� �� UDF�

���� �� SUM� ���� �� �� SUM �� �� ��� �� �(UDF)� ���� ��

����.

: UNION�� UDT ��:

�� ����� �� �� ��� ��� ��� ��� ���� ������.

SELECT�� ��� ����.

SELECT PRODUCT_ITEM, MONTH, YEAR, TOTALFROM US_SALESUNIONSELECT PRODUCT_ITEM, MONTH, YEAR, US_DOLLAR (TOTAL)FROM CANADIAN_SALESUNIONSELECT PRODUCT_ITEM, MONTH, YEAR, US_DOLLAR (TOTAL)FROM GERMAN_SALES

UDT� �� �� UDT� �� ��� ������ �� �� �� �� ��� ���� �

� �� ������. �� ��� UDT� �� �� �� ��� ���� ��� �� ���

���� UDT �� ���� ���.

: UDT, UDF � LOB ��

� �� ��� ������� ��� �� ��(UDT), ��� �� �(UDF) � �� ����(LOB)

� � ���� ��� �����.

: UDT � UDF ��

�� ���� �� �� ���� ���� ���.

����� ��� ��� , � ��, � ��� �� �� �� � ��� ���� �� �� ��

�� �� �� �� ��� ���� ���. �� �� �� , ��� �� ��(���, ��

�, ��, �� � �� � ��)� �� � ����. ��� ���� �� ��� �� ���� UDT

� �� �� ��� ���. �� � ��� �� �� �� ��, ���, �� �� ���� �

� �� �� UDF �� �����. �� �� � ��� �� ��� ��� � �� �� ���

��. �� CREATE�� ���� �����.

CREATE DISTINCT TYPE E_MAIL AS BLOB (1M)

CREATE FUNCTION SUBJECT (E_MAIL)RETURNS VARCHAR (200)EXTERNAL NAME 'LIB/PGM(SUBJECT)'LANGUAGE CPARAMETER STYLE DB2SQLNO SQLDETERMINISTICNO EXTERNAL ACTION

266 IBM i: ������ SQL �����

Page 279: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

CREATE FUNCTION SENDER (E_MAIL)RETURNS VARCHAR (200)EXTERNAL NAME 'LIB/PGM(SENDER)'LANGUAGE CPARAMETER STYLE DB2SQLNO SQLDETERMINISTICNO EXTERNAL ACTION

CREATE FUNCTION RECEIVER (E_MAIL)RETURNS VARCHAR (200)EXTERNAL NAME 'LIB/PGM(RECEIVER)'LANGUAGE CPARAMETER STYLE DB2SQLNO SQLDETERMINISTICNO EXTERNAL ACTION

CREATE FUNCTION SENDING_DATE (E_MAIL)RETURNS DATE CAST FROM VARCHAR(10)EXTERNAL NAME 'LIB/PGM(SENDING_DATE)'LANGUAGE CPARAMETER STYLE DB2SQLNO SQLDETERMINISTICNO EXTERNAL ACTION

CREATE FUNCTION CONTENTS (E_MAIL)RETURNS BLOB (1M)EXTERNAL NAME 'LIB/PGM(CONTENTS)'LANGUAGE CPARAMETER STYLE DB2SQLNO SQLDETERMINISTICNO EXTERNAL ACTION

CREATE FUNCTION CONTAINS (E_MAIL, VARCHAR (200))RETURNS INTEGEREXTERNAL NAME 'LIB/PGM(CONTAINS)'LANGUAGE CPARAMETER STYLE DB2SQLNO SQLDETERMINISTICNO EXTERNAL ACTION

CREATE TABLE ELECTRONIC_MAIL(ARRIVAL_TIMESTAMP TIMESTAMP,MESSAGE E_MAIL)

: LOB ��� �� ���� ���

�� ������ �� �� i� DB2 ������� ���� ���� � � ���.

�� �� �� ��� � � �� HV_EMAIL_FILE �� ���� � � �� INSERT�� ���

���.

SQL ����� 267

Page 280: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

EXEC SQL BEGIN DECLARE SECTIONSQL TYPE IS BLOB_FILE HV_EMAIL_FILE;

EXEC SQL END DECLARE SECTIONstrcpy (HV_EMAIL_FILE.NAME, "/u/mail/email/mbox");HV_EMAIL_FILE.NAME_LENGTH = strlen(HV_EMAIL_FILE.NAME);HV_EMAIL_FILE.FILE_OPTIONS = 2;

EXEC SQL INSERT INTO ELECTRONIC_MAILVALUES (CURRENT TIMESTAMP, :hv_email_file);

DB2 LOB ���� ���� �� �� �� ��� LOB UDT� �� � ����. ��� LOB

� �� ��� ���� � ��� UDT � �����. BLOB ��� �� ���� �� �

���� ���� � �� �� ���� �����. �� DB2�� ���� � ��� �� ��

�� � ��� ��� �� � �� �����.

: UDF� ��� UDT ���� ��

� ��� �� �� �� �� �� � �� �� ���. customers ���� �� �� �

��� ����.

���� ��� ����.

SELECT COUNT (*)FROM ELECTRONIC_MAIL AS EMAIL, CUSTOMERSWHERE SUBJECT (EMAIL.MESSAGE) = 'customer order'AND CUSTOMERS.EMAIL_ADDRESS = SENDER (EMAIL.MESSAGE)AND CUSTOMERS.NAME = 'Customer X'

� SQL ���� UDT� �� UDF� ������. � UDF� UDT� ���� �� �� ����

�����. �� � ��, ���� UDT �� �� ��� ������. ��� �� � � ��

� �� UDF� ���� ��� � ����. � UDF� � �� ���� ��� ���� ����

��� ����.

��� �� 1994�� ���, ���� ��� ��� ��� �� ���� �� �� �� �� �

��� �� ���.

SELECT SENDER (MESSAGE), SENDING_DATE (MESSAGE), SUBJECT (MESSAGE)FROM ELECTRONIC_MAILWHERE CONTAINS (MESSAGE,'"performance" AND "products" AND "marketplace"') = 1

�� ��� ���� ���� � � ��� ��� � �� contains UDF� ������.

: LOB �� ���� ��� UDT ���� ��

�� �� �� ����� ����� ��� ��� ���� � �� �� �� �� ��� ��

� ���.

�� �� �� � � ��� � �����. ��� �� ��(UDT)� �� ����(LOB)� ��

���, ��� �� �� LOB �� ���� ��� � ����.

268 IBM i: ������ SQL �����

Page 281: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

EXEC SQL BEGIN DECLARE SECTIONlong hv_len;char hv_subject[200];char hv_sender[200];char hv_buf[4096];char hv_current_time[26];SQL TYPE IS BLOB_LOCATOR hv_email_locator;

EXEC SQL END DECLARE SECTION

EXEC SQL SELECT MESSAGEINTO :hv_email_locatorFROM ELECTRONIC MAILWHERE ARRIVAL_TIMESTAMP = :hv_current_time;

EXEC SQL VALUES (SUBJECT (E_MAIL(:hv_email_locator))INTO :hv_subject;

.... code that checks if the subject of the e_mail is relevant ....

.... if the e_mail is relevant, then...............................

EXEC SQL VALUES (SENDER (CAST (:hv_email_locator AS E_MAIL)))INTO :hv_sender;

��� ��� ��� BLOB �� ��� ��(UDT� �� ��)���, UDT� �� UDF� �� �

�� ��� ���� BLOB �� ���� UDT� ������.

DataLink ��

DataLink ��� ��� ������ �� ��� � �� ���� ��� ���� �� � �� ��

�����. DataLink� ��� � �� �� ���� ����� ��� ����.

� ����� ��� �, �� ��, ��� � � �� �� �����. ����� ���� �� ��

�� ��� URL(Uniform Resource Locator)� ���� ����. �� ���� �� ���� ��

��� ��� ����� �� ��� � � � , ���� ��� DataLink ��� ��� ����

��� � ��� �����. ���� SQL �� �� ���� ����� ���� �� � ����

� �� �� ��� � ����(SQL ���� � �� � ��). DataLink ��� ��� ����

, �� ���� ��� ��� �� �����. �� ��, �� ���� DataLink� �� ����

������ ��� ����� ���� ��� ���� �� � ����.

DataLink � �� ���� ����, ���� ��� ��� �� � ����� �� ��� �

�� � ����. � ��� ���� ���� ��� � �� ��� ���� �� �� #��� ���

�� �����. �� ��, ���� ��� �� � ���� �� �� �� � � ��� SQL

���� ���� �� � � �� ��� � � ����. �� ���� �� ���� ���

�� ������, SQL ���� �� ��� ���� ��� ����� �� ��� � ���

����. �� ���� DataLink� ���� ����. SQL ���� �� SQL ��� ��� ��

�� ��, ��, �� �� �� � � � �� ��� ���. �� � ��� DataLink � �

��� �����. ���� � �� ����� �� URL� � ��� �����. �� � � �

� � ������ SQL ����� ���� URL� �� � �� �� �� � ����

�� ���� URL� �� � � �� � � �� � ����.

SQL ����� 269

Page 282: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

� ��� ���� � �� � � ����.

v �� � ���� �� ��� ��� �� ��� � ����.

v �� � ���� �� �(LOB ��) �� �� � ����� ��� � ����.

v �� � ���� �� �� �� ��� � ���� �� � � � � ����.

v ����� ���� ������ ��� �� � ���� �, SQL ��� ��� �� � � ��

��� � � � ���� �� ����, ���, ��� �� �� ��� � �� �� ���

��� ��� �����.

DataLink� ���� ����� ″� �″ ��� �� �� ����� �� ��� �����. DataLink

� � ����� ���� �� SQL ���� �� � �� ����� �� �� ����� ��

�� � �� ��� � ����. � ����� � ��� �����. � ��� �� ��

���� ����� � �����. � ��� ���� ����� DataLink � ��� � ��� �

�� �� ��� ��� ���.

�� ��

��� ��

DataLink�� �� �� ��

� ����� �� DataLink � ��� � ����.

NO LINK CONTROL:

DataLink � NO LINK CONTROL� ���� �� SQL ���� ��� � � � ��� �

���.

URL� ��� ���� � ���, ��� � � ���� �� �� ���� ��� ��� ��

��.

FS �� �� FILE LINK CONTROL:

� ���(FS) ��� �� FILE LINK CONTROL� ���� DataLink � ���� , ����

��� DataLink �� ��� ���� ��� ���� ��� URL � � ���.

�� SQL ���� ��� � �� ��� ���. ����� ���� � ��� � ���. ��

� �� �� �� ����� ��, ����� �� �� � �� �����. �� �����

� �� � � � ���. URL� ��� ��� ��� ���� ���� � ���� � ��

� ��� ���. DataLink �� �� �� ���� ���� � � �����. DataLink �� ��

��� ���� �� ����� � ��� � ����� � ���.

�� � ���� � ����� �� ����� �� ���� ���. ����� � �� � �

� �� � � ���� ����. � ��� � �� �� �� ���� �� �� ��� ���

��.

DB �� �� FILE LINK CONTROL:

270 IBM i: ������ SQL �����

Page 283: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

������(DB) ��� �� FILE LINK CONTROL� ���� DataLink � ���� , URL�

� �� ����� �� �� �� ����� �����.

����� ���� ��� ��� �� ��� ���� ����. ����� � �� �� �� ��

��� �� �� � �� � ����� �� SQL ����� URL� ���� ����. �� SQL

� ��� URL� ���� �� � � �� ���� �����. � � �� �� ����� �

���� �� ��� �� ��� �����. � � �� �� URL� �� ��(FETCH, SELECT

INTO �)�� SQL ����� ���, � ��� ��� � � �� ���� � �� �����

�� � �� �����.

� ��� �� ���� ����� � ��� �� ���� �� � ����� �� ����

� ��� ��� �����. ����� �� �� � �� SQL ���� � � �� ���� �

���, ���� DataLink � �� SQL ���� �� ������ ����� ���� � �

���� �� � �� ���� ��� � ����.

DataLink� �� �

DataLink� �� � ��� DataLink �� �� ���� ���.

DataLink ��� ��� �� ��� ��� �� � ����� ��� � ����.

1. DB2 ������ ���� DATALINK� �� ��� ��� ����. � ��� ��� CREATE

TABLE � ALTER TABLE� �� SQL�� ��� � ����. � NULL� �� �� ����

��� � ���. ���� �� � �� SQL ����� ���� ���. �� DataLink ���

��� �� ��� �� ���� �� �����. SQL �� �� ���� �� ���� DataLink

�� �� � ����. �� �� INSERT � UPDATE�� �� SQL�� ���� ��

DLVALUE �� �� ����.

2. DLFM(DataLink File Manager)� ���� �� �� � ��� ����� � �� ����

� �!� ���� �������. � �� � , � �� � �� �� ��� �����. DataLink

� �� �� DataLink � �� SQL ���� �� �� ����� DLFM� ���� �

� �� ����. ��� SQL ���� �� ���� �� � ����� ��� ��� �� �

���� ���� ����� � � � ����.

3. � ����� �� ��� �� ���� �� �� �� � ���� ��� ��� �

DataLink ��� ���� ���. � ����� �� � ����, ��� ����� �� �

�� � �� ��� ��� ��� �����. ��� � � �� �� �� � �

��. � �� �� ��� ���� ���� ����, � �� ����� DataLink � � ��

��� ��� ��� �� �����. � �� �� �� ��� ������.

DataLink� �� � � �, ���� ��� ���� �� ���� �� � �� ��� ����.

v DataLink� �� � � � ��� ���� TCP/IP� ���� ���. ���� DataLink � ��

SQL ���� ��� ����, � � ����� � ���� ���. ���� �� �

SQL ����� 271

Page 284: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

� ���� ���. ����� ���� �� ���� URL�� TCP/IP ���� ����, DataLink

� � ����� � �� ����� ���. �� CFGTCP� ���� TCP/IP �� ����

� TCP/IP � ��� ��� � ����.

v SQL ���� �� ���� �� ������ ���� � ��� ���� ��� �� ��

� ������ ���� ���� ���. �� WRKRDBDIRE� ���� � ����� ���

�� �� ��� � ����. ��� �� TCP/IP ��� � ��� �������� �� �� �

���� ����.

v DLFM ��� � � ����� � ����� ���� ���. �� STRTCPSVR *DLFM� �

��� DLFM ��� ��� � ����. DLFM ��� CL �� ENDTCPSVR *DLFM� ����

��� � ����.

DLFM� �������, DLFM� ���� � ��� ��� ����. � DLFM �� QShell ��

���� ��� � �� �� �� � �� �� �� �����. ��� � ����� ����� CL

�� QSH� ������. �� DLFM � � ��� ��� � �� �� �� ��� ��. �

� �� dfmadmin -help� ���� ��! ��� � �� ������ �� � ����. ��

�� ���� �� CL ��� �������. CL ��� ���� � � ����� ���

� � �� �� ���� DLFM ��� ��� � ����. ���� ��� ��, QSH �� ��

���� � � ��� ����� CL �� �� ���� CL ��� ��� �� �� � ����.

� �� ��� ���� ������ ���� �� ����, � *IOSYSCFG �� ��� ����

�.

�� �

� �� � � ����� � � �� ������. ����� DLFM(Data Links File Manager)�

�� � ���� DataLink� ��� � �� ���� ���. � � �� dfmadmin -add_prefix�

���� � �� �����. � �� ���� �� CL ��� ADDPFXDLFM(DataLink � ���

� � � ��) �����.

�� ��, �� TESTSYS1�� � � ����� �� /mydir/datalinks/ ���� ����. ���

� �� ADDPFXDLFM PREFIX(’/mydir/datalinks/’)� ���� � �� �����. URL� �� ��

� � �� ��� � �� ���� �����.

http://TESTSYS1/mydir/datalinks/videos/file1.mpg

��

file://TESTSYS1/mydir/datalinks/text/story1.txt

�� � � �� dfmadmin -del_prefix� ���� � �� ��� �� ����. �� � � � �

� ��� ��� �� ���� � ����� � �� ��� � ���� ��

���� �� � ��.

�:

272 IBM i: ������ SQL �����

Page 285: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

1. �� ��� �� � ������ DataLink� � �� ���� ����.

v /QIBM

v /QReclaim

v /QSR

v /QFPNWSSTG

2. �� � �� � ��� ��� ������ ��� ��� �� �� � ���� �

��� ����.

v /home

v /dev

v /bin

v /etc

v /tmp

v /usr

v /lib

��� ���� �

��� ������� � ��� ��� �� ��� ������ ������. DLFM� DataLink�

� SQL ���� �� ���� �� �� �������� ���� ���. DLFM� ��� �

���� ���� � ��� ��� ��� �� �� DLFM�� ���� ���. ��� ��

����� ���� �� � � ��� dfmadmin -add_db� CL ��� ADDHDBDLFM(DataLink

� ���� ��� ������ ��) �����. � ���� SQL ���� �� �����

���� ���.

�� ��, �� /mydir/datalinks/ � �� ��� TESTSYS1 ����, TESTDB �� PRODDB ���

�� �� ����� SQL ���� � ��� ����� � � � ��� ���� ���. ���

������.

ADDHDBDLFM HOSTDBLIB((TESTDB) (PRODDB)) HOSTDB(TESTSYS1)

DLFM� ��� � � � ��� �������� ����, � ����� ���� � � ��� �

����.

SQL� � SQL/XML ��

� SQL�� XML ��� ��� �����. �� � XML � �� ��� ��, � ���� XML

��, XML � �� ���� ��� �� � XML �� ��, �� �� ��� �� XML ����

�� � �� ������ ��� ��� � ����. DB2 ������ ���� ���� SQL/XML

�, �� � �� �� XML ��� ��� �� �����.

SQL ����� 273

|

|

|

|

|

Page 286: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

XML �� �

XML ��� ��� � 2GB � XML �� ��� � ����. XML ��� ��� CCSID� ���

� ����. CCSID� ���� ��� SQL_XML_DATA_CCSID QAQQINI �� �� �����. �

��� ��� �� 1208(UTF-8)���. XML ��� ��� 1��� � ��� 2��� ��� ���

� ����.

�� ��� XML �� LOB �� �� ���� � �� 3.5GB� �� � ���. XML ��

� ��� ��� ���� ��� � ����.

XML ��� �� � XML �� ���� ����� ����� ��� � ����.

XML �� ���� ���� XML �� ��� � ����. XML �� XML �� ���� ���

XML �� ���� ����� �� ��� � ����. INSERT �� UPDATE�� ��� �� ��

�� ��� � ����.

XML � �� ��� LOB� ����. 257 ���� �LOB � �� �� ���� ������.

���� ��

� ����� ���� �� SQL� �� �� � ����� �� ����� ��� �� ��� �

����.

����� �� ��

XML� ����� �� ���� ������ XML � �� ��� � �� ���� �

�� � ����. �� ����� ��� SQL� �� XML ��� ��� �����.

v ILE RPG

v ILE COBOL

v C �� C++(�� SQL �� DB2 CLI)

v Java(JDBC �� SQLJ)

SQL � �� �� ����

��� �� XML� ���� CREATE PROCEDURE ��� ��� ��� SQL ���

� � �� ����� XML ���� ��� � ����. ��� �� XML� ���� CREATE

FUNCTION ��� ��� ��� SQL � � �� ��� XML ���� ��� �� �

���. � SQL � ��� ���� XML ��� �� �� ����, XML �� ����

���� SQL� ��� ���� �� � ��� �����.

��

XML ��� XML ��� URI ���� ���� �� ���� �����.

XML ��� ���(XSR)

XML ��� ���(XSR)� XML � �� XML ��� ��� ���� � ��� �� XML

274 IBM i: ������ SQL �����

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

Page 287: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

����� ������. XML ���� ���� XML ���� �����. �� ���� XML

��� ��� ����� ���� �� � ����.

��

XML ��� ��� �� ��� IBM i Navigator�� ��� � ����.

�� xml ��� ��

XML ��� �� XML ���� ��� XML ��� � �� � ����. �� ���� XML ��

�� � ��� �� � �� � ����. ��� �� ��� ��� XML ���� �� ���

��� ��� �����.

�� ��

339 ���� ���� �� xml ��� ���

″��″ �� ″��″�� ���� ��� �� xml ��� ��� XML ��� ��� �� ���� �

���� �� ����. ��� �� xml ��� ��� XML ���� �� ��� ��� ����

�. XML ��� ��� �� �� ���� �� � SQL ��� ��� ���.

XML �� � �� ��

�� � XML ���� � ���� DB2 ������ ��� XML ��� �� � ��� �� ���

��� �����.

XML ��� XML ��� ���� �� � �����. XML � � �� ���� �� � XML

��� �����. �� ��� XML �� ���� �����.

�� ���� � � ��� � �� ���� XML � ��� � ���, � ���� �� �

XML � ��� � ����.

��

XML ���� ������ ���� �� � ���� ��� ����� �� � �� ����.

� �� ��

���� �� ��� SQL INSERT�� ���� XML � �����. ��� ���� �

�� � ��� ��� ���� �� ����. �� �� �� �� XML ��� ��� �

� ����. ��� �� ���� �� XML ���� XML ��� ���(XSR)� �

��� ���. ��� SQL UPDATE�� ���� �����.

�� �� xml ��� ��

XML ��� ���� ��� �� xml ��� ��� ���� �� � XML � ����� �

�� � ����. ���� XML ��� ��� �� ��� �� ���� � �����. �

��� XML ��� ���� ���� � �����.

�� ��� ���� XML ��� ��� XML ��� ���(XSR)� �����.

SQL ����� 275

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

Page 288: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

XML ��� ���(XSR) ��

XML ��� ���(XSR)� XML ��� ��� ��� ��� ���� XML ���� ���

��. XML ��� ��� �� � ���� �� XML ��� �� ���� �� ��

� �������. XML ���� DB2� �� �� ����� ���� XSR� �����.

��

SQL� ������ ����� XML ���� ��� � �����.

SQL �� �� ���� XML ���� ��� ��� ���� ��� ����. �� ���,

���� �� XML ���� ��� � ��� SQL� ���� XML �� ��� ��� �� ���.

�� �� �� ���� DB2 ������ ��� �� �� ����� XML �� ��� �� ��

��. �� �� �� XML �� ���� �� XML �� ��� ���.

XML � �� �� �

������� �� ��� ���� XML �� �� �� ��� � ��� �� ��� ���� �

��. � � DB2 ������� �� �, � ������� �� � XML ���� � ���� �

�� ��� �� ����.

� ����� � �� ��� � �� �� �� � ���� ��� �� �� ���� ���

� �� ��� � � ����. � ��� ���� ���� �� ��� ��� � � �� ��� �

�����.

XML ��� �� �� �� � �

XML ���� ����, �� ���� �� �� �� �

XML ���� �� �� ��� ��� �� �� �� ��� �� ��� �� ����. ��

��� ��� � �� �� �� ��� �� ��� � �� ��� �����.

XML ���� �� ���� �� ���� � � ��

XML ���� ��� ��� ���� ���� ��� �� �� ����. � ���� �

�� ��� ���� �� � ����. �� ��� � ���� ��� ��� ����

�. � �� ���� ��� ��� ��� ���.

XML ���� �� �� ��� �� ���� � � ��

XML ����� ��� ��� ���� �� ��� ��� �� �����. �� �� ��

�� ��� �� ��� ���. �� ���� � �� ��� �� ��� � ��

ORDER BY�� ���� ��� � �� ���� ����.

�� �� ��� ��� ��� ��

���� ��� ��� �� �� ��� ��� � ����. �� ��, ���� � ��� �� �

��� XML ���� ��� � ����. �� ��� ��� �� ��� ��� �� � �� ��

��� ����.

276 IBM i: ������ SQL �����

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

Page 289: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� �� � ��� �

�� ���� �� ��� ��� ����. �� ��, � ���� � ���� �����

� ���� � ���� ����� �� � ����. ��� �� �� ���

�� XML ���� ��� �� � ����. �� ��, XML ���� ��� �� ���

� ����.

��� ��� �� �� �� ��� �

� � XML ��� � � � ��� ��� ����. ����� ��� � ��� ��

�� ���� � ���� ����.

���� �� �� ���� ��� �

���� �� ��� ��� ������� ��� �� ���� �� ��� �� ��

�� �� �� ���� ���� �� �� � ����. �� �� �� ��� ���

�� ���� OLAP(Online Analytical Processing)� �� �� ����. �� XML ��� �

�� �� ��� ��� �� � ���� �� ���� ��� �� XML ��� �

��� ��� �� � ����.

��� �� ���� �� ��� �� �

���� � �� � ��� �� ����� �� ���� �� � ��� ����� �

���. �� ��, � ��� �� ��� � � ����. �� ��� �� � ��� XML

��� �� � ����. �� � �� ���� �� �� �� ����. �� ��� �

� � �� ��� �� ��� ���� � ��� ���� � �� �� ��� �� �

� �� ���� �� �� � �� � ����.

��� � � �� ��� �� ���� �� ��� �� �

� ��� ��� �� �� ��� ��� ��� �� ��� ��� �� ��� �� �

���. �� ��, � ������ �, ��, ��, ��, ��, ��, �� ���� �� ��

����� �� � ��� ��� ��� ����. ����� �� �� ���� �� ���

� �� ��� �����. �, �� ����� ��� �� ��� ��� ��� ����. � �

�� ���� �� ��� �� ���� �"�� XML ���� ���� � ��

�� � ����.

�� �� � ��� �

XML � �� ����� �� ��� � ���. ��� XML ��� �� �� �����

����� �� �� ���� �� ���� ���� ���.

��� �� ��� � �

XML � XML ���� �� ��� ����� �����. �� �� �� �� � ��

� �� ��� �� ���� �� XML � ���� ���� �� �� �� � �

���. �� �� �� � � �� � �� ���� ���� �� XML� ���� �� �

� � ����.

SQL ����� 277

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

Page 290: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

XML ���

XML ��� ��� � �� ���� �� � XML ��� ���� ��� � ��� � �� ��

�. � ���� XML ���� ��� XML ��� � ��� ����� DB2 ������� ��

� ��� ����.

� ���� ��� �� �� �� � ��� � ����.

v XML ���� ��� � �� ��� ��

v XML �� � XML �� ��

v XML � �� XML �� ��

v XML ���� �� XML �� ��� �

v XSLT ����� ��

��� �� ����� ��� IBM i Navigator SQL � � �� �� ����� ���. ��� SQL

� ���� XML �� ���� � � ���� ��� ����.

� 1: XML ��� ��� � �� � ��

� ��� XML � �� ��� �� ��� ����.

XML � �� Customer�� ���� ������.

CREATE SCHEMA POSAMPLE;

SET CURRENT SCHEMA POSAMPLE;

CREATE TABLE Customer (Cid BIGINT NOT NULL PRIMARY KEY, Info XML);

1� � ��� �����, XML� ���� � ����� ��� ������.

�� ALTER TABLE SQL�� ���� � ���� �� ��� XML � ��� � ����.

���� ����

� 2: XML � ��� �� XML �� ��

���� �� XML ��� SQL INSERT�� ���� XML �� �� � �����. � ���

XML � XML ��� ���� ��� ����.

�� XML ��� ����� ����� ���� �����. XML, 2� �� �� ��� ��

�� ������ �� XML ���� ��� � ��� ��� ������ XML ��� �� ��

��� ���� ���� XML �� 2� ��� ��� �� �����.

� ��� SQL � � ���� XML �� �� � ���� XML ��� ���� ��� ��

��(��� XML ��� �� �� ����). ���� , XML ��� ��� ���� ��� ���

���� �� �� � ���. XMLPARSE �� ���� ���� �� ���� ���� ��

278 IBM i: ������ SQL �����

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|||||

|

|

|

|

|

|

|

|

|

|

|

|

Page 291: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�. �� INSERT �� UPDATE ����� XMLPARSE �� ���� ���� � XML �

��� ���� �� �� � ����. � �� ��� ���� ���� �����. � �

��� XML �� ��� ������.

�� 1�� ��� Customer ���� �� XML ��� ������.

INSERT INTO Customer (Cid, Info) VALUES (1000,'<customerinfo xmlns="http://posample.org" Cid="1000"><name>Kathy Smith</name><addr country="Canada"><street>5 Rosewood</street><city>Toronto</city><prov-state>Ontario</prov-state><pcode-zip>M6W 1E6</pcode-zip>

</addr><phone type="work">416-555-1358</phone>

</customerinfo>');

INSERT INTO Customer (Cid, Info) VALUES (1002,'<customerinfo xmlns="http://posample.org" Cid="1002"><name>Jim Noodle</name><addr country="Canada"><street>25 EastCreek</street><city>Markham</city><prov-state>Ontario</prov-state><pcode-zip>N9C 3T6</pcode-zip>

</addr><phone type="work">905-555-7258</phone>

</customerinfo>');

INSERT INTO Customer (Cid, Info) VALUES (1003,'<customerinfo xmlns="http://posample.org" Cid="1003"><name>Robert Shoemaker</name><addr country="Canada"><street>1596 Baseline</street><city>Aurora</city><prov-state>Ontario</prov-state><pcode-zip>N8X 7F8</pcode-zip>

</addr><phone type="work">905-555-2937</phone>

</customerinfo>');

��� �� ��� ������ � � � ����.

SELECT * from Customer;

��� SQL�� � ��� ���� , XML �� � ��� ����. �� ���� ��� ��

�� XMLSERIALIZE �� ���� ���.

���� ����

� 3: XML �� ��� XML �� ��

� ��� SQL�� ���� XML ��� ���� ��� ����.

SQL ����� 279

|

|

|

|

|||||||||||||||||||||||||||||||||||

|

|

|

|

|

|

|

Page 292: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

SQL� �� ��

SQL� ���� XML � �� XML ��� ����� SQL UPDATE�� ���� �� �� ��

� ���� ���.

��� �� �� 2� �� �� ��� ������(��� <street>, <city> � <pcode-zip> �� �

� ����).

UPDATE customer SET info ='<customerinfo xmlns="http://posample.org" Cid="1002"><name>Jim Noodle</name><addr country="Canada"><street>1150 Maple Drive</street><city>Newtown</city><prov-state>Ontario</prov-state><pcode-zip>Z9Z 2P2</pcode-zip>

</addr><phone type="work">905-555-7258</phone>

</customerinfo>'WHERE Cid = 1002;

��� �� XML ��� ������ � � � ����.

SELECT * from Customer;

��� SQL�� � ��� ���� , XML �� � ��� ����. �� ���� ��� ��

�� XMLSERIALIZE �� ���� ���.

Cid=″1002″ ��� � <street>, <city> � <pcode-zip> �� �� ����.

� ���� XML � ��� XML ��� ��� � ����.

���� ����

� 4: XML ���� � XML �� �� ��

� ��� XML �� ��� � ��� ����. �� XML ���� ��� XML �� ����

�� � ����. DTD ��� �� ���� ����(DTD� ��� ��� �� ��� ��

�� DOCTYPE� ��� DTD� ���� ��� ��� ��� � ��).

IBM Rational Application Developer� ��� DTD, � ��� �� XML ��� �� � ��

��� XML ���� ���� ���� �� ��� �� ����.

�� XML ��� ���(XSR)� XML ���� ���� ���� �� � ����. � �� ���

XML ���� ���� � XML ��� �� ��� ���. �� XML ��� ��� ������

��� ���� ���.

��� �� posample.customer XML ���� ��� ��� ������.

CREATE PROCEDURE SAMPLE_REGISTERLANGUAGE SQLBEGIN

280 IBM i: ������ SQL �����

|

|

|

|

|

||||||||||||

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|||

Page 293: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

DECLARE CONTENT BLOB(1M);VALUES BLOB('<?xml version="1.0"?>

<xs:schema targetNamespace="http://posample.org"xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"><xs:element name="customerinfo"><xs:complexType><xs:sequence><xs:element name="name" type="xs:string" minOccurs="1" /><xs:element name="addr" minOccurs="1" maxOccurs="unbounded"><xs:complexType><xs:sequence><xs:element name="street" type="xs:string" minOccurs="1" /><xs:element name="city" type="xs:string" minOccurs="1" /><xs:element name="prov-state" type="xs:string" minOccurs="1" /><xs:element name="pcode-zip" type="xs:string" minOccurs="1" />

</xs:sequence><xs:attribute name="country" type="xs:string" />

</xs:complexType></xs:element><xs:element name="phone" nillable="true" minOccurs="0" maxOccurs="unbounded"><xs:complexType><xs:simpleContent><xs:extension base="xs:string"><xs:attribute name="type" form="unqualified" type="xs:string" />

</xs:extension></xs:simpleContent>

</xs:complexType></xs:element><xs:element name="assistant" minOccurs="0" maxOccurs="unbounded"><xs:complexType><xs:sequence><xs:element name="name" type="xs:string" minOccurs="0" /><xs:element name="phone" nillable="true" minOccurs="0" maxOccurs="unbounded"><xs:complexType><xs:simpleContent ><xs:extension base="xs:string"><xs:attribute name="type" type="xs:string" />

</xs:extension></xs:simpleContent>

</xs:complexType></xs:element>

</xs:sequence></xs:complexType>

</xs:element></xs:sequence><xs:attribute name="Cid" type="xs:integer" />

</xs:complexType></xs:element>

</xs:schema>') INTO CONTENT;

CALL SYSPROC.XSR_REGISTER('POSAMPLE', 'CUSTOMER', 'http://posample.org', CONTENT, null);END;

SET PATH POSAMPLE;

CALL SAMPLE_REGISTER;

CALL SYSPROC.XSR_COMPLETE('POSAMPLE', 'CUSTOMER', null, 0);

SQL ����� 281

||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

Page 294: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

XSR� �� ����� �� ��� QSYS2.XSROBJECTS ���� �� ���� XML ��

�� ������ � � � ����. � �� � � ��(���� �� ����)� ��� ����.

SELECT XSROBJECTSCHEMA, XSROBJECTNAME FROM QSYS2.XSROBJECTSWHERE XSROBJECTSCHEMA = 'POSAMPLE';

XSROBJECTSCHEMA XSROBJECTNAME-------------------- --------------------POSAMPLE CUSTOMER

�� � XML ���� ��� �� ��� � ����. ��� �� �� INSERT �� UPDATE

�� � �����. XMLVALIDATE �� ���� ��� �� ������. XMLVALIDATE�

�� INSERT �� UPDATE ��� ��� �� ���� �� ����.

�� INSERT�� ��� �� posample.customer XML ���� �� ��� ��� �� Customer

���� Info � � XML ��� �����.

INSERT INTO Customer(Cid, Info) VALUES (1003, XMLVALIDATE (XMLPARSE (DOCUMENT'<customerinfo xmlns="http://posample.org" Cid="1003"><name>Robert Shoemaker</name><addr country="Canada"><street>1596 Baseline</street><city>Aurora</city><prov-state>Ontario</prov-state><pcode-zip>N8X 7F8</pcode-zip>

</addr><phone type="work">905-555-7258</phone><phone type="home">416-555-2937</phone><phone type="cell">905-555-8743</phone><phone type="cottage">613-555-3278</phone>

</customerinfo>' PRESERVE WHITESPACE )ACCORDING TO XMLSCHEMA ID posample.customer ));

XMLVALIDATE� XML ���� �� �����. � ���� XML ��� �� ���� ���� �

�� XMLVALIDATE� XMLPARSE �� � ���� ���. INSERT, UPDATE �� MERGE

���� XML� �� �� ���� �� � ��� ������. ���� INSERT�� �����.

XMLPARSE �� �� XML ��� ��� XML �� �����.

��� � � ��� ����� � ��� Info � ������.

SELECT Info FROM Customer;

� ��� �� XML ��(� ��� � �� ���)� ���� ���.

���� ����

� 5: XSLT ������ �� ��

XSLTRANSFORM �� ���� ������ � XML ���� �� ���� ��� � ����.

� ��� XSLTRANSFORM � �� �� ���� ������� �� XML ��� ���� �

�� ����. � XML ���� �� �� �� ��� �� ����. ��� �� �

student ���� �� ID, �, �, �� � ��� �� �� ���� �� ����.

282 IBM i: ������ SQL �����

|

|

||||||

|

|

|

|

|

|||||||||||||||

|

|

|

|

|

|

|

|

|

|

|

|

|

Page 295: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

<?xml version="1.0"?><students xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

<student studentID="1" firstName="Steffen" lastName="Siegmund"age="23" university="Rostock"/>

</students>

XSLT �� �� XML ��� ��� ��� �� ��� � � �� HTML � ���� ����

����. �� ��� �� XSLT ����(� ������� ���)� �����.

<?xml version="1.0" encoding="UTF-8"?><xsl:stylesheet version="1.0"

xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:param name="headline"/><xsl:param name="showUniversity"/><xsl:template match="students">

<html><head/><body><h1><xsl:value-of select="$headline"/></h1><table border="1"><th><tr><td width="80">StudentID</td><td width="200">First Name</td><td width="200">Last Name</td><td width="50">Age</td><xsl:choose>

<xsl:when test="$showUniversity =''true''"><td width="200">University</td>

</xsl:when></xsl:choose></tr></th><xsl:apply-templates/></table></body></html></xsl:template>

<xsl:template match="student"><tr><td><xsl:value-of select="@studentID"/></td><td><xsl:value-of select="@firstName"/></td><td><xsl:value-of select="@lastName"/></td><td><xsl:value-of select="@age"/></td><xsl:choose>

<xsl:when test="$showUniversity = ''true'' "><td><xsl:value-of select="@university"/></td>

</xsl:when></xsl:choose></tr>

</xsl:template></xsl:stylesheet>

� ����� � XSLT �� � �� ��� � ��� � � ���� ��� � ��� ���

��.

1. XML �� � ���� ��� ��� � �� ���� ������.

SQL ����� 283

|||||

|

|

|||||||||||||||||||||||||||||||||||||||||||

|

|

|

Page 296: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

SET CURRENT SCHEMA USER;

CREATE TABLE XML_TAB (DOCID INTEGER, XML_DOC XML, XSL_DOC CLOB(1M));

2. ���� ��� ������. � ����� XML ��� XSLT ����� ��� ��� �

� ���� �� � ����. INSERT�� �� ��� XSLT ����� � ��� ���

��. �� INSERT�� ����� �� ���� �� � ���� �� � XSLT �����

������.

INSERT INTO XML_TAB VALUES(1,'<?xml version="1.0"?><students xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

<student studentID="1" firstName="Steffen" lastName="Siegmund"age="23" university="Rostock"/>

</students>',

'<?xml version="1.0" encoding="UTF-8"?><xsl:stylesheet version="1.0"

...</xsl:stylesheet>'

);

3. XSLTRANSFORM � �� �� ���� XML ��� ������.

SELECT XSLTRANSFORM (XML_DOC USING XSL_DOC AS CLOB(1M)) FROM XML_TAB;

� �� �� ��� �� HTML ����.

<html><head><META http-equiv="Content-Type" content="text/html; charset=UTF-8"></head><body><h1></h1><table border="1"><th><tr><td width="80">StudentID</td><td width="200">First Name</td><td width="200">Last Name</td><td width="50">Age</td></tr></th><tr><td>1</td><td>Steffen</td><td>Siegmund</td><td>23</td></tr></table></body></html>

�� ���� ���, ��� � XSLT ����� ��� ���� (XML ��� �� ��

��� ����� �� ��� �� �(�� ��, � HTML �� XHTML�))� �� � ����.

��� ��� �� ���� ��� � XSLT �� �� ���� ��� � ����. ��� �

� �� XML ���� XSLT ���� �� ��� ���� ���� param ���� ���.

284 IBM i: ������ SQL �����

|

|

|

|

|

|

|||||||||||||

|

|

|

|||||||||||||||||||||||

|

|

|

|

Page 297: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� ��, ��� �� � ����� �� ���� �����.

<xsl:param name="showUniversity"/><xsl:param name="headline"/>

�� ���� �� �� �� � � ����� ���� �����. ��� �� �� ��� �

�� ��� �� ��� �� ������.

CREATE TABLE PARAM_TAB (DOCID INTEGER, PARAM VARCHAR(1000));

INSERT INTO PARAM_TAB VALUES(1,'<?xml version="1.0"?><params xmlns="http://www.ibm.com/XSLTransformParameters">

<param name="showUniversity" value="true"/><param name="headline">The student list ...</param>

</params>');

�� ��� ������.

SELECT XSLTRANSFORM (XML_DOC USING XSL_DOC WITH PARAM AS CLOB(1M)) FROM XML_TAB X, PARAM_TAB P

WHERE X.DOCID=P.DOCID;

� ��� �� HTML� ����.

<html><head><META http-equiv="Content-Type" content="text/html; charset=UTF-8"></head><body><h1>The student's list ...</h1><table border="1"><th><tr><td width="80">StudentID</td><td width="200">First Name</td><td width="200">Last Name</td><td width="50">Age</td><td width="200">University</td></tr></th><tr><td>1</td><td>Steffen</td><td>Siegmund</td><td>23</td><td>Rostock</td></tr></table></body></html>

���� ����

SQL ����� 285

|

||

|

|

||||||||||

|

|||

|

||||||||||||||||||||||||

|

Page 298: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

XML �� ��

XML ��� ����� XML � ���� ����� � ���� XML � ���� ��

�.

�� �� XML � �

� ���� XML � ����� ADD�� ALTER TABLE�� XML ��� ��� � ����

�. ����� �� ��� XML � �� � ����.

� �������� �� XML � � ���� �� ���� �� ����. ���

��� ����.

CREATE TABLE Customer (Cid BIGINT NOT NULL PRIMARY KEY,Info XML,History XML);

Customer� � MyCustomer�� ���� ��� � ��� ��� XML � �����

�.

SET CURRENT SCHEMA USER;

CREATE TABLE MyCustomer LIKE Customer;ALTER TABLE MyCustomer ADD COLUMN Preferences XML;

XML �� ��

XML � ���� ����� SQL INSERT�� ������. XML � �� ��� XML 1.0 ��

� �� �� ���� �� XML ���� ���. ����� ��� ��� XML, �� �� 2�

��� �����.

DB2 ������ ��� ��� �� ��� ��� ���� � �� ��� ��� � ��� ���

� �� ��� ����� XML ���� ���� ���.

������ XML ���� � � ��� �����. XML � ���� ��� ��� ���� �

� XML �� ���� ���� ���. ����� ��� ��� XML ��� �� DB2 �

����� ��� � ��� ���� �����. ����� ��� ��� XML ��� ��� ��

��� ��� � XMLPARSE �� ���� ���� ���� � � ��� ���� XML ��

���� ��� � ����.

�� �� �� XML ���� �� XML ��� ���� ��� � �� ����. XMLVALIDATE

�� �� ��� � ����.

�� �� XML ���� XML � ��� � �� ��� �����. ���� Customer ���

� � MyCustomer ���� �����. ��� XML ���� c6.xml �� ��� ��� ���

�.

<customerinfo xmlns="http://posample.org" Cid="1015"><name>Christine Haas</name><addr country="Canada"><street>12 Topgrove</street>

286 IBM i: ������ SQL �����

|

|

|

|

|

|

|

|

|||

|

|

|

||

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

||||

Page 299: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

<city>Toronto</city><prov-state>Ontario</prov-state><pcode-zip>N8X-7F8</pcode-zip>

</addr><phone type="work">905-555-5238</phone><phone type="home">416-555-2934</phone>

</customerinfo>

�: JDBC ������� c6.xml �� XML ���� 2� ���� � XML � ���� ���

���.

PreparedStatement insertStmt = null;String sqls = null;int cid = 1015;sqls = "INSERT INTO MyCustomer (Cid, Info) VALUES (?, ?)";insertStmt = conn.prepareStatement(sqls);insertStmt.setInt(1, cid);File file = new File("c6.xml");insertStmt.setBinaryStream(2, new FileInputStream(file), (int)file.length());insertStmt.executeUpdate();

�: � �� C ������� 2� XML ��� ����� XML � ���� ������.

EXEC SQL BEGIN DECLARE SECTION;sqlint64 cid;SQL TYPE IS XML AS BLOB (10K) xml_hostvar;

EXEC SQL END DECLARE SECTION;...cid=1015;/* Read data from file c6.xml into xml_hostvar */...EXEC SQL INSERT INTO MyCustomer (Cid,Info) VALUES (:cid, :xml_hostvar);

XML �

XML ��� XML ���� � � ��� ���� XML �� ���� ���� �� ����.

DB2 ������ ��� ��� ���� ����� ��� XML ��� �� ���� ��� � �

���.

�� XML ��� ��� �� ��� ����.

v XML ��� ��� ��� ���� ������ ��� ���� ����� XML ��� ��� �

�� ���

������ ��� ��� ��� ��� ��� ��� ��� ��� �� � � � ��� ��

���.

� �� ��� ���� ���.

v ��� ��� ��(��, ��� �� 2�)� SQL ��, ��� �� �� ��� ��� INSERT,

UPDATE �� MERGE�� XML � �� �. ���� ��� � �� ��� ����.

SQL ����� 287

|||||||

|

|

|||||||||

|

|||||||||

|

|

|

|

|

|

|

|

|

|

|

|

Page 300: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� XML ���� �� XMLPARSE �� ��� � �� XML ��� �����. XML ��� �

�� � �� ����� XMLPARSE� ��� ��� � ����. �� ��, XML � ��� �

��� ��� XML ��� �� ���� ���� ��� � ����.

XMLPARSE �� XML ��, 2� �� ��� ��� ��� ��� ���� �����. ��

� SQL ������ XMLPARSE� �� ��� ���� ��� ��� � ��� ���

� ���� ���. �� ��, ��� ����.

INSERT INTO MyCustomer (Cid, Info)VALUES (?, XMLPARSE(DOCUMENT CAST(? AS CLOB(1K)) PRESERVE WHITESPACE))

� �� SQL ������ �� XMLPARSE �� ��� �� �� XML ��(XML AS

BLOB, XML AS CLOB �� XML AS DBCLOB ��)�� ��� � ���.

XML � � �� ��

�� �� �� XML �� ������� ���� ��� � � �� ��� ��� ��� ���

� ����.

XML �� �� ��� �� � �� � ��� ��� ��� �� ��(U+0020), �� ��

(U+000D), � ��(U+000A) �� �(U+0009)���. � ��� ��� ���� �� �� � ���

� ���� ����.

� ��� �� ��� ���� �� �����. �� ��, �� ���� <a> � <b> ��� ���

</b> � </a> ��� ��� � �����.

<a> <b> and between </b> </a>

XMLPARSE� ���� ���� STRIP WHITESPACE �� PRESERVE WHITESPACE ��� �

��� � ��� �� �����. ��� �� � ��� ���� ����.

�� XML ��� :

v �� ��� ��� XML ��� ���� XML ��� ����� ��� �� DB2 �����

� ��� �� ��� ���.

v �� ��� ��� XML ��� �� �� CURRENT IMPLICIT XMLPARSE OPTION ��

����� ���� � ��� �� ��� � ����. � �� ����� STRIP WHITESPACE

�� PRESERVE WHITESPACE� �� � ����. ��� �� � ��� ���� ����.

XML ��� �� ���� DB2 ������ ��� CURRENT IMPLICIT XMLPARSE OPTION

�� ����� ��� ��� � ���� ���� �� � �� ��� �� �����.

xmlvalidate(? ACCORDING TO XMLSCHEMA ID schemaname)xmlvalidate(?)xmlvalidate(:hvxml ACCORDING TO XMLSCHEMA ID schemaname)xmlvalidate(:hvxml)xmlvalidate(cast(? as xml) ACCORDING TO XMLSCHEMA ID schemaname)xmlvalidate(cast(? as xml))

288 IBM i: ������ SQL �����

|

|

|

|

|

|

||

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

||||||

Page 301: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

� ?� XML ���� ���� :hvxml� XML ��� �����.

XML �� XML ��� �� �� ��� �� ���� xml:space ��� �����. xml:space

��� �� �� �� XML ��� �� �� ��� �����.

�� ��, �� ���� <b> �� �� �� ��� XML �� ��� ���� �� ���, ��

xml:space="preserve" ���� �� �� �� ��� �� �� �����.

<a xml:space="preserve"> <b> <c>c</c>b </b></a>

�� �� ����� <b> �� �� �� ��� XML �� ���� ��� � ���, ��

xml:space="default" ���� �� �� �� ��� �� �� �����.

<a xml:space="default"> <b> <c>c</c>b </b></a>

XML ��� �� SQL/XML �� ��

�� XML �� ��� ����� ��� �� �� ���� XML �� ��� � ���, ��

� ���� �� XML �� ��� ���. �� ��� ���� ��� ���� ���.

SQL/XML �� �� ���� �� �� XML� �����. XML ��� ����� ��� �� �

� ���� � ��� �� SQL ��� ���� ���� ���. � � ��� XML � �� ��

��� ������.

�� SQL/XML �� �� ���� XML �� ��� � ����.

XMLAGG �� ��

XML � �� �� �� �� �� �� ��� XML �� �����.

XMLATTRIBUTES ��� ��

���� XML ��� �����. � �� XMLELEMENT �� ��� ��� � ��

��.

XMLCOMMENT ��� ��

���� �� �� �� XML �� �����.

XMLCONCAT ��� ��

XML �� �� �� � ��� �� �����.

XMLDOCUMENT ��� ��

���� �� XML �� XML �� �����. DB2 ���� ���� �� XML �� �

��� ���. � �� XML ����� XML ��� �����.

XMLELEMENT ��� ��

XML �� XML �� �����. DB2 ���� ���� �� XML �� ���� ���.

XMLELEMENT � � � �� ���� � ��� ���� � . �� XML ��

XMLDOCUMENT �� �� ���� ���.

SQL ����� 289

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

Page 302: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

XMLFOREST ��� ��

XML �� � XML �� �����.

XMLGROUP �� ��

����� �� ��� ���� � �� �� ��� �����. ��� �� �� �

�� � �� ��� ��� � �� ��� � �� ��� �� ��� �����. ���

��� � �� � �� �� � � �� ��� ��� ��� � �� ���� ��� � ���

�.

XMLNAMESPACES ��

���� � �� ��� �����. � ��� XMLELEMENT � XMLFOREST ��

��� ��� � ����.

XMLPI ��� ��

� �� ���� �� XML �� �����.

XMLROW ��� ��

����� �� ��� ���� � �� �� �����. ��� � �� ��� � ��

� �� ��� �����. ��� � �� ��� � ��� ���� ���� � ����.

XMLTEXT ��� ��

�� �� �� XML �� �����.

XSLTRANSFORM ��� ��

�� XML ���� � �� ���� XML ���� �����.

�� ��

303 ���� �XML � ��

XML � �� DB2 ��������� ������ �������� � � ��� ���� XML

���� ���� �� ����.

: �� �� �� XML �� ��

� �� SQL/XML �� �� � ����� ��� �� XML �� ��� � �� ��� ���

��.

� �� � ���� �� ��� XML ��� ��� � �� ��� �����. �� ����,

v � <item> ��� XMLELEMENT �� ���� PRODUCT ��� NAME � ��� ����

�.

v �� �� <item> ��� XMLAGG� ����, �� <allProducts> �� �� �����.

v XMLNAMESPACES �� � ��� <allProducts> ��� �����.

SELECT XMLELEMENT (NAME "allProducts",XMLNAMESPACES (DEFAULT 'http://posample.org'),XMLAGG(XMLELEMENT (NAME "item", p.name)))

FROM Product p

� ��� �� XML �� �����. ���� �� ���� ����� ����.

290 IBM i: ������ SQL �����

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

||||

|

Page 303: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

<allProducts xmlns="http://posample.org"><item>Snow Shovel, Basic 22 inch</item><item>Snow Shovel, Deluxe 24 inch</item><item>Snow Shovel, Super Deluxe 26 inch</item><item>Ice Scraper, Windshield 4 inch</item>

</allProducts>

XMLAGG� ��� ���� �� XMLROW �� ���� �� � ��� �� �� ��� XML

��� ��� � ����. �� ���� � �� � �� �����.

SELECT XMLELEMENT (NAME "products",XMLNAMESPACES ('http://posample.org' AS "po"),XMLROW(NAME AS "po:item"))

FROM Product

�� ��� ��� ����.

<products xmlns:po="http://posample.org"><row>

<po:item>Snow Shovel, Basic 22 inch</po:item></row>

</products><products xmlns:po="http://posample.org">

<row><po:item>Snow Shovel, Deluxe 24 inch</po:item>

</row></products><products xmlns:po="http://posample.org">

<row><po:item>Snow Shovel, Super Deluxe 26 inch</po:item></row>

</products><products xmlns:po="http://posample.org">

<row><po:item>Ice Scraper, Windshield 4 inch</po:item></row>

</products>

: �� �� XML �� ��

� �� SQL/XML �� �� � ����� ��� �� XML �� ��� � �� ��� ���

��.

� �� � ���� �� ��� XML ��� ��� � �� ��� �����. �� ����,

v <prod> ��� XMLFOREST �� ���� name � numInStock�� �� ���� �����

�����. � ���� PRODUCT ���� NAME � INVENTORY ���� QUANTITY �

��� ����.

v �� �� <prod> ��� �� <saleProducts> �� �� �����.

SELECT XMLELEMENT (NAME "saleProducts",XMLNAMESPACES (DEFAULT 'http://posample.org'),XMLAGG (XMLELEMENT (NAME "prod",

XMLATTRIBUTES (p.Pid AS "id"),XMLFOREST (p.name AS "name",

i.quantity AS "numInStock"))))FROM PRODUCT p, INVENTORY iWHERE p.Pid = i.Pid

SQL ����� 291

||||||

|

|

||||

|

||||||||||||||||||

|

|

|

|

|

|

|

|

||||||||

Page 304: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� ��� �� XML ��� �����.

<saleProducts xmlns="http://posample.org"><prod id="100-100-01"><name>Snow Shovel, Basic 22 inch</name><numInStock>5</numInStock>

</prod><prod id="100-101-01"><name>Snow Shovel, Deluxe 24 inch</name><numInStock>25</numInStock>

</prod><prod id="100-103-01"><name>Snow Shovel, Super Deluxe 26 inch</name><numInStock>55</numInStock>

</prod><prod id="100-201-01"><name>Ice Scraper, Windshield 4 inch</name><numInStock>99</numInStock>

</prod></saleProducts>

: � �� �� � �� �� XML �� ��

� �� SQL/XML �� �� � ��� ��� ��� ��� �� XML �� ��� � ��

��� �����.

XMLELEMENT �� XMLFOREST� ���� XML �� ���� ��� ��� ��� � ��� �

� � ����. XMLELEMENT � XMLFOREST� EMPTY ON NULL � NULL ON NULL ���

� ��� ��� � � ��� ��� ��� � ��� ���� ��� ��� � ����.

XMLELEMENT� ��� � ���� EMPTY ON NULL���. XMLFOREST� ��� � ����

NULL ON NULL���.

� ���� INVENTORY ���� LOCATION �� � �� ��� �� �����. ���

XMLFOREST� ���� �� �� ���� ��� �� ��� <loc> ��� ���� ����.

SELECT XMLELEMENT (NAME "newElem",XMLATTRIBUTES (PID AS "prodID"),XMLFOREST (QUANTITY AS "quantity",

LOCATION AS "loc"))FROM INVENTORY

�� ��� ��� �� �� �� <loc> ��� ���.

<newElem prodID="100-100-01"><quantity>5</quantity>

</newElem>

EMPTY ON NULL ��� �� �� ��� � <loc> ��� �����.

SELECT XMLELEMENT (NAME "newElem",XMLATTRIBUTES (PID AS "prodID"),XMLFOREST (QUANTITY AS "quantity",

LOCATION AS "loc" OPTION EMPTY ON NULL))FROM INVENTORY

292 IBM i: ������ SQL �����

|

||||||||||||||||||

|

|

|

|

|

|

|

|

|

|

|||||

|

|||

|

|||||

Page 305: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� �� � <loc> ��� ����.

<newElem prodID="100-100-01"><quantity>5</quantity><loc/>

</newElem>

: XSLT ������ �� ��

XML ���� �� ���� ���� � ��� XSLT(Extensible Stylesheet Language Transformations)�

������. �� XSLTRANSFORM �� ���� XML ��� HTML, �� ��� �� �� XML

���� ��� � ����.

XSLT� ����� ���� XML� �� ��� ���� �����. XML ��� � �� ���

��� � ��� XSLT� � �� � � XPath �� ��� ���� ���� ���� �� ��

� ����. XSLT� XML� HTML� ���� � �� ����� ��� XML ���� ���

XML ��� �� ���� ��� ��� ���� �� ��� � ����. �� XML ���� ���

� ��(�: � � �� ��� �� troff� �� ��� ��)�� ���� � XSLT� ��� � �

���. XSLT�� � ��� �� � �� ����.

v ���(XML� HTML� ��)

v ��� ��(��� XML ���� ���� ��, ����� �� XML ���� �� SOAP� ��

��� �� ���� ��)

� �� XML �� �� ����� � ��� ��� � ����. XSLT� XPath ���

��� �� XML ����� �� ��� �� � �� �����. �� XSLT ���� �� �

� ��� ��� �� � � ��� �� �� ��� ��� ��� � ����.

XSLT �� ��

XSLT ����� XML ��� XSL(Extensible Stylesheet Language)� �����. XSL� C ��

Perl� �� � �� ��� ��� XSL� ��� ����� ��� ��� ���� ��� ���

�����. XSL ����� ��� XML �� �� ��� �� ��� �� �� ��� �

�� template ��� �� �� ���. XSLT ��� ��� ��� ��� ����

��� �����. �� ��,

<xsl:template match="product">

�� � ���� ��� �� XML �� �� <product> ��� ��� ���� � ���� ���

��. XSLT �� �� ��� ���� ���� �� �� ���.

�� ��� XSLT ���� ��� ����. � , ��� �� ���� ��� � �

�� �� � ��� �� �� XML �����.

<?xml version="1.0"?><product pid="100-201-01">

<description><name>Ice Scraper, Windshield 4 inch</name>

SQL ����� 293

|

||||

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

||||

Page 306: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

<details>Basic Ice Scraper 4 inches wide, foam handle</details><price>3.99</price>

</description></product>

� ��� � �� �� ���� �� ��, � � ��� �� ��� ���. � �� ��

<name>� �� �� �� ���. �� ��� �� � ��� ��(� <product> ��� pid

��)� ���. � ��� � ���� ���� �� XSLT ���� �� � ����.

<?xml version="1.0" encoding="UTF-8"?><xsl:stylesheet version="1.0"

xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:output method="html"/>

<xsl:template match="/"><html>

<body><h1><xsl:value-of select="/product/description/name"/></h1><table border="1">

<th><xsl:apply-templates select="product"/>

</th></table>

</body></html>

</xsl:template><xsl:template match="product">

<tr><td width="80">product ID</td><td><xsl:value-of select="@pid"/></td>

</tr><tr>

<td width="200">product name</td><td><xsl:value-of select="/product/description/name"/></td>

</tr><tr>

<td width="200">price</td><td>$<xsl:value-of select="/product/description/price"/></td>

</tr><tr>

<td width="50">details</td><td><xsl:value-of select="/product/description/details"/></td>

</tr></xsl:template>

</xsl:stylesheet>

XSLT �� �� � ���� �� ��� � � ���� ���� �� HTML ��� �����.

<html><body><h1>Ice Scraper, Windshield 4 inch</h1><table border="1"><th><tr><td width="80">product ID</td><td>100-201-01</td></tr><tr><td width="200">product name</td><td>Ice Scraper, Windshield 4 inch</td>

294 IBM i: ������ SQL �����

||||

|

|

|

|||||||||||||||||||||||||||||||||||

|

||||||||||

Page 307: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

</tr><tr><td width="200">price</td><td>$3.99</td></tr><tr><td width="50">details</td><td>Basic Ice Scraper 4 inches wide, foam handle</td></tr></th></table></body></html>

XSLT �� �� ��� ��(�� ��� ��� ��)� �� �� XML ��� ������.

��� ��� ��� ��� ��� ����, ��� ���� �� �� ���� �����. ��

��� ��� �� ���� ��� � ����(�� ��, HTML ��� �� � ″product ID″� ��

�����).

XPath� ���� <xsl:template match="product">��� �� ��� ��� ���

<h1><xsl:value-of select="/product/description/name"/></h1>��� �� XML ���� ���

���� ���� � � ��� � ����.

XSLTRANSFORM ��

XSLTRANSFORM �� ���� XML ���� XSLT ����� �� � ����. �� XSLT

����� XML ���� ����, �� ��� ����� �� ��� �����.

: XSLT� ��� ���� ��

�� ��� �� XSLTRANSFORM �� ��� ���� ���� ��� ����.

����, �� �� �� �� ��� ������� ������.

INSERT INTO XML_TAB VALUES(1,

'<?xml version="1.0"?><students xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:noNamespaceSchemaLocation = "/home/steffen/xsd/xslt.xsd"><student studentID="1" firstName="Steffen" lastName="Siegmund"

age="23" university="Rostock"/></students>',

'<?xml version="1.0" encoding="UTF-8"?><xsl:stylesheet version="1.0"

xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:param name="headline"/><xsl:param name="showUniversity"/><xsl:template match="students">

<html><head/>

<body><h1><xsl:value-of select="$headline"/></h1><table border="1"><th>

<tr>

SQL ����� 295

|||||||||||

|

|

|

|

|

|

|

|

|

|

|

|

|

||||||||||||||||||||||

Page 308: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

<td width="80">StudentID</td><td width="200">First Name</td><td width="200">Last Name</td><td width="50">Age</td><xsl:choose>

<xsl:when test="$showUniversity ='true'"><td width="200">University</td></xsl:when>

</xsl:choose></tr>

</th><xsl:apply-templates/>

</table></body></html>

</xsl:template><xsl:template match="student">

<tr><td><xsl:value-of select="@studentID"/></td><td><xsl:value-of select="@firstName"/></td><td><xsl:value-of select="@lastName"/></td><td><xsl:value-of select="@age"/></td><xsl:choose>

<xsl:when test="$showUniversity = 'true' "><td><xsl:value-of select="@university"/></td>

</xsl:when></xsl:choose>

</tr></xsl:template>

</xsl:stylesheet>');

� ���� XSLTRANSFORM �� ���� XML ���� HTML� ���� �����.

SELECT XSLTRANSFORM (XML_DOC USING XSL_DOC AS CLOB(1M)) FROM XML_TAB;

��� �� �����.

<html><head><META http-equiv="Content-Type" content="text/html; charset=UTF-8"></head><body><h1></h1><table border="1"><th><tr><td width="80">StudentID</td><td width="200">First Name</td><td width="200">Last Name</td><td width="50">Age</td></tr></th><tr><td>1</td><td>Steffen</td><td>Siegmund</td><td>23</td>

296 IBM i: ������ SQL �����

|||||||||||||||||||||||||||||||

|

|

|

|||||||||||||||||||

Page 309: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

</tr></table>

</body></html>

� ���� ��� HTML�� ���� �� HTML� ��� �� ���� ������ ��� �

��. � ��� ��� ��� �� XSLT� ��� ���� ���� ��� ����.

: �� ��� XSLT ��

� ��� �� XSLTRANSFORM �� ���� ��� ��� �� XML ��� ���� ���

����.

� ����� ���� ����� � ���� ��� � �� �� ��� �� ��� �����.

xsl:param ��� ���� ����� ���� ��� ���� ���� �����.

INSERT INTO Display_productdetails values(1, '<?xml version="1.0" encoding="UTF-8"?><xsl:stylesheet version="1.0"

xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:param name="headline"/><xsl:param name="supermarketname"/><xsl:template match="product">

<html><head/>

<body><h1><xsl:value-of select="$headline"/></h1><table border="1">

<th><tr><td width="80">product ID</td><td width="200">product name</td><td width="200">price</td><td width="50">details</td><xsl:choose>

<xsl:when test="$supermarket =''true'' "><td width="200">BIG BAZAAR super market</td></xsl:when>

</xsl:choose></tr></th><xsl:apply-templates/>

</table></body></html>

</xsl:template><xsl:template match="product">

<tr><td><xsl:value-of select="@pid"/></td><td><xsl:value-of select="/product/description/name"/></td><td><xsl:value-of select="/product/description/price"/></td><td><xsl:value-of select="/product/description/details"/></td></tr>

</xsl:template></xsl:stylesheet>'

);

SQL ����� 297

||||

|

|

|

|

|

|

|

|||||||||||||||||||||||||||||||||||||||

Page 310: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

��� ��� XSLT ���� ���� ���� ���� �� ��� ��� ��� ��

��.

CREATE TABLE PARAM_TAB (DOCID INTEGER, PARAM VARCHAR (10K));

INSERT INTO PARAM_TAB VALUES(1,'<?xml version="1.0"?><params xmlns="http://www.ibm.com/XSLTransformParameters">

<param name="supermarketname" value="true"/><param name="headline">BIG BAZAAR super market</param>

</params>');

�� �� ��� ���� ��� � ��� �� �� � ����.

SELECT XSLTRANSFORM (XML_DOC USING XSL_DOC WITH PARAM AS CLOB (1M))FROM product_details X, PARM_TAB P WHERE X.DOCID=P.DOCID;

��� HTML��� ��� �� ��� ��� � � XML ��� ��� ��� ���� �

������.

<html><head><META http-equiv="Content-Type" content="text/html; charset=UTF-8"></head><body><h1></h1><table border="1"><th><tr><td width="80">product ID</td><td width="200">product Name</td><td width="200">price</td><td width="50">Details</td></tr></th></table></body></html>

�� �������� XSLTRANSFORM ��� HTML� ��� �� XML �� �� �� ��� �

�� ���� �(�: EDI �) � ����.

��� �� ������ , ��� �� �� ��� � ��� �� EDI �� SOAP �

�� �� �� �� ����� �� �� � ���� � � ����. � ���� �� XML

� � ���� ��� XSLT� ���� ������ � ����� ��� �� � ��� �

�� ���� � ����.

: XSLT� ��� �� �

��� XML ���� ���� ��� ���� �� � �� ��� �� �� � ����. XSLT �

���� ���� ��� � �� ��� ����� ��� � ����.

298 IBM i: ������ SQL �����

|

|

||||||||||

|

||

|

|

||||||||||||||||||

|

|

|

|

|

|

|

|

|

Page 311: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� �� XSLT� ���� XML ���� � �� ��� ���� ��� �����. ���� XML

��� XSLT ����� XML � ��� XSLTRANSFORM �� ���� XSLT ����

��� XML ��� �����.

�� CREATE�� XMLDATA � XMLTRANS ���� �����. XMLDATA�� XML ��

� �� � XMLTRANS�� XSLT ����� �� ����.

CREATE TABLE XMLDATA (ID BIGINT NOT NULL PRIMARY KEY, XMLDOC XML );CREATE TABLE XMLTRANS (XSLID BIGINT NOT NULL PRIMARY KEY, XSLT XML );

�� INSERT�� ���� XML ��� XMLDATA ���� ������.

insert into XMLDATA (ID, XMLDOC) values ( 1, '<newinfo xmlns="http://mycompany.com"><!-- merged customer information --><customerinfo xmlns="http://oldcompany.com" xmlns:d="http://test" Cid="1004">

<name>Matt Foreman</name><addr country="Canada">

<street>1596 Baseline</street><city>Toronto</city><prov-state>Ontario</prov-state><pcode-zip>M3Z 5H9</pcode-zip>

</addr ><phone type="work" >905-555-4789</phone><h:phone xmlns:h="http://test1" type="home">416-555-3376</h:phone><d:assistant>

<name>Gopher Runner</name><h:phone xmlns:h="http://test1" type="home">416-555-3426</h:phone>

</d:assistant></customerinfo>

</newinfo>');

�� ��� �� XSLT �����

�� �� XSLT ����� ���� XMLDATA ���� �� XML ���� �� � �� ��

� �����. ���� XMLTRANS ���� ����� ��� SELECT�� ���� ����

� XML ��� ����.

INSERT�� ���� ����� XMLTRANS ���� ������.

insert into XMLTRANS (XSLID, XSLT) values ( 1, '<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

<!-- keep comments --><xsl:template match="comment()">

<xsl:copy><xsl:apply-templates/>

</xsl:copy></xsl:template>

<xsl:template match="*"><!-- remove element prefix --><xsl:element name="{local-name()}">

SQL ����� 299

|

|

|

|

|

||

|

||||||||||||||||||||

|

|

|

|

|

||||||||||||||

Page 312: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

<!-- process attributes --><xsl:for-each select="@*"><!-- remove attribute prefix --><xsl:attribute name="{local-name()}"><xsl:value-of select="."/>

</xsl:attribute></xsl:for-each><xsl:apply-templates/>

</xsl:element></xsl:template>

</xsl:stylesheet>') ;

�� SELECT�� XSLT ����� ���� XML ��� �����.

SELECT XSLTRANSFORM (XMLDOC USING XSLT )FROM XMLDATA, XMLTRANSwhere ID = 1 and XSLID = 1

XSLTRANSFORM ��� � � XSLT ����� ���� XML ��� ��� �� � ��

��� �� �� XML� �����.

<?xml version="1.0" encoding="UTF-8"?><newinfo><!-- merged customer information --><customerinfo Cid="1004"><name>Matt Foreman</name><addr country="Canada"><street>1596 Baseline</street><city>Toronto</city><prov-state>Ontario</prov-state><pcode-zip>M3Z 5H9</pcode-zip></addr><phone type="work">905-555-4789</phone><phone type="home">416-555-3376</phone><assistant><name>Gopher Runner</name><phone type="home">416-555-3426</phone></assistant></customerinfo></newinfo>

��� �� ���� ��� XSLT �����

�� �� �� ��� ��� � �� ��� XSLT ����� �����. ��� �� XSLT

�� mynode� �����. ���� XMLTRANS ���� ����� ��� SELECT�� ����

����� XML ��� ����.

�� INSERT�� ���� ����� XMLTRANS ���� ������.

insert into XMLTRANS (XSLID, XSLT) values ( 2, '<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/><xsl:variable name ="mynode">phone</xsl:variable>

<!-- keep comments -->

300 IBM i: ������ SQL �����

||||||||||||

|

|||

|

|

|||||||||||||||||||

|

|

|

|

|

||||||

Page 313: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

<xsl:template match="comment()"><xsl:copy><xsl:apply-templates/>

</xsl:copy></xsl:template>

<xsl:template xmlns:d="http://test" xmlns:h="http://test1" match="*"><xsl:choose>

<!-- keep namespace prefix for node names $mynode --><xsl:when test="local-name() = $mynode " ><xsl:element name="{name()}"><!-- process node attributes --><xsl:for-each select="@*"><!-- remove attribute prefix --><xsl:attribute name="{local-name()}"><xsl:value-of select="."/>

</xsl:attribute></xsl:for-each><xsl:apply-templates/></xsl:element></xsl:when>

<!-- remove namespace prefix from node --><xsl:otherwise><xsl:element name="{local-name()}"><!-- process node attributes --><xsl:for-each select="@*"><!-- remove attribute prefix --><xsl:attribute name="{local-name()}"><xsl:value-of select="."/>

</xsl:attribute></xsl:for-each><xsl:apply-templates/></xsl:element></xsl:otherwise>

</xsl:choose></xsl:template>

</xsl:stylesheet>');

�� SELECT�� XSLID = 2� ���� �� ��� � XSLT ����� ���� XML

��� �����.

SELECT XSLTRANSFORM (XMLDOC USING XSLT)FROM XMLDATA, XMLTRANSwhere ID = 1 and XSLID = 2 ;

XSLTRANSFORM ��� � XSLT ����� ���� XML ��� ��� �� ��� �

��� �� �� XML� �����.

<?xml version="1.0" encoding="UTF-8"?><newinfo><!-- merged customer information --><customerinfo Cid="1004"><name>Matt Foreman</name><addr country="Canada">

SQL ����� 301

||||||||||||||||||||||||||||||||||||||||

|

|

|||

|

|

||||||

Page 314: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

<street>1596 Baseline</street><city>Toronto</city><prov-state>Ontario</prov-state><pcode-zip>M3Z 5H9</pcode-zip></addr><phone type="work">905-555-4789</phone><h:phone xmlns:h="http://test1" type="home">416-555-3376</h:phone><assistant><name>Gopher Runner</name><h:phone xmlns:h="http://test1" type="home">416-555-3426</h:phone></assistant></customerinfo></newinfo>

XML �� ��� �� ��� ����

�� XSLTRANSFORM �� ���� XML ��� ���� � �� �� ���� ����

� ����.

XML �� �� � ��� ������.

v �� XML ��� � ���� �� ���� ����� ���.

v ��� XSLT ��� UTF-8 ��� ���� ��� ���� �� �� � ���� �� ��

�� ��� ��� � ����.

����

v W3C XSLT �� 1.10 ����� �����.

v �� ���� �� ��� SQL ����� ���. �� � ���.

v ���� ��� � �� (xsl:include �� ��) ��� ���� ����.

SQL/XML �� ��� �� �� ��

SQL/XML �� ��� �� �� ��� �� ��� ��� ����.

SQL � XML ��

�� ��� XML ���� �� ��� ���� ��� �� ���� ����� ���� ���

� ���. �� ��� ��� ����.

44. �� �� � ��� �

�� �� ��� ��

< &lt;

> &gt;

& &amp;

″ &quot;

302 IBM i: ������ SQL �����

|||||||||||||||||

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

||

||

||

||

||

|||

Page 315: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

SQL/XML �� �� ���� SQL �� XML ��� ��� � �� ��� ������ ����

���� �����.

SQL ID � QName

SQL ��� XML �� ����� ��� ��� SQL ID� XML �� ��� QName�� ����

� � ����. �� �� SQL ID� �� �� �� QName� �� �� �� ����. �

� SQL ID� �� � ��� QName� ���� ��� �����. ��� � ��� QName�� �

�� �� �����.

�� ��, �� SQL ID ″phone@work″� �����. @ ��� QName�� ��� ��� ���

��� ������� QName� phone&#x0040;work� ���.

� ��� ��� ��� ��� ������. XMLELEMENT� �� ��� XMLFOREST �

XMLATTRIBUTES� AS�� ��� ���� SQL ID� ����� ��� �� ���. �

��� QName� ���� ���. ��� �� �� � � ��� W3C XML � �� ��� �

�����.

XML ���

XML � �� DB2 ��������� ������ �������� � � ��� ���� XML

���� ���� �� ����.

DB2 ������ ���� � �� ���� ����� ��� XMLSERIALIZE �� ���� XML

� �� ���� ��� � ����. XML � �� �� ���� ���� � XML ����

������ ���� ������ ��� ����.

�� � �� �� ���� ��� � ��� ���� � ���� ����, XML ���� ����

�� ���� DB2 ������ XML ���� ��� ��� � ����. �� � �� ��� �

�� �� � � ������� ���� ���� �� ���� ��� ���.

�� �� � �� ������ ���� XML ���� ���� � �� ���� ��� � �

����. �� � �� ����(�� �) �� XMLSERIALIZE� ���� �� ����.

XML ���� ����� �� ��� ��� BLOB ��� ���� �� 2� ��� � � ��

��� � ���� �����.

�� XML ���

DB2 CLI � �� SQL ������ �� �� � �� DB2 ������ ��� �� �

�� �� XML ��� ���� �����. .NET ������ � DB2 ������ ��� XML

��� �����. Java �������� SQLXML ������� ���� ��� �� ����

SQLXML ���� ��� ��, DB2 ������ ��� ��� XML ��� �� ���� ����

�.

SQL ����� 303

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

Page 316: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�: C ������ � ID ’1000’� � �� ��� ���� � �� � � ��� 2� XML

��� ��� �����. � ���� UTF-8 �� ��� ��� XML ��� ���.

EXEC SQL BEGIN DECLARE SECTION;SQL TYPE IS XML AS BLOB (1M) xmlCustInfo;EXEC SQL END DECLARE SECTION;...EXEC SQL SELECT INFO INTO :xmlCustInfoFROM CustomerWHERE Cid=1000;

�� XML ���

�� XMLSERIALIZE �� � ���� ������ ���� XML ��� ���� ������ �

��� ���� �����.

XMLSERIALIZE �� �� ��� ��� � ����.

v ���� � �� � ���� SQL ��� ��

��� ��� ��, ��� �� 2� ��� �����.

v �� ���� �� �� ��(EXCLUDING XMLDECLARATION �� INCLUDING

XMLDECLARATION)� �� ��� ��.

XMLSERIALIZE� ��� ���, �� �� ��� ������.

� � ���� 2� ��� ���� ��� ���� ����� ���� ����� �

� ��� ���� ����. ��� ���� ��� �� ��� �� �� � ����. �� �

���� �� ����� �� �� XML ���� ��� � ���.

�� �� � �� ������ ���� XML ���� ���� � �� ���� ��� � �

����. �� ������ XML ���� ���� �� ��� �� XMLSERIALIZE� ���� �

� ����.

������ XML ��� ��� ���� �� �� ���� �� XML � �� ���� DB2

������ ��� ������ ���� ���� �� CLOB �� DBCLOB� �����.

� ���� � �� ��� ���� ����� XMLSERIALIZE� ��� � ����.

�: ��� Customer� XML Info� �� ���� ��� �� ��� ��� �� �

���.

<customerinfo xml:space="default" xmlns="http://posample.org" Cid='1000'><name>Kathy Smith</name><addr country='Canada'><street>5 Rosewood</street><city>Toronto</city><prov-state>Ontario</prov-state>

304 IBM i: ������ SQL �����

|

|

|||||||

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

||||||

Page 317: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

<pcode-zip>M6W 1E6</pcode-zip></addr><phone type='work'>416-555-1358</phone>

</customerinfo>

XMLSERIALIZE� ���� ���� � �� ��� ��� ��� �� BLOB ���� ����

��.

SELECT XMLSERIALIZE(Info as BLOB(1M)) into :hostvar from CustomerWHERE CID=1000

�� � �� � XML ��� �

XML ��� DB2 ������� ��� �� �������� � �� ��� �� ��� ��

��� ��� �� �� �� ����. � ��� XML � SQL/XML ��� �����.

��� � �� ���� ��� ��� � ����. �� ���� ��� ����.

v XMLVALIDATE� ���� ������ ��� ��� �����.

– �� ���� ��� � �� ��� �����.

v XML ��� �� ���� ��� ������ ��� ��� �����.

– �� ���� �� � ��� �����.

– �� �� �� �� ��� � �� �(U+000D � U+000A) �� �� ��(U+000D)� � �

�(U+000A)�� �����.

– XML 1.0 ��� �� �� �� � ��� �����.

� �� �� ��� � ��(U+000A) ��� �� ��(U+0020)� �����.

�� ���� XML �� ���� �� � ����. �� ���� ��� ����.

v ���� ������ ��� ���� �� XML ��� XML ��� ��� ����.

DB2 CLI � �� SQL ������ �� �� � �� DB2 ������ ��� ��

��� �� XML ��� ���� �����. .NET ������ � DB2 ������ ���

XML ��� �����. Java �������� SQLXML ������� ���� ��� �� �

��� SQLXML ���� ��� ��, DB2 ������ ��� ��� XML ��� �� ����

�����.

XMLSERIALIZE �� ���� DB2 ������ ��� INCLUDING XMLDECLARATION �

�� �� �� ��� � XML ��� �����.

v �� ���� �� ��� �� ��� ���� XML ���� �����. �� �� � ����

���� ��� ����.

�� ���� � ��� ��

���(&) U+0026 &amp;

�� �� U+003C &lt;

� �� U+003E &gt;

SQL ����� 305

||||

|

|

||

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

||||

|||

|||

|||

Page 318: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

v �� � ��� QUOTATION MARK(U+0022) ��� ���� XML ��� &quot;� �����.

v �� ��� DTD ��� �� �� ��� ��� ��� DTD� �� � � ��� ��

��.

v �� ��� CDATA ��� ��� � ��� ���� ��� ����.

��� XML ��� �� �

XML � � ��� ���� 2� �� �� ��� � ��� � ��� XML � ���� XML

����� ���� ���. ���� XML ���� �� ��� ��� 2� ��� ��(�: BLOB)

���. ����� �� � ���� CCSID ��� ���� ��� �� ��� �� �� � � ��

��.

XML �� ��

XML � ���� ����� SQL UPDATE�� ������. �� �� ����� WHERE�

� �����. �� �� �����. XML � �� ��� ���� �� XML ���� ��

�. ����� ��� ��� XML, �� �� 2� ��� �����.

XML � ��� � �� XML ���� �� �� XML ��� ���� ��� � �� ���

�. XMLVALIDATE �� �� ��� � ����.

�� �� XML � XML ���� ��� � �� ��� �����. ���� Customer ���

� � MyCustomer ���� �����. ���� MyCustomer� �� �� 1004 � ID �� ��

�� �����. � ���� ���� XML ���� c7.xml �� ��� ��� ���� ��

� ��� ����.

<customerinfo xmlns="http://posample.org" Cid="1004"><name>Christine Haas</name><addr country="Canada"><street>12 Topgrove</street><city>Toronto</city><prov-state>Ontario</prov-state><pcode-zip>N9Y-8G9</pcode-zip>

</addr><phone type="work">905-555-5238</phone><phone type="home">416-555-2934</phone>

</customerinfo>

�: JDBC ������� c7.xml �� XML ���� 2� ���� � XML � ���� ���

���.

PreparedStatement updateStmt = null;String sqls = null;int cid = 1004;sqls = "UPDATE MyCustomer SET Info=? WHERE Cid=?";updateStmt = conn.prepareStatement(sqls);

306 IBM i: ������ SQL �����

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|||||||||||

|

|

|||||

Page 319: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

updateStmt.setInt(1, cid);File file = new File("c7.xml");updateStmt.setBinaryStream(2, new FileInputStream(file), (int)file.length());updateStmt.executeUpdate();

�: �� C ������� 2� XML ��� ����� XML � ���� ������.

EXEC SQL BEGIN DECLARE SECTION;sqlint64 cid;SQL TYPE IS XML AS BLOB (10K) xml_hostvar;

EXEC SQL END DECLARE SECTION;...cid=1004;/* Read data from file c7.xml into xml_hostvar */...EXEC SQL UPDATE MyCustomer SET Info=:xml_hostvar WHERE Cid=:cid;

� ��� <customerinfo> �� �� Cid �� �� Cid �� �� �����. UPDATE�� WHERE

�� �� Cid� ���� ��� �� �����.

��� XML �� ��

XML ��� �� ����� SQL DELETE�� ������. �� �� ����� WHERE

�� �����.

XML � ���� ���� �� XML ��� �� ���. �� ���� � XML �� XML

��� ����� UPDATE�� SET NULL� � ���� � � �� ���� �� � NULL

� �����.

�� �� XML �� XML ���� ��� � �� ��� �����. ���� Customer ��

�� � MyCustomer ���� ���� MyCustomer� �� Customer ���� ���� ����

�.

�: Cid �� 1002 �� MyCustomer ����� ������.

DELETE FROM MyCustomer WHERE Cid=1002

XML ��� ���

XML ��� ���(XSR)� XML ���� �� ��� ��� ����.

XML ��� ���� �� XML ���� ���� URI(Uniform Resource Identifier)� �� ��

� �� � ����. � URI� ��� ��� ���� � �����. DB2 ������ ���� XSR�

URI �� ��� �� ��� �� ���� �� XML ����� �� ���� �����.

�� XML ���� ��� � ����� �� �� � �������� �� ��� � ��� �

� ����. XSR� ��� �� ��� � �� ��� �� � ��� �� ���� ����� ��

�.

XML ���� XML ��� �� �� ������. XML ���� DB2 XSR� ����� �� DB2

�� �� ����� ���� XML ��� ��� DB2� �����.

SQL ����� 307

||||

|

|||||||||

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

Page 320: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

SYSPROC.XSR_REGISTER

XML ��� ��� �����. � � XML ��� ��� XML ���� ��� � � ��

����� �����.

CALL SYSPROC.XSR_REGISTER ('user1', 'POschema','http://myPOschema/PO',:content_host_var, NULL)

SYSPROC.XSR_ADDSCHEMADOC

�� �� XML ���� �� XML ��� ��� �����. �� ���� �� � XML

� ���� SYSPROC.XSR_ADDSCHEMADOC� ��� � ����.

CALL SYSPROC.XSR_ADDSCHEMADOC ('user1', 'POschema','http://myPOschema/address',:content_host_var, NULL)

SYSPROC.XSR_COMPLETE

XML ��� ��� �����.

CALL SYSPROC.XSR_COMPLETE ('user1', 'POschema', :schemaproperty_host_var, 0)

XML ��� �� DB2� �� XML ��� ��� �� XML ��� �� �� ��� ��

���. ��� ����� ��� ��� XML ��� ��� ���� ��� ����. ��

�� XML ��� ��� ��� ��� �����.

XML ���� DB2 XML ��� ����� ����� ��� ������.

v SYSPROC.XSR_REMOVE �� ����� ������. ��

v DROP XSROBJECT SQL�� ������.

XML ��� ���(XSR)� �� ASP ����

� �� ��� �(ASP)� � ��� �� ��� � �� ��� ASP�� XML ���� ���

��� � �� �� ��� ��� ���.

XML ���� �� � ASP�� ���� ���. � � � ASP� ���� �� � ��� ASP

� �� � ASP ��� �� XML ���� ��� � ���.

���� ����� �� ��

XML ���� DB2 ������ ���� �����, ����� ���� ����, XML ����

�� ���� �� ��� �� �� ��� ������ ��� � ����.

�� ��� ���� ������ ��� � ����.

v ILE RPG

v ILE COBOL

v C � C++(�� SQL �� DB2 CLI)

v Java(JDBC �� SQLJ)

308 IBM i: ������ SQL �����

|

|

|

|||

|

|

|

|||

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

Page 321: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

����� ����� XML � �� �� ��� �� � ����.

������ XML �� DB2 ������ ��� ���� ������ ��� XML � � ���

���� �� CCSID� XML ��� ���� �����.

������ XML �� ���� �� � DB2 ������ ��� �� CCSID� XML ���

XML � � ��� ���� ���� �����. ������ ��� XML CCSID�� ��� CCSID

� �� ���� ���� � �� ����.

XML ���� �� ��� CCSID ���� � ��� ��� ��� ��� ���. ��� ���

�� XML CCSID� ��� �� ���� CCSID� �� � � � �� � ����.

XML ��� ��� � ��� � � ��� ����� ��� ����.

CLI ����� XML � �� � ��

���� XML � ���� ����� ��� ��� �� ���� � � ��� ����� ���.

XML ���� SQLBindParameter()� ���� ��� ��� �� ��� ��� � ���.

SQL XML ��� ��� �� ����� C �� � ��� ��� ���� � � � ����.

v SQL_C_CHAR

v SQL_VARCHAR

v SQL_C_WCHAR

v SQL_VARGRAPHIC

�� �� LOB ��� ��:

v SQL_C_CLOB

v SQL_C_CLOB_LOCATOR

� �� 2� ��� ��:

v SQL_C_BINARY

v SQL_C_BLOB

v SQL_C_BLOB_LOCATOR

v SQL_C_BINARY

XML ���� 2� ��� ���� ��� ��� � � � DB2 CLI� XML ���� ��

�� �� ���� �����. � ��� �� ��� ��� � �� ��� �� ��� �� � �

��� ��� ��� �����.

�: �� ��� �� � ����� XML� ��� ��� XML ���� 2� ��� ���� �

�� ���.

SQL ����� 309

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

Page 322: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

XML ���� SQL_C_CHAR �� SQL_C_WCHAR� ��� ��� � � � DB2 CLI�

XML ���� ���� �� ���� �����. DB2 CLI� ��� �� ���� ��� ��

���.

v C ��� SQL_C_WCHAR�� DB2 CLI� ���� UTF-16�� ����� �����.

v C ��� SQL_C_CHAR�� DB2 CLI� ���� ������ 1��� ��� CCSID� ���

�� �����.

������ ��� ���� XML � ���� �� ���� ����� ��� SQLBindParameter()

� ��� �� ��� ��� SQL_XML� ���� ���.

�� �� SQL_C_BINARY ��� ���� XML � WML ���� ���� ��� �����.

char xmlBuffer[10240];integer length;// Assume a table named dept has been created with the following statement:// CREATE TABLE dept (id CHAR(8), deptdoc XML)// xmlBuffer contains an internally encoded XML document that is to replace// the existing XML documentlength = strlen (xmlBuffer);SQLPrepare (hStmt, "UPDATE dept SET deptdoc = ? WHERE id = &apos;001&apos;", SQL_NTS);SQLBindParameter (hStmt, 1, SQL_PARAM_INPUT, SQL_C_BINARY, SQL_XML, 0, 0,

xmlBuffer, 10240, &length);SQLExecute (hStmt);

CLI ����� XML �� ��

���� XML �� ���� �� ��� �� ���� � � ��� �����.

XML ���� SQLBindCol()� ���� �� �� �� � ����� ��� � � � �

���� C ��� ��� ��� ��, ��� ��� LOB ��� �� � 2� ��� ��� ��� �

����. XML �� �� �� �� ��� ����� ��� 2� ���� � � �� ��

� ���. �� ���� � �� CCSID ���� � ��� ��� �� � ����. ��� ��

� �� XML CCSID� ��� �� ��� CCSID� �� � � � �� � ����. ��� 2�

���� � �� �� ��� �� � ����.

XML ���� ������ ���� �� ���� �����. DB2 CLI� ��� �� ���

� ��� �����.

v C ��� SQL_C_BINARY DB2 CLI� XML � �� ��� ���� �����.

v C ��� SQL_C_CHAR DB2 CLI� ����� �� �� ��� ���� �����.

v C ��� SQL_C_WCHAR �� DB2 CLI� UTF-16 �� ��� ���� �����.

������ ��� ���� ������� ���� �� ���� �� � �� �����.

XMLSERIALIZE �� ���� XML ���� �� ��� ��� ���� � �� � ����. �

� XMLSERIALIZE� �� �� ��� ���� � ��� �� ��� �� ��� �� � �

� �����.

�� �� XML �� 2� ����� ��� XML ���� ��� ��� �����.

310 IBM i: ������ SQL �����

|

|

|

|

|

|

|

|

|

|||||||||||

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

Page 323: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

char xmlBuffer[10240];// xmlBuffer is used to hold the retrieved XML documentinteger length;

// Assume a table named dept has been created with the following statement:// CREATE TABLE dept (id CHAR(8), deptdoc XML)

length = sizeof (xmlBuffer);SQLExecute (hStmt, "SELECT deptdoc FROM dept WHERE id=&apos;001&apos;", SQL_NTS);SQLBindCol (hStmt, 1, SQL_C_BINARY, xmlBuffer, &length, NULL);SQLFetch (hStmt);SQLCloseCursor (hStmt);// xmlBuffer now contains a valid XML document encoded in UTF-8

��� SQL ������ XML ��� �� ��

������ ��� SQL ����� �� XML ���� ����� ����� �� �� ���

��� ���� ���.

XML ���� ���� XML ��� �� � �����. XML ��� ��� �� � SQL_TYP_XML

SQLTYPE�� ���, ������ �� �� ����� ��� ��� �� ��� ���

��� ��� � � � ����. SQL �� SQL/XML ���� ���� XML � �� � ��

� ����. XML ��� ��� �� ��� �� � ��. �� XML � �� �� � � XML

�� ��� � ����. �����, �� ����� XML �� �� ���� �� ��� � ��

�� � ����.

XML ���� ��� ����, ���� �� �� ���� ��� ����. XML ��� �

�� ���� ��� � ���, XML ��� � � ��� �� �� �� � ����� ��

�� ����. ����� ��� � ����(��� ��� ��). ��� �� ��� , �

�� ��� �� � ��� �� �� ����� ��� � �(BOM)� �����. BOM� ��

� �� ��� �� ��� ���� ���� �����.

XML ��� �� ��� � ��, ��� � 2� ��(CHAR, VARCHAR, CLOB, DBCLOB � BLOB

)� ��� �� � ��� ��� � ����. �� XML ��� ���� �� XML ��� �

�� ����. ��, ��� �� ����� ���� �� XMLPARSE �� ����.

�� SQL ������� XML ��� ��� �����, ������ �� ���� XML ���

��� LOB ��� ���� ������. �� � ��� C� ��� ���� �� ���

�� ��� ��� ����.

v SQL TYPE IS XML AS CLOB(n) <hostvar_name> - SQL_XML_DATA_CCSID QAQQINI � ��

�� �� CCSID� �� XML ���� �� CLOB ��� ��� �����.

v SQL TYPE IS XML AS DBCLOB(n) <hostvar_name> - XML ���� �� DBCLOB ��� ��

� �����. ��� UCS-2� UTF-16�� SQL_XML_DATA_CCSID QAQQINI � ���� �

� CCSID� �����. ��� �� , ��� CCSID� UTF-16���.

v SQL TYPE IS XML AS BLOB(n) <hostvar_name> - ���� �� XML ���� �� BLOB

��� ��� �����.

SQL ����� 311

|||||||||||||

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

Page 324: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

v SQL TYPE IS XML AS LOCATOR <hostvar_name> - XML ���� �� �� ���� �����.

v SQL TYPE IS XML AS CLOB_FILE <hostvar_name> - � CCSID� �� XML ���� ��

CLOB �� �����.

v SQL TYPE IS XML AS DBCLOB_FILE <hostvar_name> - ����� 2��� ��� CCSID� ��

XML ���� �� DBCLOB �� �����.

v SQL TYPE IS XML AS BLOB_FILE <hostvar_name> - ���� �� XML ���� �� BLOB

�� �����.

: ��� SQL ����� XML ��� �� ��:

�� ������ C � COBOL� XML ��� ��� ���� ��� �����.

�� SQL C ������:

EXEC SQL BEGIN DECLARE;SQL TYPE IS XML AS CLOB( 10K ) xmlBuf;SQL TYPE IS XML AS BLOB( 10K ) xmlblob;SQL TYPE IS CLOB( 10K ) clobBuf;

EXEC SQL END DECLARE SECTION;// using XML AS CLOB host variable// The XML value written to xmlBuf will be prefixed by an XML declaration// similar to: <?xml version = "1.0" encoding = "UTF-8"?>// Note: The encoding name will depend upon the SQL_XML_DATA_CCSID QAQQINI settingEXEC SQL SELECT xmlCol INTO :xmlBuf

FROM myTableWHERE id = '001';

EXEC SQL UPDATE myTableSET xmlCol = :xmlBufWHERE id = '001';

// using XML AS BLOB host variable// The XML value written to xmlblob will be prefixed by an XML declaration// similar to: <?xml version = "1.0" encoding = "UTF-8"?>EXEC SQL SELECT xmlCol INTO :xmlblob

FROM myTableWHERE id = '001';

EXEC SQL UPDATE myTableSET xmlCol = :xmlblobWHERE id = '001';

// using CLOB host variable// The output will be encoded in the application single byte default CCSID,// but will not contain an XML declarationEXEC SQL SELECT XMLSERIALIZE (xmlCol AS CLOB(10K)) INTO :clobBuf

FROM myTableWHERE id = '001';

EXEC SQL UPDATE myTableSET xmlCol = XMLPARSE (:clobBuf PRESERVE WHITESPACE)WHERE id = '001';

312 IBM i: ������ SQL �����

|

|

|

|

|

|

|

|

|

|

|||||||||||||||||||||||||||||||||||

Page 325: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� SQL COBOL ������:

EXEC SQL BEGIN DECLARE SECTION END-EXEC.01 xmlBuf USAGE IS SQL TYPE IS XML as CLOB(5K).01 clobBuf USAGE IS SQL TYPE IS CLOB(5K).01 xmlblob USAGE IS SQL TYPE IS XML AS BLOB(5K).

EXEC SQL END DECLARE SECTION END-EXEC.

* using XML AS CLOB host variableEXEC SQL SELECT xmlCol INTO :xmlBufFROM myTableWHERE id = '001'.

EXEC SQL UPDATE myTableSET xmlCol = :xmlBufWHERE id = '001'.

* using XML AS BLOB host variableEXEC SQL SELECT xmlCol INTO :xmlblobFROM myTableWHERE id = '001'.

EXEC SQL UPDATE myTableSET xmlCol = :xmlblobWHERE id = '001'.

* using CLOB host variableEXEC SQL SELECT XMLSERIALIZE(xmlCol AS CLOB(10K)) INTO :clobBufFROM myTableWHERE id= '001'.

EXEC SQL UPDATE myTableSET xmlCol = XMLPARSE(:clobBuf) PRESERVE WHITESPACEWHERE id = '001'.

XML� ��� SQL ���� ��� �� ���:

�� ���� � ����� �� SQL ����� �� XML ��� ����.

v ������ � � ��� ��� �� XML ���� � ��� ���.

– �� � �� �� ���� � �� ���� � � ��� ���� ��� ���.

v ��� XML ���� 2GB� �����.

v XML ���� �� ��� ������(� �� ��� ������ �� ��� �).

v �� ��� ��� � � XML ���� � ��� ��� �� CCSID� ���� ����

��� ��� ���� ���� ��� �� ��� ��� ���.

v XML ��� ��� � ���� LOB ��� ��� ���� ���.

v ��� XML ��� ��� ���� � SQL� ��� � CHAR, VARCHAR, CLOB, DBCLOB

� BLOB ��� ��� ���� ��� �� �� ��(’STRIP WHITESPACE’)�� XMLPARSE �

�� ���� ���. �� XML ��� �� ��� �����.

SQLDA�� XML ��:

� ��� XML ���� ��� ���� SQLVAR� sqlname �� ���� ���.

v sqlname.length� 8��� ���.

SQL ����� 313

|

|||||||||||||||||||||||||||||

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

Page 326: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

v sqlname.data� �� 2���� X’0000’��� ���.

v sqlname.data� � � � � ���� X’0000’��� ���.

v sqlname.data� �� � ���� X’01’��� ���(�� ��� �� �� XML �� ��

����� ).

v ��� ���� X’000000’��� ���.

XML �� �� ����� SQLTYPE� LOB SQLVAR� ���, ��� � SQL0804 ���

�����.

�: DESCRIBE���� SQL_TYP_XML� ��� � ����. �� ���� � ��� ��� � �

��. ������ ��� ��� 2� ��� ��� SQLDA� ���� ��, ���� XML�

� ���� sqlname �� �� ��� ���.

Java

Java � XML

JDBC ����� XML ��:

JDBC ������� XML � ���� ��� XML �� ���� �� � ����.

������ ������ XML �� ��� ��� ���� XML ���� � �����.

������� XML ���� � � ��� �����.

JDBC ������� ��� ��� � ����.

v setXXX ��� ���� �� XML ��� XML � �����.

v getXXX ��� ���� �� XML ��� XML �� ����.

JDBC 4.0 java.sql.SQLXML ����� ���� XML � ���� �� ��� � ����.

ResultSetMetaData.getColumnTypeName� �� ����� ��� ���� XML ��� �� ��

� java.sql.Types.SQLXML� �����.

JDBC ����� XML � ��:

������ ���� XML � ���� ����� ��� ��� JDBC ������ �� ����

� � ��� ����� ���.

�� � ���� XML � �� � ��� � �� �� � � �� ��� ��� ����.

45. XML ��� �� �� � ��� ��

��� � ��� ��

PreparedStatement.setAsciiStream InputStream

PreparedStatement.setBinaryStream InputStream

PreparedStatement.setBlob Blob

314 IBM i: ������ SQL �����

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

||

||

||

||

||

Page 327: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

45. XML ��� �� �� � ��� �� (��)

��� � ��� ��

PreparedStatement.setBytes byte[]

PreparedStatement.setCharacterStream Reader

PreparedStatement.setClob Clob

PreparedStatement.setObject byte[], Blob, Clob, SQLXML, InputStream, Reader, String

PreparedStatement.setString String

XML ���� ��� ��� ����(���� �� ���� �� ) �� �� �����(��

�� �� ���� �� ) ��� � ����. ������ ��� 2� ���� ���� XML �

��� ���� �� ���� �����. ��� ��� �� ���� ���� XML ���� �

��� �� ���� �����.

Java ������ �� ��� �� ��� �����.

���� �� ����� �� ��� �� � ����. �, ���� ��� ��� �� ����

��� � ��� ���� �� ��� ���. ��� ��� �� � �� ��� ���� ��

��� ��� �� � �� �� �� ���� �����.

XML � ���� XML CCSID� �����. ������ ��� �� �� �� ���� XML

CCSID�� ��� ��� �����.

�� �� SQLXML ������ XML �� ��� ��� �����. ���� ��� ������

������ ��� ���� ���� �� ��� �����.

public void insertSQLXML(){Connection con = DriverManager.getConnection(url);SQLXML info = con.createSQLXML;

// Create an SQLXML objectPreparedStatement insertStmt = null;String infoData ="<customerinfo xmlns=""http://posample.org"" " +"Cid=""1000"" xmlns=""http://posample.org"">...</customerinfo>";

cid.setString(cidData);// Populate the SQLXML object

int cid = 1000;try {

sqls = "INSERT INTO CUSTOMER (CID, INFO) VALUES (?, ?)";insertStmt = con.prepareStatement(sqls);insertStmt.setInt(1, cid);insertStmt.setSQLXML(2, info);

// Assign the SQLXML object value// to an input parameter

if (insertStmt.executeUpdate() != 1) {System.out.println("insertSQLXML: No record inserted.");

}}catch (IOException ioe) {ioe.printStackTrace();

SQL ����� 315

|

||

||

||

||

||

|||

|

|

|

|

|

|

|

|

|

|

|

|

|||||||||||||||||||||||||

Page 328: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

}catch (SQLException sqle) {

System.out.println("insertSQLXML: SQL Exception: " +sqle.getMessage());

System.out.println("insertSQLXML: SQL State: " +sqle.getSQLState());

System.out.println("insertSQLXML: SQL Error Code: " +sqle.getErrorCode());

}}

�� �� ��� XML �� ��� ��� �����. ���� 2� ���� ����� �����

� ��� �� ���� �����.

public void insertBinStream(){PreparedStatement insertStmt = null;String sqls = null;int cid = 0;ResultSet rs=null;Statement stmt=null;try {

sqls = "INSERT INTO CUSTOMER (CID, INFO) VALUES (?, ?)";insertStmt = conn.prepareStatement(sqls);insertStmt.setInt(1, cid);File file = new File(fn);insertStmt.setBinaryStream(2,new FileInputStream(file), (int)file.length());

if (insertStmt.executeUpdate() != 1) {System.out.println("insertBinStream: No record inserted.");

}}catch (IOException ioe) {ioe.printStackTrace();}catch (SQLException sqle) {System.out.println("insertBinStream: SQL Exception: " +

sqle.getMessage());System.out.println("insertBinStream: SQL State: " +

sqle.getSQLState());System.out.println("insertBinStream: SQL Error Code: " +

sqle.getErrorCode());}

}

JDBC ����� XML �� ��:

JDBC ������� ResultSet.getXXX �� ResultSet.getObject ��� ���� XML ��� �

��� ����.

DB2 ���� XML �� ���� �� ��� �� ���� � � ��� �����.

�� �� � ��� XML ���� �� � ����.

v ResultSet.getSQLXML ��� ���� ���� �����. �� �� SQLXML.getXXX ��

� ���� ���� �� ��� �� ��� ���� �����. SQLXML.getBinaryStream ��

316 IBM i: ������ SQL �����

||||||||||

|

|

||||||||||||||||||||||||||||||

|

|

|

|

|

|

|

Page 329: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

� XML ��� � � � �� � �� ���� ���� � . SQLXML.getStr ing �

SQLXML.getCharacterStream ��� XML ��� ���� ����.

v ResultSet.getObject� �� ResultSet.getXXX ��� ���� ���� �� ��� ��� ����

�����.

�� � XML ��� �� �� ResultSet �� � � �� ��� ��� ����.

46. XML ��� �� �� ResultSet �� � ��� ��

��� �� ��� ��

ResultSet.getAsciiStream InputStream

ResultSet.getBinaryStream InputStream

ResultSet.getBytes byte[]

ResultSet.getCharacterStream Reader

ResultSet.getSQLXML SQLXML

ResultSet.getString String

�� � java.sql.SQLXML ������ ���� ��� �� ��� � �� �� � � �� �

�� ��� XML ��� �� ��� ����.

47. SQLXML � DB2Xml ��, ��� ��� �� �� ��

��� �� ��� ��

��� XML �� ��� ��� �

SQLXML.getBinaryStream InputStream XML CCSID ��

SQLXML.getCharacterStream Reader �

SQLXML.getSource Source �

SQLXML.getString String �

������ � �� � ��� ���� XMLSERIALIZE �� ���� XML ��� ��� ��

XMLSERIALIZE �� �� ��� ��� ���. ��� ���� ���� �� ���� ���

�� �� ��� �����.

�� �� XML �� SQLXML ����� ���� �� �� SQLXML.getString ��� ���

� ���� ����� ��� �� �����.

public void fetchToSQLXML(){System.out.println(">> fetchToSQLXML: Get XML data as an SQLXML object " +"using getSQLXML");PreparedStatement selectStmt = null;String sqls = null, stringDoc = null;ResultSet rs = null;

try{sqls = "SELECT info FROM customer WHERE cid = " + cid;selectStmt = conn.prepareStatement(sqls);rs = selectStmt.executeQuery();

SQL ����� 317

|

|

|

|

|

||

||

||

||

||

||

||

|||

|

|

||

||||

|||

|||

|||

||||

|

|

|

|

|

|||||||||||||

Page 330: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

// Get metadata// Column type for XML column is the integer java.sql.Types.OTHERResultSetMetaData meta = rs.getMetaData();String colType = meta.getColumnType(1);System.out.println("fetchToSQLXML: Column type = " + colType);while (rs.next()) {// Retrieve the XML data with getSQLXML.// Then write it to a string with// explicit internal ISO-10646-UCS-2 encoding.java.sql.SQLXML xml = rs.getSQLXML(1);System.out.println (xml.getString());

}rs.close();}catch (SQLException sqle) {System.out.println("fetchToSQLXML: SQL Exception: " +sqle.getMessage());

System.out.println("fetchToSQLXML: SQL State: " +sqle.getSQLState());

System.out.println("fetchToSQLXML: SQL Error Code: " +sqle.getErrorCode());

}}

�� �� XML �� String ���� ��� �� �����.

public void fetchToString(){System.out.println(">> fetchToString: Get XML data " +"using getString");PreparedStatement selectStmt = null;String sqls = null, stringDoc = null;ResultSet rs = null;

try{sqls = "SELECT info FROM customer WHERE cid = " + cid;selectStmt = conn.prepareStatement(sqls);rs = selectStmt.executeQuery();

// Get metadata// Column type for XML column is the integer java.sql.Types.OTHERResultSetMetaData meta = rs.getMetaData();String colType = meta.getColumnType(1);System.out.println("fetchToString: Column type = " + colType);

while (rs.next()) {stringDoc = rs.getString(1);System.out.println("Document contents:");System.out.println(stringDoc);

}catch (SQLException sqle) {System.out.println("fetchToString: SQL Exception: " +sqle.getMessage());

System.out.println("fetchToString: SQL State: " +sqle.getSQLState());

318 IBM i: ������ SQL �����

|||||||||||||||||||||||

|

|||||||||||||||||||||||||||||

Page 331: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

System.out.println("fetchToString: SQL Error Code: " +sqle.getErrorCode());

}}

Java ����� XML ���� �� �� ��:

SQL �� �� ����� �� ��� �� �� XML ���� �� � ����.

SQL ����� �� ���� ��� ���� XML ��� ����. �� �� ���� � ��

� �� �� � � ��� XML ���� XML AS ��� ����. XML ���� �� �

� ����� ��� �� �� ��� ��� �� ���� ���� ��� ��� ���� ���.

JDBC ������ XML �� ���� �� �� ����� java.sql.SQLXML ��� ���� �

�����. XML �� ���� ����� java.sql.Types.SQLXML ���� ���� ������.

�: �� XML ��� �, IN, OUT � INOUT ���� ���� �� ����� ���� JDBC

����. � ��� JDBC 4.0� �����.

java.sql.SQLXML in_xml = xmlvar;java.sql.SQLXML out_xml = null;java.sql.SQLXML inout_xml = xmlvar;

// Declare an input, output, and// input/output XML parameter

Connection con;CallableStatement cstmt;ResultSet rs;...stmt = con.prepareCall("CALL SP_xml(?,?,?)");

// Create a CallableStatement objectcstmt.setObject (1, in_xml); // Set input parametercstmt.setObject (3, inout_xml); // Set inout parametercstmt.registerOutParameter (2, java.sql.Types.SQLXML);// Register out and input parameterscstmt.registerOutParameter (3, java.sql.Types.SQLXML);cstmt.executeUpdate(); // Call the stored procedureout_xml = cstmt.getSQLXML(2); // Get the OUT parameter valueinout_xml = cstmt.getSQLXML(3); // Get the INOUT parameter valueSystem.out.println("Parameter values from SP_xml call: ");System.out.println("Output parameter value ");MyUtilities.printString(out_xml.getString());

// Use the SQLXML.getString// method to convert the out_xml// value to a string for printing.// Call a user-defined method called// printString (not shown) to print// the value.

System.out.println("INOUT parameter value "); MyUtilities.printString(inout_xml.getString());// Use the SQLXML.getString// method to convert the inout_xml// value to a string for printing.// Call a user-defined method called// printString (not shown) to print// the value.

SQL ����� 319

||||

|

|

|

|

|

|

|

|

|

||||||||||||||||||||||||||||||||||||

Page 332: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�: �� XML ��� �, IN, OUT � INOUT ���� ���� �� ����� ���� SQLJ

����. � ��� JDBC 4.0� �����.

java.sql.SQLXML in_xml = xmlvar;java.sql.SQLXML out_xml = null;java.sql.SQLXML inout_xml = xmlvar;

// Declare an input, output, and// input/output XML parameter

...#sql [myConnCtx] {CALL SP_xml(:IN in_xml,

:OUT out_xml,:INOUT inout_xml)};

// Call the stored procedureSystem.out.println("Parameter values from SP_xml call: ");System.out.println("Output parameter value ");MyUtilities.printString(out_xml.getString());

// Use the SQLXML.getString// method toconvert the out_xml value// to a string for printing.// Call a user-defined method called// printString (not shown) to print// the value.

System.out.println("INOUT parameter value "); MyUtilities.printString(inout_xml.getString());// Use the SQLXML.getString// method to convert the inout_xml// value to a string for printing.// Call a user-defined method called// printString (not shown) to print// the value.

SQLJ ����� XML ��:

SQLJ ������� XML � ���� ��� XML �� ���� �� � ����.

DB2 ������ XML �� ��� ��� ���� XML ���� � �����.

������� XML ���� � � ��� �����.

SQLJ ������� ��� ��� � ����.

v INSERT �� UPDATE�� ���� �� XML ��� XML � �����.

v � � SELECT��� ��� ���� �� XML ��� XML �� ����.

JDBC 4.0 java.sql.SQLXML ����� ���� XML � ���� �� ��� � ����.

ResultSetMetaData.getColumnTypeName� �� ����� ��� ���� XML ��� �� ��

� java.sql.Types.SQLXML� �����.

SQLJ ����� XML � ��:

SQLJ ������� ���� XML � ���� ����� ��� ��� �� ���� � � �

�� ����� ���.

XML � ���� � ��� � �� ��� �� ��� ��� ��� ����.

320 IBM i: ������ SQL �����

|

|

||||||||||||||||||||||||||

|

|

|

|

|

|

|

|

|

|

|

|

|

|

Page 333: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

v java.sql.SQLXML(SQLJ �� 4.0 ��� ��)

v String

v byte

v Blob

v Clob

v sqlj.runtime.AsciiStream

v sqlj.runtime.BinaryStream

v sqlj.runtime.CharacterStream

��� ��� JDBC ���� ��� ��� ��� � ��� java.io.typeInputStream ��� �

� �� sqlj.runtime.typeStream ��� ��� ���� ���.

XML ���� ��� ��� ����(���� �� ���� �� ) �� �� �����(��

�� �� ���� �� ) ��� � ����. ������ ��� 2� ���� ���� XML �

��� ���� �� ���� �����. ��� ��� �� ���� ���� XML ���� �

��� �� ���� �����. JVM� ��� ��� �� �����.

Java ������ �� ��� �� ��� �����.

���� �� ����� �� ��� �� � ����. �, ���� ��� ��� �� ����

��� � ��� ���� �� ��� ���. ��� ��� �� � �� ��� ���� ��

��� ��� �� � �� �� �� ���� �����.

XML � ���� XML CCSID� �����.

�� ���� ���� String ��� �� xmlString�� ���� XML � ���� ���� ��

�����. xmlString� �� ����� �� ��� �����.

#sql [ctx] {INSERT INTO CUSTACC VALUES (1, :xmlString)};

sqlj.runtime.CharacterStream host expression: sqlj.runtime.CharacterStream ��� ��� ��

sqlj.runtime.CharacterStream ��� ���� ���� XML � ���� ���� �������.

java.io.StringReader xmlReader =new java.io.StringReader(xmlString);

sqlj.runtime.CharacterStream sqljXmlCharacterStream =new sqlj.runtime.CharacterStream(xmlReader, xmlString.length());

#sql [ctx] {INSERT INTO CUSTACC VALUES (4, :sqljXmlCharacterStream)};

sqljXmlCharacterStream� �� ����� �� ��� �����.

XML �� java.sql.SQLXML ��� ���� ��� �� ���� XML � ���� ���

� �������.

SQL ����� 321

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|||||

|

|

|

Page 334: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

java.sql.ResultSet rs = s.executeQuery ("SELECT * FROM CUSTACC");rs.next();java.sql.SQLXML xmlObject = (java.sql.SQLXML)rs.getObject(2);#sql [ctx] {INSERT INTO CUSTACC VALUES (6, :xmlObject)};

���� �� ��� ��� UTF-8 ����� �� XML � ���� ��� � ��� ���

����.

SQLJ ����� XML �� ��:

SQLJ ������ ������ ���� XML �� ���� �� ��� �� ���� �� �

� ���� � ���� ���.

XML �� ���� ��� � ��� � �� ��� �� �� �� ��� ��� ��� ���

�.

v java.sql.SQLXML(SQLJ �� 4.0)

v String

v byte[]

v sqlj.runtime.AsciiStream

v sqlj.runtime.BinaryStream

v sqlj.runtime.CharacterStream

������ ��� � �� XMLSERIALIZE �� ���� ��� ���� UTF-8�� �� �

���� ��(�� ��� ��� ) �� �� ��(2� ��� ��� )�� �����. XML

��� ���� ����. ��� ��� java.sql.SQLXML �� com.ibm.db2.jcc.DB2Xml ��� ��

�� �� �� ��� ���� � ������ ���� ��� ���. ��� ��� ��

���� �� � �� ��� � XML ��� ����� ��� �����.

�� � java.sql.SQLXML �� com.ibm.db2.jcc.DB2Xml ������ ���� ��� �� ���

� �� �� � � �� ��� ��� XML ��� �� ��� ����.

48. SQLXML � DB2Xml ��, ��� ��� �� �� ��

��� �� ��� �� ��� XML �� ��� ��� ��

SQLXML.getBinaryStream InputStream XML CCSID ��

SQLXML.getCharacterStream Reader �

SQLXML.getSource Source �

SQLXML.getString String �

������ � �� � ��� ���� XMLSERIALIZE �� ���� XML ��� ��� ��

XMLSERIALIZE �� �� ��� ��� ���. ��� ���� ���� �� ���� ���

�� �� ��� �����.

XML �� String ��� ���� ���� ��� ������.

322 IBM i: ������ SQL �����

||||

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

||

|||

|||

|||

|||

||||

|

|

|

|

Page 335: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

#sql iterator XmlStringIter (int, String);#sql [ctx] siter = {SELECT C1, CADOC from CUSTACC};#sql {FETCH :siter INTO :row, :outString};

String ��� �� ����� ���� UTF-8�� �� ���� ��� XML ��� �����.

XML �� byte[] ��� ���� ���� ��� ������.

#sql iterator XmlByteArrayIter (int, byte[]);XmlByteArrayIter biter = null;#sql [ctx] biter = {SELECT c1, CADOC from CUSTACC};#sql {FETCH :biter INTO :row, :outBytes};

byte[] ��� 2� ����� UTF-8 ���� �� ��� ��� ��� � XML �� � ���

� �����.

XML �� java.sql.SQLXML ��� ���� ��� ���� 2� ���� ���� ���� �

�����.

#sql iterator SqlXmlIter (int, java.sql.SQLXML);SqlXmlIter SQLXMLiter = null;java.sql.SQLXML outSqlXml = null;#sql [ctx] SqlXmlIter = {SELECT c1, CADOC from CUSTACC};#sql {FETCH :SqlXmlIter INTO :row, :outSqlXml};java.io.InputStream XmlStream = outSqlXml.getBinaryStream();

FETCH�� UTF-8 ��� SQLXML ����� ���� ����. SQLXML.getBinaryStream� �

��� 2� ���� �����.

��

� � XML

SQL ����� XML ��:

SQL ����� ��� �� XML� �� � ���� �����. �� ��� ��� ��� �� �

��� SQL�� �� ��� � ����.

�� �� SQL ����� XML ���� ��� ��, �� � �� �����.

CREATE TABLE T1(C1 XML) ;

CREATE PROCEDURE proc1(IN parm1 XML, IN parm2 VARCHAR(32000))LANGUAGE SQLBEGIN

DECLARE var1 XML;

/* insert the value of parm1 into table T1 */INSERT INTO T1 VALUES(parm1);

/* parse parameter parm2's value and assign it to a variable */SET var1 = XMLPARSE(document parm2 preserve whitespace);

SQL ����� 323

|||

|

|

||||

|

|

|

|

||||||

|

|

|

|

|

|

|

|

||||||||||||||

Page 336: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

/* insert variable var1 into table T1INSERT INTO T1 VALUES(var1);

END ;

�� ��� XML � �� T1 ���� ����. SQL ����� �� ���, parm1 � parm2�

� ���. parm1� XML ��� �����. SQL ���� ��� XML ��� �� var1� ����

�.

��� parm2� �� XMLPARSE �� ���� ��� XML �� var1� ����. �� ��

XML �� �� ��� T1� C1 � �����.

SQL ����� XML ���� � �� � �� �� � �� ��:

SQL ���� �� ��� ��� XML ��� ��� �� � ��� �� ��� ���. SQL ���

� �� �� �� �� ��� �� XML ���� XML ��� � �� � �� ��� �

� ���.

�� �� �� �� � XML ��� ��� SQL ��� SQL ���� ���� ���� ��� �

���.

�� �� �� ��� �� � XML ���� ��� ����� �� � �� �� ��� ���

���.

ROLLBACK � COMMIT�� SQL ����� ��� ��� XML ���� �� �� ���� �

����.

�� ��� XML �� � ��:

XML ��� ��� �� � ���� ���� ����� ��� �� �� ���� � �:

����� ��� ��� ����.

v ILE RPG

v ILE COBOL

v C

v C++

v Java

XML ��� �� �� ��, ��� � 2� ��� ��� �� ���� �� � �� ����.

XML ��� ��� �� � ���� ��� � ������� �� ���� � ��� CREATE

PROCEDURE � CREATE FUNCTION�� XML ��� ��� ��, ��� �� 2� ��� ����

����� ���� ���. ��, ��� �� 2� �� �� XML ���� � XML ��� �

� ���� ���.

324 IBM i: ������ SQL �����

||||

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

Page 337: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

��� CREATE PROCEDURE�� parm1��� XML ���� � C ����� ��� �� �

� ����� �� CREATE PROCEDURE�� �����.

CREATE PROCEDURE myproc(IN parm1 XML AS CLOB(2M), IN parm2 VARCHAR(32000))LANGUAGE CFENCEDPARAMETER STYLE SQLEXTERNAL NAME 'mylib.myproc';

�� �� � �� �� UDF� ��� � �� ��� ���� ����.

CREATE FUNCTION myfunc (IN parm1 XML AS CLOB(2M))RETURNS SMALLINTLANGUAGE CPARAMETER STYLE SQLDETERMINISTICNOT FENCEDNULL CALLNO SQLNO EXTERNAL ACTIONEXTERNAL NAME 'mylib1.myfunc'

�� � � ��� XML ��� � �� �� ������ �������� �� ���� �

�, � � �����.

: Java(JDBC) ����� XML ��:

Java ����� � JDBC API(Application Programming Interface)� ��� Java� ������ �

��� �� XML ���� ���� Java ����� ��� ��� � ����.

� Java ���� �� ��� ����.

v ��� �� JAVA ����� �� CREATE PROCEDURE�

v ��� �� JAVA ����� �� �� �

v XML ��� ��� �� � �� ���

Java �� �� ��

�� �� Java ���� ��� �����. �� �� �� �, �� Java ���� �� � ��

����� �� Java � �� � CREATE PROCEDURE��� ���� ����.

�� �� ���� ��� Java �� �� �� myJAR��� JAR �� stpclass.java

���. �� ��� ��� ����.

Java �� �� �� ��

using System;import java.lang.*;import java.io.*;import java.sql.*;import java.util.*;

public class stpclass

SQL ����� 325

|

|

|||||

|

||||||||||

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|||||||

Page 338: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

{ ...// Java procedure implementations

...}

�� ���� ��� JAR � � ��� �� �� �� �� ���. DB2� ��� �

���� �� � ��� � ����� �� CREATE PROCEDURE�� EXTERNAL�� � ��� �

��� �� ��� � �� ����.

�: XML ����� �� ���� �� JAVA ����

� �� ��� ����.

v ��� �� JAVA ����� �� CREATE PROCEDURE�

v XML ���� �� ��� �� JAVA ����� �� Java �

� ����� �� ���, inXML� ��� , �� �� ���� ��� , SQL�� XQuery

��� � ���� XML ���� ��� , �� �� ���, outXML1 � outXML2� ����.

XML ����� �� ���� �� JAVA ���� � � ��

CREATE PROCEDURE xmlProc1 ( IN inNUM INTEGER,IN inXML XML as CLOB (1K),OUT out1XML XML as CLOB (1K),OUT out2XML XML as CLOB (1K) )

DYNAMIC RESULT SETS 0DETERMINISTICLANGUAGE JAVAPARAMETER STYLE JAVAMODIFIES SQL DATAFENCEDTHREADSAFEDYNAMIC RESULT SETS 0PROGRAM TYPE SUBNO DBINFOEXTERNAL NAME 'stpclass.xmlProc1';

public void xmlProc1(int inNum,CLOB inXML ,CLOB [] out1XML,)

throws Exception{

Connection con = DriverManager.getConnection("jdbc:default:connection");

// Insert data including the XML parameter value into a tableString query = "INSERT INTO xmlDataTable (num, inXML ) VALUES ( ?, ? )" ;String xmlString = inXML.getCharacterStream() ;

stmt = con.prepareStatement(query);stmt.setInt(1, inNum);stmt.setString (2, xmlString );stmt.executeUpdate();stmt.close();

326 IBM i: ������ SQL �����

||||

|

|

|

|

|

|

|

|

|

|

|||||||||||||||

||||||||||||||||||

Page 339: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

// Query and retrieve a single XML value from a table using SQLquery = "SELECT xdata from xmlDataTable WHERE num = ? " ;

stmt = con.prepareStatement(query);stmt.setInt(1, inNum);ResultSet rs = stmt.executeQuery();

if ( rs.next() ){ out1Xml[0] = (CLOB) rs.getObject(1); }

rs.close() ;stmt.close();

return ;}

: C ����� XML ��:

����� � , C �� XML �� ���� �� XML ��� �� C ����� ��� ���

� ����.

��� �� XML ��� ���� �� C ���� � XML ���� ��� ���� ��� ���

��.

XML �� �� C ���� �� SQL ����

� �� ��� ����.

v ��� �� SQL ����� �� CREATE PROCEDURE�

v XML ���� �� ��� �� SQL ����� �� C �

� ����� �� �� ���� �����. � � �� ���� �� inNum�� INTEGER

�����. � �� ���� �� inXML� XML �����. �� ���� �� xmlDataTable

���� �� ���� � �����. �� SQL�� ���� XML �� ����. � XML �

� out1XML ���� ����. �� �� ���� ����.

CREATE PROCEDURE xmlProc1 ( IN inNUM INTEGER,IN inXML XML as CLOB (1K),OUT out1XML XML as CLOB (1K)

)LANGUAGE CPARAMETER STYLE SQLDYNAMIC RESULT SETS 0DETERMINISTICMODIFIES SQL DATAPROGRAM TYPE SUBEXTERNAL NAME 'xmlProc1' ;

//*************************************************************************// Stored Procedure: xmlProc1//// Purpose: insert XML data into XML column//// Parameters:

SQL ����� 327

|||||||||||||||

|

|

|

|

|

|

|

|

|

|

|

|

|

|||||||||||

||||||

Page 340: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

//// IN: inNum -- the sequence of XML data to be insert in xmldata table// inXML -- XML data to be inserted// OUT: out1XML -- XML data returned - value retrieved using SQL//*************************************************************************#include <stdio.h>#include <string.h>#include <stdlib.h>#include <sqlda.h>#include <sqlca.h>#include <sqludf.h>#include <sql.h>#include <memory.h>

#ifdef __cplusplusextern "C"#endifSQL_API_RC SQL_API_FN testSecA1(sqlint32* inNum,

SQLUDF_CLOB* inXML,SQLUDF_CLOB* out1XML,SQLUDF_NULLIND *inNum_ind,SQLUDF_NULLIND *inXML_ind,SQLUDF_NULLIND *out1XML_ind,SQLUDF_TRAIL_ARGS)

{char *str;FILE *file;

EXEC SQL INCLUDE SQLCA;

EXEC SQL BEGIN DECLARE SECTION;sqlint32 hvNum1;SQL TYPE IS XML AS CLOB(200) hvXML1;SQL TYPE IS XML AS CLOB(200) hvXML2;

EXEC SQL END DECLARE SECTION;

/* Check null indicators for input parameters */if ((*inNum_ind &lt; 0) || (*inXML_ind &lt; 0)) {

strcpy(sqludf_sqlstate, "38100");strcpy(sqludf_msgtext, "Received null input");return 0;

}

/* Copy input parameters to host variables */hvNum1 = *inNum;hvXML1.length = inXML->length;strncpy(hvXML1.data, inXML->data, inXML->length);

/* Execute SQL statement */EXEC SQL

INSERT INTO xmlDataTable (num, xdata) VALUES (:hvNum1, :hvXML1);

/* Execute SQL statement */EXEC SQLSELECT xdata INTO :hvXML2FROM xmlDataTableWHERE num = :hvNum1;

328 IBM i: ������ SQL �����

||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

Page 341: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

exit:

/* Set output return code */*outReturnCode = sqlca.sqlcode;*outReturnCode_ind = 0;

return 0;}

XML �� ���

XML ���� ��� ��� ����(���� �� ���� �� ) �� �� �����(��

�� �� ���� �� ) ��� � ����.

������ XML ��� XML ���� ���� � ���� ����� ��� ��� ���

���� ��� �����.

v �� �� ��� ����� ��� �� XML ���� ���� �� ��� �����. �

� � ��� �����, � ��� ��� XML ���� CCSID� ��� ��� ��� �� �

�� �����.

v 2� ����� ��� �� XML ��� �� �� ��� �� 2� ���� ���� ��

��� �����.

���� �� XML ����� �� ��� �� � ����. �� ��, �� ��� ��� XML

��� �� ��� ���. ������ ���� DB2 ������� �� ���� ��

����� �� ��� ���.

�� ��� �� �� CCSID� �� ��� ��� �� ��� �� ��� ����.

XML �� �� �� �� �� ��� ����

XML ���� DB2 ���� ����� ��� ���� ���. ���� ����� �� DB2

�� ����� ��� �� �� ��� � �� �� Java ������ ��� ��� ��� �

�� ���.

����� XML �� �� �� ��� ����:

XML ���� DB2 ���� ��� ��� �� � �� ��� ��� ���.

�� ��� ���� ���.

v ���� �� XML ���(�� ��� ��� ���� ������ ��� ���� ���)�

���� �� ��� �� ��� � ��� ��, ��� �� ��� ��

������ ���� ��� �����.

v ���� �� XML ���(2� ��� ��� ���� ������ ��� ���� ���)�

� ���� ��� �� ��� �� ��� ������ � � �� ���.

������ XML �� �� �� ��� ����:

SQL ����� 329

||||||||

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

Page 342: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

DB2 ����� XML ���� �� ��� ��� �� � ��� ��� ���. ��� ��� ��

���� ��� �� ���� ���� �� � � � �� � ����. ��� �� ��� ��

��� ��� ��� ��� ��� � �� � ����.

�� ����� XML �� �� � ��� ����:

DB2 ������ ������ � XML ��� ��� �� ����� ��� �� � ��� ��

�� ��� � ����.

�� XML ��� ��� ��� � ����.

XML SQL ���� � �� .

XML AS

�� ���� � �� ��� �� �� .

XML AS ���� ���� �� ���� ���. �� ����� ��� ��� ��� ��� ��

�� ������ ���� ��� � ��� �� ���� �� ��� �� ����. ��

CCSID ��� �� � ��� �� � �� ��� ����� � ����. ������� ���

� ��� ���� ��� ��� �� � ����.

JDBC � SQLJ ����� XML �� ��� ����:

�� Java ������ XML �� ���� CLI �� �� SQL ������� ��

�. ���� �� XML ���� �� ���� �� ������ ����, Java ���

��� ���� �� ���� � ����� CCSID� �� ����� ��� �� ��

����.

Java ������� XML ��� � � � ����

v �� ���� �� �� ������ ���� ���� ���� �� ���� ����

� 2� ���(setBinaryStream)�� �����.

v �� ���� Java ����� ��� �� �� �� ����� �� ��� �� DB2 ��

���� ���� �� ��� ����� ��� �����. ���� �� ��(�: setString)��

���� ������ ���� ���� ���� �� UTF-16(����� CCSID)�� XML

CCSID� �����.

Java ������� XML ��� �� � � ����

v XML ���� 2� ���� �� ���� XML �� ��� �� ���� ���� ��

�.

� ���� �� ��� ���� �� � ���� ��� ���� �� ��� � ��� ��

� � � ����.

INCLUDING XMLDECLARATION� �� �� XMLSERIALIZE �� ������ ���

��� ���� JDBC ���� �� ���� ����.

330 IBM i: ������ SQL �����

|

|

|

|

|

|

|

||

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

Page 343: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

v ������ �� ���� XML �� ���� ���� �� 2� ����� ��� ����

UTF-8, UCS-2 �� UTF-16 ���� ��� ���.

XML ��� � ���� �� ��� �� ��

XML ��� ��� ���� ��(�� �� ����) � XML � � ��� ������� ��

��� ��� ���� ��� � XML ���� ��� ��� ���.

����� ����� ���� XML �� �� �� ��� ����:

�� �� XML ���� XML � ���� �� ��� ��� �� � ��� ��� �� ��

� �����.

�� 2� ����� ��� ��� ���� ������� ���� � ��� �� ���

�����.

���� 1

��� �� �

��� �� UTF-8 ��� �� ���, UTF-8 BOM �� XML �� ��� ��� �

��� �� ��� �� 2�

��� �� �� CCSID � �

�� ��� �:

INSERT INTO T1 (XMLCOL) VALUES (?)INSERT INTO T1 (XMLCOL) VALUES(XMLPARSE(DOCUMENT CAST(? AS BLOB) PRESERVE WHITESPACE))

�� ��: �.

��� ��: �.

��: �.

���� 2

��� �� �

��� �� UTF-16 BOM �� XML �� ��� UTF-16 ��� �� ���

��� �� ��� �� 2�

��� �� �� CCSID � �

�� ��� �:

INSERT INTO T1 (XMLCOL) VALUES (?)INSERT INTO T1 (XMLCOL) VALUES(XMLPARSE(DOCUMENT CAST(? AS BLOB) PRESERVE WHITESPACE))

SQL ����� 331

|

|

|

|

|

|

|

|

|

|

|

|||

||

||

|||

|

|||

|

|

|

|

|||

||

||

|||

|

|||

Page 344: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� ��: DB2 ������ ��� UTF-8 XML � ��� �� XML ��� ��� � ����

UTF-16�� UTF-8� �����.

��� ��: �.

��: �.

���� 3

��� �� �

��� �� XML �� ��� ISO-8859-1 �� ���

��� �� ��� �� 2�

��� �� �� CCSID � �

�� ��� �:

INSERT INTO T1 (XMLCOL) VALUES (?)INSERT INTO T1 (XMLCOL) VALUES(XMLPARSE(DOCUMENT CAST(? AS BLOB) PRESERVE WHITESPACE))

�� ��: DB2 ������ ��� UTF-8 XML � ��� �� XML ��� ��� � ���� CCSID

819�� UTF-8� �����.

��� ��: �.

��: �.

���� 4

��� �� �

��� �� XML �� ��� Shift_JIS �� ���

��� �� ��� �� 2�

��� �� �� CCSID � �

�� ��� �:

INSERT INTO T1 (XMLCOL) VALUES (?)INSERT INTO T1 (XMLCOL) VALUES(XMLPARSE(DOCUMENT CAST(? AS BLOB) PRESERVE WHITESPACE))

�� ��: DB2 ������ ��� UTF-8 XML � ��� �� XML ��� ��� � ���� CCSID

819�� UTF-8� �����.

��� ��: �.

��: �.

����� ����� ���� XML �� �� �� ��� ����:

332 IBM i: ������ SQL �����

|

|

|

|

|

|||

||

||

|||

|

|||

|

|

|

|

|

|||

||

||

|||

|

|||

|

|

|

|

|

Page 345: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� �� XML ���� XML � ���� �� ��� ��� �� � ��� ��� �� ���

�����.

�� �� ����� ��� ��� ��� ��� ������� ���� CCSID ��� �

� ��� ���.

Java� �� ���� �� ����� Java� ����� � ���� �� ����� ���, �

��� 1� ���� 2� Java� ����.

���� 1

��� �� �

��� �� UTF-8 ��� �� ���, � �� �� �� BOM� ��� �

��� �� ��� �� ��

��� �� �� CCSID 1208(UTF-8)

�� ��� �:

INSERT INTO T1 (XMLCOL) VALUES (?)INSERT INTO T1 (XMLCOL) VALUES(XMLPARSE(DOCUMENT CAST(? AS CLOB) PRESERVE WHITESPACE))

�� ��: �.

��� ��: �.

��: �.

���� 2

��� �� �

��� �� UTF-16 ��� �� ���, � �� �� �� BOM� ��� �

��� �� ��� �� ���

��� �� �� CCSID 1200 �� 13488

�� ��� �:

INSERT INTO T1 (XMLCOL) VALUES (?)INSERT INTO T1 (XMLCOL) VALUES(XMLPARSE(DOCUMENT CAST(? AS DBCLOB) PRESERVE WHITESPACE))

�� ��: DB2 ������ ���� UTF-8 XML � ��� �� XML ��� ��� � ����

UTF-16�� UTF-8� �����.

��� ��: �.

��: UTF-16�� UTF-8� ���� ���� � ��� �� � ����.

SQL ����� 333

|

|

|

|

|

|

|

|||

||

||

|||

|

|||

|

|

|

|

|||

||

||

|||

|

|||

|

|

|

|

Page 346: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

���� 3

��� �� �

��� �� ISO-8859-1 �� ���, � �� ��� ��� �

��� �� ��� �� ��

��� �� �� CCSID 819

�� ��� �:

INSERT INTO T1 (XMLCOL) VALUES (?)INSERT INTO T1 (XMLCOL) VALUES(XMLPARSE(DOCUMENT CAST(? AS CLOB) PRESERVE WHITESPACE))

�� ��: DB2 ������ ��� UTF-8 XML � ��� �� XML ��� ��� � ���� CCSID

819�� UTF-8� �����.

��� ��: �.

��: �.

���� 4

��� �� �

��� �� Shift_JIS �� ���, � �� ��� ��� �

��� �� ��� �� ���

��� �� �� CCSID 943

�� ��� �:

INSERT INTO T1 VALUES (?)INSERT INTO T1 VALUES(XMLPARSE(DOCUMENT CAST(? AS DBCLOB)))

�� ��: DB2 ������ ��� UTF-8 XML � ��� �� XML ��� ��� � ���� CCSID

819�� UTF-8� �����.

��� ��: �.

��: �.

�� ���� XML �� �� �� ��� ����:

�� �� �� � �� XML ���� ��� �� �� �� � ����� � ���� ���

��, �� � �� ��� ��� �� ��� �����.

Java� �� ���� �� ����� Java ������ ����� � ���� �� ����

� ���, ���� 1� ���� 2� Java ������ ����.

334 IBM i: ������ SQL �����

|

|||

||

||

|||

|

|||

|

|

|

|

|

|||

||

||

|||

|

|||

|

|

|

|

|

|

|

|

|

Page 347: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

���� 1

��� �� �

�� ��� �� UTF-8 ���

�� ��� �� ���

��

2�

��� �� �� CCSID � �

�� ��� �:

SELECT XMLCOL FROM T1

�� ��: �.

��� ��: �.

��: �.

� � ���� �� ��: Java ����� ��� ������ �� XML ���� ���

� � �� ����.

<?xml version="1.0" encoding="UTF-8" ?>

Java ������ � ���� com.ibm.db2.jcc.DB2Xml ���� ���� ��� �� ��

� ���� ��� getDB2Xmlxxx ��� ���� ���� ����. ���� ��� ����

getDB2Xmlxxx� �� ����.

���� 2

��� �� �

�� ��� �� UTF-16 ���

�� ��� �� ���

��

���

��� �� �� CCSID 1200 �� 13488

�� ��� �:

SELECT XMLCOL FROM T1

�� ��: ���� UTF-8�� UTF-16�� �����.

��� ��: �.

��: UTF-8�� UTF-16�� ���� ���� � ��� �� � ����.

� � ���� �� ��: Java �� .NET ����� ��� ������ UTF-16 BOM(Byte

Order Mark) � �� XML ���� ���� � �� ����.

<?xml version="1.0" encoding="UTF-16" ?>

SQL ����� 335

|

|||

||

|||

|||

|

|

|

|

|

|

|

|

|

|

|

|

|||

||

|||

|||

|

|

|

|

|

|

|

|

Page 348: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

Java ������ � ���� com.ibm.db2.jcc.DB2Xml ���� ���� ��� �� ��

� ���� ��� getDB2Xmlxxx ��� ���� ���� ����. ���� ��� ����

getDB2Xmlxxx� �� ����.

���� 3

��� �� �

�� ��� �� ISO-8859-1 ���

�� ��� �� ���

��

��

��� �� �� CCSID 819

�� ��� �:

SELECT XMLCOL FROM T1

�� ��: ���� UTF-8�� CCSID 819� �����.

��� ��: �� ���� ��. � UTF-8 ��� CCSID 819� �� � ���. DB2 �����

� ���� ��� ����.

��: �.

� � ���� �� ��: �� XML ���� ���� � �� ����.

<?xml version="1.0" encoding="ISO-8859-1" ?>

���� 4

��� �� �

�� ��� �� Windows-31J ���(Shift_JIS� �� �)

�� ��� �� ���

��

���

��� �� �� CCSID 943

�� ��� �:

SELECT XMLCOL FROM T1

�� ��: ���� UTF-8�� CCSID 943�� �����.

��� ��: �� ���� ��. � UTF-8 ��� CCSID 943�� �� � ���. DB2 ����

�� ���� ��� ����.

��: UTF-8�� CCSID 943�� ���� ���� � ��� �� � ����.

� � ���� �� ��: �� XML ���� ���� � �� ����.

<?xml version="1.0" encoding="Windows-31J" ?>

336 IBM i: ������ SQL �����

|

|

|

|

|||

||

|||

|||

|

|

|

|

|

|

|

|

|

|||

||

|||

|||

|

|

|

|

|

|

|

|

Page 349: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� XMLSERIALIZE� XML �� �� �� ��� ����:

�� �� �� XMLSERIALIZE ��� XML ���� ��� �� �� �� � ����� �

���� ��� ��, �� � �� ��� ��� ��� ��� �����.

Java ������ ����� � ���� �� ����� ���, ���� 1� ���� 2� Java

������ ����.

���� 1

��� �� �

�� ��� �� UTF-8 ���

�� ��� �� ���

��

2�

��� �� �� CCSID � �

�� ��� �:

SELECT XMLSERIALIZE(XMLCOL AS BLOB(1M) INCLUDING XMLDECLARATION) FROM T1

�� ��: �.

��� ��: �.

��: �.

� � ���� �� ��: �� XML ���� ���� � �� ����.

<?xml version="1.0" encoding="UTF-8" ?>

���� 2

��� �� �

�� ��� �� UTF-16 ���

�� ��� �� ���

��

���

��� �� �� CCSID 1200 �� 13488

�� ��� �:

SELECT XMLSERIALIZE(XMLCOL AS CLOB(1M) EXCLUDING XMLDECLARATION) FROM T1

�� ��: ���� UTF-8�� UTF-16�� �����.

��� ��: �.

��: UTF-8�� UTF-16�� ���� ���� � ��� �� � ����.

SQL ����� 337

|

|

|

|

|

|

|||

||

|||

|||

|

|

|

|

|

|

|

|

|||

||

|||

|||

|

|

|

|

|

Page 350: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

� � ���� �� ��: EXCLUDING XMLDECLARATION� ����� ��� �.

INCLUDING XMLDECLARATION� ���� �� ��� UTF-16 �� UTF-8� ����. ��

� ���� �� ����� �� �� XML ���� ��� � ���.

���� 3

��� �� �

�� ��� �� ISO-8859-1 ���

�� ��� �� ���

��

��

��� �� �� CCSID 819

�� ��� �:

SELECT XMLSERIALIZE(XMLCOL AS CLOB(1M) EXCLUDING XMLDECLARATION) FROM T1

�� ��: ���� UTF-8�� CCSID 819� �����.

��� ��: �� ���� ��. � UTF-8 ��� CCSID 819� �� � ���. ��� CCSID

819� �� � � DB2 ������ ���� ��� �� ��� ��� � �����.

��: �.

� � ���� �� ��: EXCLUDING XMLDECLARATION� ����� ��� �.

INCLUDING XMLDECLARATION� ���� ������ ���� ISO-8859-1 �� UTF-8� �� �

� ��� �����. �� � ���� �� ����� �� �� XML ���� ��� �

���.

���� 4

��� �� �

�� ��� �� Windows-31J ���(Shift_JIS� �� �)

�� ��� �� ���

��

���

��� �� �� CCSID 943

�� ��� �:

SELECT XMLSERIALIZE(XMLCOL AS CLOB(1M) EXCLUDING XMLDECLARATION) FROM T1

�� ��: ���� UTF-8�� CCSID 943�� �����.

��� ��: �� ���� ��. � UTF-8 ��� CCSID 943�� �� � ���. ��� CCSID

943�� �� � � ������ ���� ��� �� ��� ��� � �����.

��: UTF-8�� CCSID 943�� ���� ���� � ��� �� � ����.

338 IBM i: ������ SQL �����

|

|

|

|

|||

||

|||

|||

|

|

|

|

|

|

|

|

|

|

|

|||

||

|||

|||

|

|

|

|

|

|

Page 351: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

� � ���� �� ��: EXCLUDING XMLDECLARATION� ����� ��� �.

INCLUDING XMLDECLARATION� ���� �� ��� Windows-31J �� UTF-8� ����.

�� � ���� �� ����� �� �� XML ���� ��� � ���.

��� XML ��� � CCSID� ���� ��

XML � ���� ���� 2� ����� ����� ���� �� XML �� DB2 �

����� ���� ���� ��� ��� �����. ���� �� ��� ��� ������ �

��� ���� CCSID� �����.

QlgCvtTextDescToDesc API� IANA ���� CCSID� ���� � �����.

���� XML �� ��� ������ CCSID ��

�� �� �� XMLSERIALIZE ��� �� DB2 ������ ���� � � XML �� ����

��� �� ��� �����.

� ��� ��� ��� ����.

<?xml version="1.0" encoding="encoding-name"?>

�� �� ��� �� � ID� �� ���� �� ��� ����. �� ��, XML ��

�� �� ����� ��� ��� ��� CCSID� � �� � �� ��� �� ����� �

� CCSID� ����.

���� DB2 ������ ���� XML �� �� �� CCSID� IANA ������� ���

�. QlgCvtTextDescToDesc API� CCSID� IANA ����� ���� � �����.

�� xml ��� ��

″��″ �� ″��″�� ���� ��� �� xml ��� ��� XML ��� ��� �� ���� �

���� �� ����. ��� �� xml ��� ��� XML ���� �� ��� ��� ����

�. XML ��� ��� �� �� ���� �� � SQL ��� ��� ���.

XML ���� �� ��� XML ��� ��� ������. ��� �� xml ��� �� �� ���

� ����� ��� XML ���� �� ��� ���� ��� �����. � ��� ��� ��

���� �����.

v XML ���� ��� �� ��� � � �

v �� ���� SQL ���� ���� �� � ��� SQL ���

v ��� �� � ��

��� �� ��� � �� ��� �� �� �� ��� �� �� ��� ������.

��� �� ��� ��� XML ��� ���(XSR)� ��� ���� ���. �� ���� ���

��� � ����.

��� �� ���� ��� �� �� �� ����� ���� ��� ��� � ����.

SQL ����� 339

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

Page 352: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

XML ��� ���� �� �� � ���� �����. XML ��� ��� XML ���� ���

�� ��� ���� ���� ���� ����.

�� XML ���� XML �� ��

XML ��� �� �� ��� ��� � ����� ��� �� xml ��� ��� ��� � ���

�. � ��� ��� �� ��� �� XML ���� �� ��� ��� ���� ���� ��

� XML ��� �����.

��� �� XML ���� ���� XML ��� ����� ��� ������.

1. ��� ��� xml �� ��� ������.

2. ��� ��� ���� ���� ��� ��� � �� ����.

3. XML ���� �� �� ��� ��� ����� � XML ���� �� XML ��� ���

�� ���� XML ���� �� ��� ��� � �� �� ���.

4. SYSPROC.XDBDECOMPXML �� ����� ���� XML ��� ������.

��� �� XML ��� � ��

��� �� ���� ���� ��� �� ���� �� �� ���� XML ��� ��� � ����.

v XML ���� � � ��� �� ��� xml �� ��� ��� � ����. � ��� �� ��

� ��� �� �� ��� ��� ����� � ���� ���.

��� ��� XML ���� ��� ����� ��� ������.

1. 1� ��� ���� ���� XSR_REGISTER �� ����� ������.

2. XML ���� � ��� ��� ��� ���� �� �� �� ���� �� � ��� ��

� �� XSR_ADDSCHEMADOC �� ����� ������.

3. issuedfordecomposition ���� 1� ��� XSR_COMPLETE �� ����� ������.

�� xml ��� ��� ��

��� �� xml ��� ��� XML ��� ��� �� � db2-xdb:contentHandling�� db2-xdb:expression

��� ��� �� ��� � ����.

��� �� xml ��� ��� �� ��� ��� ����� �����.

v XML ��� ��� �� �

v ��� ��� <db2-xdb:contentHandling> ��� �� �� �� XML ��� �� � .

<db2-xdb:contentHandling> �� ��� ����.

text ��� ��� �� ��� �� ���

stringValue

�� � ��� �� ���

serializedSubtree

��� �� ��� � �� � �� ��� �

340 IBM i: ������ SQL �����

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

||

|

|

|

|

Page 353: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

v db2-xdb:expression ��� �� ��� �

– XML ���� ��� �� �� ��� �� �

– XML ��� �� � , � �

– ��

db2-xdb:expression� �� ���� ��� �� �� ��� ��� �� � �� �����.

xml ��

��� �� xml ��� ��� XML ��� ��� �� ��� �����. � �� ��� �����

�� �� ��� � � �� XML ��� ��� �� � ���� �����. �� ��� � ���

���� XML ��� �� ��� �����.

xml �� ��� http://www.ibm.com/xmlns/prod/db2/xdb1 � ��� ��� �� ���� ″db2-xdb″

� �� �����. � �� �� �� � ��� �� �� � �� http://www.ibm.com/xmlns/

prod/db2/xdb1 � ���� � �� ���. �� �� �� XML ���� ��� ��� � ��

� � � ��� �� ��� ����.

�� ��� �� � �� ��� �� �� �� ��� ���� ��� ���� �� �� ��

����. ��� �� ��� <xs:annotation> �� ��� �� �� ���� �����. �� ��,

�� �� �� XML ��� ��� �� ��� �����.

�� ��� XML ��� ��� ��� ��� ��� �� ��� ��� �� ��� XML ��� �

�� �� ����� ����. xml �� �� �� �� �����.

�� �� �� � �� �� ��� db2-xdb:rowSet � db2-xdb:column���. ��� ��

�� �� ��� � � �� �����. �� �� �� ���� ����� � ��� ����

���. �� ��� ���� �� �� �� �� ��� ��� ���� �� ��� � ����.

xml �� � �� � ��:

��� �� ��� XML ��� ��� ��� �� ���� ��� � ����.

�� � ���� �� ��� � ����.

v ��� �� ��� � ����

v � ��� �� ��� ���(��) �� ���

����� :

��� �� ��� � ���� �� ��� �� � ��� ���� ����.

�� ��, db2-xdb:rowSet � db2-xdb:column �� ��� ���� ��� � ����. � ��� ��

� �� �����.

<xs:element name="isbn" type="xs:string"db2-xdb:rowSet="TEXTBOOKS" db2-xdb:column="ISBN"/>

SQL ����� 341

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

||

Page 354: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

db2-xdb:rowSet � db2-xdb:column ��� isbn��� ���� ����.

���� � ����� :

��� �� ��� ��� �� ��� �� ��� XML ���� �� <xs:annotation><xs:appinfo></

xs:appinfo></xs:annotation> �� �� ��� ��� ���� ���.

�� ��, db2-xdb:rowSet � db2-xdb:column ��� ��� �� �� ���(<db2-xdb:rowSetMapping>

��� ���) ��� � ����.

<xs:element name="isbn" type="xs:string"><xs:annotation><xs:appinfo><db2-xdb:rowSetMapping><db2-xdb:rowSet>TEXTBOOKS</db2-xdb:rowSet><db2-xdb:column>ISBN</db2-xdb:column>

</db2-xdb:rowSetMapping></xs:appinfo>

</xs:annotation></xs:element>

db2-xdb:rowSet � db2-xdb:column ��� �� ��� ���� �� � ��� ���� ���� ��

����. ��� �� ��� ���� ���� ���� ��� ��� ��� ��� ��� �� �

��� <db2-xdb:rowSetMapping>� ���� � � �, �� ��� �� ��� � ��� ����

� ��� �� ��� ���� ���.

��� :

��� <xs:schema> ��� ��� ���� XML ���� ���� �� XML ��� ��� ���

��� �����.

�� ��, <db2-xdb:defaultSQLSchema> ��� XML ����� ���� ���� �� �� ��� SQL

���� ����. <db2-xdb:defaultSQLSchema>� <xs:schema>� �� ��� ���� ���.

<xs:schema><xs:annotation><xs:appinfo><db2-xdb:defaultSQLSchema>admin</db2-xdb:defaultSQLSchema>

</xs:appinfo></xs:annotation>...

</xs:schema>

� ��� � XML ���� ���� �� ��� ��� ���� �� ���� � SQL ��� ″admin″

� ��� �����.

xml �� - ��:

DB2� XML ���� �� ������ ���� ��� ��� ��� ��� �� xml ��� �� �

� �� ���� �� �� �����. � �� xml �� ��� �� ��� ��� ���� ���

�� � ���� ����� ����.

342 IBM i: ������ SQL �����

|

|

|

|

|

|

||||||||||

|

|

|

|

|

|

|

|

|

||||||||

|

|

|

|

|

|

Page 355: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� ��� �� � � ��� �� �� � ��� ������.

49. SQL ��� ��

�� xml �� �

SQL ���� ���� �� �� ���� ��� SQL ���

��

db2-xdb:defaultSQLSchema

�� ���� ��� �� �� SQL ��� �� db2-xdb:table (<db2-xdb:SQLSchema> �� ��)

50. �� � ���� XML �� �� �� ��

�� xml �� �

� � ��� ��� � ��� �� �� �� ���� db2-xdb:rowSet� db2-xdb:column ��

db2-xdb:rowSetMapping

�� ��� �� � ��� ��� � ��� �� �� db2-xdb:rowSetMapping

� � ��� ��� � ��� �� �� db2-xdb:table

�� ��� � � �� �� db2-xdb:rowSet

51. ��� XML ��� ��

�� xml �� �

�� ��� ��� �� ��� �� �� ��(���, ��� �

� � )

db2-xdb:contentHandling

�� �� �� �� �� �� db2-xdb:normalization, db2-xdb:expression, db2-xdb:truncate

��� ���� ��� ���� ��� ��� ��� �

��

db2-xdb:condition db2-xdb:locationPath

SQL ����� 343

|

||

||

|||

|||

||

||

|||

||

||

|||

||

||

|||

||

|||

|

Page 356: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� ��

�db2-xdb:defaultSQLSchema �� ���

db2-xdb:defaultSQLSchema ��� db2-xdb:table ��� ���� ���� ���� �� XML ��

��� �� �� ����� �� ��� SQL ���� �����.

350 ���� �db2-xdb:table �� ���

db2-xdb:table ��� � XML �� �� ��� �� �� � �����,

<db2-xdb:defaultSQLSchema>� �� ��� SQL ���� �� SQL ���� �� �� ����

��� � �� ���.

346 ���� �db2-xdb:rowSet �� ���

db2-xdb:rowSet ��� �� � ���� �� XML �� �� �� ��� �����.

353 ���� �db2-xdb:column �� ���

db2-xdb:column ��� XML ��� ��� �� ���� �� �����.

374 ���� �db2-xdb:rowSetMapping �� ���

db2-xdb:rowSetMapping ��� XML ��� ��� � �� ���� , �� ���� � ��

�� � ���� � �����.

365 ���� �db2-xdb:contentHandling �� ���

db2-xdb:contentHandling ��� �� ���� � ��� ��� �� ���� ��� ��� ���

�����.

369 ���� �db2-xdb:normalization �� ���

db2-xdb:normalization ��� $DECOMP_CONTENT(db2-xdb:expression� � �� �)� �� ��

��� ��� XML ���� �� ��� �����.

358 ���� �db2-xdb:expression �� ���

db2-xdb:expression ��� � ��� �� ���� �� �� ��� �� ��� �����.

372 ���� �db2-xdb:truncate �� ���

db2-xdb:truncate ��� XML �� �� �� � ��� � ��� ����� ��� �����.

361 ���� �db2-xdb:condition �� ���

db2-xdb:condition ��� �� ���� ���� ��� ���� ��� �����. ��� �� ��

��� � ���(rowSet� �� ��� ��, �� ) ��� �� �� �� ���� ����.

355 ���� �db2-xdb:locationPath �� ���

db2-xdb:locationPath ��� ��� ��� �� �� �� ��� � ��� XML �� �� ��

� �����.

db2-xdb:defaultSQLSchema �� :

db2-xdb:defaultSQLSchema ��� db2-xdb:table ��� ���� ���� ���� �� XML ���

�� �� �� ����� �� ��� SQL ���� �����.

344 IBM i: ������ SQL �����

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

Page 357: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

� ��

��� <xs:annotation> ��� �� <xs:appinfo>� �� ��.

�� �

db2-xdb:defaultSQLSchema� �� ���� �����(���, value� ��� ��� �� ���).

<xs:schema><xs:annotation><xs:appinfo><db2-xdb:defaultSQLSchema>value</db2-xdb:defaultSQLSchema>

</xs:appinfo></xs:annotation>...

</xs:schema>

�� �

http://www.ibm.com/xmlns/prod/db2/xdb1

��� �

�� �� SQL ����. �� ���� �� SQL ����� ����� ���� ����.

�� SQL ���� ����� �� SQL ID� ���� � ���� � ��� ������.

�� �� ’<’ � ’&’� SQL ����� XML ��� ���� ������� ���.

����

��� �� ����� �� �� ���� SQL ���� ���� ���. ���� �� �� �,

< d b 2 - x d b : t a b l e > ��� < d b 2 - x d b : S Q L S c h e m a > �� ��� ���� ���� � �

<db2-xdb:defaultSQLSchema> ��� ��� ���� ��� � ����. ���� �� �����

<db2-xdb:defaultSQLSchema>� �� �� SQL ������ �����. ��� �� ���� � �

�� ��� � ��� ���� �� �� ��� ���.

�� �� �� ���� �� SQL ID admin� ��� �� ���� �� ���� �� ����

�� SQL ���� ���� ��� �����.

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"xmlns:db2-xdb="http://www.ibm.com/xmlns/prod/db2/xdb1">

<xs:annotation><xs:appinfo><db2-xdb:defaultSQLSchema>admin</db2-xdb:defaultSQLSchema>

</xs:appinfo></xs:annotation>...

</xs:schema>

SQL ����� 345

|

|

|

|

||||||||

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|||||||||

Page 358: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� �� �� SQL ID admin schema� ��� �� ���� �� ���� �� ���� �� SQL

���� ���� ��� �����. admin schema� � ��� ���� � ������.

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"xmlns:db2-xdb="http://www.ibm.com/xmlns/prod/db2/xdb1">

<xs:annotation><xs:appinfo><db2-xdb:defaultSQLSchema>"admin schema"</db2-xdb:defaultSQLSchema>

</xs:appinfo></xs:annotation>...

</xs:schema>

db2-xdb:rowSet �� :

db2-xdb:rowSet ��� �� � ���� �� XML �� �� �� ��� �����.

� ��

<xs:element> �� <xs:attribute> ���� <db2-xdb:rowSetMapping>� �� ��.

�� �

db2-xdb:rowSet� �� ���� �����(���, value� ��� ��� �� ���).

v <xs:element db2-xdb:rowSet="value" />

v <xs:attribute db2-xdb:rowSet="value" />

v <db2-xdb:rowSetMapping><db2-xdb:rowSet>value</db2-xdb:rowSet>...

</db2-xdb:rowSetMapping>

�� �

http://www.ibm.com/xmlns/prod/db2/xdb1

��� �

SQL ID� �� ��� ���� ID. � � ��� ID ��� ������.

����

db2-xdb:rowSet ��� �� � ���� XML �� �� ��� �����. � ��� ����� ��

����� �� ��� ���� rowSet�� ��� � ����. �� rowSet� db2-xdb:table ��� �

� ����� �����. � ���� � ��� �� ��� ���� �� �����. � rowSet(�

�� �� �� ��)� �� ���� ���� �� ��� ����� � ��� ����� ��

rowSet� �� �����.

� XML ��� ��� �� ��� �� � ���� ��� �� ���� ���� ��� �� ��

�� ��� �� �����.

346 IBM i: ������ SQL �����

|

|

|||||||||

|

|

|

|

|

|

|

|

||||

|

|

|

|

|

|

|

|

|

|

|

|

Page 359: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

v db2-xdb:rowSet� �� <db2-xdb:table> ��� ��� <db2-xdb:rowSet> �� ��� ��� ���

�� ���� �� <db2-xdb:defaultSQLSchema> ��� ��� �� SQL ���� ��, � �

�� �� ����. � db2-xdb:rowSet ��� �� ���� ���� ���� ��� ���

�� ��� �� � �� ����.

v db2-xdb:rowSet� �� <db2-xdb:table> ��� ��� <db2-xdb:rowSet> �� ��� ��� �

� �� ���� �� <db2-xdb:table>� <db2-xdb:name> ��� �� ������. �

db2-xdb:rowSet ��� �� ���� ���� ���� ��� ��� � �� ��(��� �

��) �� ��� � �� ����.

��: XML ���� XML ��� ���� ���� �� � � ��� ���� ���� �������

���� � ����.(XML ���� ��� � db2-xdb:column ��� �� � ��� ��

�.) ���� �� XML ���� ��� �� ���� � � ��� �����. <db2-xdb:table>�

��� ��� ����� ���� �� ��� �����.

db2-xdb:rowSet ��� ��� �� db2-xdb:column ���� db2-xdb:condition ��� ���� �

��. db2-xdb:rowSet � db2-xdb:column� ��� � ��� ��� ��� ���� � ����.

db2-xdb:rowSet � db2-xdb:condition ��� ���� ��� rowSet� �� �� ���� �� ���

�����(<db2-xdb:table> ��� �� �� �� ���� ���).

�� � db2-xdb:rowSet� ���� �� ��� ����.

��� �� ��� � � �� ��

BOOKCONTENTS ���� <db2-xdb:defaultSQLSchema>� �� SQL ���� ��� ,

″BOOKCONTENTS″� ��� <db2-xdb:rowSet> �� ��� �� ��� <db2-xdb:table> ���

� ��� �� ���� �� ��� ������.

<xs:element name="book"><xs:complexType><xs:sequence><xs:element name="authorID" type="xs:integer" /><xs:element name="chapter" type="chapterType" maxOccurs="unbounded" />

</xs:sequence><xs:attribute name="isbn" type="xs:string"

db2-xdb:rowSet="BOOKCONTENTS" db2-xdb:column="ISBN" /><xs:attribute name="title" type="xs:string" />

</xs:complexType></xs:element>

<xs:complexType name="chapterType"><xs:sequence><xs:element name="paragraph" type="paragraphType" maxOccurs="unbounded"

db2-xdb:rowSet="BOOKCONTENTS" db2-xdb:column="CHPTCONTENT" /></xs:sequence><xs:attribute name="number" type="xs:integer"

db2-xdb:rowSet="BOOKCONTENTS" db2-xdb:column="CHPTNUM" /><xs:attribute name="title" type="xs:string"

SQL ����� 347

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

||||||||||||||||||||

Page 360: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

db2-xdb:rowSet="BOOKCONTENTS" db2-xdb:column="CHPTTITLE" /></xs:complexType>

<xs:simpleType name="paragraphType"><xs:restriction base="xs:string"/>

</xs:simpleType>

XML ��� �� ��� �����.

<book isbn="1-11-111111-1" title="� � XML ��"><authorID>22</authorID><!-- this book does not have a preface --><chapter number="1" title="XML ��"><paragraph>���� XML...</paragraph>...

</chapter><chapter number="2" title="XML � ������"><paragraph>XML ���...</paragraph>

</chapter>...<chapter number="10" title="�� ��"><paragraph>�� ���...</paragraph>

</chapter>...

</book>

�� BOOKCONTENTS ���� ��� �� �����.

52. BOOKCONTENTS

ISBN CHPTNUM CHPTTITLE CHPTCONTENT

1-11-111111-1 1 XML �� ���� XML...

1-11-111111-1 2 XML � ������ XML ���...

... ... ... ...

1-11-111111-1 10 �� �� �� ���...

��� ��� �� ��� � � �� ��

db2-xdb:rowSet ��� �� �� ��� <db2-xdb:table> ��� ��� <db2-xdb:rowSet> �� ��

� �� <db2-xdb:table> ��� �� ��� ��� ���� �����. ALLBOOKS ����

<db2-xdb:defaultSQLSchema>� �� SQL ���� ��� ��� �� ���� �� ��� ����

��.

<!-- global annotation --><xs:annotation><xs:appinfo><db2-xdb:table>

<db2-xdb:name>ALLBOOKS</db2-xdb:name><db2-xdb:rowSet>book</db2-xdb:rowSet><db2-xdb:rowSet>textbook</db2-xdb:rowSet>

</db2-xdb:table></xs:appinfo>

</xs:annotation>

<xs:element name="book">

348 IBM i: ������ SQL �����

||||||

|

||||||||||||||||

|

||

||||

||||

||||

||||

|||||

|

|

|

|

|

||||||||||||

Page 361: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

<xs:complexType><xs:sequence><xs:element name="authorID" type="xs:integer"

db2-xdb:rowSet="book" db2-xdb:column="AUTHORID" /><xs:element name="chapter" type="chapterType" maxOccurs="unbounded" />

</xs:sequence><xs:attribute name="isbn" type="xs:string"

db2-xdb:rowSet="book" db2-xdb:column="ISBN" /><xs:attribute name="title" type="xs:string"

db2-xdb:rowSet="book" db2-xdb:column="TITLE" /></xs:complexType>

</xs:element><xs:element name="textbook"><xs:complexType><xs:sequence><xs:element name="isbn" type="xs:string"

db2-xdb:rowSet="textbook" db2-xdb:column="ISBN" /><xs:element name="title" type="xs:string"

db2-xdb:rowSet="textbook" db2-xdb:column="TITLE" /><xs:element name="primaryauthorID" type="xs:integer"

db2-xdb:rowSet="textbook" db2-xdb:column="AUTHORID" /><xs:element name="coauthorID" type="xs:integer"

minOccurs="0" maxOccurs="unbounded" /><xs:element name="subject" type="xs:string" /><xs:element name="edition" type="xs:integer" /><xs:element name="chapter" type="chapterType" maxOccurs="unbounded" />

</xs:sequence></xs:complexType>

</xs:element>

<xs:complexType name="chapterType"><xs:sequence><xs:element name="paragraph" type="paragraphType" maxOccurs="unbounded" />

</xs:sequence><xs:attribute name="number" type="xs:integer" /><xs:attribute name="title" type="xs:string" />

</xs:complexType>

<xs:simpleType name="paragraphType"><xs:restriction base="xs:string"/>

</xs:simpleType>

XML ��� �� ��� �����.

<book isbn="1-11-111111-1" title="� � XML ��"><authorID>22</authorID><!-- this book does not have a preface --><chapter number="1" title="XML ��"><paragraph>���� XML...</paragraph>

</chapter><chapter number="2" title="XML � ������"><paragraph>XML ���...</paragraph>

</chapter><chapter number="10" title="�� ��"><paragraph>�� ���...</paragraph>

</chapter></book>

SQL ����� 349

|||||||||||||||||||||||||||||||||||||||||

|

||||||||||||||

Page 362: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

<textbook><isbn>0-11-011111-0</isbn><title>Programming with XML</title><primaryauthorID>435</primaryauthorID><subject>Programming</subject><edition>4</edition><chapter number="1" title="����� ��"><paragraph>������ ���� ��...</paragraph>

</chapter><chapter number="2" title="���� ����"><paragraph>��� ���...</paragraph>

</chapter>...<chapter number="10" title="�� ��"><paragraph>�� �� ����...</paragraph>

</chapter></textbook>

� ��� ALLBOOKS ���� ���� ��� �� �� � ����.

v /book/@isbn, /book/@authorID, /book/title

v /textbook/isbn, /textbook/primaryauthorID, /textbook/title

�� rowSet�� ��� ����� �� �����.

53. ALLBOOKS

ISBN TITLE AUTHORID

1-11-111111-1 � � XML � 22

0-11-011111-0 Programming with XML 435

db2-xdb:table �� :

db2-xdb:table ��� � XML �� �� ��� �� �� � �����,

<db2-xdb:defaultSQLSchema>� �� ��� SQL ���� �� SQL ���� �� �� ���� �

�� � �� ���.

� ��

<xs:appinfo>� ��� �� ��(<xs:annotation>� �� ���)

�� �

http://www.ibm.com/xmlns/prod/db2/xdb1

��� �

��� �� ���� �� ��� � db2-xdb:table� ���� �� �����.

<db2-xdb:SQLSchema>

(�) ���� SQL ���.

350 IBM i: ������ SQL �����

|||||||||||||||||

|

|

|

|

||

|||

|||

||||

|

|

|

|

|

|

|

|

|

|

|

|

Page 363: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

<db2-xdb:name>

� ���� �. � ����� �� <db2-xdb:SQLSchema> ����

<db2-xdb:defaultSQLSchema> ��� ��� ��� � ��� �� ���� ���� XML ��

� �� �� �� <db2-xdb:table> ���� ��� ���.

<db2-xdb:rowSet>

��� <db2-xdb:rowSet>� �� �� ���� �� �� � ��. � ��� <db2-xdb:rowSet>

��� <db2-xdb:name>� �� �� ��� � �� ��� � ��� �� �� � ���

� ���� � ����. <db2-xdb:rowSet> �� db2-xdb:column ��� �� � ���� �

XML ���� � ��� ��� �� �� �� ���� � ��� � ����.

� ��� <db2-xdb:rowSet> ��� ���� ��, ��� ����� � <db2-xdb:rowSet> �

�� ��� �� ���� ���� XML ��� �� �� �� <db2-xdb:table> ���� �

�� ���.

db2-xdb:table� �� ��� �� ��� �� ��� ���� ���� ����. � ��� ��� SQL

ID� �� �� ��� ���� ���. ���� �� �� ����� ���� ��� �� ����

� ��� ����� �����. �� �� ‘<’ � ‘&’� SQL ID� ������� ���.

����

db2-xdb:table ��� �� � � � ���� ���.

v ���� �� � � �� ��� �.

v �� ���� ��� ���� <db2-xdb:defaultSQLSchema> ��� �� �� �� SQL ���

� �� �.

� ����� ��� � ���, �� � �� �� ���� �� �� ��� ���� � ��� ��

�� ����. � � ��� ��� � ��� �� ���� ����.

�� �� db2-xdb:table ��� ���� � �� �� �� � ��� �� � �� ��� �

�� � ���� �� ���� ��� �����. �� XML ��� �� ��� �����(�� �

�� �� ��� �� ���).

<root>...<book isbn="1-11-111111-1" title="� � XML ��"><authorID>22</authorID><email>[email protected]</email><!-- this book does not have a preface --><chapter number="1" title="XML ��"><paragraph>���� XML...</paragraph>...

</chapter><chapter number="2" title="XML � ������"><paragraph>XML ���...</paragraph>

</chapter>

SQL ����� 351

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|||||||||||||

Page 364: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

...<chapter number="10" title="�� ��"><paragraph>�� ���...</paragraph>

</chapter></book>...<author ID="0800" email="[email protected]"><firstname>Alexander</firstname><lastname>Smith</lastname><activeStatus>0</activeStatus>

</author>...

<root>

� �� ��� �� ��� ID � � �� � ��� ���� �� �� ���,

AUTHORSCONTACT� ���� ��� ������. ��� ID� �� � ��� <book> ���

<author> ��� � ���� ������. ��� � ��� �� �� �� ���� �� � �

��� ���. <db2-xdb:table> ��� ���� ���. � ���� <db2-xdb:table>� ���� �

�� �� ���� ����� ��� ���� ��� �� ���� ��� ����.

<!-- global annotation --><xs:annotation><xs:appinfo><db2-xdb:defaultSQLSchema>adminSchema</db2-xdb:defaultSQLSchema><db2-xdb:table><db2-xdb:SQLSchema>user1</db2-xdb:SQLSchema><db2-xdb:name>AUTHORSCONTACT</db2-xdb:name><db2-xdb:rowSet>bookRowSet</db2-xdb:rowSet><db2-xdb:rowSet>authorRowSet</db2-xdb:rowSet>

</db2-xdb:table></xs:appinfo>

</xs:annotation>

<xs:element name="book"><xs:complexType><xs:sequence><xs:element name="authorID" type="xs:integer"

db2-xdb:rowSet="bookRowSet" db2-xdb:column="AUTHID" /><xs:element name="email" type="xs:string"

db2-xdb:rowSet="bookRowSet" db2-xdb:column="EMAILADDR" /><xs:element name="chapter" type="chapterType" maxOccurs="unbounded" />

</xs:sequence><xs:attribute name="isbn" type="xs:string" /><xs:attribute name="title" type="xs:string" />

</xs:complexType></xs:element>

<xs:element name="author"><xs:complexType><xs:sequence><xs:element name="firstname" type="xs:string" /><xs:element name="lastname" type="xs:string" /><xs:element name="activeStatus" type="xs:boolean" />

</xs:sequence><xs:attribute name="ID" type="xs:integer"

db2-xdb:rowSet="authorRowSet" db2-xdb:column="AUTHID" />

352 IBM i: ������ SQL �����

|||||||||||||

|

|

|

|

|

||||||||||||||||||||||||||||||||||||

Page 365: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

<xs:attribute name="email" type="xs:string"db2-xdb:rowSet="authorRowSet" db2-xdb:column="EMAILADDR" />

</xs:complexType></xs:element>

db2-xdb:table ��� db2-xdb:name �� ���� ��� �� �� ���� �� �����. � ��

�� AUTHORSCONTACT� �� ������. <book> ��� ID � �� � ��� <author> ��

� �� ��� ����� �� ��(�, � �� ���� �� �� �) <db2-xdb:rowSet> ���

���� �� ��� ������. � ���� <book> � <author> ��� �� ������ ��� �

��� ���� ��� �� ��� ��� � �� � ����. � rowSet� �� �� ��

� � ����.

AUTHORSCONTACT ���� ��� SQL ���� �� SQL ���� ��� <db2-xdb:SQLSchema>

��� ���� �� ��� ������. AUTHORSCONTACT ���� ��� ��� ����.

54. AUTHORSCONTACT

AUTHID EMAILADDR

22 [email protected]

0800 [email protected]

db2-xdb:column �� :

db2-xdb:column ��� XML ��� ��� �� ���� �� �����.

� ��

<xs:element> �� <xs:attribute> ���� <db2-xdb:rowSetMapping>� �� ��

�� �

db2-xdb:column� �� ���� �����(���, value� ��� ��� �� ���).

v <xs:element db2-xdb:rowSet="value" db2-xdb:column="value" />

v <xs:attribute db2-xdb:rowSet="value" db2-xdb:column="value" />

v <db2-xdb:rowSetMapping>

<db2-xdb:rowSet>value</db2-xdb:rowSet>

<db2-xdb:column>value</db2-xdb:column>

...

</db2-xdb:rowSetMapping>

�� �

http://www.ibm.com/xmlns/prod/db2/xdb1

SQL ����� 353

||||

|

|

|

|

|

|

|

|

||

||

||

|||

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

Page 366: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

��� �

� ��� �.

����

v ���� �� �� ����� ���� ����.

v � �� (″), ���(&) �� �� ��(<)� �� �� ��� SQL ID� � � XML

���� ���� ���. �� ��, ″� &quot;�, &� &amp;� �� <� &lt;� ������.

v db2-xdb:locationPath ��� ��� db2-xdb:column� db2-xdb:rowSetMapping� � �� ����

�.

�� �� db2-xdb:column ��� ���� <book> ��� ��� BOOKCONTENTS�� ���� �

��� � �� ��� �����. ��� �� ��� ��� � �� ����.

<xs:element name="book"><xs:complexType><xs:sequence><xs:element name="authorID" type="xs:integer" /><xs:element name="chapter" type="chapterType" maxOccurs="unbounded" />

</xs:sequence><xs:attribute name="isbn" type="xs:string"

db2-xdb:rowSet="BOOKCONTENTS" db2-xdb:column="ISBN" /><xs:attribute name="title" type="xs:string" />

</xs:complexType></xs:element>

<xs:complexType name="chapterType"><xs:sequence><xs:element name="paragraph" type="paragraphType" maxOccurs="unbounded"

db2-xdb:rowSet="BOOKCONTENTS"db2-xdb:column="CHPTCONTENT" />

</xs:sequence><xs:attribute name="number" type="xs:integer"

db2-xdb:rowSet="BOOKCONTENTS"db2-xdb:column="CHPTNUM" />

<xs:attribute name="title" type="xs:string"db2-xdb:rowSet="BOOKCONTENTS"db2-xdb:column="CHPTTITLE" />

</xs:complexType>

<xs:simpleType name="paragraphType"><xs:restriction base="xs:string"/>

</xs:simpleType>

��� �� <book> ��� ��� �� � ���� ��� �� �� �� BOOKCONTENTS

���� ����.

<book isbn="1-11-111111-1" title="� � XML ��"><authorID>22</authorID><!-- this book does not have a preface --><chapter number="1" title="XML ��">

354 IBM i: ������ SQL �����

|

|

|

|

|

|

|

|

|

|

|

|||||||||||||||||||||||||||||

|

|

||||

Page 367: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

<paragraph>���� XML...</paragraph>...

</chapter><chapter number="2" title="XML � ������"><paragraph>XML ���...</paragraph>

</chapter>...<chapter number="10" title="�� ��"><paragraph>�� ���...</paragraph>

</chapter></book>

55. BOOKCONTENTS

ISBN CHPTNUM CHPTTITLE CHPTCONTENT

1-11-111111-1 1 XML �� ���� XML...

1-11-111111-1 2 XML � ������ XML ���...

... ... ... ...

1-11-111111-1 10 �� �� �� ���...

db2-xdb:locationPath �� :

db2-xdb:locationPath ��� ��� ��� �� �� �� ��� � ��� XML �� �� ���

�����.

db2-xdb:locationPath ��� ����� �� ��� �� ���� ��� ��� �� ��� ���

� �����.

v �� �� ��

v �� �� ��

v ��� �� �� ��

v � �� �� ��� ��� ��� ��

� ��

<xs:element> �� <xs:attribute> ���� <db2-xdb:rowSetMapping>>� ��.

�� �

db2-xdb:locationPath� �� ���� �����(���, value� ��� ��� �� ���).

v <xs:element db2-xdb:locationPath="value" />

v <xs:attribute db2-xdb:locationPath="value" />

v

<db2-xdb:rowSetMapping> db2-xdb:locationPath="value"><db2-xdb:rowSet>value</db2-xdb:rowSet>...

</db2-xdb:rowSetMapping>>

SQL ����� 355

|||||||||||

||

||||

||||

||||

||||

|||||

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

||||

Page 368: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� �

http://www.ibm.com/xmlns/prod/db2/xdb1

��� �

db2-xdb:locationPath ��� �� ��� ��� ���.

�� �/ name / nameprefix : prefix :

@ nameprefix :

��

name �� �� ���.

prefix � �� � �.

� �� � �� db2-xdb:locationPath� ��� ��� ��� � ��� ����� �

��. ��� ��� <xs:schema> ��� � �� ��� ���� � �� � � � �� �

�� � ����.

����

���� � � �� �� �� ��(�� �� �� �� �� �� ���� �� ��� �� �

� �� ��)� db2-xdb:locationPath ��� ��� ��� ���.

db2-xdb:locationPath� ��� ��� �� ��� �� ��� ��� ��� �(�: <xs:element ref=″abc″>)

���� ���. ��� ��� �� ��� � � ��� � ��� ��� �� ��� ��� ���

� ���. ��� ��� ��� XML ��� �� � �� ����� ��� � ����. ��

db2-xdb:locationPath� ���� �� ���� ��� ���� ���. �� �� ��, �� �� �

�� ��� ��� �� �� � ���� �� �� � �� ��� ��� ���� ���.

db2-xdb:locationPath ��� ���� � �� �� rowSt � �� ���� ���. ��

db2-xdb:locationPath �� �� rowSet � �� ��� � ����.

��� � �� � attributeFormDefault =″unqualified″� ���� �� ��� ��� ��� � ��

� ��� ��� ���� ��� ���� �� ��� �� �� ��� ����� . ��

attributeFormDetail = ″unqualified″ �� ��� ��� ��� � ��� �� ����. �

�� � ��� �� ��� ��� �� ���� ����.

�� �� ��� ���� ���� �� � �� ���� �� ��� ���� ��� �����.

��� �� ��� ��� � �� ����.

<!-- global attribute --><xs:attribute name="title" type="xs:string"

db2-xdb:rowSet="BOOKS"

356 IBM i: ������ SQL �����

|

|

|

|

||||||||||||||||||||||||||||||||||||||||||||||

|

||

||

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|||

Page 369: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

db2-xdb:column="TITLE"db2-xdb:locationPath="/books/book/@title">

<xs:annotation><xs:appinfo><db2-xdb:rowSetMapping> db2-xdb:locationPath="/books/book/chapter/@title"><db2-xdb:rowSet>BOOKCONTENTS</db2-xdb:rowSet><db2-xdb:column>CHPTTITLE</db2-xdb:column>

</db2-xdb:rowSetMapping>></xs:appinfo>

</xs:annotation></xs:attribute>

<xs:element name="books"><xs:complexType><xs:sequence><xs:element name="book"><xs:complexType><xs:sequence><xs:element name="authorID" type="xs:integer" /><xs:element name="chapter" type="chapterType" maxOccurs="unbounded" />

</xs:sequence><xs:attribute name="isbn" type="xs:string" /><xs:attribute ref="title" />

</xs:complexType></xs:element>

</xs:sequence></xs:complexType>

</xs:element>

<xs:complexType name="chapterType"><xs:sequence><xs:element name="paragraph" type="paragraphType" maxOccurs="unbounded" />

</xs:sequence><xs:attribute name="number" type="xs:integer" /><xs:attribute ref="title" />

</xs:complexType>

<xs:simpleType name="paragraphType"><xs:restriction base="xs:string"/>

</xs:simpleType>

″title″��� � �� ��� ��� �� ���� � ��� �� �� ��� ��� ������.

� ��� <book> ������ ��� � ��� <chapter> ��������. ″title″ ��� �� �

��� �� � �� ���� ���� ���. � ��� �� ���� ″title″ �� � ��

BOOKS ���� � �� ��� � ���� BOOKCONTENTS ���� �����.

��� �� <books> ��� ��� �� � ���� ��� �� �� �� BOOKS ���

� ����.

<books><book isbn="1-11-111111-1" title="� � XML ��"><authorID>22</authorID><!-- this book does not have a preface --><chapter number="1" title="XML ��"><paragraph>���� XML...</paragraph>...

SQL ����� 357

||||||||||||||||||||||||||||||||||||||||

|

|

|

|

|

|

|||||||

Page 370: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

</chapter><chapter number="2" title="XML � ������"><paragraph>XML ���...</paragraph>

</chapter>...<chapter number="10" title="�� ��"><paragraph>�� ���...</paragraph>

</chapter></book>

...</books>

56. BOOKS

ISBN TITLE CONTENT

NULL � � XML � NULL

57. BOOKCONTENTS

ISBN CHPTNUM CHPTTITLE CHPTCONTENT

NULL NULL XML �� NULL

NULL NULL XML � ������ NULL

... ... ... ...

NULL NULL �� �� NULL

db2-xdb:expression �� :

db2-xdb:expression ��� � ��� �� ���� �� �� ��� �� ��� �����.

� ��

��� ���� ��� <xs:element> �� <xs:attribute> ���� <db2-xdb:rowSetMapping>

� � �� ��

�� �

db2-xdb:expression� �� ���� �����(���, value� ��� ��� �� ���).

v <xs:element db2-xdb:expression="value" db2-xdb:column="value" />

v <xs:attribute db2-xdb:expression="value" db2-xdb:column="value" />

v

<db2-xdb:rowSetMapping><db2-xdb:rowSet>value</db2-xdb:rowSet><db2-xdb:column>value</db2-xdb:column><db2-xdb:expression>value</db2-xdb:expression>...

</db2-xdb:rowSetMapping>

�� �

http://www.ibm.com/xmlns/prod/db2/xdb1

358 IBM i: ������ SQL �����

|||||||||||

||

|||

||||

||

||||

||||

||||

||||

|||||

|

|

|

|

|

|

|

|

|

|

||||||

|

|

Page 371: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

��� �

db2-xdb:expression ��� SQL ��� �� �� ���� �� ��� ��� ���.

expression:

�� �

,

function-name ( expression )constant$DECOMP_CONTENT$DECOMP_DOCUMENTID( scalar-fullselect )expression + expression

-*/CONCAT

( expression )special-registerCAST ( expression AS data-type )XML-function

��

����

db2-xdb:expression ���� $DECOMP_CONTENT� ��� � ��� �� XML ��� ��� ��

� ��� ��� �� ��� ��� � ����. � ��� ��� ��� �� � ����

� �����.

db2-xdb:expression� ��� ���� �� � ��� �� �(�� ��, ��� �)� �����

� �����.

db2-xdb:expression� ��� SQL ��� ���� ���� ��, �� ��� ��� ���� �

� ��� �� ��� �� � ��� ����� ���. �� SQL ��� �� �� �����.

��� ��� �� �� SQL ��� ���� ��� � ��� ���� ���� �� ��� ��

��.

db2-xdb:expression ��� ����, ���� � �� ���� �� SQL � ��� ���� ��

�� ���� �� ����� �����.

function ( expression-list )

�� �� ��� �� SQL �� �. �� �� � �(� � ��)� �����.

constant

��� �� �� �� �� �.

$DECOMP_CONTENT

���� �� XML ��� ��� ��� db2-xdb:contentHandling ��� �� �� ��

��.

SQL ����� 359

|

|

|

||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

Page 372: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

$DECOMP_DOCUMENTID

XDBDECOMPXML �� ����� documentid �� ���� �� ��� ���, ��

XML ��� �����.

( scalar-fullselect )

� ��� ���� � �� ���� �� ���, ��� �� ����. �� �� �

� ���� ��� ��� ��� �����.

expression operator expression

�� ���� � ���� �� ���� �� �� ����� ��.

( expression )

�� �� ���� �� ���� �� ��� � ��.

special-register

���� �� ����� �. � �� �� ��� �� ���� ��� �����.

CAST ( expression AS data-type )

��� NULL� �� �� SQL ��� ����� �� ��. ��� NULL�� �

�� �� SQL ��� ��� �����. � ��� ��� � ��� ���� ����

NULL� ���� ���(�� ��, �� � CAST (NULL AS INTEGER)).

XML-function

���� SQL/XML �.

� �� db2-xdb:expression ���� ��� � �� �� ��� �����. XML ��� SQL ����

���� �� � �����.

�� XML ��� ��� ����.

<num>1000.99</num>

��� �� XML ���� �� ��� �� ���� �� ����.

CREATE TABLE TAB1(ASIS DECIMAL(9,2),ADD INTEGER,TAX INTEGER,STR VARCHAR(25),LITERAL DECIMAL(5,1)SELECT VARCHAR(25))

��� �� XML ���� �� ��� �� ���� �����.

CREATE TABLE SCH1.TAB2(ID INTEGER,COL1 VARCHAR(25))

360 IBM i: ������ SQL �����

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|||

|

|||||||

|

|||

Page 373: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

SCH1.TAB2 ����� (100, ’TAB2COL1VAL’) �� �� � �� ����.

<xs:element name="num" type="xs:double"><xs:annotation><xs:appinfo><xdb:rowSetMapping><xdb:rowSet>TAB1</xdb:rowSet><xdb:column>ASIS</xdb:column>

</xdb:rowSetMapping><xdb:rowSetMapping><xdb:rowSet>TAB1</xdb:rowSet><xdb:column>ADD</xdb:column><xdb:expression>CAST(XDB.ADD(1234,CAST($DECOMP_CONTENT AS INTEGER)) AS INTEGER)

</xdb:expression></xdb:rowSetMapping><xdb:rowSetMapping>

<xdb:rowSet>TAB1</xdb:rowSet><xdb:column>TAX</xdb:column><xdb:expression>CAST(XDB.TAX(CAST($DECOMP_CONTENT AS DOUBLE)) AS INTEGER)

</xdb:expression></xdb:rowSetMapping><xdb:rowSetMapping><xdb:rowSet>TAB1</xdb:rowSet><xdb:column>STR</xdb:column><xdb:expression>CAST($DECOMP_CONTENT AS VARCHAR(25))

</xdb:expression></xdb:rowSetMapping><xdb:rowSetMapping><xdb:rowSet>TAB1</xdb:rowSet><xdb:column>LITERAL</xdb:column><xdb:expression>32.3</xdb:expression>

</xdb:rowSetMapping><xdb:rowSetMapping><xdb:rowSet>TAB1</xdb:rowSet><xdb:column>SELECT</xdb:column><xdb:expression>(SELECT "COL1" FROM "SCH1"."TAB2" WHERE "ID" = 100)

</xdb:expression></xdb:rowSetMapping>

</xs:appinfo></xs:annotation>

</xs:element>

���� ID� ���� �� ���� ��� ���� ���� �� �� � � �� ����

AuthNumBooks�� ��� �� �� �� ������.

58. TAB1

ASIS ADD TAX STR LITERAL SELECT

1000.99 2234 300 1000.99 32.3 TAB2COL1VAL

db2-xdb:condition �� :

SQL ����� 361

|

|||||||||||||||||||||||||||||||||||||||||||

|

|

||

||||||

|||||||

|

Page 374: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

db2-xdb:condition ��� �� ���� ���� ��� ���� ��� �����. ��� �� �� �

�� � ���(rowSet� �� ��� ��, �� ) ��� �� �� �� ���� ����.

��� �� ��� ��� ��� ��� ���� ��� ����.

� ��

<xs:element> �� <xs:attribute> ���� <db2-xdb:rowSetMapping>� � �� ��.

�� �

db2-xdb:condition� �� ���� �����(���, value� ��� ��� �� ���).

v <xs:element db2-xdb:condition="value" />

v <xs:attribute db2-xdb:condition="value" />

v <db2-xdb:rowSetMapping><db2-xdb:rowSet>value</db2-xdb:rowSet><db2-xdb:condition>value</db2-xdb:condition>...

</db2-xdb:rowSetMapping>

�� �

http://www.ibm.com/xmlns/prod/db2/xdb1

��� �

�� ��� SQL ��:

v �

v ��

v BETWEEN

v DISTINCT

v EXISTS

v IN

v LIKE

v NULL

���� db2-xdb:expression ��, � �� � � �� ���� ��� ��� ���.

����

db2-xdb:condition ��� �� rowSet� � ��� �� ��� ���� ��� �� ��� �� AND

� ��� ��� ��� �� �����.

362 IBM i: ������ SQL �����

|

|

|

|

|

|

|

|

|

|||||

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

Page 375: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

db2-xdb:condition� � ��

db2-xdb:condition� SQL ��� ���� �� ��� � ��� �� ��� � ����. rowSet�

� db2-xdb:condition ��� ���� �� �� ��� � rowSet� � �� �� �� �

� �� ��� ��� ���. �� �� SELECT�� �� �� ��� ��� � ���� ��

�. db2-xdb:condition� ���� �� �� ����� db2-xdb:condition� �� ��� ���

��� ���� �� ��, ��� ��� � ���� �� �� ��� ���� ��� ���

�����.

�� �� �����.

<xs:element name="a" type="xs:string"db2-xdb:rowSet="rowSetA" db2-xdb:condition="columnX='abc'" />

<xs:element name="b" type="xs:string"db2-xdb:rowSet="rowSetB" db2-xdb:condition="columnX" />

<a>� ��� ���� ���� ��� ″columnX″ � ��� ������. <b>�� ″columnX″�

�� ��� �� � <a>�� ��� � ���, ��� ��� � ��� ″columnX″� <b>�

��� �����. XML ��� ��� �� ���

<a>abc</a><b>def</b>

<b>� �, ″def″� ���� ����� � ��� ���� �����.

� �� $DECOMP_CONTENT(�� ��� ��� �� �� ���� ���� �� ��)� �

� <a> ��� �� db2-xdb:condition� ���� <b>� �� <a> �� ���� ��� �����.

<xs:element name="a" type="xs:string"db2-xdb:rowSet="rowSetA" db2-xdb:condition="$DECOMP_CONTENT='abc'" />

<xs:element name="b" type="xs:string"db2-xdb:rowSet="rowSetB" db2-xdb:column="columnX" />

XML ��� ��� �� ���

<a>abc</a><b>def</b>

<a>� �, ″abc″� ��� ����� � ��� ��� �����.

�� $DECOMP_CONTENT� ���� � �� ��� ������� ���� �� �� ���

��� �� �� ��� ����� � ��� � ����.

� �� �� �� �� � ��� ��

��� ��� ��� ���� ��� � ��� ��� XML ��� ���� �� ��� ���

����. �� ��, ��� �� ��� ������ �� �� ��� �����.

<xs:element name="intElem" type="xs:integer"db2-xdb:rowSet="rowSetA" db2-xdb:column="colInt"db2-xdb:condition="colInt > 100" default="0" />

SQL ����� 363

|

|

|

|

|

|

|

|

||||

|

|

|

||

|

|

|

||||

|

||

|

|

|

|

|

|

|||

Page 376: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

<intElem> ��� XML ��� ���� �� ″colInt > 100″ ��� ��� �����. <intElem>�

���� �� ��� ��� � 0� ″colInt″� �� �� ��� �����. �� ��� 0 > 100��

���� �� ���� �����. ��� � �� �� � ���� ����.

XML ��� �� <author> ��� �����.

<author ID="0800"><firstname>Alexander</firstname><lastname>Smith</lastname><activeStatus>1</activeStatus>

</author>

db2-xdb:condition�� �� ��� �� � <author> ��� �� �� �� ���� ����� �

� �� � ����. �� � ��� ���� ����.

�� ��� �

�� <author> ��� ��� ��� �� ���� �� ��� ���� ID� 1 - 999� , <firstname>

� <lastname> ��� NULL� ���, <activeStatus> ��� �� 1 �� � ��� ���� ��

�����.

<xs:element name="author"><xs:complexType><xs:sequence><xs:element name="firstname" type="xs:string"

db2-xdb:rowSet="AUTHORS" db2-xdb:column="GIVENNAME"db2-xdb:condition="$DECOMP_CONTENT IS NOT NULL" />

<xs:element name="lastname" type="xs:string"db2-xdb:rowSet="AUTHORS" db2-xdb:column="SURNAME"db2-xdb:condition="$DECOMP_CONTENT IS NOT NULL" />

<xs:element name="activeStatus" type="xs:integer"db2-xdb:rowSet="AUTHORS" db2-xdb:column="statusCode"db2-xdb:condition="$DECOMP_CONTENT=1" />

<xs:attribute name="ID" type="xs:integer"db2-xdb:rowSet="AUTHORS" db2-xdb:column="AUTHID"db2-xdb:condition="$DECOMP_CONTENT BETWEEN 1 and 999 />

</xs:sequence></xs:complexType>

</xs:element>

db2-xdb:condition�� �� �� ��� �� � <author> �� ��� ���� ��� AUTHORS �

��� <author> ��� ���� �����.

59. AUTHORS

AUTHID GIVENNAME SURNAME STATUSCODE NUMBOOKS

0800 Alexander Smith 1 NULL

364 IBM i: ������ SQL �����

|

|

|

|

|

|||||

|

|

|

|

|

|

||||||||||||||||||

|

|

||

|||||

||||||

Page 377: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

� ��� ���

�� ��� �� ���� ���� ID� 1 - 100� , <firstname> � <lastname> ��� NULL� ��

�� <author> ��� ���� �� �����.

<xs:element name="author"><xs:complexType><xs:sequence><xs:element name="firstname" type="xs:string"

db2-xdb:rowSet="AUTHORS" db2-xdb:column="GIVENNAME"db2-xdb:condition="$DECOMP_CONTENT IS NOT NULL" />

<xs:element name="lastname" type="xs:string"db2-xdb:rowSet="AUTHORS" db2-xdb:column="SURNAME"db2-xdb:condition="$DECOMP_CONTENT IS NOT NULL"/>

<xs:element name="activeStatus" type="xs:integer" /><xs:attribute name="ID" type="xs:integer"

db2-xdb:rowSet="AUTHORS" db2-xdb:column="AUTHID"db2-xdb:condition="$DECOMP_CONTENT BETWEEN 1 and 100" />

</xs:sequence></xs:complexType>

</xs:element>

�� �� <author>� <firstname> � <lastname> ��� �� ��� �� ��, ID �� �� ��

���� �� �� �� � ���� ����. �� AUTHORS ���� �� �� �� ���

�� AND� ���� �����. � �� � ��� ����� �� AND� ���� ��� ��

� �� ���� ����.

db2-xdb:contentHandling �� :

db2-xdb:contentHandling ��� �� ���� � ��� ��� �� ���� ��� ��� ��� �

����.

� ��

�� �� �� � �� �� ��� ��� <xs:element> �� �� <db2-xdb:rowSetMapping> ��

�� �

db2-xdb:contentHandling� �� ���� �����(���, value� ��� ��� �� ���).

v <xs:element db2-xdb:contentHandling="value" />

v <db2-xdb:rowSetMapping db2-xdb:contentHandling="value"><db2-xdb:rowSet>value</db2-xdb:rowSet>...

</db2-xdb:rowSetMapping>

�� �

http://www.ibm.com/xmlns/prod/db2/xdb1

SQL ����� 365

|

|

|

||||||||||||||||

|

|

|

|

|

|

|

|

|

|

|

|

||||

|

|

Page 378: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

��� �

�� ���� �� � ��:

v text

v stringValue

v serializeSubtree

����

XML �� ��� ���� �� db2-xdb:contentHandling ��� �� �� db2-xdb:rowSet �

db2-xdb:column�� �� ���� � ��� �� ����.

db2-xdb:contentHandling� �� ��� �� ��� ����.

text

v ��� ��: � �� � �� ���(CDATA ��� �� �� )� ��.

v ��� ��: � ��� ��� �� ��, CDATA �� ����(″<![CDATA[″ ″]]>″) � � �

�� ��(��� �� ).

stringValue

v ��� ��: � ��� �� ���(CDATA ��� �� �� )� � �� ��� �� �

�� ��(�� ��).

v ��� ��: ��, �� ��, CDATA �� ����(″<![CDATA[″ ″]]>″) � � �� ���

��� �� ��.

serializeSubtree

v ��� ��: � ��� �� � �� ��� �� � �� ��� �� �� �� � . �

�, �� �� � CDATA �� ����(″<![CDATA[″ ″]]>″)� ���.

v ��� ��: �.

v �: XML ���� �� ��� �, ��� ��, �� �, ��� �� �� � CDATA

��� ��� �� � �� � ���� � � ���� XML ��� � ��� ��

� �� �� ����.

� ��� �� � � ���� XML ����� ��� CCSID ��� ��� ���.

�� � ��� ��� �� XML ��� � CCSID� �����. ������ �

� ���� XML �� �� ��� �, �� �� UTF-8 ��� ��� ���� ���

� ���� ������ �� �� ���� ��� ���� ��� ���. �� ��

� BLOB �� �� XML ���� UTF-8 ���� �����. � ��� �

�� ��� XML ���� XML �� �� ��� � ����.

366 IBM i: ������ SQL �����

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

Page 379: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� ��� �� XML �� ��� �� ���� ��� ��� ��� db2-xdb:contentHandling�

���� ����, ��� ��� ″serializeSubtree″ �� ����. �� �� � ��� �� ��

����� db2-xdb:contentHandling� ���� ��� ��� ��� ″stringValue″ �� ����.

��� �� ���� ��� ��� ��� �� ��� � ���(�, �� ��� ″mixed″ ��� �

�� 1� ��� ��) db2-xdb:contentHandling� ″text″� �� � ���.

db2-xdb:contentHandling ��� ��� ���� �� ��� ���� ��� ��� ����.

db2-xdb:contentHandling �� db2-xdb:expression �� db2-xdb:condition ���� $DECOMP_CONTENT

� �� ���� �� ��� ���. �� �� ��� �� ���� �� �� db2-xdb:contentHandling

�� �� �����.

�� �� db2-xdb:contentHandling ��� � �� ��� ���� �� ���� �� ��� ���

� ��� �����. db2-xdb:contentHandling�� <paragraph> ��� ��� ��� ��� ���� �

�� �� ���� �� ����. (db2-xdb:contentHandling� ″text″� � ��� �� ���� �

�� ����. � ��� �� �� �� ��� �� ���� ���� db2-xdb:contentHandling�

� ���� ����.)

<xs:schema><xs:element name="books"><xs:complexType><xs:sequence><xs:element name="book"><xs:complexType>

<xs:sequence><xs:element name="authorID" type="xs:integer" /><xs:element name="chapter" type="chapterType" maxOccurs="unbounded" />

</xs:sequence><xs:attribute name="isbn" type="xs:string"

db2-xdb:rowSet="BOOKCONTENTS" db2-xdb:column="ISBN" /><xs:attribute name="title" type="xs:string" />

</xs:complexType></xs:element>

</xs:sequence></xs:complexType>

</xs:element>

<xs:complexType name="chapterType"><xs:sequence><xs:element name="paragraph" type="paragraphType" maxOccurs="unbounded"

db2-xdb:rowSet="BOOKCONTENTS" db2-xdb:column="CHPTCONTENT"db2-xdb:contentHandling="text" />

</xs:sequence><xs:attribute name="number" type="xs:integer"

db2-xdb:rowSet="BOOKCONTENTS" db2-xdb:column="CHPTNUM" /><xs:attribute name="title" type="xs:string"

db2-xdb:rowSet="BOOKCONTENTS" db2-xdb:column="CHPTTITLE" /></xs:complexType>

<xs:complexType name="paragraphType" mixed="1">

SQL ����� 367

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

||||||||||||||||||||||||||||||||

Page 380: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

<xs:choice><xs:element name="b" type="xs:string" minOccurs="0" maxOccurs="unbounded" />

</xs:choice></xs:complexType>

</xs:schema>

��� �� <books> ��� ��� ����.

<books><book isbn="1-11-111111-1" title="� � XML ��"><authorID>22</authorID><chapter number="1" title="XML ��"><paragraph>���� XML...</paragraph>

</chapter><chapter number="2" title="XML � ������"><paragraph><!-- Start of chapter -->XML ���...</paragraph><paragraph><?processInstr example?>����� �(<![CDATA[ <, >, & ]]>)...</paragraph>

</chapter>...<chapter number="10" title="�� ��"><paragraph>�� ���...</paragraph>

</chapter></book>...

<books>

�� �� ���� �� XML ��� db2-xdb:contentHandling� � �� ��� ��� ��� �

����.

�: ��� �� ����� CHPTTITLE � CHPTCONTENT � �� � ��� �� ����. �

� ��� �� ��� ��� �� ���� �� ��� ��� �� ���� ����.

db2-xdb:contentHandling=″text″

60. BOOKCONTENTS

ISBN CHPTNUM CHPTTITLE CHPTCONTENT

1-11-111111-1 1 ″XML ��″ ″���� XML...″

1-11-111111-1 2 ″XML � ������″ ″XML ���...″

1-11-111111-1 2 ″XML � ������″ ″

����� ��(<, >, &)...″

... ... ... ...

1-11-111111-1 10 ″�� ��″ ″�� ���...″

1��� � � � � <b> �� ��� ″text″ �� ��� � ��� ���� ��� � ����. �

� ″text″ �� ���� ��� ����� �����. 2�� � � � �� ��� �� ��� ″text″

�� ��� � ���� ���� ������. <paragraph> ���� �� ��� ��� ��� �

���.

368 IBM i: ������ SQL �����

|||||

|

||||||||||||||||||

|

|

|

|

|

||

||||

||||

||||

||||

|

||||

|||||

|

|

|

|

Page 381: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

db2-xdb:contentHandling=″stringValue″

61. BOOKCONTENTS

ISBN CHPTNUM CHPTTITLE CHPTCONTENT

1-11-111111-1 1 ″XML ��″ ″���� XML...″

1-11-111111-1 2 ″XML � ������″ ″XML ���...″

1-11-111111-1 2 ″XML � ������″ ″

����� ��(<, >, &)...″

... ... ... ...

1-11-111111-1 10 ″�� ��″ ″�� ���...″

� ���� �� ��� �� �� � � � �� CHPTCONTENT � ����. <paragraph> ���

<b> ���� �� ″lots of″ ���� ��� ������ ������. db2-xdb:contentHandling� ″text″

� ��� ″text″ �� ��� ��� ����� ��� � ���� �������. �� ″stringValue″

�� ��� ��� ���. ″text″ �� �� �� � �� ��� ���� � ��� ����.

db2-xdb:contentHandling=″serializeSubtree″

62. BOOKCONTENTS

ISBN CHPTNUM CHPTTITLE CHPTCONTENT

1-11-111111-1 1 ″XML ��″ ″<paragraph>���� XML...</paragraph>″

1-11-111111-1 2 ″XML � ������″ ″<paragraph><!-- Start of chapter -->XML ��

�...</paragraph>″

1-11-111111-1 2 ″XML � ������″ ″<paragraph><?processInstr example?>

�� ��� �� ( < ! [ C D A T A [ < , > , &

]]>)...</paragraph>″

... ... ... ...

1-11-111111-1 10 ″�� ��″ ″<paragraph>�� ���...</paragraph>″

� ���� �� ���� �� � <paragraph> �� ��� �� � � ���(<paragraph> �

� � �� �� )� ���. ���� � � ��� CHPTCONTENT � <b> �� � �� ��

�, �� � � � �� �� � �� ��� ���. �� ����� XML ��� ���

������.

db2-xdb:normalization �� :

db2-xdb:normalization ��� $DECOMP_CONTENT(db2-xdb:expression� � �� �)� �� ���

�� ��� XML ���� �� ��� �����.

� ��

<xs:element> �� <xs:attribute> ���� <db2-xdb:rowSetMapping>>� ��.

SQL ����� 369

|

||

||||

||||

||||

||||

|

||||

|||||

|

|

|

|

|

||

||||

||||

|||||

||||

|

|

||||

|||||

|

|

|

|

|

|

|

|

|

Page 382: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� �

db2-xdb:normalization� �� ���� �����(���, value� ��� ��� �� ���).

v <xs:element db2-xdb:normalization="value" />

v <xs:attribute db2-xdb:normalization="value" />

v <db2-xdb:rowSetMapping> db2-xdb:normalization="value"><db2-xdb:rowSet>value</db2-xdb:rowSet>...

</db2-xdb:rowSetMapping>>

�� �

http://www.ibm.com/xmlns/prod/db2/xdb1

��� �

�� ���� �� � ��:

canonical

XML �� �� � ����� � db2-xdb:normalization ��� �� ��� ��

$DECOMP_CONTENT� �� �� ���� �� XML ��� ��� �� XML �� �

���� �����.

original

XML �� �� � ����� � db2-xdb:normalization ��� �� ��� ��

$DECOMP_CONTENT� �� �� ���� ��, XML �� ���� ��� ��� ���

� XML ��� ���� ����. ��� ����.

whitespaceStrip

XML �� �� � ����� � db2-xdb:normalization ��� �� ��� ��

$DECOMP_CONTENT� �� �� ���� ��,

v XML ��� �� �� � �� ��� �����.

v �� ��� � �� ��� ����.

����

db2-xdb:normalization� ��� ��� �� �(atomic) XML ��� �� ��� �� � � �

����.

v byte, unsigned byte

v integer, positiveInteger, negativeInteger, nonPositiveInteger, nonNegativeInteger

v int, unsignedInt

v long, unsignedLong

v short, unsignedShort

v decimal

370 IBM i: ������ SQL �����

|

|

|

|

||||

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

Page 383: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

v float

v double

v boolean

v time

v date

v dateTime

�� �� �� ��� �� ��� ��� ���.

v CHAR

v VARCHAR

v CLOB

v DBCLOB

v GRAPHIC

v VARGRAPHIC

db2-xdb:normalization� �� �� ��� �� ���� �����.

�� �� db2-xdb:normalization ���� �� ��� ��� � �� ��� �����. ��� ��

���� � �� ����.

<xs:element name="author"><xs:complexType><xs:sequence><xs:element name="firstname" type="xs:string"

db2-xdb:rowSet="AUTHORS" db2-xdb:column="FIRSTNAME" /><xs:element name="lastname" type="xs:string"

db2-xdb:rowSet="AUTHORS" db2-xdb:column="SURNAME"db2-xdb:normalization="whitespaceStrip" />

<xs:element name="activeStatus" type="xs:boolean"db2-xdb:rowSet="AUTHORS" db2-xdb:column="ACTIVE"db2-xdb:normalization="canonical" />

<xs:attribute name="ID" type="xs:integer"db2-xdb:rowSet="AUTHORS" db2-xdb:column="AUTHID"db2-xdb:normalization="whitespaceStrip" />

</xs:sequence></xs:complexType>

</xs:element>

��� �� <author> ��� ��� �� (��� �� ��� �� �� ��� �� ’_’ ��� �

�) � ���� ��� �� �� �� AUTHORS ���� ����.

<author ID="__22"><firstname>Ann</firstname><lastname>__Brown_</lastname><activeStatus>1</activeStatus>

</author>

SQL ����� 371

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|||||||||||||||||

|

|

|||||

Page 384: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

63. AUTHORS

AUTHID FIRSTNAME SURNAME ACTIVE NUMBOOKS

22 Ann __Brown_ true NULL

ID ��� db2-xdb:normalization=″whitespaceStrip″ ��� AUTHORS ���� ���� ���� ��

�� � �� ��� ����� ���. <activeStatus> ��� db2-xdb:normalization.=″canonical″ ���

AUTHORS ���� � �� ���� �� � �� � �� ����� ���. ���� � ��

� ����. � ��� � �� � �� �����.

db2-xdb:truncate �� :

db2-xdb:truncate ��� XML �� �� �� � ��� � ��� ����� ��� �����.

� ��

<xs:element> �� <xs:attribute> ���� <db2-xdb:rowSetMapping>� ��.

�� �

db2-xdb:truncate� �� ���� �����(���, value� ��� ��� �� ���).

v <xs:element db2-xdb:truncate="value" />

v <xs:attribute db2-xdb:truncate="value" />

v <db2-xdb:rowSetMapping> db2-xdb:truncate="value"><db2-xdb:rowSet>value</db2-xdb:rowSet>...

</db2-xdb:rowSetMapping>>

�� �

http://www.ibm.com/xmlns/prod/db2/xdb1

��� �

�� � ��:

0 �� false

�� �� �� �� � �� �� �� � �� ��� �� �� ���� ����. �

�� ����.

1 �� true

�� �� �� �� � ����.

����

�� �� � �� XML �� ��� � �� ����. � ��� ����� �� ��

� ���. db2-xdb:truncate ��� �� �� � �� � � ��� ����� ��� ����. � �

372 IBM i: ������ SQL �����

||

|||||

||||||

|

|

|

|

|

|

|

|

|

|

|

|

||||

|

|

|

|

|

|

|

|

|

|

|

|

Page 385: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� ��� ���� ��� ���� ″false″ �� ″0″�� �� �� XML �� �� � ��

� �� XML �� �� ��� �� �� ���� ����. ″true″ �� ″1″ �� ��

��� ��� ���� ����.

db2-xdb:truncate� �� ���� � �����.

XML ��� �� � ��� ��

����� �� CHAR

VARCHAR

CLOB

GRAPHIC

VARGRAPHIC

DBCLOB

xs:date DATE

xs:time TIME

xs:dateTime TIMESTAMP

db2-xdb:expression ��� db2-xdb:truncate� �� �� �� �� ��� ���� ��� ��� �

�� � �� ���(��� �� ) db2-xdb:truncate �� �����.

XML ��� �� �� DATE, TIME �� TIMESTAMP � ���� ��� XML ���� �

��� �� � ��� db2-xdb:truncate� ″true″ �� ″1″� ��� ���.

�� �� <author> ��� ��� �� � �� ��� �����. ��� �� ��� ��� � ��

����.

<xs:element name="author"><xs:complexType><xs:sequence><xs:element name="firstname" type="xs:string"

db2-xdb:rowSet="AUTHORS" db2-xdb:column="FIRSTNAME"db2-xdb:truncate="true" />

<xs:element name="lastname" type="xs:string" /><xs:element name="activeStatus" type="xs:boolean" /><xs:element name="activated" type="xs:date"

db2-xdb:truncate="true" /><xs:attribute name="ID" type="xs:integer" />

<xs:sequence></xs:complexType>

</xs:element>

The <author> element that is being mapped is presented next.

<author ID="0800"><firstname>Alexander</firstname><lastname>Smith</lastname><activeStatus>0</activeStatus><activated>2001-10-31Z</activated>

</author>

SQL ����� 373

|

|

|

|

|||

|||||||

||

||

|||

|

|

|

|

|

|

|

||||||||||||||

|

||||||

Page 386: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

FIRSTNAME � 7 �� CHAR SQL ���� ���� ACTIVEDATE � DATE SQL ���

� ����� ������. � ���� ��� �� �� �� AUTHORS ���� ����.

64. AUTHORS

AUTHID FIRSTNAME SURNAME ACTIVE ACTIVEDATE NUMBOOKS

NULL Alexand NULL NULL 2001-10-31 NULL

<firstname> � ″Alexander″� SQL ��� � ��� �� ����� ��� �����. <activated>

��� XML ��� ���� ��� ��� �� ��� ����� �� �� db2-xdb:truncate�

″true″�� ������ ������.

<firstname> ��� <activated> ���� �� ����� ��� ���� ��� db2-xdb:truncate� �

��� �� ��� � db2-xdb:truncate� ��� �� ���� ���� ���� �� ���

����.

db2-xdb:rowSetMapping �� :

db2-xdb:rowSetMapping ��� XML ��� ��� � �� ���� , �� ���� � ��

�� � ���� � �����.

� ��

<xs:element> �� <xs:attribute>� �� �� <xs:appinfo>� �� ��(<xs:annotation>� �� ��)

�� �

db2-xdb:rowSetMapping� �� ���� �����(���, value� ��� ��� �� ���).

v <xs:element><xs:annotation><xs:appinfo><db2-xdb:rowSetMapping><db2-xdb:rowSet>value</db2-xdb:rowSet>...

</db2-xdb:rowSetMapping></xs:appinfo>

</xs:annotation>...

</xs:element>

v <xs:attribute><xs:annotation><xs:appinfo><db2-xdb:rowSetMapping><db2-xdb:rowSet>value</db2-xdb:rowSet>...

</db2-xdb:rowSetMapping></xs:appinfo>

</xs:annotation>...

</xs:attribute>

374 IBM i: ������ SQL �����

|

|

||

||||||

|||||||

|

|

|

|

|

|

|

|

|

|

|

|

|

|||||||||||

|||||||||||

Page 387: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� �

http://www.ibm.com/xmlns/prod/db2/xdb1

��� �

��� <db2-xdb:rowSetMapping>� ���� �����.

db2-xdb:contentHandling

�� �� ��� �� ���� ��� ��� �� ��� �� ���� ���.

db2-xdb:locationPath

��� ��� ��� �� �� ��� � �� ��� �� ��� �� �� XML ��

�� ��� ��� � �� ���.

db2-xdb:normalization

��� ���� �� �� �� � �� XML ��� ��� ��� �� �� �� ���

�� ���� ���.

db2-xdb:truncate

XML �� �� �� � ��� � ��� ����� ��� �� ��� �� ���� ���.

��� �� ���� �� ��� � <db2-xdb:rowSetMapping>� ���� �� ����

�.

<db2-xdb:rowSet>

XML ��� ��� �� � ���� �����.

<db2-xdb:column>

XML ��� ��� � ��� � �����. db2-xdb:condition �� db2-xdb:locationPath �

�� �� � ��� ����.

<db2-xdb:expression>

db2-xdb:rowSet ���� �� ���� ���� �� ��� �� ��� �����. �

��� ����.

<db2-xdb:condition>

���� ��� �����. � ��� ����.

����

db2-xdb:expression � db2-xdb:truncate� � �� db2-xdb:truncate� �����.

� ��� � � ���� db2-xdb:rowSetMapping ��� db2-xdb:rowSet � db2-xdb:column

��� ��� ���� �� ����.

<db2-xdb:rowSetMapping>� �� ��� �� ��� �� �� ��� ���� �� ��� ����

����. �� ��� ���� �� �� SQL ID� � �� ����� �� ��� ���

�� ������� ����. �� SQL ID� �� ‘&’ �‘<’ ��� ������� ���.

SQL ����� 375

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

Page 388: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� �� ″isbn″��� � ��� <db2-xdb:rowSetMapping> ���� � ��� ���� ��� � �

� ��� �����. ��� �� ��� ��� � �� ����. � ��� isbn �� BOOKS �

BOOKCONTENTS ��� � � ���� ��� �����.

<xs:element name="book"><xs:complexType><xs:sequence><xs:element name="authorID" type="xs:integer"/><xs:element name="chapter" type="chapterType" maxOccurs="unbounded" />

</xs:sequence><xs:attribute name="isbn" type="xs:string"><xs:annotation><xs:appinfo><db2-xdb:rowSetMapping><db2-xdb:rowSet>BOOKS</db2-xdb:rowSet><db2-xdb:column>ISBN</db2-xdb:column>

</db2-xdb:rowSetMapping><db2-xdb:rowSetMapping><db2-xdb:rowSet>BOOKCONTENTS</db2-xdb:rowSet><db2-xdb:column>ISBN</db2-xdb:column>

</db2-xdb:rowSetMapping></xs:appinfo>

</xs:annotation></xs:attribute><xs:attribute name="title" type="xs:string" />

</xs:complexType></xs:element>

��� �� <book> ��� ��� �� � ���� ��� �� �� �� BOOKS �

BOOKCONTENTS ���� ����.

<book isbn="1-11-111111-1" title="� � XML ��"><authorID>22</authorID><!-- this book does not have a preface --><chapter number="1" title="XML ��"><paragraph>���� XML...</paragraph>...

</chapter>...

</book>

65. BOOKS

ISBN TITLE CONTENT

1-11-111111-1 NULL NULL

66. BOOKCONTENTS

ISBN CHPTNUM CHPTTITLE CHPTCONTENT

1-11-111111-1 NULL NULL NULL

376 IBM i: ������ SQL �����

|

|

|

|

|||||||||||||||||||||||

|

|

|||||||||

||

|||

||||

||

||||

|||||

Page 389: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

<db2-xdb:rowSetMapping> db2-xdb:rowSet � db2-xdb:column ��� ��� �� �

��� �� ���� �� ��� �� �� XML ��� ��� ��� �� �� ��� ��� ��

� �����. ���� �� � � ���� <db2-xdb:rowSetMapping> ���� ���� ��

db2-xdb:rowSet � db2-xdb:column ���� � ��� ����� ���.

<xs:element name="book"><xs:complexType><xs:sequence><xs:element name="authorID" type="xs:integer"/><xs:element name="chapter" type="chapterType" maxOccurs="unbounded" />

</xs:sequence><xs:attribute name="isbn" type="xs:string"

db2-xdb:rowSet="BOOKS" db2-xdb:column="ISBN" ><xs:annotation><xs:appinfo><db2-xdb:rowSetMapping><db2-xdb:rowSet>BOOKCONTENTS</db2-xdb:rowSet><db2-xdb:column>ISBN</db2-xdb:column>

</db2-xdb:rowSetMapping></xs:appinfo>

</xs:annotation></xs:attribute><xs:attribute name="title" type="xs:string" />

</xs:complexType></xs:element>

�� xml ��� ��� ���:

��� �� xml ��� ��� db2-xdb:condition � db2-xdb:expression ��� ��� �� ��� �

����.

$DECOMP_CONTENT

���� �� XML ��� ��� �. db2-xdb:contentHandling ��� �� �� �� ���

��. $DECOMP_CONTENT ��� �� ��� ����.

$DECOMP_CONTENT� ���� �� ��� ��� �� �� ���� � ��� ��

��� �� ��� � ����.

db2-xdb:expression� $DECOMP_CONTENT� ��� db2-xdb:normalization� �� ���

�� db2-xdb:expression� $DECOMP_CONTENT �� ��� �� ��� ���� �

� �����.

$DECOMP_DOCUMENTID

XDBDECOMPXML �� ����� documentid �� ���� �� ��� ���, ��

X M L � �� � ��� � . � �� �� � � �� ����� ��� � �� ��

$DECOMP_DOCUMENTID� �� ��� �����.

SQL ����� 377

|

|

|

|

||||||||||||||||||||

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

Page 390: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

$DECOMP_DOCUMENTID� ���� XML ��� � � ID� ��� � ����. ��

���� ��� � �� ID� XDBDECOMPXML� ��� � ����. �� � ID�

������� ���� �� ��� � ����. ��� ��� � ID� ��� ��� ID

� ��� �� ����.

�� xml ��� ��� CDATA �� ��

�� ��� �� ��� CDATA ��� ��� �� �� �� CDATA �� ����(″<![CDATA[″ �

″]]>″) � CDATA ��� ��� ���� �����.

�� ��� � �� �(U+000D � U+000A) �� CDATA �� �� �� ��(U+000D)� � ��

(U+000A)�� �����.

XML ���� XML �� ��� db2-xdb:contentHandling=″serializeSubtree″ ��� �� ��� ��

�� ���� �� CDATA ��� ��� ���� �����.

v CDATA �� ����(″<![CDATA[″ � ″]]>″)� �����.

v CDATA ��� � ���(&)� ��� &amp:� �����.

v CDATA ��� � �� ���(<)� ��� &lt:� �����.

�� � CDATA ��� ��� ���� CDTATA ��� �� ��� ����.

�� xml ��� ��� � � � ���

��� �� xml ��� ��� �� ���� ���� � ���� �����.

XML ��

�� � XML ��� ��� �� � ����� ��� ������� ��� � ����.

67. �� ��� �� � ���

�� � ��� ��

��� ���� � � X

��� �� �� ��� ��:

v ��� ��

v �� ��� xsi:nil="true" �� xsi:nil="1" ��� �

X

��� �� �� ��� ��:

v ��� ���� ���

v �� ��� xsi:nil="true" �� xsi:nil="1" ���

v ��� ��, �� ��, ��� �� �� �� �� �

(atomic) �� ��(xsd:string, xsd:normalizedString,

xsd:token, xsd:hexBinary, xsd:base64Binary, xsd:anyURI,

xsd:anySimpleType)�� ����� � ��� ��� ��

����, �� ��� ��� ����.

X

378 IBM i: ������ SQL �����

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

||

|||

|||

|

|

|

|

||

|

|

|

|

|

|

|

|

|

||

Page 391: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

67. �� ��� �� � ��� (��)

�� � ��� ��

�:

1. ��� db2-xdb:condition �� db2-xdb:expression ��� ���� � ����� ��(� ���� � ��)� �� �

�� �� �����.

2. �� � ��� CHAR �� GRAPHIC � ���� �� ��� ����� �����.

XML �

�� � �� ��� �� XML ��� � ���� ��� ��� �� � � ����� ��� ���

���� ���� ����.

68. �� ��� �� � ���

�� � ��� ��

��� ���� � �(��� �� ���� ���� ���

�� ��� �� ���� ���)

X

��� �� �� ��� ��:

v ��� ���� ���

v ��� ��, �� �� �� �(atomic) �� ��(

xsd:string, xsd:normalizedString, xsd:token, xsd:hexBinary,

xsd:base64Binary, xsd:anyURI, xsd:anySimpleType)�� �

���� � ��� ��� ������, �� ���

��� ����.

X

�: ��� db2-xdb:condition �� db2-xdb:expression ��� ���� � ����� ��(� ���� � ��)� �� �

�� �� �����.

�� xml ��� ��� �� ���

��� �� xml ��� ��� ���� � ����. �� � �� � ����� � ��� ���

���.

��� �� xml ��� ����� � XML ��� ��� ������� � � ���� ����

���. � ���� XML ���� �� � ���� �� �� �� � �� ����.

��� XML ���� ��� ��� � ��� � ��� �� ��� �� ����.

v �� ��� �� ��� ������.

v �� ��� ��� �� ��� ��� XML ��� ��� ������ � ����.

v �� �� ���� � �� ��� ��� ��� ��� � ����.

v �� �� � ����� ��� ���� � ����.

v ���� XSR� ��� � ���� �� ���� � ��� � ����.

SQL ����� 379

|

|||

|

|

|

||

|

|

|

||

|||

||||

|

|

|

|

|

|

|

||

|||

|

|

|

|

|

|

|

|

|

|

|

Page 392: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� xml ��� ��� ��

��� �� xml ��� ��� ���� XML ��� ���� ���� ��� �����. ��� XML

��� ��� ���� ���� ����. � ��� XML ��� ���� ����� ��� ���

�. �� �� � �� �� �� ����� �����.

�� �� ����:

�� �� ��

XML ����� �� �� ���� � �� ��� �� � ����(restriction �� extension

��� �� complexType ��� ���).

�� ��� ��� �� ��� ��� ��� �� ��� ��� ���.

XML ���� � ���� �� ��� ���� db2-xdb:locationPath ��� ����, ����

��� �� � �� ���� � �� ��� ��� � ����.

���� � �� ��� � ��� �� ��� ��� � ��� ���� ����. ��

� � ��� �� �� ��� � ���� ��� ���.

���� � �� ��� �� � �� ��� ��� ��� �����. � ��� �� ��

� � ��� ��� �� � ��� �� ��� ���� � ��� � ��� ��� ��

� ���� ���.

�: �� XML ��� ���� outOfPrintBookType� ���� ������. bookType � �� �

�� �� ���� ���� ���. db2-xdb:locationPath ��� � ��� � ��� �� �� �

�� ���� ��� ���� �� bookType � ��� �����. � ��� � ��

outOfPrintType� <lastPublished> � <publisher> ��� � ���� �� ��� db2-xdb:locationPath

��� ���� ����.

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"xmlns:db2-xdb="http://www.ibm.com/xmlns/prod/db2/xdb1">

<xs:annotation><xs:appinfo><db2-xdb:table><db2-xdb:name>BOOKS</db2-xdb:name><db2-xdb:rowSet>inPrintRowSet</db2-xdb:rowSet>

</db2-xdb:table><db2-xdb:table><db2-xdb:name>OUTOFPRINT</db2-xdb:name><db2-xdb:rowSet>outOfPrintRowSet</db2-xdb:rowSet>

</db2-xdb:table></xs:appinfo>

</xs:annotation><xs:element name="books"><xs:complexType><xs:choice> V 1<xs:element name="book" type="bookType"

minOccurs="0" maxOccurs="unbounded"/><xs:element name="outOfPrintBook" type="outOfPrintBookType"

380 IBM i: ������ SQL �����

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

||||||||||||||||||||

Page 393: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

minOccurs="0" maxOccurs="unbounded"/></xs:choice>

</xs:complexType></xs:element><xs:complexType name="bookType"><xs:sequence><xs:element name="authorID" type="xs:integer"/><xs:element name="chapter" type="chapterType" maxOccurs="unbounded"/>

</xs:sequence><xs:attribute name="title" type="xs:string" V 2a

db2-xdb:locationPath="/books/book/@title"db2-xdb:rowSet="inPrintRowSet" db2-xdb:column="TITLE">

<xs:annotation><xs:appinfo><db2-xdb:rowSetMapping db2-xdb:locationPath="/books/outOfPrintBook/@title"><db2-xdb:rowSet>outOfPrintRowSet</db2-xdb:rowSet><db2-xdb:column>TITLE</db2-xdb:column>

</db2-xdb:rowSetMapping></xs:appinfo>

</xs:annotation></xs:attribute><xs:attribute name="isbn" type="xs:string" V 2b

db2-xdb:locationPath="/books/book/@isbn"db2-xdb:rowSet="inPrintRowSet" db2-xdb:column="ISBN">

<xs:annotation><xs:appinfo><db2-xdb:rowSetMapping db2-xdb:locationPath="/books/outOfPrintBook/@isbn"><db2-xdb:rowSet>outOfPrintRowSet</db2-xdb:rowSet><db2-xdb:column>ISBN</db2-xdb:column>

</db2-xdb:rowSetMapping></xs:appinfo>

</xs:annotation></xs:attribute>

</xs:complexType><xs:complexType name="outOfPrintBookType"><xs:complexContent><xs:extension base="bookType"><xs:sequence><xs:element name="lastPublished" type="xs:date" V 3

db2-xdb:rowSet="outOfPrintRowSet" db2-xdb:column="LASTPUBDATE"/><xs:element name="publisher" type="xs:string"

db2-xdb:rowSet="outOfPrintRowSet" db2-xdb:column="PUBLISHER"/></xs:sequence>

</xs:extension></xs:complexContent>

</xs:complexType><xs:simpleType name="paragraphType"><xs:restriction base="xs:string"/>

</xs:simpleType><xs:complexType name="chapterType"><xs:sequence><xs:element name="paragraph" type="paragraphType" maxOccurs="unbounded"

db2-xdb:locationPath="/books/book/chapter/paragraph"db2-xdb:rowSet="inPrintRowSet" db2-xdb:column="CONTENT">

<xs:annotation><xs:appinfo><db2-xdb:rowSetMappingdb2-xdb:locationPath="/books/outOfPrintBook/chapter/paragraph">

SQL ����� 381

||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

Page 394: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

<db2-xdb:rowSet>outOfPrintBook</db2-xdb:rowSet><db2-xdb:column>CONTENT</db2-xdb:column>

</db2-xdb:rowSetMapping></xs:appinfo>

</xs:annotation></xs:element>

</xs:sequence><xs:attribute name="number" type="xs:integer"/><xs:attribute name="title" type="xs:string"/>

</xs:complexType></xs:schema>

��� <book> ��� �� BOOKS ���� ��� <outOfPrintBook> ��� �� OUTOFPRINT �

��� ���� ����.

��� �� XML ��� ��� �� �:

1 <books> ���� �� ��� �� <book> ��� <outOfPrintBook> ��� �� � ��

��. �� ��� ��� ��� � �� ���� �����. <outOfPrintBook> �� ���

� <book> �� ��� �� ��� ����.

2a � 2b

XML ����� title � isbn ���� <book> ��� <outOfPrintBook> ��� �� ��

��� ��� ���� �� � � �� � ��� � �� ���� �����. ��� �

��� �� �� �� �� �� � ISBN ��� ��� db2-xdb:locationPath ��� ��

���.

3 lastPublished � publisher ��� <outOfPrintBook> ��� ���� db2-xdb:locationPath �

�� ���� ����.

� XML ��� ��� ���� �� XML ��� ���� ������.

<books><book isbn="1-11-111111-1" title="� � XML ��"><authorID>22</authorID><chapter number="1" title="XML ��"><paragraph>���� XML...</paragraph>

</chapter><chapter number="2" title="XML � ������"><paragraph>XML ���...</paragraph>

</chapter></book><outOfPrintBook isbn="7-77-777777-7" title="�� XML ��"><authorID>41</authorID><chapter number="1" title="XML ��"><paragraph>�� XML...</paragraph>

</chapter><chapter number="2" title="XML �"><paragraph>XML� �� ��...</paragraph>

</chapter><lastPublished>2000-01-31</lastPublished><publisher>�� �� ��</publisher>

</outOfPrintBook></books>

382 IBM i: ������ SQL �����

|||||||||||

|

|

|

||

|

|

|

|

|

|

|

||

|

|

||||||||||||||||||||||

Page 395: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

���� �� ���� ����.

69. BOOKS

ISBN TITLE CONTENT

1-11-111111-1 � � XML � ���� XML...

1-11-111111-1 � � XML � XML ���...

70. OUTOFPRINT

ISBN TITLE CONTENT LASTPUBDATE PUBLISHER

7-77-777777-7 � XML � � XML... 2000-01-31 � ��� ��

7-77-777777-7 � XML � XML� � ��... 2000-01-31 � ��� ��

�� xml ��� ��� � ��

db2-xdb:rowSet ��� �� ��� � XML ��� �� ���� �� �����.

db2-xdb:rowSet ��� �� ������� � �� � ����.

db2-xdb:rowSet ��� ��� �� ��� �� �� <db2-xdb:rowSetMapping> ��� �� � ���

�.

XML ����� ��� ��� � �� �� � ���, �� ��� ���� �� ��� �� �

� db2-xdb:rowSet ��� �� � ����. � db2-xdb:rowSet ��� �� ���� �� �����.

�: � �� isbn � �� �� ALLPUBLICATIONS ���� ����� � ��� ���� �� �

�����.

<publications><textbook title="Programming with XML"><isbn>0-11-011111-0</isbn><author>Mary Brown</author><author>Alex Page</author><publicationDate>2002</publicationDate><university>University of London</university>

</textbook><childrensbook title="Children's Fables"><isbn>5-55-555555-5</isbn><author>Bob Carter</author><author>Melanie Snowe</author><publicationDate>1999</publicationDate>

</childrensbook></publications>

�� � �� ���� ���.

v ����� isbn �� ��� � ���� � �

v ��� �� �� isbn �� ��� � ���� � �

��� �� XML ���� ��� ����.

SQL ����� 383

|

||

|||

|||

||||

||

|||||

|||||

||||||

|

|

|

|

|

|

|

|

|

|||||||||||||||

|

|

|

|

Page 396: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"xmlns:db2-xdb="http://www.ibm.com/xmlns/prod/db2/xdb1"elementFormDefault="qualified" attributeFormDefault="unqualified">

<xs:annotation><xs:appinfo><db2-xdb:defaultSQLSchema>admin</db2-xdb:defaultSQLSchema><db2-xdb:table><db2-xdb:name>ALLPUBLICATIONS</db2-xdb:name> V 1<db2-xdb:rowSet>textbk_rowSet</db2-xdb:rowSet><db2-xdb:rowSet>childrens_rowSet</db2-xdb:rowSet>

</db2-xdb:table></xs:appinfo>

</xs:annotation><xs:element name="publications"><xs:complexType><xs:sequence><xs:element name="textbook" maxOccurs="unbounded"><xs:complexType><xs:sequence><xs:element name="isbn" type="xs:string" V 2a

db2-xdb:rowSet="textbk_rowSet" db2-xdb:column="PUBS_ISBN"/><xs:element name="author" type="xs:string" maxOccurs="unbounded"/><xs:element name="publicationDate" type="xs:gYear"/><xs:element name="university" type="xs:string"

maxOccurs="unbounded"/></xs:sequence><xs:attribute name="title" type="xs:string" use="required"V 2b

db2-xdb:rowSet="textbk_rowSet" db2-xdb:column="PUBS_TITLE"/></xs:complexType>

</xs:element><xs:element name="childrensbook" maxOccurs="unbounded"><xs:complexType><xs:sequence><xs:element name="isbn" type="xs:string" V 3a

db2-xdb:rowSet="childrens_rowSet" db2-xdb:column="PUBS_ISBN"/><xs:element name="author" type="xs:string" maxOccurs="unbounded"/><xs:element name="publicationDate" type="xs:gYear"/>

</xs:sequence><xs:attribute name="title" type="xs:string" use="required"V 3b

db2-xdb:rowSet="childrens_rowSet" db2-xdb:column="PUBS_TITLE"/></xs:complexType>

</xs:element></xs:sequence>

</xs:complexType></xs:element>

</xs:schema>

��� �� XML ��� ��� �� �:

1 ��� <xs:annotation>�� textbk_rowSet � �� childrens_rowSet � �� �� XML

���� ��� �� ����� . <db2-xdb:name> ��� � �� ���� ���

(ALLPUBLICATIONS)� �����.

384 IBM i: ������ SQL �����

||||||||||||||||||||||||||||||||||||||||||||||

|

||

|

|

Page 397: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

2a � 2b

textbk_rowSet ��� <textbook> ��� �� �� �� � isbn �� ��� �����. ��

<textbook> ��� isbn � �� ��� ALLPUBLICATIONS ���� ��� ���� ���

�.

3a � 3b

childrens_rowSet ��� <childrensbook> ��� �� �� �� � isbn �� ��� ����

�. �� <childrensbook> ��� isbn � �� ��� ALLPUBLICATIONS ���� ��� �

��� ����.

�� � ��� �� XML ���� ��� � ��� ��� �����.

71. ALLPUBLICATIONS

ISBN PUBS TITLE

0-11-011111-0 Programming with XML

5-55-555555-5 Children’s Fables

�� �� � �� ��� �� � ��� �����. �� ��� ��� � �� ���� XML

���� � �� ��� � ��� � ����� �� ��� � �� �� ��� � ����.

��� ��

� �� �� ��, ��� �� �� � �� ��� �� � �� ���.

�: temperature�� ��� �� ����� � �� �� �� ����.

<temperature unit="Celsius">49</temperature><temperature unit="Farenheit">49</temperature>

� �� �� ���� ���� unit=″Celsius″ ��� �� �� ��� � � �� ���

unit=″Farenheit″ ��� �� �� ��� � �� � �� ���� ���. �� �� ���� �� �

��� �� �� �� �� ��� ��� ��� � � �� �� �� ��� �� � ����.

�� ��� �� XML ����� � ��� � � ����.

<db2-xdb:name>TEMPERATURE_DATA</db2-xdb:name><db2-xdb:rowSet>temp_celcius</db2-xdb:rowSet> V 1<db2-xdb:rowSet>temp_farenheit</db2-xdb:rowSet>

</db2-xdb:table>...

<xs:element name="temperature"><xs:annotation><xs:appinfo><db2-xdb:rowSetMapping><db2-xdb:rowSet>temp_celcius</db2-xdb:rowSet><db2-xdb:column>col1</db2-xdb:column>

</db2-xdb:rowSetMapping><db2-xdb:rowSetMapping><db2-xdb:rowSet>temp_farenheit</db2-xdb:rowSet>

SQL ����� 385

|

|

|

|

|

|

|

|

|

||

||

||

|||

|

|

|

|

|

||

|

|

|

|

|||||||||||||||

Page 398: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

<db2-xdb:column>col1</db2-xdb:column><db2-xdb:expression>CAST(myudf_convertToCelcius(CAST($DECOMP_CONTENT AS FLOAT)) AS FLOAT)</db2-xdb:expression> V 2

</db2-xdb:rowSetMapping></xs:appinfo>

</xs:annotation><xs:complexType><xs:simpleContent><xs:extension base="xs:string"><xs:attribute name="unit" type="xs:string"><xs:annotation><xs:appinfo><db2-xdb:rowSetMapping> V 3<db2-xdb:rowSet>temp_celcius</db2-xdb:rowSet><db2-xdb:condition>$DECOMP_CONTENT = 'Celsius'</db2-xdb:condition>

</db2-xdb:rowSetMapping><db2-xdb:rowSetMapping><db2-xdb:rowSet>temp_farenheit</db2-xdb:rowSet><db2-xdb:condition>$DECOMP_CONTENT = 'Farenheit'</db2-xdb:condition>

</db2-xdb:rowSetMapping></xs:appinfo>

</xs:annotation></xs:attribute>

</xs:extension></xs:simpleContent>

</xs:complexType></xs:element>

��� �� XML ��� ��� �� �:

1 ��� <xs:annotation>�� temp_celcius � �� temp_farenheit � �� �� XML �

��� ��� �� �����.

2 �� ��� �� ���� ���� �� �� �� �� ��� ��� temp_farenheit � �

� �� �� ��� �����. �� ���� � SQL ��� ���� �� �� �� �

�� ��� CAST ��� �� ��� �� ���.

3 unit=″Celsius″ ��� �� �� ��� temp_celcius � �� ��� unit=″Farenheit″

��� �� �� ��� temp_farenheit � �� �����.

�� : XML �� ��

��� �� xml ��� ���� XML ��� ��� ���� �� � XML ��� ��� � ��

��.

�� XML ��� �����.

<publications><textbook title="Programming with XML"><isbn>0-11-011111-0</isbn><author>Mary Brown</author><author>Alex Page</author><publicationDate>2002</publicationDate><university>University of London</university>

</textbook></publications>

386 IBM i: ������ SQL �����

|||||||||||||||||||||||||||

|

||

|

||

|

|

||

|

|

|

|

|

|||||||||

Page 399: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

<textbook> XML ��� � ��� ��� �� ���� � � XML ��� ��� �� ��

� <textbook> �� ��� ��� �����. ��� DETAILS � TITLE � ���� ��,

TEXTBOOKS ��� � ��� DETAILS � XML ���� �������.

72. TEXTBOOKS

TITLE DETAILS

Programming with XML <textbook title="Programming with XML"><isbn>0-11-011111-0</isbn><author>Mary Brown</author><author>Alex Page</author><publicationDate>2002</publicationDate><university>University of London</university>

</textbook>

��� �� ��� ��� ��� ���� ��� ��� � ����. � ��� �� ��� ���

� ����. �� ��� �� ��� ����� � �� ��� �� ��� ������.

db2-xdb:rowSet � db2-xdb:column� <db2-xdb:rowSetMapping> ��� <db2-xdb:rowSet> �

<db2-xdb:column> �� �� �� <xs:element>� <xs:attribute>� ���� ���� �� ���� �

������. � ��� ��� ���� ���� �� ����.

�� XML ��� ��� ��� ��� ���� ���� <textbook> �� � �� ��� �� ��

� ���� ��� �����.

<xs:element name="publications"><xs:complexType><xs:sequence><xs:element name="textbook" maxOccurs="unbounded"

db2-xdb:rowSet="TEXTBOOKS" db2-xdb:column="DETAILS"><xs:complexType><xs:sequence><xs:element name="isbn" type="xs:string"/><xs:element name="author" type="xs:string" maxOccurs="unbounded"/><xs:element name="publicationDate" type="xs:gYear"/><xs:element name="university" type="xs:string" maxOccurs="unbounded"/>

</xs:sequence><xs:attribute name="title" type="xs:string" use="required"

db2-xdb:rowSet="TEXTBOOKS" db2-xdb:column="TITLE"/></xs:complexType>

</xs:element></xs:sequence>

</xs:complexType></xs:element>

db2-xdb:rowSet ��� �� ���� �� ��� db2-xdb:column ��� �� � �� ����

�. <textbook> ��� �� ���� ��� ��� � db2-xdb:contentHandling ��� ���

���� ��� ���, �� �� �� � (�� � � ��� ��)� db2-xdb:contentHandling�

serializeSubtree �� �� XML � �����. XML �� �� ��� ����. � � ���

db2-xdb:contentHandling ��� ������.

SQL ����� 387

|

|

|

||

||

|||||||||

|

|

|

|

|

|

|

|||||||||||||||||||

|

|

|

|

|

Page 400: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� : �� �� �� �� �� ���

XML ���� � ��� � ��� �� ���� �� ��� �� xml ��� ���� ��� �

�� �����. � �� rowSet� � �� � ��� �� �� � �����.

� ��� ��� �� rowSet� �� � �� � ��� �����. �� �� �� ���� �

�� maxOccurs �� �� �� �� � rowSet� � �� �� � �� , XML ���

� �� ��� � ���� �� � �� �����. maxOccurs �� �� � �� � rowSet

� �� �� ��� � ���� �� ��� � �� � �� ��� �� �� ��, XML

��� ��� � � �� �����.

�� XML ��� �����.

<publications><textbook title="Programming with XML"><isbn>0-11-011111-0</isbn><author>Mary Brown</author><author>Alex Page</author><publicationDate>2002</publicationDate><university>University of London</university>

</textbook></publications>

<isbn> � <publicationDate> ��� �� �� ��� ��� �� TEXTBOOKS ���� ���� �

� XML ��� ��� �� � ��� �� ��� ��� ���� ���. ��� � ��� ��

� ��� � �� �����.

73. TEXTBOOKS

ISBN TITLE DATE

0-11-011111-0 Programming with XML 2002

� ��� � ��� �� ����� ����� �� ��� � � ���� ���. �� �� �

��� ���� �� ������.

v <xs:element> �� <xs:attribute>� ���� db2-xdb:rowSet � db2-xdb:column

v <db2-xdb:rowSetMapping>� �� ��� <db2-xdb:rowSet> � <db2-xdb:column>

�� ��� �� XML ���� db2-xdb:rowSet � db2-xdb:column ��� ���� �����.

<?xml version="1.0" encoding="UTF-8"?><xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"xmlns:db2-xdb="http://www.ibm.com/xmlns/prod/db2/xdb1">

<xs:annotation><xs:appinfo><db2-xdb:defaultSQLSchema>"MYSCHEMA"</db2-xdb:defaultSQLSchema></xs:appinfo></xs:annotation>

<xs:element name="publications"><xs:complexType><xs:sequence>

388 IBM i: ������ SQL �����

|

|

|

|

|

|

|

|

|

|||||||||

|

|

|

||

|||

||||

|

|

|

|

|

|||||||||||||

Page 401: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

<xs:element name="textbook" maxOccurs="unbounded"><xs:complexType><xs:sequence><xs:element name="isbn" type="xs:string" maxOccurs="1"

db2-xdb:rowSet="TEXTBOOKS"db2-xdb:column="ISBN"/>

<xs:element name="author" type="xs:string" maxOccurs="unbounded"/><xs:element name="publicationDate" type="xs:gYear" maxOccurs="1"

db2-xdb:rowSet="TEXTBOOKS"db2-xdb:column="DATE"/>

<xs:element name="university" type="xs:string" maxOccurs="unbounded"/></xs:sequence><xs:attribute name="title" type="xs:string" use="required"

db2-xdb:rowSet="TEXTBOOKS"db2-xdb:column="TITLE"/>

</xs:complexType></xs:element></xs:sequence>

</xs:complexType></xs:element></xs:schema>

rowset�� �� ��� maxOccurs ��� 1��� �� � �� TEXTBOOKS ���� ��� �

����. ��� <textbook> ��� � ���� �� � �� �����.

�� : �� �� �� �� ���

XML ���� � ��� � ��� �� ���� �� ��� �� xml ��� ���� ��� �

�� �����. � �� rowSet� � �� �� ��� �� ��� � �����.

� ��� ��� �� rowSet� �� � �� � ��� �����. �� �� �� ���� �

�� maxOccurs �� �� �� �� � rowSet� � �� �� � �� , XML ���

� �� ��� � ���� �� � �� �����. maxOccurs �� �� � �� � rowSet

� �� �� ��� � ���� �� ��� � �� � �� ��� �� �� ��, XML

��� ��� � � �� �����.

�� XML ��� �����.

<textbook title="Programming with XML"><isbn>0-11-011111-0</isbn><author>Mary Brown</author><author>Alex Page</author><publicationDate>2002</publicationDate><university>University of London</university>

</textbook>

����� ISBN � ���� ��� �� ���� � � XML ��� ���� <isbn> � <author>

��� ��� ��� �����. ��� ISBN � AUTHNAME � TEXTBOOK_AUTH ���� �

��� ���.

SQL ����� 389

|||||||||||||||||||||

|

|

|

|

|

|

|

|

|

|

|

|||||||

|

|

|

Page 402: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

74. TEXTBOOKS_AUTH

ISBN AUTHNAME

0-11-011111-0 Mary Brown

0-11-011111-0 Alex Page

��� �� ��� ��� ��� ���� ��� ��� � ����. � ��� �� ��� ���

� ����. �� ��� �� ��� ����� � �� ��� �� ��� ������.

� ��� � ��� �� ����� ����� �� ��� � � ���� ���. �� �� �

��� ���� �� ������.

v <xs:element> �� <xs:attribute>� ���� db2-xdb:rowSet � db2-xdb:column

v <db2-xdb:rowSetMapping>� �� ��� <db2-xdb:rowSet> � <db2-xdb:column>

�� ��� �� XML ���� <db2-xdb:rowSet> � <db2-xdb:column> ��� ��� �����.

<?xml version="1.0" encoding="UTF-8"?><xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"xmlns:db2-xdb="http://www.ibm.com/xmlns/prod/db2/xdb1">

<xs:annotation><xs:appinfo><db2-xdb:defaultSQLSchema>"MYSCHEMA"</db2-xdb:defaultSQLSchema></xs:appinfo></xs:annotation>

<xs:element name="textbook"><xs:complexType><xs:sequence maxOccurs="unbounded">

<xs:element name="isbn" type="xs:string"><xs:annotation><xs:appinfo><db2-xdb:rowSetMapping>

<db2-xdb:rowSet>TEXTBOOKS_AUTH</db2-xdb:rowSet><db2-xdb:column>ISBN</db2-xdb:column>

</db2-xdb:rowSetMapping></xs:appinfo></xs:annotation>

</xs:element>

<xs:element name="author" type="xs:string" maxOccurs="unbounded"><xs:annotation><xs:appinfo><db2-xdb:rowSetMapping>

<db2-xdb:rowSet>TEXTBOOKS_AUTH</db2-xdb:rowSet><db2-xdb:column>AUTHNAME</db2-xdb:column>

</db2-xdb:rowSetMapping></xs:appinfo></xs:annotation>

</xs:element>

<xs:element name="publicationDate" type="xs:gYear"/>

390 IBM i: ������ SQL �����

||

||

||

|||

|

|

|

|

|

|

|

||||||||||||||||||||||||||||||||||||||

Page 403: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

<xs:element name="university" type="xs:string" maxOccurs="unbounded"/>

</xs:sequence><xs:attribute name="title" type="xs:string" use="required"/></xs:complexType>

</xs:element></xs:schema>

<isbn> ��� ISBN � � �� ������ ���� �� ��� ��� ������. �� �

�� ISBN ��� � ���� �� ��� �� �� � ���� ����. <isbn> �� �� �

��� �� � ��� ����.

<author>� maxOccurs ��� 1�� �� <isbn> � <author> �� �� �� ��� ���� ���

� ��� ����.

�� ��� � ��� ��� ���� �� �� � � ����. �� ��� �� �� ��

��� � �� �� ��� �� �� ��� � �� �� ��� ��� � ����.

�� : �� ���

XML ��� � �� � ���� ��� � ����. � �� � �� �� ���� �����

XML ��� ��� ��� ���� ��� �����.

�� XML ��� �����.

<textbook title="Programming with XML"><isbn>0-11-011111-0</isbn><author>Mary Brown</author><author>Alex Page</author><publicationDate>2002</publicationDate><university>University of London</university>

</textbook>

����� ISBN� �� �� ���� ����� <isbn> ��� �� �� ��� ���� ���.

<db2-xdb:rowSetMapping> ��� XML ��� ��� <isbn> �� ��� ���� �� ��� � ��

��.

75. TEXTBOOKS

ISBN TITLE

0-11-011111-0 Programming with XML

76. SCHOOLPUBS

ISBN SCHOOL

0-11-011111-0 University of London

�� XML ��� ��� ��� �� ��� <isbn> �� ��� ���� �� ���� ��� �

��� ��� �����. <university> �� � �� ��� �� ��� ���.

SQL ����� 391

|||||||

|

|

|

|

|

|

|

|

|

|

|

|||||||

|

|

|

||

||

|||

||

||

|||

|

|

Page 404: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

<?xml version="1.0" encoding="UTF-8"?><xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"xmlns:db2-xdb="http://www.ibm.com/xmlns/prod/db2/xdb1">

<xs:annotation><xs:appinfo><db2-xdb:defaultSQLSchema>"MYSCHEMA"</db2-xdb:defaultSQLSchema></xs:appinfo></xs:annotation>

<xs:element name="textbook"><xs:complexType><xs:sequence maxOccurs="unbounded">

<xs:element name="isbn" type="xs:string"><xs:annotation><xs:appinfo><db2-xdb:rowSetMapping>

<db2-xdb:rowSet>TEXTBOOKS</db2-xdb:rowSet><db2-xdb:column>ISBN</db2-xdb:column>

</db2-xdb:rowSetMapping><db2-xdb:rowSetMapping>

<db2-xdb:rowSet>SCHOOLPUBS</db2-xdb:rowSet><db2-xdb:column>ISBN</db2-xdb:column>

</db2-xdb:rowSetMapping></xs:appinfo></xs:annotation>

</xs:element>

<xs:element name="author" type="xs:string" maxOccurs="unbounded"/>

<xs:element name="publicationDate" type="xs:gYear"/>

<xs:element name="university" type="xs:string" maxOccurs="unbounded"><xs:annotation><xs:appinfo><db2-xdb:rowSetMapping>

<db2-xdb:rowSet>SCHOOLPUBS</db2-xdb:rowSet><db2-xdb:column>SCHOOL</db2-xdb:column>

</db2-xdb:rowSetMapping></xs:appinfo></xs:annotation>

</xs:element>

</xs:sequence><xs:attribute name="title" type="xs:string" use="required"><xs:annotation><xs:appinfo><db2-xdb:rowSetMapping><db2-xdb:rowSet>TEXTBOOKS</db2-xdb:rowSet><db2-xdb:column>TITLE</db2-xdb:column>

</db2-xdb:rowSetMapping></xs:appinfo>

</xs:annotation></xs:attribute>

</xs:complexType></xs:element>

392 IBM i: ������ SQL �����

||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

Page 405: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� : �� �� ��� ���

��� �� xml ��� ����� ���� �� � ��� ��� �� ��, ���� �� ���

� �� �� ���� ��� � ����. �� �� �� � ��, �� ���� �� �� �

�� ����� � ���� � rowSet� ����� �����.

�� ��, �� XML ��� �����.

<publications><textbook title="Programming with XML"><isbn>0-11-011111-0</isbn><author>Mary Brown</author><author>Alex Page</author><publicationDate>2002</publicationDate><university>University of London</university>

</textbook><childrensbook title="Children's Fables"><isbn>5-55-555555-5</isbn><author>Bob Carter</author><author>Melaine Snowe</author><publicationDate>1999</publicationDate>

</childrensbook></publications>

�� � �� ���� ���� ����� �� �� ��� �� �� �� �� �� ����

� ��� �� ���. � rowSet� ���� �� �� ����� ���� ���� �� ���

��.

77. ALLPUBLICATIONS

PUBS_ISBN PUBS_TITLE

0-11-011111-0 Programming with XML

5-55-555555-5 Children’s Fables

� �� � ��� � ��� ��� �� ��� �� ������� �� ����� ����

� ��� � ����.

�� � �� � �� �� ���� ��� ���� ����� �� �� ��� � ���

��. rowSet� ���� � � ISBN � ��� PUBS_ISBN � PUBS_TITLE � �� ����

� �� �� �� �� �� � �� ISBN �� ��� � ���. rowSet� ���� ���

� �� �� ����� ���� �� ��� � ����.

�� XML ��� ��� <childrensbook> ��� ��� <textbook> ��� �� ����� �� rowSet

� ���� ��� �����.

<?xml version="1.0" encoding="UTF-8"?><xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"xmlns:db2-xdb="http://www.ibm.com/xmlns/prod/db2/xdb1">

<xs:annotation><xs:appinfo><db2-xdb:defaultSQLSchema>"MYSCHEMA"</db2-xdb:defaultSQLSchema>

SQL ����� 393

|

|

|

|

|

|||||||||||||||

|

|

|

||

||

||

|||

|

|

|

|

|

|

|

|

|||||||

Page 406: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

<db2-xdb:table><db2-xdb:name>ALLPUBLICATIONS</db2-xdb:name><db2-xdb:rowSet>testbk_rowSet</db2-xdb:rowSet><db2-xdb:rowSet>childrens_rowSet</db2-xdb:rowSet>

</db2-xdb:table></xs:appinfo></xs:annotation>

<xs:element name="publications"><xs:complexType><xs:sequence maxOccurs="unbounded">

<xs:element name="textbook"><xs:complexType><xs:sequence maxOccurs="unbounded"><xs:element name="isbn" type="xs:string"db2-xdb:rowSet="testbk_rowSet"db2-xdb:column="PUBS_ISBN"/>

<xs:element name="author" type="xs:string" maxOccurs="unbounded"/><xs:element name="publicationDate" type="xs:gYear"/><xs:element name="university" type="xs:string" maxOccurs="unbounded"/>

</xs:sequence><xs:attribute name="title" type="xs:string" use="required"

db2-xdb:rowSet="testbk_rowSet"db2-xdb:column="PUBS_TITLE"/>

</xs:complexType></xs:element>

<xs:element name="childrensbook"><xs:complexType><xs:sequence maxOccurs="unbounded"><xs:element name="isbn" type="xs:string"db2-xdb:rowSet="childrens_rowSet"db2-xdb:column="PUBS_ISBN"/>

<xs:element name="author" type="xs:string" maxOccurs="unbounded"/><xs:element name="publicationDate" type="xs:gYear"/>

</xs:sequence><xs:attribute name="title" type="xs:string" use="required"

db2-xdb:rowSet="childrens_rowSet"db2-xdb:column="PUBS_TITLE"/>

</xs:complexType></xs:element>

</xs:sequence></xs:complexType>

</xs:element></xs:schema>

� �� � �� ��� db2-xdb:rowSet ��� ��� ���� �� ���� � rowSet� �� �

���� ������. rowSet� <xs:schema>� ��� ���� �� <db2-xdb:table> ���

ALLPUBLICATIONS ���� �����.

�� ���� ���� � rowSet� ���� ���� �� �� ���� �� ����� � �

����.

394 IBM i: ������ SQL �����

|||||||||||||||||||||||||||||||||||||||||||||||

|

|

|

|

|

Page 407: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� : �� �� ��� � ����

��� �� xml ��� ����, � �� �� ��� � � ���� ��� � �� ���� �

� �� � � �� � ����. �� �� �� � �� � rowSet� ����� ����

�.

�� ��, �� XML ��� �����.

<publications><textbook title="Principles of Mathematics"><isbn>1-11-111111-1</isbn><author>Alice Braun</author><publisher>Math Pubs</publisher><publicationDate>2002</publicationDate><university>University of London</university>

</textbook></publications>

���� ���� � �� �� ��� �� ���� ��� � ����.

78. BOOKCONTACTS

ISBN CONTACT

1-11-111111-1 Alice Braun

1-11-111111-1 Math Pubs

�� ����� CONTACT � �� XML ��� � �� ���� ����. �, � ��� ����

�� ��(<author> ����) � �� ��� ���� �� �� � ����(<publisher> ����).

�� XML ��� ��� � rowSet� ���� � ���� ��� ��� �����.

<?xml version="1.0" encoding="UTF-8"?><xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"xmlns:db2-xdb="http://www.ibm.com/xmlns/prod/db2/xdb1">

<xs:annotation><xs:appinfo><db2-xdb:defaultSQLSchema>"MYSCHEMA"</db2-xdb:defaultSQLSchema><db2-xdb:table><db2-xdb:name>BOOKCONTACTS</db2-xdb:name><db2-xdb:rowSet>author_rowSet</db2-xdb:rowSet><db2-xdb:rowSet>publisher_rowSet</db2-xdb:rowSet>

</db2-xdb:table></xs:appinfo></xs:annotation>

<xs:element name="publications"><xs:complexType><xs:sequence maxOccurs="unbounded">

<xs:element name="textbook" maxOccurs="unbounded"><xs:complexType>

<xs:sequence>

<xs:element name="isbn" type="xs:string">

SQL ����� 395

|

|

|

|

|

|||||||||

|

||

||

||

|||

|

|

|

||||||||||||||||||||||||

Page 408: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

<xs:annotation><xs:appinfo><db2-xdb:rowSetMapping><db2-xdb:rowSet>author_rowSet</db2-xdb:rowSet><db2-xdb:column>ISBN</db2-xdb:column>

</db2-xdb:rowSetMapping><db2-xdb:rowSetMapping><db2-xdb:rowSet>publisher_rowSet</db2-xdb:rowSet><db2-xdb:column>ISBN</db2-xdb:column>

</db2-xdb:rowSetMapping></xs:appinfo></xs:annotation>

</xs:element>

<xs:element name="author" type="xs:string" maxOccurs="unbounded"><xs:annotation><xs:appinfo><db2-xdb:rowSetMapping><db2-xdb:rowSet>author_rowSet</db2-xdb:rowSet><db2-xdb:column>CONTACT</db2-xdb:column>

</db2-xdb:rowSetMapping></xs:appinfo></xs:annotation>

</xs:element>

<xs:element name="publisher" type="xs:string"><xs:annotation><xs:appinfo><db2-xdb:rowSetMapping><db2-xdb:rowSet>publisher_rowSet</db2-xdb:rowSet><db2-xdb:column>CONTACT</db2-xdb:column>

</db2-xdb:rowSetMapping></xs:appinfo></xs:annotation>

</xs:element>

<xs:element name="publicationDate" type="xs:gYear"/><xs:element name="university"

type="xs:string" maxOccurs="unbounded"/></xs:sequence><xs:attribute name="title" type="xs:string" use="required"/>

</xs:complexType></xs:element>

</xs:sequence></xs:complexType>

</xs:element></xs:schema>

� �� ��� db2-xdb:rowSet ��� ��� ���� �� ���� � rowSet� �� �����

������. rowSet� <xs:schema>� ��� ���� �� <db2-xdb:table> ��� BOOKCONTACTS

���� �����.

�� ��� ��� XML ��� � SQL � ���

��� �� xml ��� ��� XML �� ���� SQL �� � ����� �����.

396 IBM i: ������ SQL �����

||||||||||||||||||||||||||||||||||||||||||||||||

|

|

|

|

|

Page 409: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� � xml ��� ��� ��� XML ��� ��� �� � ���� SQL ��, ���� �� ��

� ��� ����.

79. ����� XML ��� � SQL ��� ��

XML ��� ��

SQL ��

C

H

A

R

V

A

R

C

H

A

R

D

A

T

E

T

I

M

E

T

I

M

E

S

T

A

M

P

string, normalizedString, token 1a* 1a 7 8 9

base64Binary, 2* 2 ��� ��� ���

hexBinary 2* 2 ��� ��� ���

byte, unsigned byte 3* 3 ��� ��� ���

integer, positiveInteger, negativeInteger, nonNegativeInteger,

nonPositiveInteger

3* 3 ��� ��� ���

int, unsignedInt 3* 3 ��� ��� ���

long, unsignedLong 3* 3 ��� ��� ���

short, unsignedShort 3* 3 ��� ��� ���

decimal 3* 3 ��� ��� ���

float 3* 3 ��� ��� ���

double 3* 3 ��� ��� ���

boolean 3* 3 ��� ��� ���

time 4* 4 ��� 10 ���

dateTime 4* 4 11 12 13

duration, gMonth, gYear, gDay, gMonthDay, gYearMonth 4* 4 ��� ��� ���

date 4* 4 14 ��� ���

Name, NCName, NOTATION, ID, IDREF, QName,

NMTOKEN, ENTITY

1a* 1a ��� ��� ���

ENTITIES, NMTOKENS, IDREFS, list types 1b* 1b ��� ��� ���

anyURI 6* 6 ��� ��� ���

language 1a* 1a ��� ��� ���

anySimpleType, union types 5* 5 ��� ��� ���

* �� XML ���� ��� �� � �� �� ���� ���� ��� � ���� ����

�����.

�� ��� ��� ��� �� XML ��� ��� ���� ����.

1a XML �� ����� ��� ��� �� � �� �� �� �����. �� ����

�� �� �� � ��� �� db2-xdb:truncate� ″true″ �� ″1″� � �� ���

��. ��� ��� �� �� ���� �� ���� XML ��� ��� �� ��� ��

�����.

1b 1a� � ��� �� �� �����. �� � ���� �� ��� � ��� ��(��

�� ″��″ �� ��� ��), �� ��� ��� ������.

2 XML �� ����� ��� ��� �� � �� �� �� �����. �� ����

SQL ����� 397

|

|

||

|

|

||||

|||||||

||||

||||

||||||||||||||||||||||||||||||||||||||||

|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

|||||||||||||||||||||||||

|

||

|

||

||

|

|

|

||

|

||

Page 410: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� �� �� � ��� �� db2-xdb:truncate� ″true″ �� ″1″� � �� ���

��. �� ���� XML ��� ��� �� ��� �� �����. ��(��) ����

�����.

3 db2-xdb:normalization �� �� �� �� �� XML �� ���� ��� �� � ��

�� � �����. � ��� �� db2-xdb:truncate� ″true″ �� ″1″� � �� �

����.

4 db2-xdb:normalization �� �� �� �� �� XML �� �� ��� �� �� �� �

� � ��(��) �� � �����. � ��� �� db2-xdb:truncate� ″true″ �� ″1″�

� �� �����.

5 XML �� ����� ��� ��� �� � �� �� �� �����. �� ����

�� �� �� � ��� �� db2-xdb:truncate� ″true″ �� ″1″� � �� ���

��. � � � � �� � ���� �� ��� ��� �� �����.

6 URI� ��� ��(��)� �� � ��(��) �� �����. �� ���� �� �

� �� � ��� �� db2-xdb:truncate� ″true″ �� ″1″� � �� �����. URI

� ���� ��� �� URI ��� ���� ������.

7 ���� ��� �� �� �, yyyy-mm-dd, mm/dd/yyyy �� dd.mm.yyyy � �����.

8 ���� ��� �� �� �, hh.mm.ss, hh:mm AM or PM �� hh:mm:ss � �����.

9 ���� ��� ��� �� �, yyyy-mm-dd-hh.mm.ss.nnnnnn � �����.

10 �� ��� XML �� � �� ��� db2-xdb:truncate� ″true″ �� ″1″� ��

�� �� �����. ��� ���� � db2-xdb:truncate� ″true″ �� ″1″� � XML

�� � ��� ����� ��� � �����.

11 ��� � �#��� �� ‘-’ ��� � � �����.

12 XML �� ��� ����� � � �����. XML �� ��� ����� ���

db2-xdb:truncate� ″true″ �� ″1″� � � �����.

13 ��� � �#��� �� ‘-’ ��� � � �����. ��� ����� �� XML �

� �� db2-xdb:truncate� ″true″ �� ″1″� ��� �� � �����. �� �#� ��

� �� ��� ���� ��� db2-xdb:truncate� ″true″ �� ″1″� � � ����

�.

14 ��� � �#��� �� ‘-’ ��� � � �����. ��� ����� �� XML �

� �� db2-xdb:truncate� ″true″ �� ″1″� ��� �� � �����. (� ��� �

� ��� � �����.)

398 IBM i: ������ SQL �����

|

|

|

||

|

|

||

|

|

||

|

|

||

|

|

||

||

||

||

|

|

||

||

|

||

|

|

|

||

|

|

Page 411: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

80. ����� XML ��� � SQL ��� ��

XML ��� ��

SQL ��

G

R

A

P

H

I

C

V

A

R

G

R

A

P

H

I

C

C

L

O

B

D

B

C

L

O

B

string, normalizedString, token 1a* 1a 1a 1a*

base64Binary, ��� ��� 3 ���

hexBinary ��� ��� 3 ���

byte, unsigned byte ��� ��� 4 ���

integer, positiveInteger, negativeInteger, nonNegativeInteger,

nonPositiveInteger

��� ��� 4 ���

int, unsignedInt ��� ��� 4 ���

long, unsignedLong ��� ��� 4 ���

short, unsignedShort ��� ��� 4 ���

decimal ��� ��� 4 ���

float ��� ��� 4 ���

double ��� ��� 4 ���

boolean ��� ��� 4 ���

time ��� ��� 5 ���

dateTime ��� ��� 5 ���

duration, gMonth, gYear, gDay, gMonthDay, gYearMonth ��� ��� 5 ���

date ��� ��� 5 ���

Name, NCName, NOTATION, ID, IDREF, QName, NMTOKEN,

ENTITY

1a* 1a 1a 1a*

ENTITIES, NMTOKENS, IDREFS, list types 1b* 1b 1b 1b*

anyURI ��� ��� 6 ���

language ��� ��� 1a ���

anySimpleType, union types 2a* 2a 2a 2a*

* �� XML ���� ��� �� � �� �� ���� ���� ��� � ���� ����

�����.

�� ��� ��� ��� �� XML ��� ��� ���� ����.

1a XML �� ����� 2��� ��� ��� �� � �� �� �� �����. �� �

��� �� �� �� � ��� �� db2-xdb:truncate� ″true″ �� ″1″� � ��

�����. ��� ��� �� �� ���� �� ���� XML ��� ��� �� ��� �

� �����.

1b 1a� � ��� �� �� �����. �� � ���� �� ��� � ��� ��(��

�� ″��″ �� ��� ��), �� ��� ��� ������.

2a XML �� ����� ��� ��� �� � �� �� �� �����. �� ����

�� �� �� � ��� �� db2-xdb:truncate� ″true″ �� ″1″� � �� ���

��. � � � � ���� ���� �� ��� ��� �� �����.

SQL ����� 399

||

|

|

|||||||

||||||||||

||||

||||||||||||||||||||||||||||||||

|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

|||||||||||||||||||||

|

||

|

||

||

|

|

|

||

|

||

|

|

Page 412: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

3 XML �� ����� ��� ��� �� � �� �� �� �����. �� ����

�� �� �� � ��� �� db2-xdb:truncate� ″true″ �� ″1″� � �� ���

��. �� ���� XML ��� ��� �� ��� �� �����. ��(��) ����

�����.

4 db2-xdb:normalization �� �� �� �� ���� XML ���� ��� �� � ��(�

�) �� � �����. � ��� �� db2-xdb:truncate� ″true″ �� ″1″� � �

� �����.

5 db2-xdb:normalization �� �� �� �� �� XML �� �� ��� �� �� �� �

� � ��(��) �� � �����. � ��� �� db2-xdb:truncate� ″true″ �� ″1″

� � �� �����.

6 URI� ��� ��(��)� �� � ��(��) �� �����. �� ���� �� �

� �� � ��� �� db2-xdb:truncate� ″true″ �� ″1″� � �� �����. URI

� ���� ��� �� URI ��� ���� ������.

�� � XML ��� ��� ��� XML ��� ��� �� � ���� SQL 2� ��� ��� �

���.

81. ����� XML ��� � SQL ��� ��

XML ��� ��

SQL ��

B

I

N

A

R

Y

V

A

R

B

I

N

A

R

Y

B

L

O

B

string, normalizedString, token 1a* 1a 1a

base64Binary, 1a 1a 1a

hexBinary 2* 2 2

byte, unsigned byte ��� ��� ���

integer, positiveInteger, negativeInteger, nonNegativeInteger, nonPositiveInteger ��� ��� ���

int, unsignedInt ��� ��� ���

long, unsignedLong ��� ��� ���

short, unsignedShort ��� ��� ���

decimal ��� ��� ���

float ��� ��� ���

double ��� ��� ���

boolean ��� ��� ���

time ��� ��� ���

dateTime ��� ��� ���

duration, gMonth, gYear, gDay, gMonthDay, gYearMonth ��� ��� ���

date ��� ��� ���

Name, NCName, NOTATION, ID, IDREF, QName, NMTOKEN, ENTITY 1a* 1a 1a

ENTITIES, NMTOKENS, IDREFS, list types 1b* 1b 1b

anyURI 1a 1a 1a

language 1a* 1a 1a

anySimpleType, union types 3* 3 3

400 IBM i: ������ SQL �����

||

|

|

|

||

|

|

||

|

|

||

|

|

|

|

||

|

|

||||||

|||||||||

|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

Page 413: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

* �� XML ���� ��� �� � �� �� ���� ���� ��� � ���� ����

�����.

�� ��� ��� ��� �� XML ��� ��� ���� ����.

1a XML �� ����� ��� ��� �� � �� �� �� �����. �� ����

�� �� �� � ��� �� db2-xdb:truncate� ″true″ �� ″1″� � �� ���

��. � � � � ���� ���� �� ��� ��� �� �����.

1b 1a� � ��� �� �� �����. �� � ���� �� ��� � ��� ��(��

�� ″��″ �� ��� ��), �� ��� ��� ������.

2 XML �� ����� ���� ��� �� � ��(���) �� �����. �� ��

�� �� �� �� � ��� �� db2-xdb:truncate� ″true″ �� ″1″� � ��

�����. ��� ��� �� �� ���� �� ���� XML ��� ��� �� ��� �

� �����. ��(��) ���� �����.

3 XML �� ����� ���� ��� �� � ��(���) �� �����. �� ��

�� �� �� �� � ��� �� db2-xdb:truncate� ″true″ �� ″1″� � ��

�����. � � � � �� � ���� �� ��� ��� �� �����.

�� � XML ��� ��� ��� XML ��� ��� �� � ���� SQL �� ��� ��� �

���.

82. ����� XML ��� � SQL ��� ��

XML ��� ��

SQL ��

S

M

A

L

L

I

N

T

I

N

T

E

G

E

R

B

I

G

I

N

T

R

E

A

L

D

O

U

B

L

E

D

E

C

F

L

O

A

T

string, normalizedString, token 1 1 1 1 1 1

base64Binary, ��� ��� ��� ��� ��� ���

hexBinary ��� ��� ��� ��� ��� ���

byte, unsigned byte 2 2 2 2 2 2

integer, positiveInteger, negativeInteger,

nonNegativeInteger, nonPositiveInteger

3 3 3 4 4 3

int, unsignedInt 3 2 2 4 2 2

long, unsignedLong 3 3 2 4 2 2

short, unsignedShort 2 2 2 2 2 2

decimal 4 4 4 4 4 4

float 5 5 5 6 6 6

double 5 5 5 5 6 6

boolean 7 7 7 7 7 7

time ��� ��� ��� ��� ��� ���

dateTime ��� ��� ��� ��� ��� ���

duration, gMonth, gYear, gDay, gMonthDay,

gYearMonth

��� ��� ��� ��� ��� ���

SQL ����� 401

|

||

|

||

||

|

|

||

|

||

|

|

|

||

|

|

|

|

||

|

|

||||||||

|||||||

||||||

||||

||||||

||||||||||||||||||||||||||||||||||||||||||||

|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

Page 414: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

82. ����� XML ��� � SQL ��� �� (��)

XML ��� ��

SQL ��

S

M

A

L

L

I

N

T

I

N

T

E

G

E

R

B

I

G

I

N

T

R

E

A

L

D

O

U

B

L

E

D

E

C

F

L

O

A

T

date ��� ��� ��� ��� ��� ���

Name, NCName, NOTATION, ID, IDREF, QName,

NMTOKEN, ENTITY

��� ��� ��� ��� ��� ���

ENTITIES, NMTOKENS, IDREFS, list types ��� ��� ��� ��� ��� ���

anyURI ��� ��� ��� ��� ��� ���

language ��� ��� ��� ��� ��� ���

anySimpleType, union types ��� ��� ��� ��� ��� ���

�� ��� ��� ��� �� XML ��� ��� ���� ����.

1 �� ��� � � �����.

v ���� �� ��� XML ��� �� � ��� ����.

v �� ��� ���� $� � ���� �� ��� ��� � ����.

2 �� ���� -0� XML ��� � ��� �� -0� ������� �����.

3 XML ��� SQL ��� �� �� � �����. -0� XML ��� � ��� ��

-0� ������� �����.

4 �� ��� ���� $� � �� �� ��� ��� � �� � �����. -0� XML

��� � ��� �� -0� ������� �����.

5 �� ��� ���� $� � �� �� ��� ��� � �� � ���� �� ″INF″, ″-INF″

�� ″NaN″� � ��. -0� ������� 0�� �����.

6 �� ″INF″, ″-INF″ �� ″NaN″� ��� �����. -0� ������� 0�� �����.

7 �� ���� �� �� ‘0’(false) �� ‘1’(true)���.

83. ����� XML ��� � SQL ��� ��

XML ��� ��

SQL ��

D

E

C

I

M

A

L

N

U

M

E

R

I

C

string, normalizedString, token 1 1

base64Binary, ��� ���

hexBinary ��� ���

402 IBM i: ������ SQL �����

|

|

|

||||||||

|||||||

||||||

||||

||||||

|||||||||||||||||||||||

|||||||||||||||||||||||||||||

|

||

||

|

|

||

||

|

||

|

||

|

||

||

||

|

|

|||||||

||||||||||||||||

Page 415: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

83. ����� XML ��� � SQL ��� �� (��)

XML ��� ��

SQL ��

D

E

C

I

M

A

L

N

U

M

E

R

I

C

byte, unsigned byte 2 2

integer, positiveInteger, negativeInteger, nonNegativeInteger, nonPositiveInteger 4 4

int, unsignedInt 4 4

long, unsignedLong 4 4

short, unsignedShort 2 2

decimal 4 4

float 5 5

double 5 5

boolean 7 7

time ��� ���

dateTime ��� ���

duration, gMonth, gYear, gDay, gMonthDay, gYearMonth ��� ���

date ��� ���

Name, NCName, NOTATION, ID, IDREF, QName, NMTOKEN, ENTITY ��� ���

ENTITIES, NMTOKENS, IDREFS, list types ��� ���

anyURI ��� ���

language ��� ���

anySimpleType, union types ��� ���

�� ��� ��� ��� �� XML ��� ��� ���� ����.

1 �� ��� � � �����.

v ���� �� ��� XML ��� �� � ��� ����.

v �� ��� ���� $� � ���� �� ��� ��� � ����.

2 �� ���� -0� XML ��� � ��� �� -0� ������� �����.

3 XML ��� SQL ��� �� �� � �����. -0� XML ��� � ��� ��

-0� ������� �����.

4 �� ��� ���� $� � �� �� ��� ��� � �� � �����. -0� XML

��� � ��� �� -0� ������� �����.

5 �� ��� ���� $� � �� �� ��� ��� � �� � ���� �� ″INF″, ″-INF″

�� ″NaN″� � ��. -0� ������� 0�� �����.

6 �� ″INF″, ″-INF″ �� ″NaN″� ��� �����. -0� ������� 0�� �����.

7 �� ���� �� �� ‘0’(false) �� ‘1’(true)���.

�� xml ��� ��� �� � ����

�� ��� ����� ��� �� xml ��� ��� ����.

SQL ����� 403

|

|

|

|||||||

||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

|

||

||

|

|

||

||

|

||

|

||

|

||

||

|

|

Page 416: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

��

84. ��� �� xml ��� ��� ��

�� �� �

��� ��� � � 2GB

��� �� � XML ����� ��� ���� � � 100

db2-xdb:expression ��� �� � �� 1024���

db2-xdb:condition ��� �� � �� 1024���

db2-xdb:locationPath� � �� � 128

XML ���� � � �� � 64KB

db2-xdb:name(table name), db2-xdb:column,

db2-xdb:defaultSQLSchema �� db2-xdb:SQLSchema ��

� ��� ��

� DB2 ����� �� ��� �

db2-xdb:rowSet �� � ��� �� db2-xdb:name� �� ��� �

����

��� �� xml ��� ��� ��� ���� ����.

v �� ��� �� ��

XML ����� <xs:any> �� <xs:anyAttribute> ��� ��� XML ��� ��� ��� ���

� ����.

�� � ��� ��� serializeSubtree �� stringValue� � db2-xdb:contentHandling��

���� ��� ����, �� ��� ��� ��� � � ���� �� ��� �� ��

�����. �� ��� ��� � <xs:any> �� <xs:anyAttribute> ��� �� � ��

����� ����� ���.

v �� ��

�� �� XML ���� ���� XML ��� �� ��� ��� ��� ��� ����.

v xsi:type� ��� ��� ��

��� XML ���� ���� �� ��� ��� ��� �� �����. xsi:type� ���� �

� ��� �� ��� ��� �� ��� ������.

v � ��(���� ���� ��)

� �� ��� ��� �� XML ���� ��� ��� � ���.

v �� ���� � � �� �� ��

��� �� � �� ���� � �� ��� � ����.

v ��� �� ��� � �� ����

404 IBM i: ������ SQL �����

|

||

||

||

||

||

||

||

||

|||

|

|||

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

Page 417: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

� ��� ���� �� ��� ��� � �� ��� �� ��� �� ���� ���� ��

�� �� ���� ���� �� ������.

v NOTATION�� � � ��� ��: �� � ���� �����.

v ENTITY ��� ��: �� � ����� �����.

v db2-xdb:expression � db2-xdb:condition�� �� rowSet � � �� � ��: �� ��� ��

� ��� �� rowSet � � ��� ��� � ���, ��� db2-xdb:expression ��

db2-xdb:condition ��� �� ����.

xml �� � ���

��� �� xml ��� ��� XML ��� ���� ������ ���� ��� ��� ��� � �

� �� �� �� �����. � ��� xml ��� �� ��� �� ���� �� XML ����

�����.

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"xmlns="http://www.ibm.com/xmlns/prod/db2/xdb1"targetNamespace="http://www.ibm.com/xmlns/prod/db2/xdb1"elementFormDefault="qualified" >

<xs:element name="defaultSQLSchema" type="xs:string"/><xs:attribute name="rowSet" type="xs:string"/><xs:attribute name="column" type="xs:string"/><xs:attribute name="locationPath" type="xs:string"/><xs:attribute name="truncate" type="xs:boolean"/><xs:attribute name="contentHandling"><xs:simpleType><xs:restriction base="xs:string"><xs:enumeration value="text"/><xs:enumeration value="serializeSubtree"/><xs:enumeration value="stringValue"/>

</xs:restriction></xs:simpleType>

</xs:attribute><xs:attribute name="normalization" ><xs:simpleType><xs:restriction base="xs:string"><xs:enumeration value="original"/><xs:enumeration value="whitespaceStrip"/><xs:enumeration value="canonical"/>

</xs:restriction></xs:simpleType>

</xs:attribute><xs:attribute name="expression" type="xs:string"/><xs:attribute name="condition" type="xs:string"/><xs:element name="table"><xs:complexType><xs:sequence><xs:element name="SQLSchema" type="xs:string" minOccurs="0"/><xs:element name="name" type="xs:string"/><xs:element name="rowSet" type="xs:string"

maxOccurs="unbounded" form="qualified"/></xs:sequence>

</xs:complexType></xs:element><xs:element name="rowSetMapping">

SQL ����� 405

|

|

|

|

|

|

|

|

|

|

|

||||||||||||||||||||||||||||||||||||||||

Page 418: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

<xs:complexType><xs:sequence><xs:element name="rowSet" type="xs:string" /><xs:element name="column" type="xs:string" minOccurs="0"/><xs:element name="expression" type="xs:string" minOccurs="0" /><xs:element name="condition" type="xs:string" minOccurs="0"/>

</xs:sequence><xs:attribute ref="truncate" /><xs:attribute ref="locationPath" /><xs:attribute ref="normalization" /><xs:attribute ref="contentHandling" />

</xs:complexType></xs:element>

</xs:schema>

�� ���� SQL ��

��� �� ��� SQL� ��� � ����.

�� ��

SQL� SELECT�� ��� � ��� ��� �� �� ���� �����. ��� �� ���� �

��� �� ��� �����.

��� �� ����� ��� ���� �� SQL ������ �����. SQL� ��� ���� ��

���� �� �� � � � �� ����� �� ����� ���. ������ � �� ��� ��

� ����(�, � ���� �� �� ��� ).

�� ��� �� ���� ��� ����.

v DECLARE CURSOR�: ��� ��� �� ���� �� select��� �� �� �����.

v OPEN � CLOSE�: ������ ��� ��� ���. �� ���� �� ��� �� �

��.

v FETCH�: ��� �� ����� �� ���� �� �� ��� ������.

v UPDATE ... WHERE CURRENT OF�: ��� �� �� �����.

v DELETE ... WHERE CURRENT OF�: ��� �� �� �����.

406 IBM i: ������ SQL �����

||||||||||||||

|

Page 419: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� ��

116 ���� ������ �� � ��� ���

��� ���� ��� �� �� � ��� � ����.

CLOSE

DECLARE CURSOR

DELETE

FETCH

UPDATE

�� �

SQL� � � ���� ��� �����. �� ��� �� ��� ��� � �� �� �� ��� ��

���.

�� ��

� ��� SCROLL �� � �� �����.

� ��� �� ���� � �� �� OPEN�� � �� ��� � ����. ��� ��

�� ����� � � � �� �����. FETCH� ���� ��� �� ����� �� ���

�����. � �� �� �� ���. ��� ��� ���� (FETCH�� INTO�� ����) SQL

� �� �� ��� ����� ��� ��� ������.

� �� ��� �(SQLCODE = 100)� ��� � � FETCH�� ��� ��� ����. ��� �

� ���� ��� ����. ��� �� ��� ��� �� ���� �� ��� � �� � ��

�. � ��� �� ����� �� ��� � � OPEN�� �� ���� ���. � ���� �

� � ���.

��� ��

���� ��� �� ���� �� � � ��� � ����. ��� FETCH�� �� �� ��

� ��� �� ���� �� �����. ��� �� �� ����� � � � �� �����.

FETCH� ���� ��� �� ��� �� �� ���� ��� �� �����. � �� �� �

� ���. ��� ��� ���� (FETCH�� INTO�� ����) SQL� �� �� ��� ���

�� ��� ��� ������. BEFORE � AFTER �� ���� ��� ��� ��� � ���.

� �� FETCH�� ��� ��� ����. ��� ��� ��� �� ��� �� � ��� �

��� ���. �� ��� ���� ����� ����� �� �� ��� � ����.

FETCH�� ��� � �� ���� ��� ���� �� ��� �����. � ��� �� �����

�� �� ��� �����.

NEXT ��� �� �� ������. ��� ���� �� ������.

SQL ����� 407

Page 420: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

PRIOR ��� �� �� ������.

FIRST ��� � � �� ������.

LAST ��� ��� �� ������.

BEFORE ��� � � � �� ������.

AFTER ��� ��� � ��� ������.

CURRENT �� ��� ��� ����.

RELATIVE n ��� �� ��� �� ��� ��� �� �� �� n� �����. �� ��, n�

-1 ��� �� ���� �� �� �����. n� +3 ��� �� �

��� �� �����.

���� ��� ��� �� ��� �� ��� � ����.

FETCH AFTER FROM C1

��� ��� �� ���� ����� PRIOR �� RELATIVE ���� ��� ���� ��� ���

���� ���� ���� �����.

: �� ��

� �� � � ���� ��� ��� � ��� �� � �� �� ����� �� � �� SQL

�� �����.

����� D11 ��� �� ���� �� ���� ���� ���. � �� ���� ��� ���

� CORPDATA.EMPLOYEE ����� ��� �� ��� �� � ����.

� �� �� ����� ���� �� �� ���� �� D11� �� ��� �� � � ���

�� ��� �� ��� �����.

85. � �� �

� � SQL� �� ��

EXEC SQL

DECLARE THISEMP CURSOR FOR

SELECT EMPNO, LASTNAME,

WORKDEPT, JOB

FROM CORPDATA.EMPLOYEE

FOR UPDATE OF JOB

END-EXEC.

410 ���� �1��: �� ���.

EXEC SQL

OPEN THISEMP

END-EXEC.

411 ���� �2��: �� ��.

EXEC SQL

WHENEVER NOT FOUND

GO TO CLOSE-THISEMP

END-EXEC.

412 ���� �3��: ��� �� ��� �

��� �� ���.

408 IBM i: ������ SQL �����

Page 421: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

85. � �� � (��)

� � SQL� �� ��

EXEC SQL

FETCH THISEMP

INTO :EMP-NUM, :NAME2,

:DEPT, :JOB-CODE

END-EXEC.

412 ���� �4��: ��� ���� �

��.

... for all employees

in department D11, update

the JOB value:

EXEC SQL

UPDATE CORPDATA.EMPLOYEE

SET JOB = :NEW-CODE

WHERE CURRENT OF THISEMP

END-EXEC.

... then print the row.

413 ���� �5a ��: �� � ���.

... for other employees,

delete the row:

EXEC SQL

DELETE FROM CORPDATA.EMPLOYEE

WHERE CURRENT OF THISEMP

END-EXEC.

413 ���� �5b ��: �� � ���.

�� ���� �� �� �� � �����.

CLOSE-THISEMP.

EXEC SQL

CLOSE THISEMP

END-EXEC.

414 ���� �6��: �� ��.

���� �� �� ����� RELATIVE �� ��� ���� D11 ���� � �� �

�����.

SQL ����� 409

Page 422: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

86. ���� �� �

���� � SQL� �� ��

EXEC SQL

DECLARE THISEMP DYNAMIC SCROLL CURSOR FOR

SELECT EMPNO, LASTNAME,

SALARY

FROM CORPDATA.EMPLOYEE

WHERE WORKDEPT = ’D11’

END-EXEC.

�1��: �� ���.

EXEC SQL

OPEN THISEMP

END-EXEC.

411 ���� �2��: �� ��.

EXEC SQL

WHENEVER NOT FOUND

GO TO CLOSE-THISEMP

END-EXEC.

412 ���� �3��: ��� �� ��� � ��� �

� ���.

...initialize program summation

salary variable

EXEC SQL

FETCH RELATIVE 3 FROM THISEMP

INTO :EMP-NUM, :NAME2,

:JOB-CODE

END-EXEC.

...add the current salary to

program summation salary

...branch back to fetch and

process the next row.

412 ���� �4��: ��� ���� � ��.

...calculate the average

salary

CLOSE-THISEMP.

EXEC SQL

CLOSE THISEMP

END-EXEC.

414 ���� �6��: �� ��.

1��: �� ��:

�� ���� � ���� ��� ����� DECLARE CURSOR�� ������.

410 IBM i: ������ SQL �����

Page 423: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

DECLARE CURSOR�� ���� ��� select�� �����. select�� ���� �� ���� �

��� � �� �����. � ��� ���� ��� �����(FOR UPDATE OF�� ��

��).

EXEC SQLDECLARE cursor-name CURSOR FORSELECT column-1, column-2 ,...

FROM table-name , ...FOR UPDATE OF column-2 ,...

END-EXEC.

���� ��� ���� ��� �����(WHERE�� ����).

EXEC SQLDECLARE cursor-name SCROLL CURSOR FORSELECT column-1, column-2 ,...

FROM table-name ,...WHERE column-1 = expression ...

END-EXEC.

��� � select�� ��� �����. �� � � ���� ��� �� DECLARE CURSOR�

�� select�� � �� �� � ��� ��� � ����.

�� ���(FROM�� �� ���)� � �� �� � �� �� �� �� � ����� FOR

UPDATE OF�� �����. � �� ���� �� �� �� �����. � �� ���

� ���� ORDER BY��� FOR READ ONLY�� ���� , ��� ���� �� SQLCODE

� �����. FOR UPDATE OF�, FOR READ ONLY�, ORDER BY�� ���� � �� ���

� �� ��� ��� ��� �� �� ��� �� , �� ���� � ��� � ����.

�� ���� �� ���� �� ���� � ��� � ����. � SELECT��� � �

� ���� ��� ���. ���� ����� �� �� �� ��� �� �(FETCH� ����)

UPDATE ... WHERE CURRENT OF� ���� �� ��� � ����.

�� ��, �� ���� � �� CORPDATA.EMPLOYEE ���� EMPNO, LASTNAME � WORKDEPT

� �� �����. JOB (CORPDATA.EMPLOYEE ���� � �� �� ��)� ����

� SELECT��� JOB� � �� DECLARE CURSOR�� FOR UPDATE OF JOB ...�

��� ���.

�� ��� � ��� �� �� � �� ��� SQL �� �� ����� DECLARE CURSOR�

������.

2��: �� ��:

�� ���� � ��� ����� OPEN�� ������.

SQL ����� 411

Page 424: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

����� OPEN�� ��� � SQL� �� ����� �� � �� ���� ��, select�� ��

��� ��� �� �� ���� DECLARE CURSOR��� select�� �����. �� �����

�� ��� ���� �� �� �� �� �� �� ��� �� �� �� � ����. OPEN

�� ��� �����.

EXEC SQLOPEN cursor-name

END-EXEC.

3��: �� �� �� � ��� �� ��:

FETCH�� �� ����� ��� �� �� ����� �� FETCH�� ���� ��� �

��� ����.

�� ���� �� ���� ��� ��� � 100� �� SQLCODE �� ������ � ’02000’(�

�� �)� �� SQLSTATE �� �������.

�� �� ��� ����.

...IF SQLCODE =100 GO TO DATA-NOT-FOUND.

��

IF SQLSTATE ='02000' GO TO DATA-NOT-FOUND.

� ��� �� ��� WHENEVER�� ���� ����. WHENEVER NOT FOUND� ����

CLOSE�� ���� ����� �� ��� ��� � ����. WHENEVER�� ��� �����.

EXEC SQLWHENEVER NOT FOUND GO TO symbolic-address

END-EXEC.

����� �� ���� �� ��� ��� ��� ��� � ��� ����� � ��� �� � �

� �� ����� ��� ���.

� ��� �� � ��� �� ��� �� �� FETCH�� ��� � ��� �����. �

� �� ��� ��� ���� � ���. CLOSE�� ��� �� ��� � �� �� �����.

���� ��� �� � ��� �� ��� �� ���� �� �� ���� ��� � ���

�. �� �� ��� ���� �� ���� ���� ��� ���� � ����. ��� �� ��� �

��� � ��� ���.

4��: ��� �� � ��:

� �� ��� ����� ��� ��� ������ FETCH�� ������.

DECLARE CURSOR� �� SELECT�� ��� ����� ��� �� �� �� �����.

�� SQL� FETCH�� ��� � � ����� ����� �� ���� ��� ����.

412 IBM i: ������ SQL �����

Page 425: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

����� FETCH�� ��� � SQL� �� �� ��� �� �� ���� �� ����� �� �

� ����. ��� � �� ��� ����. INTO�� ��� SQL� �� �� ��� �

���� ��� ��� ������. � �� FETCH�� ��� ��� ����.

SQL� ��� �� �� FETCH�� ��� � � �� �� ��� �����(�, ��� �� �� �

��). DELETE�� �� ��� ��� �� �� ��� ���� UPDATE�� ��� ����.

� �� FETCH�� ��� �����.

EXEC SQLFETCH cursor-name

INTO :host variable-1[, :host variable-2] ...END-EXEC.

���� �� FETCH�� ��� �����.

EXEC SQLFETCH RELATIVE integer

FROM cursor-nameINTO :host variable-1[, :host variable-2] ...

END-EXEC.

5a ��: � � ��:

����� ��� �� ���� WHERE CURRENT OF�� � UPDATE�� ���� �� �

�� � ����. WHERE CURRENT OF�� ��� �� ���� ��� �����.

UPDATE ... WHERE CURRENT OF�� ��� �����.

EXEC SQLUPDATE table-name

SET column-1 = value [, column-2 = value] ...WHERE CURRENT OF cursor-name

END-EXEC.

���� ��� UPDATE�� ��� �����.

v ��� �(�� �)� �����.

v ��� �� ���� ��� �����.

v ORDER BY�� ��� ���� � DECLARE CURSOR�� FOR UPDATE OF��� ��

� ���� ���.

�� ��� � �� �� �� FETCH�� ��� � � �� ��� � ��� �����(�, ���

�� �� ��� ��).

5b ��: � � ��:

����� �� �� �� WHERE CURRENT OF�� � DELETE�� ���� �� ���

� ����. WHERE CURRENT OF�� ��� �� ���� ��� �����.

DELETE ... WHERE CURRENT OF�� ��� �����.

SQL ����� 413

Page 426: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

EXEC SQLDELETE FROM table-nameWHERE CURRENT OF cursor-name

END-EXEC.

���� ��� DELETE�� ��� �����.

v ��� �(�� �)� �����.

v WHERE CURRENT OF�� ���� ��� �� ���� ��� �����.

�� ��� ��� FETCH�� ���� �� ��� ��� � � � ��� ���� �� �� ��

��� ��� � ���.

DELETE�� ���� �� �� ��� ���� �� �� ��� � ����. �� � �� ����

��� ���� � � FETCH � DELETE ... WHERE CURRENT OF�� ��� �� ����.

6��: �� �:

� ��� ���� �� ���� �� ��� � �� ��� ����� , ��� � �� CLOSE

�� ���� ��� ����.

���� ��� �����.

EXEC SQLCLOSE cursor-nameEND-EXEC.

�� ���� �� ��� � �� ��� ���� ���� , ���� ��� �� � � ����.

���� ��� �� ���� ��� ���.

v HOLD� � COMMIT� ��� ��� WITH HOLD�� ���� ���� ��

v HOLD� � ROLLBACK� ����

v � � ����

v �� ��� ��� CLOSQLCSR(*ENDACTGRP)� ����� ��

v �� �� � � SQL ����� ��� ����� ����� � CLOSQLCSR(*ENDJOB) �

� CLOSQLCSR(*ENDACTGRP)� ���� ��

v ����� ���� ��� DISCONNECT��� ��

v ����� ���� ��� ���� �� COMMIT� ��

v *RUW CONNECT� ��

� ��� �� �� ��� �� �� �� �� �����, � �� ���� ��� �� �

��� ���� �� ���.

414 IBM i: ������ SQL �����

Page 427: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� � FETCH� ��

� � FETCH�� ���� � FETCH��� ����� ��� � �� �� � ����. ��

��� FETCH�� �� � �� � ���� �����(OVRDBF(������ � ��) ��� ��

� �).

� �� ��� �� ��� � �� � � �� 32 767���. ���� ��� ��� � ���

�� �����.

�� �� ���� ���� ���� ��� �����. �� ��� �� � ��� ��

��� �� ����. �� � REXX� ��� �� �� ��� SQL ������ ���

� �� ��� ��� � ����. �� ��� � � FETCH�� ���� ������� ��

���� �� ��� � ����. ���� ��� � ��� ��� ���� ��� �����

��� ���.

� � FETCH�� � ��� ���� �� � �� ��� � ����. � � FETCH� �� ��

��, � � �� ���� �� ���� ��� ��� �����. FETCH�� �� � �� ��

���� ���� ���� ���� ����.

��� � � FETCH ���� SQLCA� �� ����� ��� �����. SQLCODE � SQLSTATE

� ���, SQLERRD� �� ��� �����.

v SQLERRD3�� � � FETCH�� �� � � �� ����. SQLERRD3� �� � ���

�� �� �� ��� � ��� �� ����.

v SQLERRD4�� ��� � �� ��� ����.

v SQLERRD5�� ����� ��� �� ������ ���� �� ����. ��� ����� �

� ���� � � ���� ����� ��� � ��� ���� �� �����. ����� ��

���� ��� SQLCODE +100� ��� � � �� ���� ��� � ��� ���� ���.

�� ��

�� SQL �����

��� �� ��� �� �� � FETCH:

��� �� �� � � � FETCH�� ����� ������ SQL�� ��� � �� ���

�� �� ���� ���.

� ���� ��� �� �� ���� �� �� �� �� � ��� ����. ��� �� �� �

� ��� ����� �� ���� ���� �� � �(�: COBOL COPY ���)� ����

��� � ����.

��� �� �� �� �� �����. � ��� �� ���� � �� ����. �� � �

��� � � �� �� , �� � ��� � �� ����. SQL� ��� �� ��

��� �� ��� �� �� �� � ��� ��� �����. ��� ����� ��� �� �

� ���� ��� ��� ��� � ��� ��� ���.

SQL ����� 415

Page 428: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� COBOL ��� �� ����.

�: � ��� ���� 528 ���� �� ���� � ���� ��� ��� ���� ����.

EXEC SQL INCLUDE SQLCAEND-EXEC.

...

01 TABLE-1.02 DEPT OCCURS 10 TIMES.

05 EMPNO PIC X(6).05 LASTNAME.

49 LASTNAME-LEN PIC S9(4) BINARY.49 LASTNAME-TEXT PIC X(15).

05 WORKDEPT PIC X(3).05 JOB PIC X(8).

01 TABLE-2.02 IND-ARRAY OCCURS 10 TIMES.

05 INDS PIC S9(4) BINARY OCCURS 4 TIMES.

...EXEC SQLDECLARE D11 CURSOR FORSELECT EMPNO, LASTNAME, WORKDEPT, JOBFROM CORPDATA.EMPLOYEEWHERE WORKDEPT = "D11"

END-EXEC.

...

EXEC SQLOPEN D11END-EXEC.PERFORM FETCH-PARA UNTIL SQLCODE NOT EQUAL TO ZERO.

ALL-DONE.EXEC SQL CLOSE D11 END-EXEC.

...

FETCH-PARA.EXEC SQL WHENEVER NOT FOUND GO TO ALL-DONE END-EXEC.

EXEC SQL FETCH D11 FOR 10 ROWS INTO :DEPT :IND-ARRAYEND-EXEC.

...

� ����, WORKDEPT � ‘D11’� �� �� �� ��� �� CORPDATA.EMPLOYEE ���

� �� ��� �������. �� ����� 8�� �� ����. DECLARE CURSOR � OPEN�

� � � FETCH�� � ��� � ��� ��� ���. �� ��� �� � �� ���� �

� FETCH�� ���� �� �� !� ��� � ����. � � FETCH�� ���� �� ����

�� �� ����. FETCH ��, �� ��� � ��� �� �����.

��� �� � DEPT � �� ���� � IND-ARRAY� ������� �����. �

� ��� 10���. ���� �� �� ����� �� ��� ��� �����.

416 IBM i: ������ SQL �����

Page 429: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

DEPT ��� �� � � ��� �� � �� ��� ��� � ����.

� � FETCH�� �� ��� �� ��� � 8�� �� �� ���� ����. ���

� � IND_ARRAY�� �� �� �� � �� 0� ���. ��� ���� ��� �����.

������ ���� SQLCA�� �� ��� ����.

v SQLCODE� 0� ���.

v SQLSTATE� ‘00000’� ���.

v SQLERRD3� 8(�� � �)� ���.

v SQLERRD4�� 34(� �� ��)� ���.

v SQLERRD5�� �� ���� ��� �� ��� ��� ���� +100� ���.

�� ��

SQLCA(SQL �� �)

� �� ��� ��� �� � FETCH:

� �� �� � � � FETCH�� ����� �� ������ � �� � � �� � �

� ���� ���.

� �� �� ������ �� ��� �����. � �� ��� � � FETCH�� ���

���. � �� �� � � FETCH��� �� �� �� ����� ��� ���� �� ��

��� � � ����.

�� �� SQLTYPE � SQLLEN� �� SQLDA� � � FETCH� � �� � ��� �

��� �� ��� �� �����. ��� ���� ��� �������� � �� ���� �

�� ��� �����. ��� ����� ��� �� ��� � � ��� ��� ���.

�� PL/I ��� �� ����.

�: � ��� ���� 528 ���� �� ���� � ���� ��� ��� ���� ����.

*....+....1....+....2....+....3....+....4....+....5....+....6....+....7...*EXEC SQL INCLUDE SQLCA;EXEC SQL INCLUDE SQLDA;

...

DCL DEPTPTR PTR;DCL 1 DEPT(20) BASED(DEPTPTR),

3 EMPNO CHAR(6),3 LASTNAME CHAR(15) VARYING,3 WORKDEPT CHAR(3),3 JOB CHAR(8);

DCL I BIN(31) FIXED;DEC J BIN(31) FIXED;DCL ROWAREA CHAR(2000);

...

SQL ����� 417

Page 430: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

ALLOCATE SQLDA SET(SQLDAPTR);EXEC SQLDECLARE D11 CURSOR FORSELECT EMPNO, LASTNAME, WORKDEPT, JOBFROM CORPDATA.EMPLOYEEWHERE WORKDEPT = 'D11';

...

EXEC SQLOPEN D11;

/* SET UP THE DESCRIPTOR FOR THE MULTIPLE-ROW FETCH *//* 4 COLUMNS ARE BEING FETCHED */SQLD = 4;SQLN = 4;SQLDABC = 366;SQLTYPE(1) = 452; /* FIXED LENGTH CHARACTER - */

/* NOT NULLABLE */SQLLEN(1) = 6;SQLTYPE(2) = 456; /*VARYING LENGTH CHARACTER */

/* NOT NULLABLE */SQLLEN(2) = 15;SQLTYPE(3) = 452; /* FIXED LENGTH CHARACTER - */SQLLEN(3) = 3;SQLTYPE(4) = 452; /* FIXED LENGTH CHARACTER - */

/* NOT NULLABLE */SQLLEN(4) = 8;/*ISSUE THE MULTIPLE-ROW FETCH STATEMENT TO RETRIEVE*//*THE DATA INTO THE DEPT ROW STORAGE AREA *//*USE A HOST VARIABLE TO CONTAIN THE COUNT OF *//*ROWS TO BE RETURNED ON THE MULTIPLE-ROW FETCH */

J = 20; /*REQUESTS 20 ROWS ON THE FETCH */...EXEC SQLWHENEVER NOT FOUNDGOTO FINISHED;

EXEC SQLWHENEVER SQLERRORGOTO FINISHED;

EXEC SQLFETCH D11 FOR :J ROWSUSING DESCRIPTOR :SQLDA INTO :ROWAREA;

/* ADDRESS THE ROWS RETURNED */DEPTPTR = ADDR(ROWAREA);/*PROCESS EACH ROW RETURNED IN THE ROW STORAGE *//*AREA BASED ON THE COUNT OF RECORDS RETURNED *//*IN SQLERRD3. */DO I = 1 TO SQLERRD(3);IF EMPNO(I) = '000170' THENDO;:END;

END;IF SQLERRD(5) = 100 THEN

418 IBM i: ������ SQL �����

Page 431: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

DO;/* PROCESS END OF FILE */

END;FINISHED:

� ����, WORKDEPT � ‘D11’� �� �� �� ��� �� CORPDATA.EMPLOYEE ���

� �� ��� �������. ���� �� EMPLOYEE ���� �� ���� � ��

��� �����. DECLARE CURSOR � OPEN�� � � FETCH�� � ��� � ��� ��

� ���. �� ��� �� � �� ���� �� FETCH�� ���� �� �� !� ��� �

����. � � FETCH�� ���� �� ���� �� �� ����. FETCH ��, �� ���

��� � �� �����.

� �(ROWAREA)� �� �� �����. �� ���� ���� ��� ��� �����. � ��

��, � ��� ROWAREA ��� ����. ���� �� �� � ��� ��� � �� DEPT

� � �����.

��� �� ��� ��(�� � ��)� � � ����. � ���� �� ���� �

���.

FETCH�� �� � ROWAREA�� ‘D11’� �� �� �(� 11�� �)� ���. ���

��� ���� SQLCA�� ��� ���.

v SQLCODE� 0� ���.

v SQLSTATE� ‘00000’� ���.

v SQLERRD3� 11(���� � �)� ���.

v SQLERRD4�� �� � ��� �� 34� ���.

v SQLERRD5�� �� ����� ��� �� ������ ���� +100� ���.

� ����, ������ ���� �� � �� SQLERRD5� �� ��� ������. �

���, ������ � �� �� ��� �� �� SQL� ���� ��� ���. ��� �� �

�� ����, ��� �� � SQL� ���� ���. ��� �� �� ��� *RR� �� ��

�� � �� �����.

�� ��

498 ���� �i� DB2 ����

�� ���� SQL ����� � SQL �� �� ����� ����� �����.

SQLDA(SQL �� �)

� �� � �� ��

����� � ��� ��� � ���� ��� ���� ����� �� ���� ���.

COMMIT �� ROLLBACK��� HOLD� ���� �� �� � ��� SQL� �� ����

���. WITH HOLD�� �� ��� COMMIT�� ���� �� ����. � ��� ROLLBACK

�� ���� ���(DECLARE CURSOR�� �� WITH HOLD�� ���).

SQL ����� 419

Page 432: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

COMMIT �� ROLLBACK �� �� �� ���� ��� ����� COMMIT HOLD ��

ROLLBACK HOLD� ���� ���. HOLD� ��� � ��� � ��� ��� �� �

�� ����� ��� ��� � ����. COMMIT���� �� ��� �������. ROLLBACK

���, �� ��� �� � ���� � ��� � �� ���� �����. �� �� �� �

� �����.

HOLD � COMMIT �� ROLLBACK�� ���� �� �� ��� �� ��� ���. ��

� �� � ��� �� ���� � � ��� ��� �����.

�: CRTSQLxxx(SQL ��) ���� ALWBLK(*ALLREAD) ���� ���� �� �� ��� ��

�� �� ��� �� � ����. xxx ���� ALWBLK ���� �� �� �� ��� ��

�� ��� ���� �� SQL ������� ������.

�� ��

�� ��

�� SQL ����

� SQL� ���� ������ ���� ��� � SQL�� ��� ��� � ����. � SQL�

���� ������ ���� SQL�� � ��� �� ���� ���� SQL�� ����. �

����� SQL�� ��� � ��� ���.

������ ��� �����.

v SQL�� ���� � ��� ����.

v SQL�� ���� �� ����.

v ���� �����.

v SQL �� �� �����.

�:

v � SQL ���� ��� � SQL ���� � �� ���� �� � ����. ���� �

�� � ��� ����� �� �����. �� , ���� ���� �� ������� �

� ��� �� , � � ���� ���. �� �� �� ���� ��� ��

, ���� � ��� �������� ������ �� � ��� �� �� � ���

�. �� ��� i� DB2 ������� � SQL�� �� �� ��� ��� � ����. �

������ ��� �� QSQPRCED(�� � �� � SQL) API� �� �� �

��� ��� �� �����. � ��� � ������ �� SQL� �� ���

�� ����� �� � ��� ��� ���� � � ����.

v EXECUTE �� EXECUTE IMMEDIATE�� � FOR READ ONLY�� ���� ��� �

� ���� �� ����� ��� � �� ���� ����� ��� � �����.

420 IBM i: ������ SQL �����

Page 433: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

ALWBLK(*ALLREAD) CRTSQLxxx ���� ���� FOR UPDATE OF� ���� ���

��� ���� �� �� �� ��� �� ��� �� ��� �� FOR READ ONLY ���

����. � FOR READ ONLY� �� ��� � ����� � ��� !� �� �

��.

� � SQL���� � ��� ���� ���. RPG/400 ������� � �� ��� ��

PL/I, COBOL, C �� ILE RPG ����� ��� �����.

�� ��

438 ���� ���� SQL ���

��� SQL� ���� ����� �� ������ ���� ���, �� �� � ������ ��

��� �� ��� ���� ��, �� �� ����� � � ����.

�� ��

SQL��� ���� ��

�� � �� � SQL(QSQPRCED) API

419 ���� �� �� � � ���

����� � ��� ��� � ���� ��� ���� ����� �� ���� ���.

�� SQL ���� � � ��

� SQL�� ����� EXECUTE��� EXECUTE IMMEDIATE�� � ��� ���� ���.

� SQL�� ���� ��� ����� ��� �����.

EXECUTE IMMEDIATE�� ���� SQL�� �� ���� ��� � ��� �����.

��� � � SQL� ��� ����. SELECT�� SELECT� �� ������. SELECT� �

� ������ DELETE, INSERT � UPDATE� �� ���� ����.

ODBC(�� ������ ���)� �� ����� ���� �����/�� ������ ��

� SQL� ���� ������� � ����.

�� ��

Windows� System i Access: �����

�� SQL�� CCSID

SQL�� �� ��� �����. ��� ��� �� �� � ID(CCSID)� ��� ���� CCSID�

�����.

� SQL�� ��� ���� CCSID� ���� �����. �� ��� ��� ��� ���. �� �

�, CCSID 500�� ’BA’X� not ��(¬)� �����. �� ��� ���� CCSID� 500 SQL�

not ��(¬)� ’BA’X ��� �� �� ����� �� �����.

��� ��� CCSID� 65535��, SQL� ��� ��� CCSID� 37 ��� � ��� �����. �

� SQL� ’5F’X�� not ��(¬)� ���� �� �����.

SQL ����� 421

Page 434: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

SELECT � ��� ��

� SQL� SELECT� �� ���� ��� ��, � SQL�� ��� ��� � ��� � �� �

��.

� SQL� SELECT� �� ���� ����� ��� ������.

1. EXECUTE IMMEDIATE� ���� SQL�� ����� SQL�� PREPARE� � � ����

EXECUTE����.

2. ��� �� � �� SQL �� �� �����.

��� � SQL� SELECT� �� ���� ���� �����(stmtstrg)� �����.

EXEC SQLEXECUTE IMMEDIATE :stmtstrg;

�� ��

438 ���� ���� SQL ���

��� SQL� ���� ����� �� ������ ���� ���, �� �� � ������ ��

��� �� ��� ���� ��, �� �� ����� � � ����.

PREPARE � EXECUTE� ��:

SELECT� �� ���� ��� ��� �� �� � ���� EXECUTE IMMEDIATE��

���� ��� ��� � ����. �� SELECT� �� ���� ��� ��� ��� PREPARE

� EXECUTE�� ���� ���� ���.

PREPARE�� SELECT� �� ���(�: DELETE�)� �� ���� ��� ��� �� ��

���. DLYPRP(*YES)� CRTSQLxxx ��� ���� , USING�� PREPARE�� ���� ��

� EXECUTE �� DESCRIBE��� ���� �� ��� � � �� �����. ���� ���

��� ��� �� �� ���� �� ������ � � ��� � ����. �� ��� � �

���� � ���� ����.

DSTRING = 'DELETE FROM CORPDATA.EMPLOYEE WHERE EMPNO = ?';

/*The ? is a parameter marker which denotesthat this value is a host variable that isto be substituted each time the statement is run.*/

EXEC SQL PREPARE S1 FROM :DSTRING;

/*DSTRING is the delete statement that the PREPARE statement isnaming S1.*/

DO UNTIL (EMP =0);/*The application program reads a value for EMP from thedisplay station.*/EXEC SQLEXECUTE S1 USING :EMP;

END;

422 IBM i: ������ SQL �����

Page 435: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� ��� ��� ���, ���� ��� ��� ��� ��� ��� ��� ���. �� ���

� ���� ��� ��� ���� �� � ���� �����.

�: ����� ��� ���� �� � ���� ����� ��� ��� ��� ��� �$��

�. ��� CONNECT(�� 1)�, DISCONNECT� �� �� �� COMMIT� �� ��

RELEASE� �� �����.

SELECT� �� � �� ��

SELECT�� � ��� � ���� �� ������.

� ��� SELECT�� ����� SQL ��� �� ���.

�� ��� SELECT�� ����� �� SQL �� �(SQLDA) ��� ����� SQLDA� �

(ALLOCATE)�� ���. SQL �� ��� � � ���� ����� ������ SQL� ���

�� �� �� ��� SQL��� �� �� ��� � ����. �� PREPARE �� DESCRIBE��

� SELECT ��� ��� �� ��� ��� � ����.

�� ��� SELECT�:

� SQL��, � �� SELECT�� �� � �� �� � ��� ���� ����. � ����

��� �, SQL �� �(SQLDA)� ���� ��� ��� ��� ��� ���� � ��

��� � ����.

��� �� FETCH� ���� �� ��� �� �����, � �� ��� FETCH� �� �� �

� �� ��� ��� ����. SQL ������ � �� ���� ��� ��� ��� �

����.

SQL �� ����� ������ � ��� � SELECT�� ��� � ����.

� ��� SELECT�� ��� ����� ������ ��� ���� ���.

1. ��� ��� �� SQL�� �����.

2. PREPARE�� ���� � SQL�� ���� �� ��� � �� ���� �����.

DLYPRP(*YES)� CRTSQLxxx ��� ���� , USING�� PREPARE�� ���� ���

EXECUTE �� DESCRIBE��� ���� �� ��� � � �� �����.

3. ��� �� �� ��� �����.

4. ��� "��.

5. ��� � ���� �� FETCH���(�� ��� SELECT�� ��� �� �� �� ���

FETCH�� � ).

6. ��� �� ���� ��� ���.

7. ��� SQL �� �� �����.

�� �� ��� ����.

SQL ����� 423

Page 436: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

MOVE 'SELECT EMPNO, LASTNAME FROM CORPDATA.EMPLOYEE WHERE EMPNO>?'TO DSTRING.EXEC SQLPREPARE S2 FROM :DSTRING END-EXEC.

EXEC SQLDECLARE C2 CURSOR FOR S2 END-EXEC.

EXEC SQLOPEN C2 USING :EMP END-EXEC.

PERFORM FETCH-ROW UNTIL SQLCODE NOT=0.

EXEC SQLCLOSE C2 END-EXEC.STOP-RUN.FETCH-ROW.EXEC SQLFETCH C2 INTO :EMP, :EMPNAME END-EXEC.

�: � � SELECT�� �� ��� �� � ��� SELECT�� �� �� � ��� ���

��� �����, SQL �� �� ���� ��� ���.

� ��� SELECT�:

� SQL��� �� � �� ��� �� � � �, ��� ��� �� ��� ��� ��

�� ��� SELECT�� �����.

��� ���� �� � ��� � ��� �� ��� ��� ��� � ���.

�: REXX��� 5.b, 6 � 7��� �� � ���. REXX� SQLDA ��� ���� �� SQL

��� �����. ��� � SQL ��� ���� ����.

������ �� ��� SELECT�� � �� , ������ ��� ���� ���.

1. ��� ��� �� SQL�� �����.

2. PREPARE�� ���� � SQL�� ���� �� ��� � �� ���� �����.

DLYPRP(*YES)� CRTSQLxxx ��� ���� , USING�� PREPARE�� ���� ���

EXECUTE �� DESCRIBE��� ���� �� ��� � � �� �����.

3. ��� �� �� ��� �����.

4. � SELEC�� �� �� ��(3���� ���)� "��.

5. � SQL ��� , ALLOCATE DESCRIPTOR�� ���� ��� ��� �����.

6. DESCRIBE�� ���� SQL��� �� ���� � � ��� �� �� ��� �����.

�:

a. �� INTO�� ���� PREPARE�� ���� � ��� ���� PREPARE �

DESCRIBE� ��� ��� � ����.

424 IBM i: ������ SQL �����

Page 437: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

b. SQLDA� �� � SQLDA� � � � �� ��� ��� ����, ��

��� ��� �� �� ��� � �� ��� �� ���� ��� � SQLDA�

�� � DESCRIBE�� ����� ���.

� SQL ��� �� � ��� ����, ��� ���� �� ��� �

� � DESCRIBE�� �������.

7. SQLDA ��� , � ��� �� �� � ��� ��� �� ����.

8. SQLDA ��� , � ���� � ��� ��� ��� SQL� �� � ��� SQLDA�

��� ��� �����.

9. �� FETCH���.

10. SQL ���� �� ���� �����.

11. ��� �� � �� SQL �� �� �����.

12. ��� �� ���� ��� ���.

13. � SQL ��� , DEALLOCATE DESCRIPTOR�� ���� ��� �����.

�� ��

429 ���� ��: SQLDA� ���� ��� �� SELECT��

������ ��� ���� �� ���� ��� � SELECT�� ���� �� �����.

� ���� � ���� ���, �� ������� �����, ������ �� ��� �

� � ����.

SQL �� ��:

� SQL� SQL �� �� ���� SQL� ����� �� SQL�� �� ��� �����.

��� DESCRIBE, DESCRIBE INPUT � DESCRIBE TABLE�� ���� � ���� PREPARE,

OPEN, FETCH, CALL � EXECUTE���� ��� � ����.

���� ��� ��� ��� �� ����. PREPARE � DESCRIBE�� ��� � ����

�� ��� ����� ����� �����. DESCRIBE INPUT�� SQL �� �� � ��

�� ��� ��� �� ��� ����� ����� �����. DESCRIBE TABLE�� ���

��� �� �� � �� ��� ����� ����� �����. OPEN, EXECUTE, CALL �

FETCH�� ��� ��� ��� �� ��� �����. �� ��, DESCRIBE�� ���� ��

� �� � ��� ��� ����� ��� ��� �� �� � FETCH��� �� ��� �

��� � ����.

������ � �� ��� ��� � ��� ���� , � �� ��(��� � SELECT�

� �� ���)� ��� � ����.

�� ��� ��� ����. ��� ALLOCATE DESCRIPTOR�� ���� �����. �� �

�� SQLDA ��� ���� �����.

SQL ����� 425

Page 438: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

ALLOCATE DESCRIPTOR� REXX�� ���� ����. SQLDA� C, C++, COBOL, PL/I, REXX

� RPG�� ��� � ����. RPG/400� �� �� � �� ��� ���� �� ��� PL/I,

C, C++, COBOL �� ILE RPG ������ RPG/400 ���� ��� SQLDA� ��� ���. �

� � ����� RPG/400 ����� ���� ���.

�� ��

SQLCA(SQL �� �)

SQLDA(SQL �� �)

SQLDA ��:

SQL �� �(SQLDA)� ���� SQLVAR��� 6� �� �� ��� � � ���� 4� �

�� ���� ����.

�: REXX��� SQLDA� ����.

SQLDA� OPEN, FETCH, CALL � EXECUTE�� ���� , ��� SQLVAR �� ��� �

�� ����.

SQLDA �� ��� ����.

SQLDAID

SQLDAID� ��� ��� �� ‘eyecatcher’� �����. SQLDA� PREPARE ��

DESCRIBE��� �� � 'SQLDA' �� �� 8� ������. � ��� FETCH, OPEN,

CALL �� EXECUTE�� ���� ����.

��� 7� ���� � � � ��� SQLVAR ��� ���� ��� ��� � ����.

LOB �� �� �� � �� �� � �� SQLVAR ��� ��� � ����. LOB �

� �� ��� � � ��� ���� ����.

REXX��� SQLDAID� �� � ���.

SQLDABC

SQLDABC� SQLDA� ��� ����. �� SQLDA� PREPARE �� DESCRIBE���

�� � SQLN*LENGTH(SQLVAR) + 16 �� �� 4��� �����. SQLDABC� FETCH,

OPEN, CAL �� EXECUTE�� ���� �� SQLN*LENGTH(SQLVAR) + 16 ��� ��

��� ���.

REXX��� SQLABC� �� � ���.

SQLN SQLN� SQLVAR � � ��� ���� 2��� �����. SQL��� ���� �� 0 �

�� ��� ��� ���.

SQLN� REXX�� �� � ���.

SQLD SQLD� SQLVAR � �� �, SQLDA� ��� ��� �� �� �� ���� 2���

�����. � �� DESCRIBE �� PREPARE��� SQL� ����. �� ������ �

��� �� 0 ��� SQLN �� ��� ��� ���.

426 IBM i: ������ SQL �����

Page 439: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

SQLVAR

� � ��� � ��� �� �� � �� � � ����. �� �� DESCRIBE ��

PREPARE��� SQL� ����. �� ������ ���� �� ��� ���. �� �

�� ��� �� �����.

SQLTYPE

SQLTYPE� ��� �� �� � ��� ��� ���� 2��� �����. ��� �

��� SQLTYPE � SQLLEN� ������. SQLTYPE �� ���� ��� ���

SQLIND� �� �� �� ���� ��� ��� ����.

SQLLEN

SQLLEN� ��� �� �� � �� ��� ���� 2��� �����.

SQLRES

SQLRES� � � ��� �� 12��� ����. i5/OS��� �� �

4� �� ��� � ������.

REXX��� SQLRES� �� � ���.

SQLDATA

SQLDATA� SQLDA� OPEN, FETCH, CALL � EXECUTE�� ���� ��

� ��� ��� ���� 16��� � �����.

SQLDA� PREPARE � DESCRIBE�� ���� � �� �� ��� ����

���.

�� �� ��� �� CCSID� SQLDATA� � � � � ���� �����.

BIT ���� , CCSID� 65535���. REXX��� CCSID� SQLCCSID ��� �

����.

SQLIND

SQLIND� SQLDA� OPEN, FETCH, CALL � EXECUTE�� ���� � ��

�� ��� �� ���� �� �� ��� ��� ��� ���� 16��� ���

�. �� �� �� �� �� �� �� �� ��� ����. SQLTYPE� �� �

� �� � �� �����.

SQLDA� PREPARE � DESCRIBE�� ���� � �� �� ��� �� ��

���.

SQLNAME

SQLNAME� � ��� 30 �� �� �� �����. PREPARE �� DESCRIBE

��� � ��� � � �, ��� �� ��� �� ���. OPEN,

FETCH, EXECUTE �� CALL��� � ��� ���� �� ���� CCSID� ��

� � ����. �� � ��� ��� ��� �� CCSID� ��� � ����.

SQL ����� 427

Page 440: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

CCSID� ����� �� SQLDA� SQLVAR � ���� SQLNAME �� ��

� ����. � �� CCSID ��� ��� SQLDATA �� SQLNAME� CCSID �

� ������.

�: SQLNAME �� �� CCSID ��� �� ��� ��� �� ����. ���

�� ���� ������ CCSID ��� ���� ��� ���. CCSID� ��

�� ���, � � ��� CCSID� �����.

��� ��� ��� ��� �� � CCSID� �� 2��� CCSID���. �� 2

��� CCSID� ��, 65535� �����.

SQLVAR2

3�� �� �� �� SQLVAR �����. �� SQLVAR� ��� �� �� �� LOB

� ��� �� � �����. �� ��� , �� �� �� ���. LOB

� , ��� ��� �� ��� �� ��� �� �� ���. LOB� ���

� �� ���� ���� , �� ��� ���� ����. �� SQLVAR � ���

SQLDA� �� ���� � �� ���� ��� ��� �� ����. SQLDAID

� ��� 7� �� ��� SQLVAR � �� ����.

SQLD� ��� SQLVAR � ��� ��� �� :

v SQLD� �� �� ��� SQLVAR � � ��� ����.

v � SQLVAR ��� �� �� ��� ���� ��� SQLCA� SQLCODE ��� +237

� �����. � SQLVAR ��� ����� �� SQLVAR� ���� ����.

v � SQLVAR ��� ���� SQLVAR� ��� ���� ��� SQLCA� SQLCODE �

�� +239 � �����. SQLVAR ��� ���� ����.

SQLLONGLEN

SQLLONGLEN� LOB(BLOB, CLOB �� DBCLOB) ��� �� �� � �� ��

� ���� 4��� �� �����.

SQLDATALEN

SQLDATALEN� ��� �� ��� ��� ���� 16��� � �����. � �

�� LOB(BLOB, CLOB � DBCLOB) ��� ���� �����. DESCRIBE ��

PREPARE�� ���� ����.

� �� NULL , ���� �� ��� ��� �� ��� 4���� ���

SQLDATA� � ��� � � ���� �����. ��� BLOB �� CLOB�

��� ��, DBCLOB� �� �� ����.

� �� NULL� �� , ��� � SQLVAR� SQLDATA �� ���� �

�� �� ���� ��� ��� �� ��(DBCLOB� � ����)� �� 4�

�� ��� ��� ���� �� ���.

428 IBM i: ������ SQL �����

Page 441: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

SQLDATATYPE_NAME

SQLDATATYPE_NAME� � ��� 30 �� �� �� �����. DESCRIBE �

� PREPARE�� �����. � ��� �� ��� ����.

v �� �� � , ������ ���� �� ��� �� �� ��� ����.

�� �� 30���� ��� � ��.

v ���� , ������ ���� �� ���� �� 20���� ����.

v �� , ������ ���� �� ��� ����.

�� ���

REXX ������� SQL� ��

�� ��

��: SQLDA� ���� ��� �� SELECT��

������ ��� ���� �� ���� ��� � SELECT�� ���� �� �����.

� ���� � ���� ���, �� ������� �����, ������ �� ��� �

� � ����.

: SQLDA� ����� ��� �� SELECT�:

������ ��� ���� �� ���� ��� � SELECT�� ���� �� �����. �

���� � ���� ���, �� ������� �����, ������ �� ��� �� �

����.

�, ���� � � ���� ���� �� ��� �� ���. ������ �� � � � ���

��� �� �� ��� ��� �� � ���� ���.

�� �� �� ���� ���� ���.

SELECT WORKDEPT, PHONENOFROM CORPDATA.EMPLOYEEWHERE LASTNAME = 'PARKER'

�: � SELECT��� INTO�� ���. � SELECT��� ��� �� ���� �� INTO�

� �����.

���� ��� ��� ����. ��� ��(� DSTRING)� � �� PREPARE�� ���

� �����.

EXEC SQLPREPARE S1 FROM :DSTRING;

����, �� �� � ��� ��� ���� ���. �� ����� SQLDA� �����.

SQL ����� 429

Page 442: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

SQLDA ��� � � ��� ��� ���� ��� ����. (��� �� REXX�� ��

�� ����.) ��� �� ��� ��� �� ����. SQLDA� 16��� ��� ��� ��

�. SQLDA� ��� 16��� � �� ��� �����. �� ��� �� �� � ��(SQLVAR)

� � � �� ��� 80������.

��� �� ���� �� SQLVAR ��� ���� �� �� �� �� ����. ���� �

�� � �� ��� SQLVAR � ��� ��� ���. ���, SELECT�� ��� ��

�� ���� ��� �� SQLVAR � �� �� �����. � SELECT�� ��� � �����,

� �� �� ��� � � ���. ��, ���� �� ��� ���. � ����, � SELECT

�� �� 20� � � �� ��� ��� �����. � SQLVAR �� ��� � ���

� �� ��� ��� SQLVAR� ��� ��� ��� 20��� ���. �� � SQLDA �� 20

x 80 �� 1600� 16� ��� � 1616���� ���.

SQLDA� ��� �� ��� �� �� �� , SQLDA� SQLN �� SQLVAR � ��

�(� 20)� ���� ��� ���.

���� �� �� ��� �� DESCRIBE�� ��� � ����.

EXEC SQLDESCRIBE S1 INTO :SQLDA;

DESCRIBE�� ��� � SQL� ���� � ���� �� ��� ���� �� SQLD� �����

�. �� � DESCRIBE� �� ��� SQLDA ��� ����. � ����� ���� ���

����.

87. SQLDA ��

�� �

SQLAID ’SQLDA’

SQLDABC 1616

SQLN 20

SQLD 2

SQLDAID� DESCRIBE� ��� � SQL� ��� ID ����. SQLDABC� SQLDA� ��� �

� �� ����. SQLDA �� ���� SQLVAR ��� � ����(��� SELECT�� �

� ���� �� � � �� ���).

88. SQLVAR �� 1

�� �

SQLTYPE 453

SQLLEN 3

SQLDATA (3:4) 37

SQLNAME 8 WORKDEPT

430 IBM i: ������ SQL �����

Page 443: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

89. SQLVAR �� 2

�� �

SQLTYPE 453

SQLLEN 4

SQLDATA(3:4) 37

SQLNAME 7 PHONENO

SQLDA� � SQLVAR ��� ��� ��� � �� ����� SQLN �� ��� �

�� ����. �� ��, � � 20� �� SELECT�� ��� 27� ���� �����. SQL

� � � ���� �� � ���. SQLVAR� � ��� ���� ��� �� ��� ���

�� �����. ��, SQL� SQLD� SELECT�� �� �� �� �� ��� ���� ��

���. ��� DESCRIBE ��� SQLN �� SQLD �� ��� ���. SQLD� �� SQLN ���

� , ��� �� SQLD� �� �� � � SQLDA� �� � �� DESCRIBE� ������.

EXEC SQLDESCRIBE S1 INTO :SQLDA;

IF SQLN <= SQLD THENDO;

/*Allocate a larger SQLDA using the value of SQLD.*//*Reset SQLN to the larger value.*/

EXEC SQLDESCRIBE S1 INTO :SQLDA;

END;

SELECT� �� ���� DESCRIBE� ���� SQL� SQLD� 0�� ����. ��� ���

�� SELECT � SELECT� �� ��� � �� ����� ��� SELECT� � ��� ��

� �� ��� � ���� �� � ����. � ��� SELECT�� ����� ������.

SQLD �� ��� ����.

����� �� �� DESCRIBE�� �� SQLVAR ��� ���� ���. � ����� � �

��� WORKDEPT���. SQLTYPE ���, DESCRIBE� ��� ��� �� �� � � �

� ��� �����.

� ����, SQL� SQLVAR �� 1�� SQLTYPE� 453�� ����. �� WORKDEPT� �

�� �� ��� �� � �� �� ���� �����.

SQL� SQLLEN� ��� ����. WORKDEPT� ��� ��� CHAR���, SQL� SQLLEN

� �� � ��� ��� ����. WORKDEPT� ��� 3���. ��� SELECT�� �

� ���� ��� �� CHAR(3) ���� ����� ����� �� ���.

WORKDEPT� ��� ��� CHAR FOR SBCS DATA���, SQLDATA� �� 4���� �� �

CCSID� ������.

SQL ����� 431

Page 444: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

SQLVAR ���� ��� �� SQLNAME�� �� �� �� �� ������. SQLNAME� �

� 2����� �� ���� ��� ����. �� ��� ��� �� SELECT�� ���� �

����(� WORKDEPT). �� �� ��� �(�: SUM(SALARY)), ��(�: A+B-C) � �

�� �� ���� �� � ��� �����. �� SQLNAME� � ������. SQLNAME

� �� �� ���� � �� ����. PREPARE � DESCRIBE�� ���� ��� ��

� USING����. ��� �� ��� � ����.

EXEC SQLDESCRIBE S1 INTO:SQLDA

USING LABELS;

��� ����

NAMES(�� USING ���� ���� �)

�� SQLNAME �� �����.

SYSTEM NAMES

��� �� SQLNAME �� �����.

LABELS

SQL�� � � ���� ���� ��� �����.

ANY ���� ���� ���� � SQLNAME �� �����. ��� �� �� ��

���.

BOTH

� � ��� � ��� ��� �� �����. �� �� �� ��� SQLVAR

�� �� �� �� ���.

ALL �, ��� � ��� �� ��� ��� �� �����. SQLVAR � ��

�� ����.

� ����, � SQLVAR ���� select�� �� � � �� ��(PHONENO)� �

��. SQLTYPE� 453 �� PHONENO� CHAR �� �����. SQLLEN� 4� ����.

�� SELECT�� ��� � SQLDA� ���� �� ���� ��� ���.

DESCRIBE ��� ��� �, SELECT�� ��� � ��� �� ���� �� � ����.

WORKDEPT� , �� 3� �� �� ��� ���. PHONENO� �� �� 4� �� �

� ��� ���. � �� ��� � ��� � � ����, � �� ���� ���� ���

��� ���.

���� ���, SQLDATA � SQLIND� � ��� �� ����� ��� ���.

SQLVAR �� ����, SQLDATA� �� �� �� ��� �����. SQLIND� � ���� �

� �� ��� �����. �� � �� �� ��� �����. � ����� ���� ��� �

���.

432 IBM i: ������ SQL �����

Page 445: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

90. SQLDA ��

�� �

SQLAID ’SQLDA’

SQLDABC 1616

SQLN 20

SQLD 2

91. SQLVAR �� 1

�� �

SQLTYPE 453

SQLLEN 3

SQLDATA CHAR(3) ��� �� �� �

SQLIND �� � �� 2��� �� ����� �

92. SQLVAR �� 2

�� �

SQLTYPE 453

SQLLEN 4

SQLDATA CHAR(4) ��� �� �� �

SQLIND �� � �� 2��� �� ����� �

��, SELECT� ��� �� �� �������. ��� �� SELECT��� INTO�� ��

���. ��� ��� �� �� SELECT�� ��� ���� ���. ��� �� SELECT��

�� DECLARE, OPEN � FETCH� �� ��� �����.

�� ���� DECLARE�� ��� ����.

EXEC SQL DECLARE C1 CURSOR FOR S1;

� ���, �� ��� SELECT� �� �� � SELECT�� �(S1)� ���� ����.

�� �� �� �� ��� �� �����.

EXEC SQLOPEN C1;

EXEC SQLFETCH C1 USING DESCRIPTOR :SQLDA;

DO WHILE (SQLCODE = 0);/*Process the results pointed to by SQLDATA*/EXEC SQL

FETCH C1 USING DESCRIPTOR :SQLDA;END;EXEC SQL

CLOSE C1;

��� ��. SELECT� �� �� FETCH�� ���� � �� ��� �����. FETCH����

�� ��� �� ���� ���. �� FETCH�� SQL� ��� SQLDA� � ��� ���

����� �����. ��� SQLVAR ��� SQLDATA � SQLIND �� ���� ��� ��

SQL ����� 433

Page 446: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�����. FETCH�� �� ��� WORKDEPT� �� SQLDATA �� �� �� ’E11’� �

���. ��� ���� �� 0���. �� �� �� ����� �����. PHONENO� ��

SQLDATA �� �� �� ’4502’� ����. ��� ���� �� 0���. �� �� �� �

���� �����.

�� ��

424 ���� ��� ��� SELECT��

� SQL��� �� � �� ��� �� � � �, ��� ��� �� ��� ��� ��

�� ��� SELECT�� �����.

426 ���� �SQLDA ���

SQL �� �(SQLDA)� ���� SQLVAR��� 6� �� �� ��� � � ���� 4�

��� ���� ����.

: ��� SQL ��� ��� SELECT�:

������ ��� ���� �� ���� ��� � SELECT�� ���� �� � ����

�. � ���� � ���� ���, �� ������� �����, ������ �� ��� �

� � ����.

�, ���� � � ���� ���� �� ��� �� ���. ������ �� � � � ���

��� �� �� ��� ��� �� � ��� � ��� ���.

�� �� �� ���� ���� ���.

SELECT WORKDEPT, PHONENOFROM CORPDATA.EMPLOYEEWHERE LASTNAME = 'PARKER'

�: � SELECT��� INTO�� ���. � SELECT��� ��� �� ���� �� INTO�

� �����.

���� ��� ��� ����. ��� ��(� DSTRING)� � �� PREPARE�� ���

� �����.

EXEC SQLPREPARE S1 FROM :DSTRING;

����, �� �� � ��� ��� ���� ���. �� ���� ��, ��� ��� ���

SQL ��� �� �� �� �� �� ��� ���. � SELECT�� �� 20� � � �� �

�� ���� � �����.

EXEC SQLALLOCATE DESCRIPTOR 'mydescr' WITH MAX 20;

�� ��� �� , DESCRIBE�� ���� ��� ��� � ����.

EXEC SQLDESCRIBE S1 USING DESCRIPTOR 'mydescr';

434 IBM i: ������ SQL �����

Page 447: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

DESCRIBE�� ��� � SQL� ���� � ���� �� ��� ���� �� ’mydescr’� ��

SQL �� �� ������.

DESCRIBE� ���� ��� ��� ��� ���� ���� SQLCODE +239� �����.

� ��� ��, � �� ��� �� ��� �� �� ����. �� � � � ��� ��

� � �� ��� ��� � � �� � ��� �����.

/* Determine the returned SQLCODE from the DESCRIBE statement */EXEC SQLGET DIAGNOSTICS CONDITION 1: returned_sqlcode = DB2_RETURNED_SQLCODE;

if returned_sqlcode = 239 then do;

/* Get the second token for the SQLCODE that indicatednot enough entries were allocated */

EXEC SQLGET DIAGNOSTICS CONDITION 1: token = DB2_ORDINAL_TOKEN_2;

/* Move the token variable from a character host variable into an integer host variable */EXEC SQLSET :var1 = :token;

/* Deallocate the descriptor that is too small */EXEC SQLDEALLOCATE DESCRIPTOR 'mydescr';

/* Allocate the new descriptor to be the size indicated by the retrieved token */EXEC SQLALLOCATE DESCRIPTOR 'mydescr' WITH MAX :var1;

/* Perform the describe with the larger descriptor */EXEC SQLDESCRIBE s1 USING DESCRIPTOR 'mydescr';

end;

� � ��, ��� SELECT�� �� ��� ���. ��, SELECT� ��� �� �� ��

�����. � SQL� SELECT INTO�� ���� ����. ��� ���� ���.

EXEC SQLDECLARE C1 CURSOR FOR S1;

��� SELECT� �� �� ���� � ��� �� ���� � � � � ����. ��, �

�� �� ���� �� �� �� ��� � ����. �� � � �� ���� ��� ��

���.

EXEC SQLOPEN C1;

EXEC SQLFETCH C1 USING SQL DESCRIPTOR 'mydescr';

do while not at end of data;

/* process current data returned (see below for discussion of doing this) */

/* then read the next row */

EXEC SQLFETCH C1 USING SQL DESCRIPTOR 'mydescr';

SQL ����� 435

Page 448: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

end;

EXEC SQLCLOSE C1;

��� ��. SELECT�� �� �� FETCH�� ���� � �� ��� �����. FETCH���

� �� ��� �� ���� ���. �� FETCH�� SQL� ��� �� �� ����� ���

��.

FETCH� ���� GET DESCRIPTOR�� ���� �� �� � ����. ��, �� �� �� �

� ��� �� �� ��� ���.

EXEC SQLGET DESCRIPTOR 'mydescr' :count = COUNT;

����, ��� �� ��� �� ��� �� � ����. �� � ��� ��� ���� �� GET

DESCRIPTOR� ���� �� �� ��� � ����. ����� �� ����� INDICATOR ��

� ������. INDICATOR ��� �� ���� DATA �� �� ���� ����. �� FETCH�

��� � � �� ��� �� �����.

do i = 1 to count;GET DESCRIPTOR 'mydescr' VALUE :i /* set entry number to get */

:type = TYPE, /* get the data type */:length = LENGTH, /* length value */:result_ind = INDICATOR;

if result_ind >= 0 thenif type = characterGET DESCRIPTOR 'mydescr' VALUE :i

:char_result = DATA; /* read data into character field */elseif type = integer

GET DESCRIPTOR 'mydescr' VALUE :i:int_result = DATA; /* read data into integer field */

else/* continue checking and processing for all data types that might be returned */

end;

�� ��� �� ��� ���� �� ��� � �� �� � �� �� �� ��� ����.

PRECISION, SCALE, DB2_CCSID � DATETIME_INTERVAL_CODE� ��� ����. DATA �

� ��� ��� ��� �� ���� �� ��� �� � CCSID� ���� ���. ��� ��� �

� �� ��� ��� �� ����� �� ��� � ����. �� �� ��� ��� ��

� ��� ��� ���.

NAME, DB2_SYSTEM_COLUMN_NAME � DB2_LABEL� ���� �� � �� � �� ��

��� � ����. TYPE � ��� GET DESCRIPTOR�� �� ���� ��� �� � � ���

GET DESCRIPTOR� ������.

���� ��:

��� ��(parameter marker)� � ��� ���� ��� �� ��(?)���. �� ��� ���

���� � SQL� ��� ��� �� � �� !� ��� � ����.

436 IBM i: ������ SQL �����

Page 449: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� ����, ��� �� SELECT��� WHERE�� �� �� ����.

WHERE LASTNAME = 'PARKER'

LASTNAME� �� �� ���� �� SELECT�� � � �����, ��� �� SQL�� ��

�� ���.

SELECT WORKDEPT, PHONENOFROM CORPDATA.EMPLOYEEWHERE LASTNAME = ?

��� ��� ��� � ������ ��� � ���� �� ��� ��� ��� ��� ��

�. OPEN�� ��� ����, SELECT��� ��� ��� �� ��� � ����.

�� �� ����� ����� �� �� � OPEN�� ���� ���. � SQL�� ��� ��

�� ��� ��� �� ��� ��� � ��� ��� ���� �� �����. � ����

� ���� �� �� ��� � ��� �� ��� ���� ���. � ��� SELECT �

��� � ��� ��� �� ��� ���� �� ���� ����. SELECT��� ��� �

�� ���� �� ���� �� �� ��� �����. �� �� �� �� ������ ��

� �� ������� � ��� �����. �� ��� ��� ��� ��� �� ��� ���

� �� SQL�� ��� �� ���.

USING DESCRIPTOR�� �� OPEN�� �� ���� SQLDA� ���� ��� �� �

� � ��� ���. ��, SQLDAID, SQLRES � SQLNAME� ���� �� � � ����(��

CCSID� ��� SQLNAME� �� � ��). ��� ��� ��� ��� ���� �� � �

�� ���� ��� ���� ���.

v ��� ��� �� �

v � ��� ��� ��� �� � ��(SQLTYPE, SQLLEN � SQLNAME)

v ���� ��� �� ��

�� �� SELECT�� SELECT� �� ���� � ��� ���� �� ��� � ����.

������ ��� ��� ���� ����� �� ��� ���� ���. �� SQLDA� �

��� ���� ��� � ����.

1. ���� ��� DSTRING �� �� �� ��� ��� ��� ���.

2. ��� �� �� �����.

3. � �� SQLDA� ���� ALLOCATE DESCRIPTOR� ���� � �� �� ��� �

���. �� REXX�� �� � ���.

4. SQLDA� , SQLN � SQLD� ��� �� �� ����. SQLN� REXX�� �� �

���. � ��� SET DESCRIPTOR� ���� COUNT ��� ��� �� ��

�����.

5. SQLDA� SQLDABC� SQLN*LENGTH(SQLVAR) + 16� ���� ����. �� REXX

�� �� � ���.

SQL ����� 437

Page 450: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

6. ��� ���� ��� �����.

a. ��� ��, �� � ����� �����.

b. SQLDA� ��� ���� SQLTYPE � SQLLEN� ����. � ��� SET

DESCRIPTOR� ���� ��� ���� TYPE, LENGTH, PRECISION � SCALE� ��

��� ����.

c. SQLDA� �� �� ��� ���� ����.

d. SQLDA� ����� � �� ����.

e. SQLDA� ��� ���� SQLDATA � SQLIND(� ��� )� ����. �

��� SET DESCRIPTOR� ���� ��� ���� DATA � INDICATOR(� �

�� )� �� ��� ����.

f. �� ��� ����� � ��� CCSID� �� �� CCSID� �� ���, ��� ��� �

���� � CCSID� �� �� DBCS CCSID� �� �� CCSID� �� �� ,

v SQLDA� �� SQLNAME(REXX��� SQLCCSID)� ����.

v � SQL ��� SET DESCRIPTOR� ���� DB2_CCSID �� ����.

g. USING DESCRIPTOR�(SQLDA� ) �� USING SQL DESCRIPTOR�(� ���

)� �� OPEN�� ���� ��� ���� ��� �� �����.

�� ���� ���� ��� � ����.

�� ��

429 ���� ��: SQLDA� ���� ��� �� SELECT��

������ ��� ���� �� ���� ��� � SELECT�� ���� �� �����.

� ���� � ���� ���, �� ������� �����, ������ �� ��� �

� � ����.

434 ���� ��: � SQL ��� ���� SELECT��

������ ��� ���� �� ���� ��� � SELECT�� ���� �� � ���

��. � ���� � ���� ���, �� ������� �����, ������ �� ���

�� � ����.

��� SQL ��

��� SQL� ���� ����� �� ������ ���� ���, �� �� � ������ ���

�� �� ��� ���� ��, �� �� ����� � � ����.

��� SQL� ���� ������ ���� �� ��� SQL�� ���� � ����� ����

�� � SQL�� ��� � ����. ������ ���� ��� SQL� ���� ��� �� �� �

����, ���, ��� �� �� �� �� (drop)���, ��� ���� ����� ��� ��

� ����.

��� SQL�� ���� �� � � �� �� � �� ����. �� �� �� ���� ����

�� �� � �� ����.

438 IBM i: ������ SQL �����

Page 451: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

��� � �� ���� F1(��!)� � � �� �� ��!� � � ����.

��� SQL�� ���� � ��� ��� ����.

v ��� � ��� ���� ��� ��� � ����.

– ��� SQL� �� � ��

– ��� � � ��

– SQL� ���

– �� ��� � � �� �� ���

– � �� ��

– ��� � �� ��

– ��� SQL ��

v ��� ����� ��� SQL��� �� SQL�� ��� F4(���)� ��� ��� ��� ��

����. �� F4� �� ���� SQL� ��� ��� �� ����. � ���� ���� ��

� ��� ��� ������.

v ��� �� ����� ��� �� ��� ������, ���, ���, �, , ���� �� SQL

��� ����� �� � ����.

����� ��� ��� �� ���� SQL�� ��� � ����.

v �� �� ��� ���� ��� ��� � ����.

– � �� �

– �� � �

– �� ��� �� �� ��

– �� �� �� ��

�� ��

420 ���� �� SQL ������

� SQL� ���� ������ ���� ��� � SQL�� ��� ��� � ����. �

SQL� ���� ������ ���� SQL�� � ��� �� ���� ���� SQL�� ���

�. ������ SQL�� ��� � ��� ���.

�� ��

422 ���� �SELECT� �� ��� ���

� SQL� SELECT� �� ���� ��� ��, � SQL�� ��� ��� � ��� � ��

���.

��� SQL ��

��� SQL� ����� i5/OS ����� STRSQL� ������.

SQL� �� ��� ����. �� � ��� SQL �����. � ���� SQL�� ��� ���

� ����.

SQL ����� 439

Page 452: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

v F4=���

v F13= � ��

v F16=��� �

v F17=��� �

v F18= �

SQL ��� ��

SQL�� ��� �, Enter �� �����.� ��� ������ rdjacque� ���� ��.

===>___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

� ��F3=�� F4=��� F6=� �� F9=� F10=� ��F12=�� F13=��� F24=�� �

��� �� �� ��� F24(�� �)� �����.

____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

� ��

F14=� �� F15=� F16=�� ��(����)F17=��� �� F18=� �� F24=�� �

(��) (�)

�: ��� �� ��� ���� , � � �� �� �� �� �� ����.

��� �� ���� ���� ����.

v STRSQL ��� �� ��� ��� �.

v � SQL�� ���� �� � �� � �� ��� SQL�

v � �� ��� ���� �� ��� �

v ��� ���

440 IBM i: ������ SQL �����

Page 453: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

��� SQL� ��� ID� �� � ���� ID� ���� � � ID� �����. � � ID� �

�� ID� �� � ���� � ��� � ������ ��� ��� SQL� ��� � �� ��

�. �� �� ��� ID�� ��� �� � �������� � ��� ��� SQL �� ��

� � ����.

SQL �� �� ����� , STRSQL ��� �� ���� �����. � SQL ���

��� ���� �����.

�� ��

STRSQL(SQL ��� � ��) ��

��� �� �� ��

��� �� ��� ��� SQL� �� � % �� ���� �����. ��� SQL�� �� �� �

��� �� ���� ��#��.

��� �� ����� �� SQL�� ����� ����� ���� � Enter �� � ��� �� �

�����.

���� ���� ���� ��� � � �� � ����. ��� SQL��� � ��(/* */)� ���

� ����. �� � ��(�, --� ���� ��)� �� �� ��� SQL�� �� ��� ��

� SQL��� �� ��� ���� ��� ���. ���� ������ ���� �� � �� ��

�� �� �����. �� �� ���� ��� � ����.

���� SQL�� ���� �� ��� , ���� �� ��� � �(�� ��)� ����

�� �����. �� ��� ��� �� �� ��� �� !� ��� �� ���� ����. �

�� ��� �� F1(��!)� � ��� �� � � ��� � � ����.

�� ���, �� � � �� ��� ��� � ����. ��� �� �� ��� F9(�)� ���,

�� ���� �� ��� �����. �� F9� ��� ���� �� � �� ����� � ��

�� �� ��� �����. ���� F9� ��� ��� ���� �� � � �� ���� �� �

���� � ����. SQL�� ��� ��� � ����, ���� �� ���� ������.

���

��� ��� �� ��� ���� ��� �� �� ��� ��� � ����. *RUN, *VLD � *SYN

��� �� ��� ��� ��� ��� � ����. ���� �� SQL�� ��� � �� �� ��

� �� SQL�� �� ���� ����.

��� �� � �� �� ��� ����.

v F4(���)� ��� �� ���� ��� ������.

���� ��� �� �� ��� ���� �����.

SELECT� ��� F4(���)� ��� �� ��� ����.

SQL ����� 441

Page 454: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

SELECT ��� ��

SELECT ��� ��� ������. F4 �� � ���� �������

FROM ��� . . . . . . . . _____________________________________________SELECT � . . . . . . . . . _____________________________________________WHERE � . . . . . . . . . _____________________________________________GROUP BY � . . . . . . . . _____________________________________________HAVING � . . . . . . . . _____________________________________________ORDER BY � . . . . . . . . _____________________________________________FOR UPDATE OF � . . . . . _____________________________________________

� ������� ��� � Enter �� �����.

DISTINCT �� ��� � . . . . . . . . . N Y=, N=���UNION �� SELECT . . . . . . . . . . . . . N Y=, N=����� � �� . . . . . . . . . . . . . . . N Y=, N=���

F3=�� F4=��� F5=���� F6=� �� F9=� �� ��F10=� �� F12=�� F14=� �� F15=� F24=�� �

v SQL� �� ���� ���� ���� �� F4(���)� �����. ��� ���� ����. �

�� ���� �� ��� SQL� �� �� �� ����. ��� *NONE� �� �� � ��

, ����� �� SQL�� ���. �� � ��� � �� , ��� SQL�� ���

� �� ���� ����. ��� ���� ��� �� � ����. ���� �� ���� ��

��� ���� ����.

���� ���� � F4(���)� ��� �� ��� ����.

SQL� ��

�� � ��� ������.

1. ALTER TABLE2. CALL3. COMMENT ON4. COMMIT5. CONNECT6. CREATE ALIAS7. CREATE COLLECTION8. CREATE INDEX9. CREATE PROCEDURE

10. CREATE TABLE11. CREATE VIEW12. DELETE13. DISCONNECT14. DROP ALIAS

��..��

__

F3=�� F12=��

��� ���� F21(��� �)� ���, ���� � � � ��� �� ��� SQL�� ��

��.

442 IBM i: ������ SQL �����

Page 455: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

��� ��� Enter �� ���, ��� ��� �� � ���� �� �����. ��� �� �

� *RUN��, ���� �����. ��� ����� ���� ��� �����.

�� ��:

SQL�� ���� ���� ��� ����.

���� ��� ���� �� ���� � �� ����. ��� ����� ���� ���� �� ��

� ���� ���. ��� �� ���� ���� ����.

��� �� ��:

� �� � � ���� ��� �� �� �� � ����.

*RUN(��) �� *VLD(��� �) ���� ��� SQL�� ��� � �� ���� ���� � �

���. *SYN(�� �) ���� �� SQL�� �����. ���� ��� *SYN �� *VLD �

�� ���� ����. ����� ��� �� ����.

� ��:

WHERE �� HAVING�� �� � ���� �� ��� �� � ����.

�� ��� ��� ��� WHERE �� HAVING �� �� �� � F9(�� �� ��)� �����.

�� � ��� ��� � �� �� � ��� ����. F9� ��� ��� �� ��� �� ��

�� , �� � ���� �� �� ��� �����. ��� �� ��� �� �� �� , ��

� ��� �����.

CREATE TABLE ���:

CREATE TABLE�� ����� ����� ��� ���� ��� � ����.

� ��� �� ��� ��� ���� F4(���)� �����. ��� ��� �� �� ���

��� � �� ��� ���� � ��� ����.

18�� �� �� ����� F20(�� � �)� �����. 30� �� ��� � �� ���

��� �� �� ����.

�� �(F6=� ��, F10=� ��, F14=� ��)� ���� �� ����� ��� ����� ���

� ����.

DBCS �� ��:

� ��� 2��� �� �(DBCS) ��� �� ��� SQL� �� � ��� SQL ����� �

���.

� ��� �� �� SI � SO ��� ��� ���. ��� � ��� �� ��� DBCS ��

� ��� �� � ��� SI � SO ��� �����. �� ��� � SI� � �� �� � �

SQL ����� 443

Page 456: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

� SO� , �� � � � ���� SI � SO ��� �����. �� ��� �� 1

��� ��� ��� �� SI� � �� �� � � � SO� , �� � � �

SO �� �����. �� ��� � DBCS ��� ��� �� �� ����� �� � ����.

� ��, �� WHERE ��� ����� ������. ��� ��� ��� � ���� ��� �

�� ��� �� ����.

SELECT ��� ��

SELECT ��� ��� ������. F4 �� � ���� �������

FROM ��� . . . . . . . . TABLE1_______________________________________SELECT � . . . . . . . . *____________________________________________WHERE � . . . . . . . . COL1 = '<AABBCCDDEEFFGGHHIIJJKKLLMMNNOOPPQQ>

<RRSS>'______________________________________GROUP BY � . . . . . . . . _____________________________________________HAVING � . . . . . . . . _____________________________________________ORDER BY � . . . . . . . . _____________________________________________FOR UPDATE OF � . . . . . _____________________________________________

Enter �� ��� �� ���� ��� ��� ��� ��� �����. ���� SQL� �� � �

��� ��� ����.

SELECT * FROM TABLE1 WHERE COL1 = '<AABBCCDDEEFFGGHHIIJJKKLLMMNNOOPPQQRRSS>'

��� �� �� ��

�� ��� ���� F4(���)� � ��� � ��� � �� � ����. SQL� �� ����

��� � ���� F16(��� �), F17(��� �) �� F18( �)� �����.

�� �� �� ��� �� ��� �� ��� ������, ���, ���, �, ��, , ����, �

���, ��� �� ��� ���� �����. ��� ���� ����� ��� ���� ��� �

� , ���� �� ��� ���.

�����, ���� ��� �� ����� ���� �� ��� ��� �� � ����. ��� �

�� ����, � �� ��� �� ��� ���� �����.

�� �� ���� ���� �����. �� ��, ���� ���� ��� � �� ��� �

� ���� �� ��� F18� �����. �� ��, ����� F17� � ���� ����

�. ��� ���� �� � , ����� ���� �����. �� �� �� ��� �

��.

SQL� �� ���� SQL�� ���� �� ���� ���� ��� � ����. � ������ �

��� SQL� �� ��� �����. ��� ���� ��� �� �� ��� ��� !� �����.

� ��� ��� ���� �� ����� ���� ��� ���� ���.

��� ��� � , ��� � SQL ���� ��� ��� ���� ���. �� ��� ���

SQL�� �� ��� � � � ����. SQL�� � � , ��� � SQL ����

��� ������ � �� ���.

444 IBM i: ������ SQL �����

Page 457: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� ��

439 ���� ���� SQL ���

��� SQL� ����� i5/OS ����� STRSQL� ������.

: ��� ���� �� ��:

� ��� ��� ��� �� ���� SELECT�� ��� ��� �����.

��� �����.

v i5/OS ���� STRSQL� ���� ��� SQL� ������.

v ��� ����� ��� ���� �����.

v �� ���� *SQL� �����.

�: ��� ��� ��� � ���� �����. � ���� �� ���� �����.

SQL� ��� �����.

1. � � ��� �� �� SELECT� ������.

2. � ��� �� �� FROM� ������.

3. FROM ��� �� ��� ��� ������.

SQL ��� ��

SQL�� ��� �, Enter �� �����.===> SELECT

FROM _

4. F17(=��� �)� �� ��� ���� ������. FROM �� ����� ��� �� ���

���.

���� ��� ���� ��� ��, ��� ���� ����(��� � � ��� ��). �

SQL �� ��$�� � � ���� ��� �����.

5. YOURCOLL2 ��� #� �� Seq � 1� ������.

�� �� � � ��

��� �����, (1-999)� ��� � Enter �� �����.

�� �� ���YOURCOLL1 SYS Company benefits

1 YOURCOLL2 SYS Employee personal dataYOURCOLL3 SYS Job classifications/requirementsYOURCOLL4 SYS Company insurances

6. Enter �� �����.

SQL ����� 445

Page 458: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

YOURCOLL2 ���� �� ���� ���� ��� � � ��� ��� ����.

7. PEOPLE ��� #� �� Seq � 1� �����.

��� �� � ���

���� �����, (1-999)� ��� � Enter �� �����.

��� �� �� ���EMPLCO YOURCOLL2 TAB Employee company data

1 PEOPLE YOURCOLL2 TAB Employee personal dataEMPLEXP YOURCOLL2 TAB Employee experienceEMPLEVL YOURCOLL2 TAB Employee evaluation reportsEMPLBEN YOURCOLL2 TAB Employee benefits recordEMPLMED YOURCOLL2 TAB Employee medical recordEMPLINVST YOURCOLL2 TAB Employee investments record

8. Enter �� �����.

FROM ��� ���� YOURCOLL2.PEOPLE� �� SQL ��� �� ��� ����. �����

*SQL �� ���� ����� �� �����.

SQL ��� ��

SQL�� ��� �, Enter �� �����.===> SELECT

FROM YOURCOLL2.PEOPLE _

9. SELECT ��� ��� ����.

10. F18(= �)� �� ���� ������. SELECT �� �� ��� �� ������.

PEOPLE ���� � ��� � � ��� ��� ����.

11. NAME #� �� Seq � 2� ������.

12. SOCSEC #� �� Seq � 1� ������.

� �� � ���

�� �����, (1-999)� ��� � Enter �� �����.

� ��� �� �� ���2 NAME PEOPLE CHARACTER 6

EMPLNO PEOPLE CHARACTER 301 SOCSEC PEOPLE CHARACTER 11

STRADDR PEOPLE CHARACTER 30CITY PEOPLE CHARACTER 20ZIP PEOPLE CHARACTER 9PHONE PEOPLE CHARACTER 20

13. Enter �� �����.

SOCSEC, NAME� SELECT �� ��� SQL ��� �� ��� �� ����.

446 IBM i: ������ SQL �����

Page 459: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

SQL ��� ��

SQL�� ��� �, Enter �� �����.===> SELECT SOCSEC, NAME

FROM YOURCOLL2.PEOPLE

14. Enter �� �����.

��� ���� �����.

��� �� ��� ��, ���� �� �� ���� Change Session Attributes ���� ���

���� �� � � �� �� ����.

�� �� �

� �� ���� � ��� �� � ����. �� � �, � � �� �� �� ��� �

�� � ����.

� �� ��� � ���� SQL� �� ���� F13(��)� �����.

�� 1( � �� �)� ��� SQL �� ��� �� �� �� � �� �� � �� � ��

� ����. � ��� � ��� � ��� �� ��� �� ����.

�� � �� � ��� ��� ����.

v �� �� ��

v ��� �� ��

v SELECT �� ��

v ��� ���

v ���� SQL ���� � �� SQL ����� �� � �� ��� ��

v ���� �� � ��� �� ��

v ��� �� �� ��

v �� ��

v ����� ��

v �� ��

v �� ��

v �� ���

v �� ���

v �� �

v SQL ��� ����

SQL ����� 447

Page 460: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

v � �

v �� ID

v SQL ��

v CONNECT � ��

�� 2(�� � �)� �� �� �� �� � � � ��� � �� �� ��� � ��� �

����. ��� ��� ����� ������. ���� ��� �� SQL�� � �� � �� SQL

� �� ��� ���� ��� ����.

�� 3(�� ��� �� � ��)� ���� SQL� �� ��� �� SQL�� � � � � ���

� ��� � ����. ��� ��� � � � ��� ������.

�� 4(�� �� � ��)� �� �� �� ��� � �� �� �� � � ��� � ��

��. �� ��� ����� ������. � ��� ���� �� �� ����(SEU)� ���� �

�� �� ����� �� �� ��� � ����.

�: �� 4� ���� SQL� ���� � ��(HLL) ����� ���� SQL�� ��� � ��

��. �� 4� �� �� �� �� ���� SQL� ��(RUNSQLSTM) ��� �� �� �

� ��� � ����.

��� SQL ��

��� SQL �� ����� SQL� �� ���� F3(��)� �����. ��� �� � �� ���

��� � ����.

v � �� � ��. ��� SQL� ���. �� �� ������ �� �� ��� SQL� ���

� �����.

v �� ���� � ��. �� ���� � ��� SQL� ���.

v � ��. ��� SQL� �� ��� SQL� �� ���� ��#��. �� � ���� ���

�����.

v �� �� � ��. �� �� �� �� �����. � �� ��� �� � ��� �� �

� ��� ����. �� ���� ��� SQL�� �� � �� �� � � � �� ��

�.

�:

1. �� 4� ���� SQL� ���� � ��(HLL) ����� ���� SQL�� ��� � �

���. ���� ����� ����� �� �� ����(SEU)� ������. �� �� ��

���� SQL� ��(RUNSQLSTM) ��� �� �� �� ��� � ����.

2. �� ��� � � ��� �� �� �� ��� ��� ��� SQL� ���� ��

��, � �� ����.

448 IBM i: ������ SQL �����

Page 461: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

��� SQL �� ��

��� SQL �� ���� �� 1( � �� � ��)� ��� ��� ��� SQL �� ��� ,

�� � ������ �� ��� � ����.

�� �� 1� ���� �� �� � ������ � ��� �� ���� , ��� SQL�

�� ���� � ����� ��� �� ���� �����. ��� �� ��� � �

, ��� SQL� ��� ID� �� �� �� ��� �� �� � ��. ��� ID� �� �

� ��� � � , ���� ��� ID� �� � ����� �� � �� �����.

�� ��, � ���� 1� �� ��� � ���� 2� �� �� ����� � ���� 1��

�� � ���. ��� SQL� �� � ���� 1� �� �� �� ���� �����. �

�� �� �� ��, ��� SQL� � ���� 2� �� �� �� ���� �����. �

�� �� ��, ���� � ���� 1� �� � �� �����.

�� � ���� 3�� � � � ���� 2� �� ISQL �� ���� �� �����

�. ��� SQL �� ���� �� 2( �� ���� � ��)� ���� � ������ �� ��

���� ���.

SQL �� ��

�� SQL �� ���� �� , ��� SQL� SQL ��� � ��(STRSQL) ��� ��

�� �� �� ��� � SQL � �� � ��� �����.

� � ���� �� �� ��� ����� �� � ����.

v �� 1(�� SQL � �� ��)� ��� �� � ��

v �� 2(�� SQL �� ��� � � ��)� ��� �� �� ��� � � ��

�� �� ��� � �� ����� ��� , STRSQL� ��� � ��� ���� ���

��. �� �� ����� ���� ��� �� �� ���� , STRSQL� ��� � ���

���� ��� �� �� ���� �����. �� ��� �� � ��� � ����

��� � �� �����.

��� SQL� �� ��� ����� ���

��� SQL��, SQL CONNECT�� ���� ��� ��� ������� ��� � ����. ���

SQL� CONNECT�� CONNECT(�� 2) �&�(�� � ��)� �����.

��� SQL� SQL �� ��� � �� ��� �������� �� ��� ����. CONNECT

�� ���� � ��� ������ ��� ���� � �� ����. ��� SQL� � ��

����� COMMIT(*NONE)� ���� ���� ��� SQL� �� �� ����� �� �

�� �� �� ��� *NONE� �� , ��� �� ��� � �����. �� �� �� �

��� �� �� ��� ��� �������� �� ��� ��� � � ����. ��� ������

� ���� �� �� �� ��� ����� ����.

SQL ����� 449

Page 462: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

v �� � ��� ���� �� ����� ��� ��� � RELEASE ALL�� COMMIT�� �

�� ���� �� ��(�� �������� �� ��� ��)� ������.

v i� DB2� �� �� ����� ��� ���� , RELEASE ALL�� COMMIT�� ����

���� �� ��(�� �������� �� ��� ��)� ��� �� �� ��� ��

*CHG� �����.

i� DB2� �� �� ����� ��� ��� � � � ��� � ����� ���� ���

� ���� ����. �� � ��� ��� �����.

93. �

�� � ��� � ��� �

�� ��*YMD

*DMY

*MDY

*JUL

*ISO

*EUR

*USA

*USA

�� �� : ���� �� *HMS �� ���� �

� *HMS *JIS

*EUR

�� ��*CHG,

*NONE

*ALL

*CS � �� ��

�� �� *SYS *SQL

��� �� �� *NO, *YES *OPTIMIZE

��� �� *ALWAYS *FORWARD

�� *SYSVAL *PERIOD

� � *HEX ��� � *HEX

�: Linux®, UNIX® � Windows®� DB2� z/OS®� DB2 ����� ��� �� �� ��

� �� ��� ��� ���.

��� ���� � ��� ����� ��� � �� �����. � � ��� � ��

� ��� ���� �� � ����. ��� SQL� �� �� ��� �� ��� �� �� ��

� �� � ���.

��� SQL� ��� ���� ��� , �� �� ��� �� �� ��� ��� �� �� ���

� ���� ��� �� ��� ��� ����. �����, SQL ��� � ��� ��� �� ���

450 IBM i: ������ SQL �����

Page 463: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

� ���� ��� ��� �� ��� �����. �� ���� ��� ����� �����. ��

� ��� SQL �� �� ��� �, ��� � ��� ����� ��� �� ��� ��� � ���

�.

�� ��� ������� �� ��� � ��� ���� ��� � ����. ����

DESCRIBE TABLE�� ���� ��� ������ ���� �� �� �� �����.

�� ���� �� ���� �� ��� ��� ���� ���� ��� SQL� ��� ��

� �����. � ��� �� �� � � ���� �� ��� �� COMMIT �� ROLLBACK

�� � �����. �� ��� SQL� ��� �� RELEASE ALL � COMMIT� ���� ���

��� �� ����.

i� DB2� �� �� ����� ��� �� ��� � �� ��� SQL� ���� � ��

��� � ����.

�: �� � ��� ‘CREATE TABLE XXX’�� �� ��� �� � ����. �� ��� �� �

��� � �����. �� �� ��� ��� ��� � ����.

�� ��

�� ������ �����

�� ��

470 ���� ��� �� ���

��� SQL ��� � � ����� �� �� �� ��� ��� �����.

SQL� ���� ��

SQL� �� �� �� �� �� �� ��� ��� SQL�� ��� � �� ���. ��� ����

��� ����� ��� ���� � �� � ����. ��� ������ �� � ��

� ����.

SQL� ��(RUNSQLSTM) ��� �� SQL� �� �� ��� � ����.

SQL� �� �� � ��� � �� ���� ��� ����.

v ALTER FUNCTION

v ALTER PROCEDURE

v ALTER SEQUENCE

v ALTER TABLE

v CALL

v COMMENT

v COMMIT

v CREATE ALIAS

v CREATE FUNCTION

SQL ����� 451

Page 464: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

v CREATE INDEX

v CREATE PROCEDURE

v CREATE SCHEMA

v CREATE SEQUENCE

v CREATE TABLE

v CREATE TRIGGER

v CREATE TYPE

v CREATE VARIABLE

v CREATE VIEW

v DECLARE GLOBAL TEMPORARY TABLE

v DELETE

v DROP

v GRANT

v INSERT

v LABEL

v LOCK TABLE

v MERGE

v REFRESH TABLE

v RELEASE SAVEPOINT

v RENAME

v REVOKE

v ROLLBACK

v SAVEPOINT

v SET CURRENT DECFLOAT ROUNDING MODE

v SET CURRENT DEGREE

v SET CURRENT IMPLICIT XMLPARSE OPTION

v SET ENCRYPTION PASSWORD

v SET PATH

v SET SCHEMA

v SET TRANSACTION

v UPDATE

���� SQL�� EXEC SQL� ���� ����. � ���� ����� ���. �� ���

, ��� ��� ��� 80���. �� ��� �� ��� 80�� �� , �� 80�� ����.

452 IBM i: ������ SQL �����

|

|

|

Page 465: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

RUNSQLSTM ���� MARGINS ���� ���� ��� ��� � �� ��� �� � ��

��. �� ��� �� , �� �� ����. ��� ���� ����.

��� ��� � �� �� �� �� � ����. � ��� � ��"(--)�� ���� � ��� �

��. �� ��� /*� ���� ���� */� ��� � � � ��� ��� � ����. �� ��

� �� � ����.

�� ���� SQL�, CL �� � ��� �����. CL �� ��� ’CL:’ � �� ��� ���. �

� ��, ��� ����.

CL: ADDLIBLE MYLIB;INSERT INTO T1 VALUES('A', 17);

SQL� � CL ��� �� �� � �� �� �� �� ���� � �� �����. ��� � �

� QSYSPRT���.

��� �� ���� ���� �� �� ����� RUNSQLSTM ��� PROCESS(*SYN) ���

� ������. ���� �� � �� �� �� ��� ��� SECLVLTXT(*YES) ���� ���

���.

�� ��

RUNSQLSTM(SQL� ��) ��

�� � � ��� ��

���� RUNSQLSTM(SQL� ��) ��� ERRLVL(�� ��) ���� �� ��� ���� �

� ��� ���� ���� �����.

��� �� ��� ���� �� ��� ��� �� ���� ���� ����. ���� SQL ��

���� 30���. SQL�� ��� � ��� ����� RUNSQLSTM ��� ERRLVL ���� 30

���� �����. (drop)� ����� �� �� DROP�� ��� �� 20 ��� �����.

ERRLVL ���� 20 �� ��� ��� DROP�� �� � ��� ��� � ��� ���� �

�� �� ��� ���� ��� ��� � ���.

SQL� ������� �� ��

�� �� ��� RUNSQLSTM(SQL� ��) ���� �����.

*NONE� �� �� �� ��� ��� SQL�� �� �� �� �����. �� ���� ��

�� ���� SQL� �� � �� � COMMIT� �����. ��� �� ROLLBACK� ���

��. ���� ��� �� � ���� RUNSQLSTM ��� ERRLVL ���� �� � ��

� ��� ��� �����.

�� ���� SET TRANSACTION�� ���� RUNSQLSTM ��� �� �� ��� ��� ��

� � ����.

�: �� ��� � SQL� �� �� ����� � �� �� � � ��� ���.

SQL ����� 453

|

|

||

|

|

Page 466: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

SQL� ����� �� �� ��

� ��� SQL� �� �� �� �� �� ���� ����.

�: � ��� ���� 528 ���� �� ���� � ���� ��� ��� ���� ����.

xxxxSS1 VxRxMx yymmdd Run SQL Statements SCHEMA 02/15/08 15:35:18 Page 1Source file...............CORPDATA/SRCMember....................SCHEMACommit....................*NONENaming....................*SYSGeneration level..........10Date format...............*JOBDate separator............*JOBRight margin..............80Time format...............*HMSTime separator ...........*JOBDefault collection........*NONEIBM SQL flagging..........*NOFLAGANS flagging..............*NONEDecimal point.............*JOBSort sequence.............*JOBLanguage ID...............*JOBPrinter file..............*LIBL/QSYSPRTSource file CCSID.........65535Job CCSID.................37Statement processing......*RUNAllow copy of data........*OPTIMIZEAllow blocking............*ALLREADSQL rules.................*DB2Decimal result options:Maximum precision.......31Maximum scale...........31Minimum divide scale....0

Source member changed on 11/01/07 11:54:10

�� 1. SQL� �� �� �� QSYSPRT ���

454 IBM i: ������ SQL �����

Page 467: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

xxxxSS1 VxRxMx yymmdd Run SQL Statements SCHEMA 02/15/08 15:35:18 Page 2Record *...+... 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 SEQNBR Last change

12 DROP SCHEMA DEPT;3 DROP SCHEMA MANAGER;45 CREATE SCHEMA DEPT6 CREATE TABLE EMP (EMPNAME CHAR(50), EMPNBR INT)7 -- EMP will be created in schema DEPT8 CREATE INDEX EMPIND ON EMP(EMPNBR)9 -- EMPIND will be created in DEPT10 GRANT SELECT ON EMP TO PUBLIC; -- grant authority1112 INSERT INTO DEPT/EMP VALUES('JOHN SMITH', 1234);13 /* table must be qualified since no14 longer in the schema */1516 CREATE SCHEMA AUTHORIZATION MANAGER17 -- this schema will use MANAGER's18 -- user profile19 CREATE TABLE EMP_SALARY (EMPNBR INT, SALARY DECIMAL(7,2),20 LEVEL CHAR(10))21 CREATE VIEW LEVEL AS SELECT EMPNBR, LEVEL22 FROM EMP_SALARY23 CREATE INDEX SALARYIND ON EMP_SALARY(EMPNBR,SALARY)2425 GRANT ALL ON LEVEL TO JONES GRANT SELECT ON EMP_SALARY TO CLERK26 -- Two statements can be on the same line

* * * * * E N D O F S O U R C E * * * * *

�� 2. SQL� �� �� �� QSYSPRT ���(��)

SQL ����� 455

Page 468: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� ��� ������ �� � SQL�� ��� ������(distributed relational database)� �� �� ��� ��� ��� �� ��

SQL ���� �� �����.

� ��� ������� �� ��(�: i� DB2 ������)�� �� ��(�� ��� ������

��(DRDA)� ���� IBM ������ �� �����, z/OS� DB2 �� VSE � VM� DB2)�

� � ����. � ��� �������� � ��� ���� ���� �� ��� ������ �

��� ����. ������ ���� ��� ������ ��� � �� �� ���� ��� ���

����� SQL�� ��� � ��� �� ���� �� ��� �����.

����� ����� ��� ����� �� �����. ����� ��� ����� ���

�� ���� �� �� ��� ���������. i� DB2� ����� ����� ����� ��

� ��� � ��� DRDA� �� ��� �����. �� i� DB2� �� ����� ���� DRDA

� ���� �� �� ������ �� ���� ���� � �� � ��� ���. � �� �����

����� ���� ���(ARD) ������ ���.

i� DB2� �� ��� �� ��� ������� �����.

v ��� � ��(RUW)

xxxxSS1 VxRxMx yymmdd Run SQL Statements SCHEMA 02/15/08 15:35:18 Page 3Record *...+... 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 SEQNBR Last changeMSG ID SEV RECORD TEXTSQL7953 0 1 Position 1 Drop of DEPT in QSYS complete.SQL7953 0 3 Position 3 Drop of MANAGER in QSYS complete.SQL7952 0 5 Position 3 Schema DEPT created.SQL7950 0 6 Position 8 Table EMP created in DEPT.SQL7954 0 8 Position 8 Index EMPIND created in DEPT on table EMP in

DEPT.SQL7966 0 10 Position 8 GRANT of authority to EMP in DEPT completed.SQL7956 0 10 Position 40 1 rows inserted in EMP in DEPT.SQL7952 0 13 Position 28 Schema MANAGER created.SQL7950 0 19 Position 9 Table EMP_SALARY created in schema

MANAGER.SQL7951 0 21 Position 9 View LEVEL created in MANAGER.SQL7954 0 23 Position 9 Index SALARYIND created in MANAGER on table

EMP_SALARY in MANAGER.SQL7966 0 25 Position 9 GRANT of authority to LEVEL in MANAGER

completed.SQL7966 0 25 Position 37 GRANT of authority to EMP_SALARY in MANAGER

completed.

Message SummaryTotal Info Warning Error Severe Terminal

13 13 0 0 0 000 level severity errors found in source* * * * * E N D O F L I S T I N G * * * * *

�� 3. SQL� �� �� �� QSYSPRT ���(��)

456 IBM i: ������ SQL �����

Page 469: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

��� � ��(remote unit of work)� � �� � ��� ����� ���� SQL� � �

��� ��� !���. i� DB2� APPC(advanced program-to-program communication) �� TCP/IP

� �� RUW� �����.

v �� � ��(DUW)

�� � ��(distributed unit of work)� � �� � � ����� ���� SQL� � �

��� �� � �� !���. �� � SQL�� � ����� ��� �� ����� ��

� � ����. i� DB2� APPC� �� DUW� TCP/IP� �� DUW� �����.

�� ��

3 ���� �i� DB2 SQL(Structured Query Language) ���

SQL(Structured Query Language)� ��� �������� ���� ��� ���� �� ��

�����. � ����� i� DB2 ������ � i� IBM DB2 Query Manager � SQL

Development Kit ����� �� ����� ���� SQL� System i ��� �� ����.

14 ���� �SQL ����

SQL ���(SQL package)� ����� ����� SQL�� ��� ��� ������ �� ���

(DBMS)� � � � ��� �� ��� �� �������.

�� ������ �����

i� DB2 �� ��� ���� ��

i� IBM DB2 Query Manager � SQL Development Kit ����� �� ����� �� ������

� �� ��� � �� �����.

i5/OS� SQL �� � � DB2 �� �� ����� �� SQL�� �� �� ��� ������ ���

�����.

v CONNECT

v SET CONNECTION

v DISCONNECT

v RELEASE

v DROP PACKAGE

v GRANT PACKAGE

v REVOKE PACKAGE

�� ��� SQL ���� ��� ���� �� �� �� �� �����.

v CRTSQLCI(SQL ILE C ���� ��) ��

v CRTSQLCPPI(SQL ILE C++ ���� ��) ��

v CRTSQLCBL(SQL COBOL ���� ��) ��

v CRTSQLCBLI(SQL ILE COBOL ���� ��) ��

v CRTSQLPLI(SQL PL/I ���� ��) ��

SQL ����� 457

Page 470: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

v CRTSQLRPG(SQL RPG ���� ��) ��

v CRTSQLRPGI(SQL ILE RPG ���� ��) ��

�� ���

SQL��� ���� � � ��

�� ��

527 ���� �i� DB2 CL �� ��

i� DB2� SQL� �� CL ��� �����.

CONNECT(�� 1)

CONNECT(�� 2)

DISCONNECT

DROP

GRANT(��� ��)

REVOKE(��� ��)

RELEASE(��)

SET CONNECTION

i� DB2 �� ��� ���� � ����

��� � ��� ���� ��� ������ �� ����� SQL ��� � ���. QSQL �

��� �� �� � � ��� �� i� DB2 �� ����� ���� �� ��� � ��� �

� ����.

� � � ��� ����� QSQL/QSQSAMP �� �� SETUP ��� � � ���� ���.

SETUP ��� � � �� ��� ��� ���� ��� ��� � ����.

v �� � ��� ���� QSQSAMP ����� �����.

v �� � ��� ���� ��� ������ ��� ��� ����.

v �� ���� ����� ��� �����.

v ����� ����, �� � ���� �� �� ����� ���, ���, � � �� ���

��.

v �� � ��� ���� ���� ���� ����.

v ����� ���� � �����.

v ����� ����� �� ��� ���� SQL ���� �����.

v ����� ����, �� � ���� �� ����� �� � �����.

SETUP� ���� ��, QSQL/QSQSAMP �� SETUP ��� ���� � �� ����. ��� �

��� ��� ���. SETUP� ����� ��� ����� �� ��� ������.

========> SBMDBJOB QSQL/QSQSAMP SETUP

458 IBM i: ������ SQL �����

Page 471: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

��� � � ����� ������.

�� ����� ����� ���� �� ��� ������.

========> ADDLIBLE QSQSAMP

�� ����� ��� ��� � �� � � ��� ����� ���� �� ��� ������.

========> CALL QSQ8HC3

�� ��� ��. � ���� ������ �� ����� ��� ��� � ����.

SAMPLE ORGANIZATION APPLICATION

ACTION...........: A (ADD) E (ERASE)D (DISPLAY) U (UPDATE)

OBJECT...........: DE (DEPARTMENT) EM (EMPLOYEE)DS (DEPT STRUCTURE)

SEARCH CRITERIA..: DI (DEPARTMENT ID) MN (MANAGER NAME)DN (DEPARTMENT NAME) EI (EMPLOYEE ID)MI (MANAGER ID) EN (EMPLOYEE NAME)

LOCATION.........: (BLANK IMPLIES LOCAL LOCATION)

DATA.............:

� ��

F3=��

SQL ��� ��

i5/OS ����� ���� SQL ���� �����. ���� ��� *SQLPKG���.

SQL ����� �� ����� ��� � ����� ���� SQL�� ���� � ��� �� ��

� � � ��� �� ����. SQL ���� ��� �� � ��� � ����.

v RDB ���� CRTSQLxxx ��� ��� ���� ����� ���� ���� . SQL �

��� RDB ���� �� ����� �����.

��� ����� ���� �� ����� ���� SQL ���� ���� ����.

v CRTSQLPKG ��� ���� . ������ ���� ���� ���� ���� ��� ��

�� �� �� RDB�� ���� ��� CRTSQLPKG� ���� ���� ��� � ����.

DLTSQLPKG(SQL ��� ��) ��� ���� �� ����� SQL ���� ��� � ����.

SQL ��� ��� ���� ���� ID� ���� ��� ��� ���(����� ��)�� ���

� ���� � �� ��� �� ��� SQL ���� ���� ����. ����� ����� �

��� ID� SQL ���� �� EXECUTE ��� ��� ���. i5/OS ����� ������

EXECUTE ��� *OBJOPR � *EXECUTE ��� ��� ���.

SQL ����� 459

Page 472: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� ��

CRTSQLPKG(SQL ��� ��) ��

SQL ����� �� SQL�

�� ��� �� ����� SET TRANSACTION�� ��� SQL�� ��� � ����.

i� DB2� �� ��� ������� ���� i� DB2� �� ����� ��� ��������

���� �� ��� SQL�� ��� � ����. ����� ���� �� ���� �� �� �

�� �� �����. �� ���� SQL ��� �� � ��� ����� �����. ��� ��

� �� ����� ���� ���� ��� � �� SQLCODE -84 �� -525� �����. ��

��, � � FETCH, ��� INSERT � ���� �� ��� �� � ��� ����� ��

��� ����� ��� � � OS/400® V5R2 �� i5/OS V5R3 ���� �� �� �����

�� �����. i5/OS ����� ����� ��� �� �� ����� ����� i5/OS V5R3 �

���� ���� �� ��� ���� �� ���� �� ��� ��� � ����. � � FETCH�,

��� INSERT� � ���� �� ��� �� �� ����� � ��� ��� � 2� �� ���

�(BLOB), �� �� ����(CLOB) � 2��� �� �� ����(DBCLOB) ��� ��� ����

���� ����.

�� ��

SQL�� ��

SQL ��� �� ����

SQL ���� ��� � �� �� �����.

CRTSQLPKG �:

i5/OS ����� ����� SQL ���� ��� � ���� ���� ID�� CRTSQLPKG(SQL ��

� ��) ��� �� *USE ��� ��� ���.

i� DB2 � � ������ ��� ��:

i� DB2� �� �� �������� ���� �� SQL ���� ��� �� ������� ��

SQL�� ���� , CRTSQLxxx(SQL ��) ���� GENLVL ���� 30�� ��� ���.

����� ��� ��� 30�� � � �� ���� �� � �����. ��� ��� 30�� � �

�� ���� ��� ������� �� ���� ���� �� � ����. �� ��, ���� ��

���� ��� ��� � � ��� �� �� ��� 30�� � � � ���� ����.

10�� � GENLVL �� ���� ��� �� ��� �� � �� �� ���� ���� ��

� ���. DB2 ��� �� ���� ��� � GENLVL ��� �� 20�� �� ��� ���.

RDB ���� i� DB2� �� ������� ���� CRTSQLxxx ���� �� ��� ���

� ���.

v COMMIT(*NONE)

460 IBM i: ������ SQL �����

Page 473: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

v OPTION(*SYS)

v DATFMT(*MDY)

v DATFMT(*DMY)

v DATFMT(*JUL)

v DATFMT(*YMD)

v DATFMT(*JOB)

v DYNUSRPRF(*OWNER)

v TIMSEP(*BLANK) �� TIMSEP(‘,’)� �� TIMFMT(*HMS)

v SRTSEQ(*JOBRUN)

v SRTSEQ(*LANGIDUNQ)

v SRTSEQ(*LANGIDSHR)

v SRTSEQ(library-name/table-name)

�: DB2 ��� ��� � �� �� ��� ����.

v �� �� � �� ��� ��� ���.

v TEXT ���� *BLANK �� ���� ���.

v ��� ���(DFTRDBCOL)� ���� ����.

v ���� �� �� ����� CCSID� 65535� � � ���. 65535� ���� � ��

���� �����.

�� ���(TGTRLS) ����:

���� ���� ��� � �� ��� � �� ���� ���� �� SQL�� ����.

� ���� ���� �� ��� ����. �� ��, FOREIGN KEY ����� ���� ����

CREATE TABLE�� ���� �� ���� �� ��� �� 3 ��� 1� ���. FOREIGN KEY

����� � ��� ��� ���� ��� �����. TGTRLS � �� TGTRLS ����

*CURRENT � ����.

SQL� ��:

SQL ��� �� ��� ����� ��� � �� �� �� SQL�� ���� � �� ���

�.

SQL ����� ������ �� SQL�� ����� �� ��� �����. �� �� ��

� � �� ���� �����. �� RDB ���� �� ���� ��� ��� ’H’� ���

��. SQL ��� �� �� � ���� ��� ��� �� ���� � ����� ��� ��

���. �� ��� �� �� ��� ��� ���� ���� � SQL� �� �� � ����

(SQL0101 �� 5).

SQL ����� 461

Page 474: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

��� ��� � ���:

�� �� SQL ���� ���� ���, SQL ���� ���� � ����� �� ��� �

����. �� �� ����� SQL ���� ��� ��� � SQL�� �� � ����.

�� ��, SQL� DESCRIBE TABLE� ����� SQL ��� �� � SQL5041 � ��

����. SQL ���� ���� �� SQL�� ��� ����.

v COMMIT

v CONNECT

v DESCRIBE TABLE

v DISCONNECT

v RELEASE

v RELEASE SAVEPOINT

v ROLLBACK

v SAVEPOINT

v SET CONNECTION

��� ���� �:

SQL ���� �� ILE� �� ����� ���� �� ��� �� ���� �����.

ILE ���� � �� ����:

SQL�� �� � �� ��� � �� ILE ���� � �� ������ ���� ��� SQL

���� ��� ���.

��� �� �:

��� ��� ���� �� ��� RDBCNNMTH ���� �� �� ��� ����.

RDBCNNMTH(*DUW)� ��� , �� ��� ��� ��� �� �� ��� � � ����. �

�� �� �� ��� ��� �����.

� ��:

��� �� � ���� �� �� ��� �����, �� ��� ��� �� �� ��� � ��

�� ��� ���.

� �� �� �� �� ��� ���� �� ��� � ���� ���.

v SQL� � �� �� ����.

v �� ��� ���� � �� �� �� DDM �� �� ���� �� � �� �� DDM

�� ���.

v �� API ��� ���.

462 IBM i: ������ SQL �����

Page 475: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

v DRDA �� DDM� ���� �� LU 6.2 ��� ���� �� ����.

��� ��� ��:

RDB ���� �� �� �� ���� �� � � ����.

� �� �� ���� � SQL ���� �� ����� �����. SQL ���� �� �

(SAVOBJ(���� ��) ��) �� ����� ��(RSTOBJ(���� ��) ��)� � ����. �� �

��� �� ����� ���� �� SQL ���� ���� ����. RDB ���� *LOCAL

� ����, *SQLPKG ����� ���� ��� ��� ��� *PGM ������ �����.

��:

LABEL ON�� ���� SQL ���� �� ��� � ����.

��� ��:

����� ��� �� SQL ����� SQL ���� ��� � ��� �� �� ����.

�� �� ��� ���. ��� �� ���� ��� � ���. ���� � SQL ����

���� �� ��� �� � ����. ���� � ����� ��� �� �� i5/OS ����

� ���� �� �����. ����� � A�� �� � � B(SQL ���� �� ����

�)�� �� �����. � A�� ��� ����� ���� �� � ��� �� � ����.

���� SQL ���� �� �� ���� ��, SQL� � �� ���� SQL ���� �� ����

�������. � B�� SQL ���� �� ���� �� SQL ���� QRPLOBJ ����� �

����. � A� �� SQL ���� ��� �� �����. ����� �� ��� SQL ��

�� ����� �����, ����� ���� �� �� SQL ���� ���� �� ��� ��� �

��� �� �� ��� � ����.

� SQL ���� ����� ��� ����� ��� ���� ���. �� � ��� � �� �

����, STRSQL(��� SQL) ��� ���� �� ���� ��� DISCONNECT�, �� �

� ��� RELEASE� COMMIT� ��� ��� � ����. �� �� RCLDDMCNV� ���

� ��� ��� ���� ���. ����� �� ������.

SQL � ��:

�� ���� ��� ��� � ������ SQL� ��� ��� � � ��� �����.

CRTSQLxxx(SQL ��), CRTSQLPKG(SQL ��� ��) � STRSQL(SQL ��� � ��) ��� SQL

��� �� ��� ����. �� ���� ��� � � ��� ����. �� �� ��

� ���� ��(�� �� SQL��� ����� �� ��) ��� ���� �� � � ��

�� �� SQL �� ���� � ����.

SQL ����� 463

Page 476: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

SQL� �� CCSID ����

�� ������ �� � ��� ��� System i ��� �� System i ��� ����

� � �� �� � ID(CCSID) �� 65535� �� � ���.

��� ���� SQL ���� ����� ���� ��, ����� ����� �� RDB ����

�� �, SQL ����, ����� � SQL ��� ���� � CCSID�� CCSID 500�� ��

���. �� �� ��� ������ ��(DRDA)� �������. ��� ���� System i ��

�� CCSID 500�� � CCSID� ���� ����.

�� ID� ���, �, � , ���, ���� �� SQL ����� ���� �� �� ����. �

��� CCSID� �� ��� ��� ��� ����. CCSID 37� �� ��� A� CCSID 500

�� �� ��� B� �� �� �� �����.

v ��� A�� �� ″a¬b|c″ ���� ���� ����� �����.

v ��� A�� ″a¬b|c″ ����� ��� � ��� B� �����.

v CCSID 37�� ¬� �� � � x’5F’��� CCSID 500��� x’BA’���.

v ��� B�� �� ″a[b]c″� ����. �� ″a¬b|c″ ���� ��� ����� ��� , �

���� ���� �� ���.

�� ��(@), �� ��(#) � � ��($) ��� SQL ������� ��� � ���. � �

� ���� CCSID� �� ����. �� ��� �� �� ���(national extender)� ����

�� ����� � �� ��� ��� � ����.

� �� � �� ��

SQL ��� �� �� ���� �����. � �� � �� ��� �� ��� ��� � ���

�� �� ��� ���� ����.

�� ��� ������ ��(DRDA)�� TCP/IP� ���� ��� ��(connection)��� ��� ��

�� �����. � ��� SQL � � ��� ���� ������. �, ��� ���� CONNECT TO

�� ���� ��� ������(RDB)� ��� � ��� , �� �� COMMIT ��� ����

DISCONNECT �� RELEASE ALL�� ���� �����. APPC(Advanced Program-to-Program

Communication) ��� � � DDMCNV �� �� System i ���� �� � �� �� ��� ��

��� �� � ��� �� ��� ��, ���� �� �� ����.

TCP/IP ���� ��(conversation) ��� �� ����. �� ��� ��� ����. DRDA

� �� TCP/IP ��� ����, � ���� �� ��� �� �� ��� �����(��� APPC

��� �� ��� �� ). ��� ���� ��� �� ��� �� �� ��� ����. ��

� � ��� SQL ��� �� ��� ���� ��� �����.

��� �� ��� ��� �� � ����, ���� ��� ��� ���� � ��� ��� � �

�� SQL �� ��� � �����.

464 IBM i: ������ SQL �����

Page 477: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

��� � �� ���� ���� ������ �����. � ��� �� ��, �� �� � �� �

� ��� ����� ���� �� �����. ���� �� ��� ��.

PGM1� �� ��

��� PGM1� �� ����.

PGM1� ���� � SQL ���� ���� �� ��:

CRTSQLCBL PGM(PGM1) COMMIT(*NONE) RDB(SYSB)

PGM2� �� ��

��� PGM2� �� ����.

PGM2� ���� � SQL ���� ���� �� ��:

CRTSQLCI OBJ(PGM2) COMMIT(*CHG) RDB(SYSC) OBJTYPE(*PGM)

...EXEC SQLCONNECT TO SYSB

END-EXEC.EXEC SQLSELECT ...

END-EXEC.CALL PGM2....

�� 4. PGM1� �� �

...EXEC SQLCONNECT TO SYSC;

EXEC SQLDECLARE C1 CURSOR FOR

SELECT ...;EXEC SQL

OPEN C1;do {

EXEC SQLFETCH C1 INTO :st1;

EXEC SQLUPDATE ...

SET COL1 = COL1+10WHERE CURRENT OF C1;

PGM3(st1);} while SQLCODE == 0;EXEC SQLCLOSE C1;EXEC SQL COMMIT;

...

�� 5. PGM2� �� �

SQL ����� 465

Page 478: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

PGM3� �� ��

��� PGM3� �� ����.

PGM3� ���� � SQL ���� ���� �� ��:

CRTSQLCI OBJ(PGM3) COMMIT(*CHG) RDB(SYSD) OBJTYPE(*MODULE)CRTPGM PGM(PGM3) ACTGRP(APPGRP)CRTSQLPKG PGM(PGM3) RDB(SYSD)

� ����� PGM1� CRTSQLCBL ��� ���� �� ILE �������. � ����� ��

� �� ���� �����. PGM2� CRTSQLCI ��� ���� ���� ����� � ���� �

...EXEC SQLINSERT INTO TAB VALUES(:st1);

EXEC SQL COMMIT;...

�� 6. PGM3� �� �

466 IBM i: ������ SQL �����

Page 479: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

� ���� �����. PGM3� CRTSQLCI ��� ���� ����� APPGRP �� ���� ���

��. APPGRP� ACTGRP ���� ��� �� ����, CRTPGM ��� ��� �����. CRTPGM

�� ���� SYSD ��� �������� SQL ���� ���� CRTSQLPKG ��� ����. �

����, ���� � �� �� ��� ���� ���� �����. SQL� �� ��� ����

�����.

1. PGM1� ��� ��� �� ���� �����.

2. PGM1� ��� ������ SYSB� ��� SELECT�� �����.

3. �� �� PGM1� PGM2� ����, PGM2� ����� � ���� �� ���� �����.

4. PGM2� ��� ������ SYSC� �����. PGM1 � PGM2� �� �� ��� ���� �

�� � �� �� ���� PGM2� �� �� ��� ��� �� ���� PGM1� �� ��

��� ���� ����. �� � �� �����. PGM2� ��� �� ��� � ���

��. PGM2� �� �� ��� �� ��, � �� �� � , �� �� ��� � ��.

5. PGM2� PGM3� ����, PGM3� �� �� APPGRP�� �����.

6. INSERT�� �� �� APPGRP�� ���� � � ������. � � SQL�� ��� ���

��� SYSD�� �� ��� �����. ��� ������ SYSD� �� ��� TAB� �

�� �����. � ��� ��� �����. ��� � �� �� ���� �� ���� �

��� ����. �� ��� �� �� �� �� SQL�� ����� �����.

7. PGM3� ��� ��� PGM2� �����. PGM2� �� �� ��� �����.

8. �� PGM3� ���� �� �����. PGM3� �� � � ���� �� ��� ������

�. PGM3� �� �� ��� �� ��� ���� ����� �� ����� ���� ����. �

�, �� �� PGM2� �� ��� ��� � �� �� ��� �� � ��� �����.

��� ��� ������ �

�� �� ��� �� ��� ������� �� � SQL ���� �� ��� ��� �

� ����� �� � � ����.

�� ��� ���� �� ��� ���� , � �� �� ��� ���� ��� ��� �� ��

�� �� ���� �� �� ��� ���� ���� ����.

SQL ����� 467

Page 480: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

��� �� ��� �� ��� � ��

����� ����� ���� ����� ��� ��� � ����.

�� SQL ��� � � SQL�� ��� �� ��� �� � � �� SQL ������ ���

�� ��� ��� ����� ����� ��� � ����.

v ���� SQL�� ���� �� CONNECT�� � ��.

v SQL� ��� �� ���� �� �����.

�� ����� , �� SQL ��� RDB ���� �� ��� ������� �� �����.

�� ����� , �� SQL ��� �� ��� ������� �� �����.

SQL� SQL� �� ��� � � ��� �� ���� �� ��� �����. SQL� ���

� �� ��� ���.

v �� �� �� � � �� SQL ����� ���� �� ��� � ��� ����� ��

��� ����

– �� SQL ���� ���.

– SET TRANSACTION�� �� �����.

– CLOSQLCSR(*ENDJOB)� ���� ����� ���� �����.

468 IBM i: ������ SQL �����

Page 481: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� ���, �� �� �� �� SET TRANSACTION�� �� SQL� �� ��� ��

�. CLOSQLCSR(*ENDJOB)� ���� ����� �� SQL� � � ��� � � ��

� �� ��� �� �� ��� �����.

v SQL� �� ��� �� � �� ���. �� SQL ���� ���� COMMIT ��

ROLLBACK ��� ��� � ����.

v � ���.

�� ��

475 ���� ��� ���

��� SQL ��� ��� �����, � �� ���� �� ��� ���� �� ���� ���. �

���� ���� ��� ��� � ����.

��� � �� ��� �� ��� � ��

����� ����� ���� ����� ��� ��� � ����. �� SQL ��� �� ��

� �� �� � � SQL�� ���� �� CONNECT�� ��� ����� ����� ���

� ����.

�� ����� , �� SQL ��� RDB ���� �� ��� ������� �� �����.

�� ����� , �� SQL ��� �� ��� ������� �� �����.

�� ��� �� ��� �� ��� �� � ����.

v �� ��� ��� �, �� ��� �� ��� ��� �� �� �� �� ��� �� ��� �

�� �� ��� � �� �� ����.

� �� �� ��� �� � � �� �� � SQL� �� ��� ���.

v SQL� �� ��� �� , � �� �� ��� ����� ��� �.

v � ���.

�� ��

475 ���� ��� ���

��� SQL ��� ��� �����, � �� ���� �� ��� ���� �� ���� ���. �

���� ���� ��� ��� � ����.

�� ��

i� DB2� ��� �� ��� �� ��� ������� �����.

v ��� � ��(RUW)

��� � ��� � �� � ��� ����� ����� SQL� � � ��� ��� !

���. ����� ����� ����� �� �� �� �� ��� ����� ��� ���

, �� ��� � ���� ����� ��� ����� ���� � �� � �� � SQL

�� ��� � ����. ��� � ��� DRDA �� 1�� � ���.

v �� � ��(DUW)

SQL ����� 469

Page 482: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� � ��� � �� � � ����� ���� SQL� � � ��� ��� !���.

�� � SQL�� � ����� ��� �� ����� ��� � ����. �� � ���

DRDA �� 2� � ���.

�� � ��� ��� �����.

– ��� �� � ���� � ����� ��� �� �� � �

��

– ��� �� � ���� � ����� ��� �� �� � �� �� �� � ���

�� ��� �� �� � �

��� � ���� � ����� ��� ��� � ��� ��� ����� ������� �

� ��� �, ����� ����� �� ��� �, �� ����� ����� ���

�� �� ��� 2�� �� ��� ��� �� �����.

�� ���� 2�� �� ���� ��� ��� �� � �� ��� ���� ��� �����

��. �� ����� ��� � �� ���� �� ���� ��� �� ��� ����� ���

��. �� ���� ���� ��� � �� 2�� �� ����� � ���. 2�� �� �

��� ��� ��� �� �����. ��� �� ��� �� �����.

� � �

��� SQL ��� � � ����� �� �� �� ��� ��� �����.

�� ��� ����� ��, � SQL ��� ��� �� � �� ���� ��� �� �� ��, ��

�� �� � � � ��� � � ����. �� ��� ��� �� �� �� ���� insert, delete,

update �� DDL����. ��� �� �� COMMIT(*NONE)� ���� ���� �� ��

� � ����. CONNECT �� SET CONNECTION ���, SQLCA� SQLERRD(4) � SQL �� �

� DB2_CONNECTION_TYPE� �� ��� ����.

DB2_CONNECTION_TYPE �� �� ��� ����.

1. �� ��� �������� ��� ��� �����.

2. ��� ��� �������� ��� ��� ���� ����.

3. ��� ��� �������� ��� ��� �����.

4. ����� ���� ��� ������ ��� ��� �����.

SQLERRD(4) �� �� ��� ����.

1. ��� ��� �������� ��� ��� ���� ����. ��� �� �� ��� ��� �

�� � ����. �� �� ��� �� � ����.

v ��� � ��(RUW)� ���� ��� ����.

v �� � ��(DUW)� ���� ��� � �� �� ��� ����.

– ��� �� ��� � ��.

470 IBM i: ������ SQL �����

Page 483: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

– ����� ��� �� � ��� ���� ����.

– ��� ���� ����� �� �� ��� *NONE� � ��.

– �� ��� ����� ��� � �� �� ����� ���� ��� ��(�� ) ��

��� �� � ��� ���� �� ����� ��� �� �� �� �����.

– �� ��� �� �� �� �� � �� �� �� �� �� ���.

– �� ��� �� �� �� �� �� ��� ���� � �� �� �� DDM �� ��

�.

– �� ��� �� API �� �� ��� ���.

– �� ��� �� �� �� ��� ���.

�� ��� ���� �� SQL� ��� ��� 1�� �� �� DRDA ���, �

� �� � ARD ��� 2�� �� �� DRDA ��� �����.

2. ��� ��� �������� ��� ��� ���� ����. ��� �� �������� ��

� ��� �� ����.

v ��� �� ��� � ��.

v ����� ��� �� � ��� ���� ����.

v �� �� �� ��� ����.

– ��� ���� ����� �� �� ��� *NONE���.

– �� � ��� ���� � ����� ��� �� �� ����� ��� � � ��

��� ��� �� �� ��� ����.

– �� � ��� ���� � ����� ��� �� �� ��� ����(�� ).

– �� ��� �� �� �� �� � �� �� �� �� �� ����.

– �� ��� �� �� �� �� �� ��� ���� � �� �� �� DDM �� ���

�.

– �� ��� �� 1�� API �� �� ��� ���.

– �� ��� �� �� �� ��� ����.

�� ��� ���� �� SQL� 1�� DRDA �� �� ��� �����.

3. ��� ��� �������� ��� ��� �����. �� ��� ����� ��� � ���

� � ���. �� ��� �� ��� ��� � ����.

v ��� �� ��� � ��.

v ��� ���� ����� �� �� ��� *NONE� � ��.

v ����� ��� �� � ��� 2�� �� ���(�� ��)� �����.

�� ��� ���� �� SQL� 2�� DRDA �� ��� �����.

4. ��� ��� �������� ��� ��� ���� ����. �� ��� ����� ��� �

��� � � ���. �� ��� �� ��� ��� �� ����.

v ��� �� ��� � ��.

SQL ����� 471

Page 484: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

v ����� ��� �� � ��� �����.

v ����� ��� 2�� �� ���(�� ��)� ���� ��� ��� ���� �����

�� �� ��� *NONE���.

�� ��� ���� �� SQL� 1�� DRDA �� ��� �����.

5. �� ������ �� ����� ���� ���(ARD) ������ ��� ��� �����.

�� ��� ����� ��� � ��� � � ���. �� ��� ���� �� SQL�

2�� DRDA �� ��� �����.

�� � ��� �� � �� ��� ��� �� �� ��� ��� ����. SQLERRD(4)� ��

CONNECT � SET CONNECTION�� ����.

94. �� �� ��

�� �� �� �� ������ �� 2�

� ��� ���

������ �� �

� �� �� ���

�� �� ��� 1��

��� ��

SQLERRD(4)

��� ��� ��� ��� 2

��� ��� ��� � 2

��� ��� � ��� 4

��� ��� � � 4

��� � ��� ��� 2

��� � ��� � 2

��� � � ��� 4

��� � � � 4

� ��� ��� ��� 1

� ��� ��� � 2

� ��� � ��� 4

� ��� � � 4

� � ��� ��� N/A 1

� � ��� � N/A 1

� � � ��� 3

� � � � 31DRDA� ��� � ��� ���� ����� ��� �� ��� ��� � � ���(DRDA1). ���� �� i5/OS

TCP/IP� DB2 ��� ���.

472 IBM i: ������ SQL �����

Page 485: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� ��

�� ��

�� ��

449 ���� ���� SQL� ���� ��� ������� � ��

��� SQL��, SQL CONNECT�� ���� ��� ��� ������� ��� � ����. ��

� SQL� CONNECT�� CONNECT(�� 2) �&�(�� � ��)� �����.

� � �� �� ����

�� ��� ���� ��� �� � ����� ����. ����� �� ��� ���� ���� �

���� ��� �� COMMIT(*NONE)� ��� �� ����.

2�� ���� ��� �� ��� ��� ����� 1�� �� �� ��� �� �� 1�� ��

�� ��� ��� � ���.

�� �� ��� ��� �� � DDMCNV � ��� *KEEP , ���� �� DDM ��

� ������ RUW �� ��� �� CONNECT�� ����� ���.

RUW �� ��� �� � � �� �� ��� ���� � ����� ����.

v � ��� �� ���� � �� �� ��� ���� �� RUW ��� �� ��� ���

���� �� ����� ���.

v ��� ��� ��� �� ��� RUW ��� �� � �� �� ��� ��� � ����.

� � �

���� � CONNECT�� ���� �� ��� �� � ��� �� �� ���� �� �� �

� � ��� ��� � ����.

SQL �� ��� SQLCA �� DB2_CONNECTION_STATUS� SQLERRD(3)� � 1 �� 2� ��

���. �� ��� �� �����.

1. � ��� �� ��� �� �� ��� ����� ��� � ����.

�� �� ��� ��� � ����.

v ��� � ��(RUW)� ���� ��� ����.

v �� � ��(DUW)� ���� ��� �� �� �� ��� ���

– �� ��� ����� ��� � �� �� � ��� ���� �� ����� ��� ��

��� ��� ����.

– �� ��� ����.

- � � �� �� ��� �� ��� ���� ��� �� �����, �� �������

�� �����, ARD ������ ��� �� �����.

- �� �� �� �� � �� �� �� �� ����. .

- �� ��� ���� � �� �� DDM �� ����.

SQL ����� 473

Page 486: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

- 2�� API �� �� ��� ����.

- �� ��� ����� ���� �����.

v �� � ��(DUW)� ���� ��� �� �� �� ��� ���

– �� ��� ����� ��� � �� �� � ��� ���� �� ����� ��� ��

�� ��� ��� ����.

– � � �� ��� ����� � ��� �� ����� �� ��� ����� ���� ��

���.

– �� ��� ���� � �� �� DDM �� ���.

– �� �� �� �� � �� �� �� �� ���.

– 2�� API �� �� ��� ���.

2. � � ��� �� ��� �� ��� � �� �� ��� ����� ���.

�� �� ��� ��� � ����.

v �� � ��(DUW)� ���� ��� �� �� ��� ���

– ��� � ��� ���� �� �� ����� ��� �� ��� ����.

– � � �� ��� ����� �� ��� ���� ��� �� �����.

v �� � ��(DUW)� ���� ��� �� �� ��� ���

– ��� � ��� ���� �� �� ����� ��� �� ��� ����.

– � � �� �� ����� � ��� �� ���� �����.

– �� ��� ���� � �� �� DDM �� ����.

– �� �� �� �� � �� �� �� �� ����.

– 2�� API �� �� ��� ����.

�� � ��� � ��� ���� ����� ���� �� �� ��� � � � �� �� �

���� �� �� �� �� �� �� ��� ���� ��� ��� ����.

95. �� �� � �� ��

�� � �� �� ��� �� ��

������ � �� �

�� �

� �� �� �����

��1

SQLERRD(3) ��

DB2_CONNECTION_STATUS

RUW 1

DUW � 2

DUW ��� �� � 1

DUW ��� 1�� 2

DUW ��� � �� 1

DUW ��� 2�� 1

474 IBM i: ������ SQL �����

Page 487: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

95. �� �� � �� �� (��)

�� � �� �� ��� �� ��

������ � �� �

�� �

� �� �� �����

��1

SQLERRD(3) ��

DB2_CONNECTION_STATUS

1� � ��� ��� �� �����.

v ���� �� �� �� ����� ���� �� , �� ��� ���� ��� �� � DDM �� ��, ��� �

� � �� �� �� �� API� ���� �� ��� ����.

v 1��� � � �� �� ����� �� ��� ���� ������ �� ��� ���� ��� �� DDM ��

� ��� ����.

v 2��� �� �� ����� 2�� �� � �� ����� ��� �� ������, �� ��� ���� ��� ��

DDM �� � ���, �� �� API� ���� ���, �� �� �� ��� �� �� �� � ��� ����.

�� �� ��� �� �� �� ��� ���� � � ��� �� �� ��� ���. � �

�� �� �� �� ���� �� ���� ROLLBACK����. �� �� ���� SQLCODE

-918� ����.

�� � �� � ����

�� � �� ������� ��� � �� ��� �����.

v � ��� � ��� ����� ���� ����� ��� �� ��� ��� , ����

� ���� �� ��� �� ��� ���� ����� ���. ��� �� ��� ���� ����

� �� �� ��� ����� ���� � ��� �� �� �� ��� �� � ����.

v �� SQL �� ��(�: �� �, DDM � � �� �� API ��)� �� ��� �� �� ��

��� ��� ���.

v �� ��� ���� �� � ��� ���� �� ����� ��� ���� (�: TCP/IP�

���� V4R5 ���), � ��� �� ����� �� �� �����. ��� �� ��� �

��� �� �� �� �����. V5R3 ���, �� ��� ������ ��(DRDA) 2�� ��

���� �� ����� ������.

– ��� ���� �� ����

– ������ �� � ��� ��� �� �� ��� ���� ����

� ��

��� SQL ��� ��� �����, � �� ���� �� ��� ���� �� ���� ���. ��

��� ���� ��� ��� � ����.

��� �� COMMIT� ��� �� DISCONNECT��� RELEASE�� �� ���� ��� �

����. DISCONNECT�� �� ��� ���� ���� �� ����� ��� � ����.

DISCONNECT�� ���� ��� � ��� �����. RELEASE�� �� ���� �� ����

��� � ����. RELEASE�� ��� � ��� ���� ��� �� �� ��� ���. �� ��

� �� ��� �� ��� � ����. ��� �� COMMIT� ��� � � ���� ����.

ROLLBACK �� ��� COMMIT� �� ��� ��� ���� ����.

SQL ����� 475

Page 488: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

��� SQL ��� ��� �� ��� ��(DDM) ��� ��(APPC(advanced program-to-program

communication) �� �� TCP/IP ��)� �����. SQL ��� ��� � ��� ��� ����

�� ��� � ��� � � ����. ��� ��� ��� �� ���� �� ��� ��

� ��� DDMCNV � ��� �� ����. � �� �� *KEEP� System i ��� ���

���� ��� ���� �� ��� ���. � �� �� *DROP� System i ��� ���

���� ��� (drop)���. System i ��� ��� ���� ��� �� (drop)

���. *DROP� �� ��� ������.

v ���� �� ��� ������ �� � ��� ���� �� ���� ��

v ����� ���� ���� (RUW �� ��� �� ����� DUW �� ��� ��

����). ��� ��� �� RUW �� ��� �� ����� ���� � � �� ���

��� �����.

v DDM �� DRDA� ���� �� ��� �� . ���� �� �� ��� �� �� � �

�� �� �� ���� ����.

RCLDDMCNV(DDM �� �) ��� ���� ���� �� �� ��� ��� � ����(��

�� �� ).

�� ��

468 ���� ���� �� ��� �� �� �� ���

����� ����� ���� ����� ��� ��� � ����.

469 ���� ����� �� �� ��� �� �� �� ���

����� ����� ���� ����� ��� ��� � ����. �� SQL ��� �� �

�� �� �� � � SQL�� ���� �� CONNECT�� ��� ����� ����� �

�� � ����.

�� � ��

�� � ��(DUW)� ���� �� � ���� � ����� ��� � �� � ����.

��� SQL�� ��� ����� ���� � �� � ����. �� � ��� ���� � �

������� ���� � � ���� ����� ��� � ����.

�� � �� � ��

CONNECT, SET CONNECTION, DISCONNECT � RELEASE�� ���� �� � ��(DUW) �

�� ��� ��� � ����.

�� � �� CONNECT� ����� ��� RDBCNNMTH(*DUW)� ���� ����� � �

����. � CONNECT� ��� � ��� ���� ��� �� �� ��� �� ��� ����.

CONNECT�� �� ��� ������� �� ��� ���. CONNECT�� ���� � ��� �

�� � ����. � �� ��� ����� SET CONNECTION�� ���� ���. ���� ��

476 IBM i: ������ SQL �����

Page 489: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

� ��� ���� , ��� � �� ���� �� � ���� ���. RELEASE �� DISCONNECT

�� ���� ��� ��� � ����. ��� ����� ��� RELEASE� ��� �� ���

��� ���.

��� �� ��� ���� DUW ��� �� C ����� �����.

SQL ����� 477

Page 490: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

...EXEC SQL WHENEVER SQLERROR GO TO done;EXEC SQL WHENEVER NOT FOUND GO TO done;...EXEC SQLDECLARE C1 CURSOR WITH HOLD FOR

SELECT PARTNO, PRICEFROM PARTSWHERE SITES_UPDATED = 'N'FOR UPDATE OF SITES_UPDATED;

/* Connect to the systems */EXEC SQL CONNECT TO LOCALSYS;EXEC SQL CONNECT TO SYSB;EXEC SQL CONNECT TO SYSC;/* Make the local system the current connection */EXEC SQL SET CONNECTION LOCALSYS;/* Open the cursor */EXEC SQL OPEN C1;

while (SQLCODE==0){/* Fetch the first row */EXEC SQL FETCH C1 INTO :partnumber,:price;/* Update the row which indicates that the updates have been

propagated to the other sites */EXEC SQL UPDATE PARTS SET SITES_UPDATED='Y'

WHERE CURRENT OF C1;/* Check if the part data is on SYSB */if ((partnumber > 10) && (partnumber < 100))

{/* Make SYSB the current connection and update the price */EXEC SQL SET CONNECTION SYSB;EXEC SQL UPDATE PARTS

SET PRICE=:priceWHERE PARTNO=:partnumber;

}

/* Check if the part data is on SYSC */if ((partnumber > 50) && (partnumber < 200))

{/* Make SYSC the current connection and update the price */EXEC SQL SET CONNECTION SYSC;EXEC SQL UPDATE PARTS

SET PRICE=:priceWHERE PARTNO=:partnumber;

}/* Commit the changes made at all 3 sites */EXEC SQL COMMIT;/* Set the current connection to local so the next row

can be fetched */EXEC SQL SET CONNECTION LOCALSYS;}

done:

EXEC SQL WHENEVER SQLERROR CONTINUE;/* Release the connections that are no longer being used */EXEC SQL RELEASE SYSB;EXEC SQL RELEASE SYSC;/* Close the cursor */EXEC SQL CLOSE C1;/* Do another commit which will end the released connections.

The local connection is still active because it was notreleased. */

EXEC SQL COMMIT;...

�� 7. �� � �� ���� ��

478 IBM i: ������ SQL �����

Page 491: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

� ������ �� �� ����� ��� ����. �� ��� LOCALSYS� �� �

�� ��� SYSB � SYSC���. SYSB � SYSC� �� �� � ��� 2�� ��� �����.

����� � ����� ��� �� CONNECT�� ���� �� ��� �� �� ���

���. DUW� ��� �, CONNECT�� �� ��� ���� ��� �� �� ��� �� ��� �

���. �� ����� ��� ��� ��, SET CONNECTION�� ���� �� ��� �� ��

��� �����. ��� � � � ��� �� �����. �� �� ���� ���� �� �

���� ��� �����. SYSB� ���� �� SYSB� SET CONNECTION�� ���� �

� ��� � ��� �����. SYSC� �� � �����. �� �� ���� �����.

2�� ��� �����, ���� �� ���� �� ��� ����� �����. ��� WITH

HOLD� �������, �� �� � ��� �����. �� ��� �� ��� � ��� �� ��

� �� ����� ����. �� ��, �� � �� �� �� ���� ��� � � ����.

�� ���� ���� ��� ���� �� ��� �����. ��� ���� �� ��� ���

�� ��� � ���. ��� ���� ��� ���� �� ��� �����. �� ���� �� �

��� ��� �����.

� � ��

�� �� ��� ��� � �� , ����� �� ��� ����� ���� �� �� ��� �

�� ���. �� �� � � ��� �� �� ��� �� ����.

�� COBOL ��� �� ��� �� ��� �����.

�� � �� ���

�� � � ���� �� �� ��� �����.

...EXEC SQLSET CONNECTION SYS5END-EXEC....

* Check if the connection is updatable.EXEC SQL CONNECT END-EXEC.

* If connection is updatable, update sales information otherwise* inform the user.

IF SQLERRD(3) = 1 THENEXEC SQL

INSERT INTO SALES_TABLEVALUES(:SALES-DATA)

END-EXECELSEDISPLAY 'Unable to update sales information at this time'.

...

�� 8. �� �� � ��

SQL ����� 479

Page 492: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� �� ��� ���� ��, ��� ���� �� ������ ���� ����� �� ���

�� �� �� �� �� � ���� ��� � �� �����. �� ��� ���� ��

���� �� � ��� �� �� � ���� ��� � ���� ��� � ��� �����.

�� �� � �� ��� ��� �� ���� �� �� ���� �� C1 ��� ����

���� �����.

DRDA �� ���� ����

i5/OS �� ��� ������ ��(DRDA) ��� �� ������ �� ��� �� � ��� ��

���.

SELECT�� �� �� ��� SQL ��� �� �� ������ �� �� �� � ����.

�� � ��� � �� �� ��� �� ����. V5R3 ���� �� ������ � ���

�� ���� � �� � � �����. ��� � ��� �� ���� ��� � ��� �

� � ��� � � �� �� ����� �� � ��� ��� � ����.

...EXEC SQL DECLARE C1 CURSOR FOR

SELECT * FROM CORPDATA.EMPLOYEE;/* Connect to local and open C1 */EXEC SQL CONNECT TO LOCALSYS;EXEC SQL OPEN C1;/* Connect to the remote system and open C1 */EXEC SQL CONNECT TO SYSA;EXEC SQL OPEN C1;/* Keep processing until done */while (NOT_DONE) {

/* Fetch a row of data from the local system */EXEC SQL SET CONNECTION LOCALSYS;EXEC SQL FETCH C1 INTO :local_emp_struct;/* Fetch a row of data from the remote system */EXEC SQL SET CONNECTION SYSA;EXEC SQL FETCH C1 INTO :rmt_emp_struct;/* Process the data */...

}/* Close the cursor on the remote system */EXEC SQL CLOSE C1;/* Close the cursor on the local system */EXEC SQL SET CONNECTION LOCALSYS;EXEC SQL CLOSE C1;...

�� 9. DUW ����� �� ��

480 IBM i: ������ SQL �����

Page 493: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� ��

156 ���� ��� �����

����(� �� ����� � )� ��� ���� �� ��� � �� �������. �����

� ��� ���� SQL�� � � � � ����. SQL� ����� ��� ��� ����

� �� � � �����.

�� ������ �����

�� ��

SET RESULT SETS

CREATE PROCEDURE(SQL)

CREATE PROCEDURE(��)

WebSphere MQ with DB2WebSphere MQ� ������ �� ����� ��� � ��� � �� �� ��� ��� � �

�� �� � � �� ������.

WebSphere MQ� API(Application Programming Interface)� ���� ���� ��� ��� ����

�. �� API� ���� WebSphere MQ � � �� ���� ����� � ����.

v � � � ����(MQI)

v Java� WebSphere MQ ���

v JMS(Java Message Service)� WebSphere MQ ���

DB2� DB2 MQ �� �� �� ��� �� � �� �� WebSphere � � �� �����

�� � API(Application Programming Interface)� �����. SQL��� �� �� ���� DB2

������ � �� WebSphere MQ � � ��� ��� � ����. DB2 MQ �� MQI API�

�����.

WebSphere MQ ���

WebSphere MQ� � �� ���� ����� ��� ��� �����.

� �� �� ��� �����.

v � � � � ����� ���� � � ��

v � �� ���� ����� ��� � � ���

WebSphere MQ ��� ��

����, WebSphere MQ � � �� ���� ��� �(� �)� ��� ��� ��� ���

��. MQ� ��� ��� ��� ��� �����.

WebSphere MQ��, ��� � � �� �� �� � ���� �����. ������ �� �

�� ���(put) ��� � �� ��� � ����.

SQL ����� 481

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

Page 494: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

DB2� DB2 MQ �� �� �� ��� �� � �� �� WebSphere � � �� ���� �

����. � �� MQI API� �����.

MQI API� ���� � �� ��� � ��� ����� ���� ���.

��� ���

���� ��� ���� ��� �����.

�� � �� ���� ��� ���� ���� �����. � �� ���� ���� ����,

��� �� ��� ���� �����. ���� ���� ���� ����� �����

� � ���.

�� � � �� ��� �����. ��� ��� �� ��� �����.

v � �� ��(�: ��)

v �� � �� ��� �� ��(�: ��� � ��� � � ��)

MQ �� �� DB2 ��� SYSIBM.MQSERVICE_TABLE � SYSIBM.MQPOLICY_TABLE�

�� ��� ��� �����. � ���� DB2�� ���� �����, ��� �� ���� �

��� �� ��� ���� �������. DB2� �� ��� �� � ��� ��� ���

� �� �� ��� ���� �����. ��� ��� DB2.DEFAULT.SERVICE� ��� ���

DB2.DEFAULT.POLICY���.

����� ����� � ���� �� �� � ��� ���� � ��� ���. �����

� ��� ���� � ��� ��� ��� ��� ���� ���. ������ DB2 MQ ��

��� � � ��� �����.

DB2 MQ ��:

��� ������ � �� ���� ������ � �� ���� ��� ����. DB2 MQ

��� DB2 ��� SYSIBM.MQSERVICE_TABLE�� �����. ����� ����� DB2 MQ

�� ��� �, ����� ��� ���� ���� SYSIBM.MQSERVICE_TABLE�� ���

����.

SYSIBM.MQSERVICE_TABLE� DB2�� ���� �����, ��� �� �� ��� ���

� �������. DB2� �� ��� �� �� �����. ��� ��� DB2.DEFAULT.SERVICE

���.

INSERT�� ���� ��� � ��� ��� � ����. �� ��, �� ���� � ��

MYSERVICE� �����. � � ���� MQ ��� � ���� MYQUEUE �� �� �����.

INSERT INTO SYSIBM.MQSERVICE_TABLE (SERVICENAME, QUEUEMANAGER, INPUTQUEUE)VALUES('MYSERVICE', SPACE(48), 'MYQUEUE')

482 IBM i: ������ SQL �����

|

|

|

|

|

||

|

|

||

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|||

Page 495: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

��� UPDATE�� ���� ��� �� � ����(��� ��� ��). ���� ���, DB2

� �� ��� ����, �� MQ �� ��� � � � �� ��� �� �� ���

� ���� ���. �� ���� �� �� MYQUEUE2� ��� MYSERVICE ��� ����

�.

UPDATE SYSIBM.MQSERVICE_TABLESET INPUTQUEUE = 'MYQUEUE2'WHERE SERVICENAME = 'MYSERVICE'

�: ��� �� DB2.DEFAULT.SERVICE�� �� ���� ��� �� ��

SYSTEM.DEFAULT.LOCAL.QUEUE� �� MQ �� ����. �� DB2 ��� ���� ��� �

� �� DB2MQ_DEFAULT_Q���. �� DB2 ���� ���� ��, DB2MQ_DEFAULT_Q� �

� � �� �� ��� ��� ��� ��� � ����. �� �� ��� ����.

CL: CRTMQMQ QNAME(DB2MQ_DEFAULT_Q) QTYPE(*LCL);

UPDATE SYSIBM.MQSERVICE_TABLESET INPUTQUEUE = 'DB2MQ_DEFAULT_Q'WHERE SERVICENAME = 'DB2.DEFAULT.SERVICE'

DB2 MQ ��:

��� MQ � �� ���� ��� �����. DB2 MQ ��� DB2 ���

SYSIBM.MQPOLICY_TABLE�� �����. ����� ����� DB2 MQ �� ��� �, ��

��� ���� ��� ���� SYSIBM.MQPOLICY_TABLE�� ��� ����.

SYSIBM.MQPOLICY_TABLE� DB2�� ���� �����, ��� �� ���� ����

�� ��� ���� �������. DB2� �� ��� �� �� �����. ��� ���

DB2.DEFAULT.POLICY���.

INSERT�� ���� ��� � ��� ��� � ����. �� ��, �� ���� � �� MYPOLICY

� �����. SYNCPOINT � �� ‘N’���, MYPOLICY� ���� MQ �� ���� �� �

��� ����.

INSERT INTO SYSIBM.MQPOLICY_TABLE (POLICYNAME, SYNCPOINT, DESCRIPTION)VALUES('MYPOLICY', 'N', 'Policy to not run under a transaction')

��� UPDATE�� ���� �� � ����(��� ��� ��). ���� ���, DB2� ��

��� ����, �� MQ �� ��� � � � �� ��� �� �� ���� ����

���. �� ���� ��� ��� 5� ��� MYPOLICY ��� �����.

UPDATE SYSIBM.MQPOLICY_TABLESET SEND_RETRY_INTERVAL = 5000WHERE POLICYNAME = 'MYPOLICY'

SQL ����� 483

|

|

|

|

||||

|

|

|

|

||||||

|

|

|

|

|

|

|

|

|

|

|||

|

|

|

||||

Page 496: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

DB2 MQ ��

DB2 MQ �� ���� � �� � � �� ����� � � ��� � �� ��� � ����.

� � �� ��� ��� ��� ��� � ����.

DB2 MQ �� �� ��� ��� �����.

v �� � "�. ��� ���� ����.

v �� �� ��. �� �� �� � �� ��� ���� � ����� ��� �� � �����.

v �� � ��. �� ������ ��� �� ��� ��� ���.

WebSphere MQ ��� DB2� �� System i� �����. DB2 MQ �� DB2�� ���� MQI

API� ���� WebSphere MQ ��� �� � �� �����.

�� � DB2 MQ �� �� ����.

96. DB2 MQ �� �

��� �� ��

MQREAD MQREAD� service-policy� �� ��� ����, receive-service� �� MQ ����

VARCHAR ��� � �� �����. � ��� � ��� � �� ���� � �� �

�� �����. ��� � �� � �� � ��� �����.

MQREADCLOB MQREADCLOB� service-policy� �� ��� ����, receive-service� �� MQ �

��� CLOB ��� � �� �����. � ��� � ��� � �� ���� � ��

� �� �����. ��� � �� � �� � ��� �����.

MQRECEIVE MQRECEIVE� service-policy� �� ��� ����, receive-service� �� MQ ���

� VARCHAR ��� � �� �����. � ��� ��� � �� �����. correlation-id

� �� ��� �� ID� �� � � � �� �����. correlation-id� ����

�� �� % �� �� � �� �����. ��� � �� � �� � ��� �

����.

MQRECEIVECLOB MQRECEIVECLOB� service-policy� �� ��� ����, receive-service� �� MQ

���� CLOB ��� � �� �����. � ��� ��� � �� �����. correlation-id

� �� ��� �� ID� �� � � � �� �����. correlation-id� ����

�� �� �� �� � �� �����. ��� � �� � �� � ��� �

����.

MQSEND MQSEND� service-policy� �� ��� ����, receive-service� �� MQ ���

VARCHAR �� CLOB �� msg-data� ���� �����. � ��� �� � � �

� ID� correlation-id� ��� � ����. ���� ���� 1, ���� 0���.

�:

1. VARCHAR �� �� CLOB ���� � �� ����� ��� � ����. VARCHAR ��� �� � �� � �

�� 32000���. CLOB ��� �� � �� � ��� 2MB���.

�� � DB2 MQ ��� �� ����.

484 IBM i: ������ SQL �����

|

|

|

|

|

|

|

|

|

|

||

||

||||

||||

||||||

||||||

||||

|

|

||

|

Page 497: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

97. DB2 MQ ��� �

��� �� ��

MQREADALL MQREADALL� service-policy� �� ��� ����, receive-service� �� MQ ��

�� VARCHAR ��� � � � � � ������ �� ���� �����. � ��

� ��� � �� ���� ����. num-rows� �� � num-rows�� � �� �

����. num-rows� ���� �� �� ��� �� � �� �����.

MQREADALLCLOB MQREADALLCLOB� service-policy� �� ��� ����, receive-service� �� MQ

���� CLOB ��� � � � � � ������ �� ���� �����. � ���

��� � �� ���� ����. num-rows� �� � num-rows�� � �� ��

���. num-rows� ���� �� �� ��� �� � �� �����.

MQRECEIVEALL MQRECEIVEALL� service-policy� �� ��� ����, receive-service� �� MQ �

��� VARCHAR ��� � � � � � ������ �� ���� �����. � �

�� ��� � �� �����. correlation-id� �� ��� �� ID� �� � �

� �����. correlation-id� ���� �� �� ��� �� � �� �����.

num-rows� �� � num-rows�� � �� �����. num-rows� ���� ��

�� ��� �� � �� �����.

MQRECEIVEALLCLOB MQRECEIVEALLCLOB� service-policy� �� ��� ����, receive-service� �� MQ

���� CLOB ��� � � � � � ������ �� ���� �����. � ���

��� � �� �����. correlation-id� �� ��� �� ID� �� � �� �

����. correlation-id� ���� �� �� ��� �� � �� �����. num-rows

� �� � num-rows�� � �� �����. num-rows� ���� �� ��

��� �� � �� �����.

�:

1. VARCHAR �� �� CLOB ���� � �� ����� ��� � ����. VARCHAR ��� �� � �� � �

�� 32000���. CLOB ��� �� � �� � ��� 2MB���.

2. DB2 MQ ��� �� �� ����� � � � � �� ����.

DB2 MQ � �

DB2 MQ �� �����, IBM i� IBM MQSeries®� � � ��� �� ��� ���.

� � ��� �� � � ��� Websphere MQSeries Information Center�� � � ����. IBM

i� IBM MQSeries �� ���� �� �� ��� �����.

1. MQSeries ������ �����.

CL: STRSBS SBSD(QMQM/QMQM);

2. ��� MQ � � � ���� �����. �� �� ��� ����.

CL: ADDLIBLE QMQM;CL: CRTMQM MQMNAME(MJAQM) DFTQMGR(*YES);

� ��� CCSID� MQ� �� 1� ���� ����� � ����. MQ � � � ����

CCSID� ��� � � ��� CCSID� ��� �����.

3. ��� � � � ���� �����.

CL: STRMQM MQMNAME(MJAQM);

SQL ����� 485

||

||

|||||

|||||

|||||||

|||||||

|

|

|

||

|

|

|

|

|

||

|

|||

|

|

|

||

Page 498: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

DB2 MQ �

DB2 MQ ����� DB2 MQ �� ���� �� � �� ��� ����.

DB2 MQ ���� SYSIBM.MQSERVICE_TABLE � SYSIBM.MQPOLICY_TABLE���. � ���

� ���� �����. ���� �� DB2� ��� ��� ��� ��(DB2.DEFAULT.SERVICE)

� ��� ��� ��(DB2.DEFAULT.POLICY)�� �����. ����� �� ���� ��� ��

� ��� ��� ��� � ����. ���� �� �� ���� �� �� � ��� ��� � ���

�.

�� � SYSIBM.MQSERVICE_TABLE� � ����.

98. SYSIBM.MQSERVICE_TABLE �

� �� ��

SERVICENAME � �� MQ �� � �� ��� ���� ����.

� � SYSIBM.MQSERVICE_TABLE ���� 1� ����.

QUEUEMANAGER � �� MQ �� ��� �� � ���� �� ����.

� 48�� ���� ���� ��� MQSeries � ���� �� �����.

INPUTQUEUE � �� MQ �� � �� ��� �� �� �� ����.

CODEDCHARSETID � �� MQ �� ����� � �� ���� �� �� � ID(CCSID)� ���

�.

� � � � ��(MQMD)� CodedCharSetId �(MDCSI)� ����. MQ �

� � � �� �� ���� CodedCharSetId �� ����.

� � ��� �� -3���. � �� DB2� CodedCharSetId �(MDCSI)� ��� �

CCSID� ��� ���.

ENCODING � �� MQ �� ����� � �� �� ���� �� �� �� ����.

� � � � ��(MQMD)� Encoding �(MDENC)� ����. MQ �� �

� �� �� ���� Encoding �� ����.

� � ��� �� 0���. � �� Encoding �(MDENC)� MQENC_NATIVE ��

� ����.

DESCRIPTION � �� ��� � � �� ����.

�� � SYSIBM.MQPOLICY_TABLE� � ����.

99. SYSIBM.MQPOLICY_TABLE �

� �� ��

POLICYNAME � �� MQ �� � �� ��� ���� ����.

� � SYSIBM.MQPOLICY_TABLE ���� 1� ����.

486 IBM i: ������ SQL �����

|

|

|

|

|

|

|

|

||

||

||

|

||

|

||

|||

||

||

||

||

||

|||

|

||

||

||

|

Page 499: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

99. SYSIBM.MQPOLICY_TABLE � (��)

� �� ��

SEND_PRIORITY � �� � �� ��� ����.

� � � � ��(MQMD)� Priority �� ����. MQ �� � � �� �

� ���� Priority �� ����.

� � ��� �� -1���. � �� MQMD� Priority ��

MQQPRI_PRIORITY_AS_Q_DEF ��� ����.

SEND_PERSISTENCE � � ��� �� �� � ���� ����� ����� ��� � �� ����

� ��� ����.

� � � � ��(MQMD)� Persistence �� ����. MQ �� � � ��

�� ���� Persistence �� ����.

� � ��� �� ��� ����.

Q MQMD� Persistence �� MQPER_PERSISTENCE_AS_Q_DEF ��� �

���. � �� ������.

Y MQMD� Persistence �� MQPER_PERSISTENT ��� ����.

N MQMD� Persistence �� MQPER_NOT_ PERSISTENT ��� ����.

SEND_EXPIRY � �� � � �� ��(1/10 ��)� ����.

� � � � ��(MQMD)� Expiry �� ����. MQ �� � � �� �

� ���� Expiry �� ����.

��� �� -1���. � �� Expiry �� MQEI_UNLIMITED ��� ����.

SEND_RETRY_COUNT � �� ����� ���� MQ �� � � ��� ���� ��� ����.

��� �� 5���.

SEND_RETRY_INTERVAL � �� � �� ����� ��� �� ��� ��(��)� ����.

��� �� 1000���.

SEND_NEW_CORRELID � � �� ID� MQ ��� �� ���� ���� �� �� ID� �� �

�� �����. �� ID� � � ��(MQMD)� CorrelId ��� ����.

� � ��� �� ��� ����.

N MQMD� CorrelId �� 2� 0�� ����. � �� ������.

Y � ���� � �� ID� �� MQMD� CorrelId �� � ��� �

��� �����. � ‘Y’ �� � � �� ��(MQPMO)� Options ���

MQPMO_NEW_CORREL_ID ��� ��� �� ����.

SQL ����� 487

|

||

||

||

||

|||

||

|

||

|

||

||

||

||

|

||

|

||

|

|||

|

||

||

|

|

Page 500: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

99. SYSIBM.MQPOLICY_TABLE � (��)

� �� ��

SEND_RESPONSE_MSGID � � � � ��(MQMD)� MsgId �� � � �� � �� �� ��� ��

� �����.

� � MQMD� Report �� ����. MQ �� � � �� �� ���� Report

�� ����.

� � ��� �� ��� ����.

N MQMD� Report ��� MQRO_NEW_MSG_ID ��� ����. � ��

������.

P MQMD� Report ��� MQRO_PASS_MSG_ID ��� ����.

SEND_RESPONSE_CORRELID � � � � ��(MQMD)� CorrelID �� � � �� � �� �� ��� �

�� �����.

� � MQMD� Report �� ����. MQ �� � � �� �� ���� Report

�� ����.

� � ��� �� ��� ����.

C MQMD� Report ��� MQRO_COPY_MSG_ID_TO_CORREL_ID ���

����. � �� ������.

P MQMD� Report ��� MQRO_PASS_CORREL_ID ��� ����.

SEND_EXCEPTION_ACTION � � �� �� ��� � � �� � �� �� ��� ��� �����.

� � � � ��(MQMD)� Report �� ����. MQ �� � � �� �

� ���� Report �� ����.

� � ��� �� ��� ����.

Q MQMD� Report ��� MQRO_DEAD_LETTER_Q ��� ����. � �

� ������.

D MQMD� Report ��� MQRO_DISCARD_MSG ��� ����.

P MQMD� Report ��� MQRO_PASS_DISCARD_AND_EXPIRY ���

����.

488 IBM i: ������ SQL �����

|

||

|||

||

|

||

|

||

|||

||

|

||

|

||

||

||

|

||

|

||

||

|

Page 501: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

99. SYSIBM.MQPOLICY_TABLE � (��)

� �� ��

SEND_REPORT_EXCEPTION � � � �� �� �� �� ��� � � �� � � �� ����

���, � �� ��� � � �� �� �� ��� �����.

� � � � ��(MQMD)� Report �� ����. MQ �� � � �� �

� ���� Report �� ����.

� � ��� �� ��� ����.

N �� � � �� ��� ��� �����. Report ��� �� ���

��� ����. � �� ������.

E MQMD� Report ��� MQRO_EXCEPTION ��� ����.

D MQMD� Report ��� MQRO_EXCEPTION_WITH_DATA ��� ��

��.

F MQMD� Report ��� MQRO_EXCEPTION_WITH_FULL_DATA ���

����.

SEND_REPORT_COA � � � �� �� �� ��� � � ���� COA(confirm-on-arrival) � � �

� ����� ���, ���� COA � �� � ��� �����.

� � � � ��(MQMD)� Report �� ����. MQ �� � � �� �

� ���� Report �� ����.

� � ��� �� ��� ����.

N COA � �� ���� �� �� �����. Report ��� �� ��� �

�� ����. � �� ������.

C MQMD� Report ��� MQRO_COA ��� ����.

D MQMD� Report ��� MQRO_COA_WITH_DATA ��� ����.

F MQMD� Report ��� MQRO_COA_WITH_FULL_DATA ��� ���

�.

SEND_REPORT_COD � � ������ �� ��� � �� ��� ��� � � ����

COD(confirm-on-delivery) � � �� ����� ���, ���� COD � ��

� ��� �����.

� � � � ��(MQMD)� Report �� ����. MQ �� � � �� �

� ���� Report �� ����.

� � ��� �� ��� ����.

N COD � �� ���� �� �� �����. Report ��� �� ��� �

�� ����. � �� ������.

C MQMD� Report ��� MQRO_COD ��� ����.

D MQMD� Report ��� MQRO_COD_WITH_DATA ��� ����.

F MQMD� Report ��� MQRO_COD_WITH_FULL_DATA ��� ���

�.

SQL ����� 489

|

||

|||

||

|

||

|

||

||

|

||

|

|||

||

|

||

|

||

||

||

|

||||

||

|

||

|

||

||

||

|

Page 502: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

99. SYSIBM.MQPOLICY_TABLE � (��)

� �� ��

SEND_REPORT_EXPIRY � � � �� ������ ���� �� ���� � ���� �� � �

�� ����� ���, ���� � � �� � ��� �����.

� � � � ��(MQMD)� Report �� ����. MQ �� � � �� �

� ���� Report �� ����.

� � ��� �� ��� ����.

N �� � � �� ���� ��� �����. Report ��� �� ���

��� ����. � �� ������.

C MQMD� Report ��� MQRO_EXPIRATION ��� ����.

D MQMD� Report ��� MQRO_EXPIRATION_WITH_DATA ��� ��

��.

F MQMD� Report ��� MQRO_EXPIRATION_WITH_FULL_DATA ���

����.

SEND_REPORT_ACTION � � ���� ������ �� �� ��(PAN), �� �� ��(NAN) �� � ��

����� ��� �����.

� � � � ��(MQMD)� Report �� ����. MQ �� � � �� �

� ���� Report �� ����.

� � ��� �� ��� ����.

N �� ��� ���� ��� �����. Report ��� �� ��� ��� �

���. � �� ������.

P MQMD� Report ��� MQRO_PAN ��� ����.

T MQMD� Report ��� MQRO_NAN ��� ����.

B MQMD� Report ��� MQRO_PAN � MQRO_NAN ��� ����.

SEND_MSG_TYPE � �� � �� ��� ����.

� � � � ��(MQMD)� MsgType �� ����. MQ �� � � ��

�� ���� MsgType �� ����.

� � ��� �� ��� ����.

DTG MQMD� MsgType �� MQMT_DATAGRAM�� ����. � �� ��

����.

REQ MQMD� MsgType �� MQMT_REQUEST� ����.

RLY MQMD� MsgType �� MQMT_REPLY� ����.

RPT MQMD� MsgType �� MQMT_REPORT� ����.

490 IBM i: ������ SQL �����

|

||

|||

||

|

||

|

||

||

|

||

|

|||

||

|

||

|

||

||

||

||

||

|

||

|

||

||

||

Page 503: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

99. SYSIBM.MQPOLICY_TABLE � (��)

� �� ��

REPLY_TO_Q � �� MQGET ��� ��� ������ �� � � � �� ��� � � �

� �� ����.

� � � � ��(MQMD)� ReplyToQ �� ����. MQ �� � � ��

�� ���� ReplyToQ �� ����.

� � ��� �� SAME AS INPUT_Q���. � �� �� � � ��� �� �

�� �� � ��� ����. ��� ���� �� �� ��� ���

� ������ ����.

REPLY_TO_QMGR � �� �� � � � �� ��� � ���� �� ����.

� � � � ��(MQMD)� ReplyToQMgr �� ����. MQ �� � �

�� �� ���� ReplyToQMgr �� ����.

� � ��� �� SAME AS INPUT_QMGR���. � �� �� � � ��� ��

��� �� � ������ ����. ��� ���� �� �� ���

��� � ������ ����.

RCV_WAIT_INTERVAL � �� DB2� �� � �� ����� ���� ��(��)� ����.

� � � � ���� ��(MQGMO)� WaitInterval �� ����. MQ �� �

� �� �� ���� WaitInterval �� ����.

��� �� 10���.

RCV_CONVERT � � � �� ����� ���� ���� �� �� ��� ��

CodedCharSetId � Encoding �� ����� ��� ����.

� � � � ���� ��(MQGMO)� Options �� ����. MQ �� �

� �� �� ���� Options �� ����.

� � ��� �� ��� ����.

Y MQGMO� Options ��� MQGMO_CONVERT ��� ����. � ��

������.

N �� ���� ���� ��� �����.

RCV_ACCEPT_TRUNC_MSG � � �� � � �� �� � MQ �� ��� �����.

� � � � ���� ��(MQGMO)� Options �� ����. MQ �� �

� �� �� ���� Options �� ����.

� � ��� �� ��� ����.

Y MQGMO� Options ��� MQGMO_ACCEPT_TRUNCATED_MSG ���

����. � �� ������.

N �� � �� ��� ��� �����. � �� ��� ���� �� �

MQ �� ��� �����.

����: � � Y� �����. � � � ��� �� � �� ����� ��

�� MQ �� ��� ��� � �� ��� � �� ��� � � ����.

SQL ����� 491

|

||

|||

||

|||

||

||

|||

||

||

|

|||

||

|

||

|

||

||

||

|

||

|

||

|

|

|

Page 504: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

99. SYSIBM.MQPOLICY_TABLE � (��)

� �� ��

REV_OPEN_SHARED � � � �� �� � �� � �� �����.

� � MQOPEN ��� Options ���� ����. MQ �� � � �� ��

���� Options ���� ����.

� � ��� �� ��� ����.

S MQOO_INPUT_SHARED ��� ����. � �� ������.

E MQ �� MQOO_INPUT_EXCLUSIVE ��� ����.

D MQ �� MQOO_INPUT_AS_Q_DEF ��� ����.

SYNCPOINT � � MQ �� �� � ��� ��� ��� ����� ��� ����.

� � ��� �� ��� ����.

Y MQ �� �� � ��� ��� ��� ��� �����. MQ �

� ������ ����� ��� � �� ������. � �� ������.

N MQ �� �� � ��� ���� ���� ��� �����. MQ

�� ������ ����� �� ���� � �� ������.

DESCRIPTION � �� ��� � � �� ����.

DB2 MQ CCSID ��

� �� �� �� � �� DB2� �� � CCSID� ��� � ����. � �� ��� �

�� � � �� Websphere MQ� �� �� CCSID� ��� � ����.

MQSEND �� msg-data ���� � CCSID� ��� �����. msg-data� �� ���� ��

�� � ���� � CCSID� �����. �� ��, CCSID� 1200 msg-data� �� ����

���� � ���� � � ���� Websphere MQ� ���� �� � CCSID� �����. �

��� � ���� ��� ����� ���� CCSID� � CCSID ��� ��� ����.

Websphere MQ� MQSEND� ��� � � � ���� CCSID ��� ���� ����. DB2�� �

��� � � ���� � � ���� ���� ��� � � ���� ��� CCSID� � ���

� �����. ���� CCSID� MQSEND �� �� ��� CODEDCHARSETID� �� �

� �� ����. CODEDCHARSETID� ���� -3���. � �� ���� CCSID� � ��� CCSID

�� ����. -3� �� �� �� CODEDCHARSETID� ���� , ���� MQSEND� ��

� � ���� DB2� �� � CCSID� ���� ���� �� CCSID� ����� � ��

���.

DB2 MQ �� �� ��� �� � �� � ���� msg-data �� ���(�� DB2 MQ �

�� �� MSG �� )� � ��� CCSID� �����. DB2� ��� ���� ��� ��� �

�� ���� �� Websphere MQ� ����. Websphere� � � ���� ��� � � ��� �

� ���� RCV_CONVERT �� ‘N’�� ��� ��� � ����.

492 IBM i: ������ SQL �����

|

||

||

||

|

||

||

||

||

|

||

|

||

|

|||

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

Page 505: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� ��� CODEDCHARSETID� � -3� �� , DB2� Websphere MQ� ��� ��� �

�� � CCSID� ����� �����. -3� �� �� CODEDCHARSETID� ���� DB2�

Websphere MQ� ��� ��� � �� � CCSID� ����� �����. � �� ��� ����

�� ���� ���� CODEDCHARSETID� -3� �� �� �� ���� �� msg-data �� �

�� � MSG �� � DB2� �� � ��� CCSID� ��� ����� ���� ����.

� �� ��� ��� � ��� �� � ����. �� ��� RCV_ACCEPT_TRUNC_MSG ��

‘Y’��, � �� � � ��. RCV_ACCEPT_TRUNC_MSG �� ‘N’� � �� �� ��

�� ��� �����.

Websphere MQ ����

Websphere MQ� ����� �� �� ���� ���� � �� �� � �����. �����

�� � �� �� �� ���� ������ DB2 ��� �� �� ��� � � ����.

Websphere MQ� ���� ��� ��� ��� ����� �� ���� ���(�: CICS®, Encina

� Tuxedo)� �� ���� ��� � ����. ���� � ���� �� ���� ���� �� � �

��� Websphere MQSeries Information Center�� � � ����.

Websphere� IBM i �� ��� �� ���� ����� ��� �� ����. �� ��� SQL��

��� �� ��� �� ���� ���� ��� � DB2�� ���� �����. ����, �� ��

�� *ACTGRP���. �� � �� ��� DB2 �� � MQ �� IBM i �� ��� �� �

��� �� ����� ����� ���, *JOB ��� �� ��� ���� ���. �� ��, ��

� CL ��� �� �� ��� ��� *JOB ��� �����.

ENDCMTCTLSTRCMTCTL LCKLVL(*CHG) CMTSCOPE(*JOB)

�� � �� *JOB �� �� ��� �����, ������ �� � �� �� �� CL ��� �

���� ���. �� ��� SQL CALL��� ��� � �� START_JOB_LEVEL_COMMIT �

���� �����.

1. MJASRC/CL�� JOBSCOPE �� � ��� �� ��� ������.

PGMENDCMTCTLSTRCMTCTL LCKLVL(*CHG) CMTSCOPE(*JOB)ENDPGM

2. �� ��� MQ � � � ���� ���� CL ����� ������.

CRTCLPGM PGM(MJATST/JOBSCOPE) SRCFILE(MJASRC/CL)

3. CL ����� ���� SQL �� ����� ������.

SQL ����� 493

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|||

|

|

|

|

|||||

|

||

|

Page 506: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

CREATE PROCEDURE MJATST.START_JOB_LEVEL_COMMIT ()EXTERNAL NAME 'MJATST/JOBSCOPE'PARAMETER STYLE GENERAL

����� �� � �� � � ��� � ����. *JOB �� �� ��� ���� MQ ��

� DB2 ��� ����� �� ��� � ����. �� ��, �� INSERT� � MQSEND ��

�� ������ �����. ����� ���� �� � �����. ����� ���� �

� � �����.

CALL MJATST.START_JOB_LEVEL_COMMIT;INSERT INTO MJATST.T1

VALUES(1);VALUES MQSEND('A commit test message');COMMMIT;

INSERT INTO MJATST.T1VALUES(2);

VALUES MQSEND('A rollback test message');ROLLBACK;

Websphere MQ� ����� �� �� ���� ���� � �� �� � �����. �� DB2 MQ

��� �� ��� �� �����. � ���� SYNCPOINT ��� ����. ��� ��

SYNCPOINT � �� ‘N’ � ��� ���� DB2 MQ �� ����� ���� ����.

��� �� SYNCPOINT � �� ‘Y’ � ��� ��� �� �� ��� DB2 MQ �

� ����� �����.

WebSphere MQ�� � ���

DB2 MQ ��� � �� �� � ��� �� ������ ������ �� DB2 ����

�� ��� ��� � ����. ������ ������ ��� ����� ��� ��� ���

� ����.

��� ������, ����� A� MQSEND �� ���� ��� �� ���� ��� ��� �

� �� ��� �����. DB2� ������ ���� � ��� ���� MQ �� �����. �

� ����� B� MQRECEIVE �� ���� ��� ��� �� �� �� ��� � ��

��� ������ �����. DB2� ������ ���� � ��� ���� MQ �� ����

�.

������ ������ � �� ���� ��� � �� ��� � ����.

v ��� ���

��� �� ��� ���� � � ���� �����. �� ��� �� ������ �����.

���� ��� ��� �� ��� �� ������ ���� �����.

v � �� ��

494 IBM i: ������ SQL �����

||||

|

|

|

|

|||||||||||

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

Page 507: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

� ��� �� ������ � ����� ���� �� �����. ����� ����

� � ��� �� ��, � �� � ��� �� � �� �����. ������ �

���� �� ��� ��� � �� ��� � ��� ��� � ����.

v ����� ��

� �� �� �� ���� ���, �� �� �� ��� ���� �� � �� �����. �

��� ��� � � �� �� �� ��� � � ����. � ��� �� � � ��� 497 �

��� �WebSphere MQ� ����� � ���� ������.

�� ����� � � �� ���� ��� � �� �����. �� A� �� B� � �� ���

� �����.

1. DB2 ������ �� B�� ��� �� ��� �� �� ��� ���� MQSEND � ��

� �����.

2. MQ �� � �� ��� � � �����. �� A� WebSphere MQ ��� � �� � �

�� A� �� MQ �� � ��� �� ��� �����. ��� ��� �� B� ��� �

����. �� �� � �� �� B� WebSphere MQ ��� ���� �� ��� �� ����

��.

3. �� B� WebSphere MQ ��� �� A� ���� � �� � � �� B� �� �� � �

� ���.

4. �� B� WebSphere MQ ������ �� ��� � �� �����.

MQI API�� ��� ���� �� DB2 MQ �� ��� �����. ���� ��� MQ API

� �� MQ �� � � MQ ��� ���. �� � � ����� Websphere MQSeries

Information CEnter �� ���� ���. �� ��, ��� ��� �� MQSeries � ���� �

� �� �� ��� �����.

SQL State: 38401Vendor Code: -443Message: [SQL0443] cc=2:rc=2058:MQCONN FAILED

� �� �� � 2058� MQCONN API� ����� ����. Websphere MQSeries Information

Center�� �� � 2058� � � �� ����.

WebSphere MQ�� ��� ��

WebSphere MQ�� � �� ��� � ��� ���, ���� ��� �� � �� ��� ����.

�� ��� � �� send and forget�� ���. ���� � �� ��� � �� ��� �

��� � �� �� WebSphere MQ� ����.

WebSphere MQ�� � �� ����� MQSEND� ������. � ��� ��� ����

� �� ��� ������. �� �� ��� ����.

VALUES MQSEND(LASTNAME CONCAT ' ' CONCAT FIRSTNAME);

SQL ����� 495

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

||||

|

|

|

|

|

|

|

|

||

Page 508: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� ��� ��� �� DB2.DEFAULT.SERVICE� SYNCPOINT �� ‘Y’ ��� ��

DB2.DEFAULT.POLICY� �����. � MQSEND �� ���� �� �����, COMMIT�� �

�� �� ����� ���.

VALUES MQSEND('Testing msg');COMMIT;

SYNCPOINT �� ‘N’ ��� ��� COMMIT�� ���� ��� ���. �� ��,

MYPOLICY2 ��� SYNCPOINT �� ‘N’�� �����. �� SQL�� ���� COMMIT��

�� �� � �� �����.

VALUES MQSEND('DB2.DEFAULT.SERVICE', 'MYPOLICY2', 'Testing msg')

� � ��� SQL�, ��, � � ��� �� ���� �� ��� �����. VARCHAR

LASTNAME, FIRSTNAME � DEPARTMENT� �� EMPLOYEE ���� �����. DEPARTMENT

5LGA� �� � ��� �� � ��� �� � �� ����� �� SQL SELECT�� ����

��.

SELECT MQSEND(LASTNAME CONCAT ' ' CONCAT FIRSTNAME CONCAT ' ' CONCAT DEPARTMENT)FROM EMPLOYEEWHERE DEPARTMENT = '51GA';

COMMIT;

WebSphere MQ�� ��� ��

WebSphere MQ��, ����� � �� ��� ��� � ����. �� � �� ��� � ��� �

�� �����. �� �� ��� ��� � �� ���� ��� �� ��� �����.

�� ��� ���� ��� � �� � �� �� � ���, �� ��� ���� ��� � ��

�� � �� � � ���� �����.

�� SQL�� ��� �� � ���� �� �� ��� � �� ���� . SQL��

VARCHAR(32000) ���� �����. ��� � �� � �� � ��� �����. MQREAD

� �� ��� ���� COMMIT�� ���� ��� ���.

VALUES MQREAD()

�� SQL�� ���� �� ��� �� �� �����. ��� �� �� ��� T� ��� ��

� �� �� �� � �� � � �� �� ������ �����. ��� �� ���� � �

� � � ��� , ��� �� ������ ����. SELECT�� � �� ����� � �� �

����.

SELECT T.*FROM TABLE ( MQREADALL() ) AS T;

496 IBM i: ������ SQL �����

|

|

|

|||

|

|

|

||

|

|

|

|

|||||

|

|

|

|

|

|

|

|

||

|

|

|

|

|||

Page 509: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� ���� �� � �� �����. ��� �� �� ��� T� ��� ��� �� �� ��

� �� � � �� �� ������ �����.

SELECT T.MSGFROM TABLE ( MQREADALL() ) AS T;

�� SQL�� � ��� � �� ��(��)���. SELECT�� VARCHAR(32000) ���� ���

��. � MQRECEIVE �� ���� �� �����, COMMIT�� � �� �� ����� ���.

� ��� � �� � ��� ��� �� ��� ����.

VALUES MQRECEIVE()COMMIT;

� VARCHAR(32000) � �� MESSAGES ���� �� �����. �� SQL INSERT�� �

�� �� �� �� � �� MESSAGES ���� �����.

INSERT INTO MESSAGESSELECT T.MSGFROM TABLE ( MQRECEIVEALL() ) AS T;

COMMIT;

WebSphere MQ� ���� � �

����� � ��� �� ��� ����� ����� �� �� �� � �����. �����

��� �����, WebSphere MQ� ������ �� ���� �� ��� �����.

�� � �� �� ��� ���� ��� ������ �� ������ ��� ��� � ���

�. �� ���� � �� ��� ����� �� � � ����� ���� �� � �� �� ���

�� ���� ����. � � ���� ���� ��� ����� �� � � ����� ��� � �

���. ����� ���� �� ��� ���� ��� WebSphere MQ� ��� � ��� ����

��� ���� ���.

WebSphere MQ� �� ID� ���� ����� ��� ��� ���� � �� ������. ���

�� ��� �� ID� ���� � �� � ���. ���� �� �� ID� ���� � ��� �

���. �� ��� ��� �� ����� ��� � �� ��� � �� ID� �����. ��

ID� ��� � � � �� ����� �����.

�� SQL SELECT�� �� ID CORRID1� � MYPOLICY ��� ���� ��� ″Msg with corr

id″� �� � �� MYSERVICE ��� �����. MYPOLICY ����� SYNCPOINT ���

’N’���, WebSphere MQ� � �� �� ��� ���� COMMIT�� ���� ��� ���.

VALUES MQSEND('MYSERVICE', 'MYPOLICY', 'Msg with corr id', 'CORRID1')

�� SQL�� �� MYPOLICY� ���� MYSERVICE ��� �� ��� CORRID1 ID� �

�� � � � �� �����. SQL�� VARCHAR(32000) ���� �����. � �� ID� ��

�� ��� � �� � ��� ��� �� ��� ����.

SQL ����� 497

|

|

|||

|

|

|

|||

|

|

|||||

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

||

|

|

|

Page 510: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

VALUES MQRECEIVE('MYSERVICE', 'MYPOLICY', 'CORRID1')

��

SQL ������ �� �� ���� ���� CL ��� ���.

i� DB2 �

�� ���� SQL ����� � SQL �� �� ����� ����� �����.

���� � ��� ��� �� SQL�� ����.

����� ����� ��, ��, ���� � ��� �� ��� ���. � ��� i� IBM DB2 Query

Manager � SQL Development Kit ����� �� ����� � ��� ��� ������

�����. �� ����� ���� CORPDATA(� ���� )�� ���� �� �� ����

�.

�� ����� �� ���� � ���� �� ��� �� ��(DDL) ���� ���� � � �

� INSERT�� �� ���� �� ���. ����� ���� ��� �� ���� ���

��. �� �� �� ������ ��� ��� SQL� System i Navigator� �� �� SQL ��

���� ��� � ����. SAMPLE� ��� ��� ����� ����� �� ���� �����

�.

CALL QSYS.CREATE_SQL_SAMPLE ('SAMPLE')

����� ���� ���� ���. ���� �� ��� ��� ���.

�: �� ����� �� ��(?)� ��� ����.

�� ��

19 ���� ��� ��� � ����

�� ���� � ����� �� ����� �� ��� ��� ������� ��� � �����.

417 ���� �� �� �� ���� � � FETCH�

� �� �� � � � FETCH�� ����� �� ������ � �� � � �� �

�� ���� ���.

�� �(DEPARTMENT)

�� ���� � '� � ��� �� � ��� � ��� � �� ��� �����.

�� ���� �� CREATE TABLE � ALTER TABLE�� ���� �����.

CREATE TABLE DEPARTMENT(DEPTNO CHAR(3) NOT NULL,DEPTNAME VARCHAR(36) NOT NULL,MGRNO CHAR(6) ,ADMRDEPT CHAR(3) NOT NULL,LOCATION CHAR(16),

498 IBM i: ������ SQL �����

||

|

Page 511: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

PRIMARY KEY (DEPTNO))

ALTER TABLE DEPARTMENTADD FOREIGN KEY ROD (ADMRDEPT)

REFERENCES DEPARTMENTON DELETE CASCADE

�� �� �� �� �����.

ALTER TABLE DEPARTMENTADD FOREIGN KEY RDE (MGRNO)

REFERENCES EMPLOYEEON DELETE SET NULL

�� � � �����.

CREATE UNIQUE INDEX XDEPT1ON DEPARTMENT (DEPTNO)

CREATE INDEX XDEPT2ON DEPARTMENT (MGRNO)

CREATE INDEX XDEPT3ON DEPARTMENT (ADMRDEPT)

���� �� �� ��� �����.

CREATE ALIAS DEPT FOR DEPARTMENT

�� � ��� ����.

100. �� ����

� �� ��

DEPTNO �� �� �� ID.

DEPTNAME ��� ��� ��� �.

MGRNO �� ���� �� ��(EMPNO).

ADMRDEPT � ��� � �� ��(DEPTNO). �� ��� ��� �� � � ���.

LOCATION ��� ��.

DEPARTMENT:

��� DEPARTMENT ���� �� ��� ������.

DEPTNO DEPTNAME MGRNO ADMRDEPT LOCATION

A00 SPIFFY COMPUTER SERVICE

DIV.

000010 A00 ?

B01 PLANNING 000020 A00 ?

C01 INFORMATION CENTER 000030 A00 ?

D01 DEVELOPMENT CENTER ? A00 ?

D11 MANUFACTURING SYSTEMS 000060 D01 ?

D21 ADMINISTRATION SYSTEMS 000070 D01 ?

SQL ����� 499

Page 512: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

DEPTNO DEPTNAME MGRNO ADMRDEPT LOCATION

E01 SUPPORT SERVICES 000050 A00 ?

E11 OPERATIONS 000090 E01 ?

E21 SOFTWARE SUPPORT 000100 E01 ?

F22 BRANCH OFFICE F2 ? E01 ?

G22 BRANCH OFFICE G2 ? E01 ?

H22 BRANCH OFFICE H2 ? E01 ?

I22 BRANCH OFFICE I2 ? E01 ?

J22 BRANCH OFFICE J2 ? E01 ?

�� �(EMPLOYEE)

�� ���� �� ��� ���� �� ��� ��� � � ��� ����.

�� ���� �� CREATE TABLE � ALTER TABLE��� �����.

CREATE TABLE EMPLOYEE(EMPNO CHAR(6) NOT NULL,FIRSTNME VARCHAR(12) NOT NULL,MIDINIT CHAR(1) NOT NULL,LASTNAME VARCHAR(15) NOT NULL,WORKDEPT CHAR(3) ,PHONENO CHAR(4) ,HIREDATE DATE ,JOB CHAR(8) ,EDLEVEL SMALLINT NOT NULL,SEX CHAR(1) ,BIRTHDATE DATE ,SALARY DECIMAL(9,2) ,BONUS DECIMAL(9,2) ,COMM DECIMAL(9,2)PRIMARY KEY (EMPNO))

ALTER TABLE EMPLOYEEADD FOREIGN KEY RED (WORKDEPT)REFERENCES DEPARTMENTON DELETE SET NULL

ALTER TABLE EMPLOYEEADD CONSTRAINT NUMBERCHECK (PHONENO >= '0000' AND PHONENO <= '9999')

�� � � �����.

CREATE UNIQUE INDEX XEMP1ON EMPLOYEE (EMPNO)

CREATE INDEX XEMP2ON EMPLOYEE (WORKDEPT)

���� �� �� ��� �����.

CREATE ALIAS EMP FOR EMPLOYEE

500 IBM i: ������ SQL �����

Page 513: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� � ��� ����.

� �� ��

EMPNO �� ��

FIRSTNME ��� �

MIDINIT ��� � ���

LASTNAME ��� �

WORKDEPT ��� ���� ��� ID

PHONENO �� �� ��

HIREDATE �

JOB ��� ���� �

EDLEVEL �� �� ��

SEX ��� ��(M �� F)

BIRTHDATE ��

SALARY ��(�)

BONUS �� ���(�)

COMM �� ���(�)

EMPLOYEE:

��� EMPLOYEE ���� �� ��� ������.

FIRST MID WORK PHONE ED SAL-EMP NO NAME INIT LASTNAME DEPT NO HIRE DATE JOB LEVEL SEX BIRTH DATE ARY BONUS COMM000010 CHRISTINE I HAAS A00 3978 1965-01-01 PRES 18 F 1933-08-24 52750 1000 4220000020 MICHAEL L THOMPSON B01 3476 1973-10-10 MANAGER 18 M 1948-02-02 41250 800 3300000030 SALLY A KWAN C01 4738 1975-04-05 MANAGER 20 F 1941-05-11 38250 800 3060000050 JOHN B GEYER E01 6789 1949-08-17 MANAGER 16 M 1925-09-15 40175 800 3214000060 IRVING F STERN D11 6423 1973-09-14 MANAGER 16 M 1945-07-07 32250 500 2580000070 EVA D PULASKI D21 7831 1980-09-30 MANAGER 16 F 1953-05-26 36170 700 2893000090 EILEEN W HENDERSON E11 5498 1970-08-15 MANAGER 16 F 1941-05-15 29750 600 2380000100 THEODORE Q SPENSER E21 0972 1980-06-19 MANAGER 14 M 1956-12-18 26150 500 2092000110 VINCENZO G LUCCHESSI A00 3490 1958-05-16 SALESREP 19 M 1929-11-05 46500 900 3720000120 SEAN O'CONNELL A00 2167 1963-12-05 CLERK 14 M 1942-10-18 29250 600 2340000130 DOLORES M QUINTANA C01 4578 1971-07-28 ANALYST 16 F 1925-09-15 23800 500 1904000140 HEATHER A NICHOLLS C01 1793 1976-12-15 ANALYST 18 F 1946-01-19 28420 600 2274000150 BRUCE ADAMSON D11 4510 1972-02-12 DESIGNER 16 M 1947-05-17 25280 500 2022000160 ELIZABETH R PIANKA D11 3782 1977-10-11 DESIGNER 17 F 1955-04-12 22250 400 1780000170 MASATOSHI J YOSHIMURA D11 2890 1978-09-15 DESIGNER 16 M 1951-01-05 24680 500 1974000180 MARILYN S SCOUTTEN D11 1682 1973-07-07 DESIGNER 17 F 1949-02-21 21340 500 1707000190 JAMES H WALKER D11 2986 1974-07-26 DESIGNER 16 M 1952-06-25 20450 400 1636000200 DAVID BROWN D11 4501 1966-03-03 DESIGNER 16 M 1941-05-29 27740 600 2217000210 WILLIAM T JONES D11 0942 1979-04-11 DESIGNER 17 M 1953-02-23 18270 400 1462000220 JENNIFER K LUTZ D11 0672 1968-08-29 DESIGNER 18 F 1948-03-19 29840 600 2387000230 JAMES J JEFFERSON D21 2094 1966-11-21 CLERK 14 M 1935-05-30 22180 400 1774000240 SALVATORE M MARINO D21 3780 1979-12-05 CLERK 17 M 1954-03-31 28760 600 2301000250 DANIEL S SMITH D21 0961 1969-10-30 CLERK 15 M 1939-11-12 19180 400 1534000260 SYBIL P JOHNSON D21 8953 1975-09-11 CLERK 16 F 1936-10-05 17250 300 1380000270 MARIA L PEREZ D21 9001 1980-09-30 CLERK 15 F 1953-05-26 27380 500 2190000280 ETHEL R SCHNEIDER E11 8997 1967-03-24 OPERATOR 17 F 1936-03-28 26250 500 2100000290 JOHN R PARKER E11 4502 1980-05-30 OPERATOR 12 M 1946-07-09 15340 300 1227000300 PHILIP X SMITH E11 2095 1972-06-19 OPERATOR 14 M 1936-10-27 17750 400 1420000310 MAUDE F SETRIGHT E11 3332 1964-09-12 OPERATOR 12 F 1931-04-21 15900 300 1272000320 RAMLAL V MEHTA E21 9990 1965-07-07 FILEREP 16 M 1932-08-11 19950 400 1596000330 WING LEE E21 2103 1976-02-23 FILEREP 14 M 1941-07-18 25370 500 2030000340 JASON R GOUNOT E21 5698 1947-05-05 FILEREP 16 M 1926-05-17 23840 500 1907200010 DIAN J HEMMINGER A00 3978 1965-01-01 SALESREP 18 F 1933-08-14 46500 1000 4220200120 GREG ORLANDO A00 2167 1972-05-05 CLERK 14 M 1942-10-18 29250 600 2340200140 KIM N NATZ C01 1793 1976-12-15 ANALYST 18 F 1946-01-19 28420 600 2274200170 KIYOSHI YAMAMOTO D11 2890 1978-09-15 DESIGNER 16 M 1951-01-05 24680 500 1974200220 REBA K JOHN D11 0672 1968-08-29 DESIGNER 18 F 1948-03-19 29840 600 2387200240 ROBERT M MONTEVERDE D21 3780 1979-12-05 CLERK 17 M 1954-03-31 28760 600 2301200280 EILEEN R SCHWARTZ E11 8997 1967-03-24 OPERATOR 17 F 1936-03-28 26250 500 2100200310 MICHELLE F SPRINGER E11 3332 1964-09-12 OPERATOR 12 F 1931-04-21 15900 300 1272200330 HELENA WONG E21 2103 1976-02-23 FIELDREP 14 F 1941-07-18 25370 500 2030200340 ROY R ALONZO E21 5698 1947-05-05 FIELDREP 16 M 1926-05-17 23840 500 1907

SQL ����� 501

Page 514: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� �� �(EMP_PHOTO)

�� �� ����� �� ��� ���� � ��� ��� ����.

�� �� ���� �� CREATE TABLE � ALTER TABLE��� �����.

CREATE TABLE EMP_PHOTO(EMPNO CHAR(6) NOT NULL,PHOTO_FORMAT VARCHAR(10) NOT NULL,PICTURE BLOB(100K),EMP_ROWID CHAR(40) NOT NULL DEFAULT '',PRIMARY KEY (EMPNO,PHOTO_FORMAT))

ALTER TABLE EMP_PHOTOADD COLUMN DL_PICTURE DATALINK(1000)

LINKTYPE URL NO LINK CONTROL

ALTER TABLE EMP_PHOTOADD FOREIGN KEY (EMPNO)REFERENCES EMPLOYEEON DELETE RESTRICT

�� � � �����.

CREATE UNIQUE INDEX XEMP_PHOTOON EMP_PHOTO (EMPNO,PHOTO_FORMAT)

�� � ��� ����.

� �� ��

EMPNO �� ��

PHOTO_FORMAT PICTURE� �� ���� ��

PICTURE �� ���

EMP_ROWID �� ���� �� �� � ID

EMP_PHOTO:

��� EMP_PHOTO ���� �� ��� ������.

EMPNO PHOTO_FORMAT PICTURE EMP_ROWID

000130 bitmap ?

000130 gif ?

000140 bitmap ?

000140 gif ?

000150 bitmap ?

000150 gif ?

000190 bitmap ?

000190 gif ?

502 IBM i: ������ SQL �����

Page 515: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� �� �(EMP_RESUME)

�� ��� ����� �� ��� ���� � ��� ���� ����.

�� ��� ���� �� CREATE TABLE � ALTER TABLE��� �����.

CREATE TABLE EMP_RESUME(EMPNO CHAR(6) NOT NULL,RESUME_FORMAT VARCHAR(10) NOT NULL,RESUME CLOB(5K),EMP_ROWID CHAR(40) NOT NULL DEFAULT '',PRIMARY KEY (EMPNO,RESUME_FORMAT))

ALTER TABLE EMP_RESUMEADD COLUMN DL_RESUME DATALINK(1000)

LINKTYPE URL NO LINK CONTROL

ALTER TABLE EMP_RESUMEADD FOREIGN KEY (EMPNO)REFERENCES EMPLOYEEON DELETE RESTRICT

�� � � �����.

CREATE UNIQUE INDEX XEMP_RESUMEON EMP_RESUME (EMPNO,RESUME_FORMAT)

�� � ��� ����.

� �� ��

EMPNO �� ��

RESUME_FORMAT RESUME� �� ���� ��

RESUME ���

EMP_ROWID �� ���� �� �� � ID

EMP_RESUME:

��� EMP_RESUME ���� �� ��� ������.

EMPNO RESUME_FORMAT RESUME EMP_ROWID

000130 ascii ?

000130 html ?

000140 ascii ?

000140 html ?

000150 ascii ?

000150 html ?

000190 ascii ?

000190 html ?

SQL ����� 503

Page 516: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� � ���� �� �(EMPPROJACT)

�� � ���� �� ���� � ����� �� � � ��� ���� ��� �����. ���

�� ��(�� �� �� ��)� �� ���� ���� ���.

�� � ���� �� ���� �� CREATE TABLE � ALTER TABLE�� ���� �����.

CREATE TABLE EMPPROJACT(EMPNO CHAR(6) NOT NULL,PROJNO CHAR(6) NOT NULL,ACTNO SMALLINT NOT NULL,EMPTIME DECIMAL(5,2) ,EMSTDATE DATE ,EMENDATE DATE )

ALTER TABLE EMPPROJACTADD FOREIGN KEY REPAPA (PROJNO, ACTNO, EMSTDATE)REFERENCES PROJACTON DELETE RESTRICT

���� �� �� ��� �����.

CREATE ALIAS EMPACT FOR EMPPROJACT

CREATE ALIAS EMP_ACT FOR EMPPROJACT

�� � ��� ����.

101. �� � ���� �� ����

� �� ��

EMPNO �� ID ��

PROJNO ��� ��� �� ����� PROJNO

ACTNO ��� ��� �� ���� � �� ID

EMPTIME EMSTDATE�� EMENDATE � ��� ����� �� ��� �� ��� �

(0.00 - 1.00).

EMSTDATE �� �� ��

EMENDATE �� �� ��

EMPPROJACT:

��� EMPPROJACT ���� �� ��� ������.

EMPNO PROJNO ACTNO EMPTIME EMSTDATE EMENDATE

000010 AD3100 10 .50 1982-01-01 1982-07-01

000070 AD3110 10 1.00 1982-01-01 1983-02-01

000230 AD3111 60 1.00 1982-01-01 1982-03-15

000230 AD3111 60 .50 1982-03-15 1982-04-15

000230 AD3111 70 .50 1982-03-15 1982-10-15

000230 AD3111 80 .50 1982-04-15 1982-10-15

000230 AD3111 180 .50 1982-10-15 1983-01-01

504 IBM i: ������ SQL �����

Page 517: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

EMPNO PROJNO ACTNO EMPTIME EMSTDATE EMENDATE

000240 AD3111 70 1.00 1982-02-15 1982-09-15

000240 AD3111 80 1.00 1982-09-15 1983-01-01

000250 AD3112 60 1.00 1982-01-01 1982-02-01

000250 AD3112 60 .50 1982-02-01 1982-03-15

000250 AD3112 60 1.00 1983-01-01 1983-02-01

000250 AD3112 70 .50 1982-02-01 1982-03-15

000250 AD3112 70 1.00 1982-03-15 1982-08-15

000250 AD3112 70 .25 1982-08-15 1982-10-15

000250 AD3112 80 .25 1982-08-15 1982-10-15

000250 AD3112 80 .50 1982-10-15 1982-12-01

000250 AD3112 180 .50 1982-08-15 1983-01-01

000260 AD3113 70 .50 1982-06-15 1982-07-01

000260 AD3113 70 1.00 1982-07-01 1983-02-01

000260 AD3113 80 1.00 1982-01-01 1982-03-01

000260 AD3113 80 .50 1982-03-01 1982-04-15

000260 AD3113 180 .50 1982-03-01 1982-04-15

000260 AD3113 180 1.00 1982-04-15 1982-06-01

000260 AD3113 180 1.00 1982-06-01 1982-07-01

000270 AD3113 60 .50 1982-03-01 1982-04-01

000270 AD3113 60 1.00 1982-04-01 1982-09-01

000270 AD3113 60 .25 1982-09-01 1982-10-15

000270 AD3113 70 .75 1982-09-01 1982-10-15

000270 AD3113 70 1.00 1982-10-15 1983-02-01

000270 AD3113 80 1.00 1982-01-01 1982-03-01

000270 AD3113 80 .50 1982-03-01 1982-04-01

000030 IF1000 10 .50 1982-06-01 1983-01-01

000130 IF1000 90 1.00 1982-10-01 1983-01-01

000130 IF1000 100 .50 1982-10-01 1983-01-01

000140 IF1000 90 .50 1982-10-01 1983-01-01

000030 IF2000 10 .50 1982-01-01 1983-01-01

000140 IF2000 100 1.00 1982-01-01 1982-03-01

000140 IF2000 100 .50 1982-03-01 1982-07-01

000140 IF2000 110 .50 1982-03-01 1982-07-01

000140 IF2000 110 .50 1982-10-01 1983-01-01

000010 MA2100 10 .50 1982-01-01 1982-11-01

000110 MA2100 20 1.00 1982-01-01 1983-03-01

000010 MA2110 10 1.00 1982-01-01 1983-02-01

000200 MA2111 50 1.00 1982-01-01 1982-06-15

000200 MA2111 60 1.00 1982-06-15 1983-02-01

000220 MA2111 40 1.00 1982-01-01 1983-02-01

000150 MA2112 60 1.00 1982-01-01 1982-07-15

SQL ����� 505

Page 518: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

EMPNO PROJNO ACTNO EMPTIME EMSTDATE EMENDATE

000150 MA2112 180 1.00 1982-07-15 1983-02-01

000170 MA2112 60 1.00 1982-01-01 1983-06-01

000170 MA2112 70 1.00 1982-06-01 1983-02-01

000190 MA2112 70 1.00 1982-01-01 1982-10-01

000190 MA2112 80 1.00 1982-10-01 1983-10-01

000160 MA2113 60 1.00 1982-07-15 1983-02-01

000170 MA2113 80 1.00 1982-01-01 1983-02-01

000180 MA2113 70 1.00 1982-04-01 1982-06-15

000210 MA2113 80 .50 1982-10-01 1983-02-01

000210 MA2113 180 .50 1982-10-01 1983-02-01

000050 OP1000 10 .25 1982-01-01 1983-02-01

000090 OP1010 10 1.00 1982-01-01 1983-02-01

000280 OP1010 130 1.00 1982-01-01 1983-02-01

000290 OP1010 130 1.00 1982-01-01 1983-02-01

000300 OP1010 130 1.00 1982-01-01 1983-02-01

000310 OP1010 130 1.00 1982-01-01 1983-02-01

000050 OP2010 10 .75 1982-01-01 1983-02-01

000100 OP2010 10 1.00 1982-01-01 1983-02-01

000320 OP2011 140 .75 1982-01-01 1983-02-01

000320 OP2011 150 .25 1982-01-01 1983-02-01

000330 OP2012 140 .25 1982-01-01 1983-02-01

000330 OP2012 160 .75 1982-01-01 1983-02-01

000340 OP2013 140 .50 1982-01-01 1983-02-01

000340 OP2013 170 .50 1982-01-01 1983-02-01

000020 PL2100 30 1.00 1982-01-01 1982-09-15

���� �(PROJECT)

���� ���� ���� �� �� � ����� ����. � �� ���� ����

��, �, �� � ��� ��� ���.

���� ���� �� CREATE TABLE � ALTER TABLE�� ���� �����.

CREATE TABLE PROJECT(PROJNO CHAR(6) NOT NULL,PROJNAME VARCHAR(24) NOT NULL DEFAULT,DEPTNO CHAR(3) NOT NULL,RESPEMP CHAR(6) NOT NULL,PRSTAFF DECIMAL(5,2) ,PRSTDATE DATE ,PRENDATE DATE ,MAJPROJ CHAR(6) ,PRIMARY KEY (PROJNO))

ALTER TABLE PROJECTADD FOREIGN KEY (DEPTNO)

506 IBM i: ������ SQL �����

Page 519: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

REFERENCES DEPARTMENTON DELETE RESTRICT

ALTER TABLE PROJECTADD FOREIGN KEY (RESPEMP)REFERENCES EMPLOYEEON DELETE RESTRICT

ALTER TABLE PROJECTADD FOREIGN KEY RPP (MAJPROJ)REFERENCES PROJECTON DELETE CASCADE

�� � � �����.

CREATE UNIQUE INDEX XPROJ1ON PROJECT (PROJNO)

CREATE INDEX XPROJ2ON PROJECT (RESPEMP)

���� �� �� ��� �����.

CREATE ALIAS PROJ FOR PROJECT

�� � ��� ����.

� �� ��

PROJNO ���� ��

PROJNAME �����

DEPTNO ����� ��� ��� �� ��

RESPEMP ����� ��� ��� �� ��

PRSTAFF �� �� ���

PRSTDATE ���� �� �� ��

PRENDATE ���� �� �� ��

MAJPROJ �� ����� �� �� ���� ��

PROJECT:

��� PROJECT ���� �� ��� ������.

PROJNO PROJNAME DEPTNO RESPEMP PRSTAFF PRSTDATE PRENDATE MAJPROJ

AD3100 ADMIN SERVICES D01 000010 6.5 1982-01-01 1983-02-01 ?

AD3110 GENERAL ADMIN

SYSTEMS

D21 000070 6 1982-01-01 1983-02-01 AD3100

AD3111 PAYROLL

PROGRAMMING

D21 000230 2 1982-01-01 1983-02-01 AD3110

AD3112 PERSONNEL

PROGRAMMING

D21 000250 1 1982-01-01 1983-02-01 AD3110

SQL ����� 507

Page 520: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

PROJNO PROJNAME DEPTNO RESPEMP PRSTAFF PRSTDATE PRENDATE MAJPROJ

AD3113 ACCOUNT

PROGRAMMING

D21 000270 2 1982-01-01 1983-02-01 AD3110

IF1000 QUERY SERVICES C01 000030 2 1982-01-01 1983-02-01 ?

IF2000 USER

EDUCATION

C01 000030 1 1982-01-01 1983-02-01 ?

MA2100 WELD LINE

AUTOMATION

D01 000010 12 1982-01-01 1983-02-01 ?

MA2110 W L

PROGRAMMING

D11 000060 9 1982-01-01 1983-02-01 MA2100

MA2111 W L PROGRAM

DESIGN

D11 000220 2 1982-01-01 1982-12-01 MA2110

MA2112 W L ROBOT

DESIGN

D11 000150 3 1982-01-01 1982-12-01 MA2110

MA2113 W L PROD CONT

PROGS

D11 000160 3 1982-02-15 1982-12-01 MA2110

OP1000 OPERATION

SUPPORT

E01 000050 6 1982-01-01 1983-02-01 ?

OP1010 OPERATION E11 000090 5 1982-01-01 1983-02-01 OP1000

OP2000 GEN SYSTEMS

SERVICES

E01 000050 5 1982-01-01 1983-02-01 ?

OP2010 SYSTEMS

SUPPORT

E21 000100 4 1982-01-01 1983-02-01 OP2000

OP2011 SCP SYSTEMS

SUPPORT

E21 000320 1 1982-01-01 1983-02-01 OP2010

OP2012 APPLICATIONS

SUPPORT

E21 000330 1 1982-01-01 1983-02-01 OP2010

OP2013 DB/DC SUPPORT E21 000340 1 1982-01-01 1983-02-01 OP2010

PL2100 WELD LINE

PLANNING

B01 000020 1 1982-01-01 1982-09-15 MA2100

���� �� �(PROJACT)

���� �� ���� ���� �� �� � ���� ��� ����. � �� ����

���� ��, �� �� � ��� ��� ���.

���� �� ���� �� CREATE TABLE � ALTER TABLE�� ���� �����.

CREATE TABLE PROJACT(PROJNO CHAR(6) NOT NULL,ACTNO SMALLINT NOT NULL,ACSTAFF DECIMAL(5,2),ACSTDATE DATE NOT NULL,ACENDATE DATE ,PRIMARY KEY (PROJNO, ACTNO, ACSTDATE))

508 IBM i: ������ SQL �����

Page 521: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

ALTER TABLE PROJACTADD FOREIGN KEY RPAP (PROJNO)REFERENCES PROJECTON DELETE RESTRICT

�� �� �� �� �����.

ALTER TABLE PROJACTADD FOREIGN KEY RPAA (ACTNO)

REFERENCES ACTON DELETE RESTRICT

�� � � �����.

CREATE UNIQUE INDEX XPROJAC1ON PROJACT (PROJNO, ACTNO, ACSTDATE)

�� � ��� ����.

� �� ��

PROJNO ���� ��

ACTNO �� ��

ACSTAFF �� �� ���

ACSTDATE �� �� ��

ACENDATE �� �� ��

PROJACT:

��� PROJACT ���� �� ��� ������.

PROJNO ACTNO ACSTAFF ACSTDATE ACENDATE

AD3100 10 ? 1982-01-01 ?

AD3110 10 ? 1982-01-01 ?

AD3111 60 ? 1982-01-01 ?

AD3111 60 ? 1982-03-15 ?

AD3111 70 ? 1982-03-15 ?

AD3111 80 ? 1982-04-15 ?

AD3111 180 ? 1982-10-15 ?

AD3111 70 ? 1982-02-15 ?

AD3111 80 ? 1982-09-15 ?

AD3112 60 ? 1982-01-01 ?

AD3112 60 ? 1982-02-01 ?

AD3112 60 ? 1983-01-01 ?

AD3112 70 ? 1982-02-01 ?

AD3112 70 ? 1982-03-15 ?

AD3112 70 ? 1982-08-15 ?

AD3112 80 ? 1982-08-15 ?

SQL ����� 509

Page 522: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

PROJNO ACTNO ACSTAFF ACSTDATE ACENDATE

AD3112 80 ? 1982-10-15 ?

AD3112 180 ? 1982-08-15 ?

AD3113 70 ? 1982-06-15 ?

AD3113 70 ? 1982-07-01 ?

AD3113 80 ? 1982-01-01 ?

AD3113 80 ? 1982-03-01 ?

AD3113 180 ? 1982-03-01 ?

AD3113 180 ? 1982-04-15 ?

AD3113 180 ? 1982-06-01 ?

AD3113 60 ? 1982-03-01 ?

AD3113 60 ? 1982-04-01 ?

AD3113 60 ? 1982-09-01 ?

AD3113 70 ? 1982-09-01 ?

AD3113 70 ? 1982-10-15 ?

IF1000 10 ? 1982-06-01 ?

IF1000 90 ? 1982-10-01 ?

IF1000 100 ? 1982-10-01 ?

IF2000 10 ? 1982-01-01 ?

IF2000 100 ? 1982-01-01 ?

IF2000 100 ? 1982-03-01 ?

IF2000 110 ? 1982-03-01 ?

IF2000 110 ? 1982-10-01 ?

MA2100 10 ? 1982-01-01 ?

MA2100 20 ? 1982-01-01 ?

MA2110 10 ? 1982-01-01 ?

MA2111 50 ? 1982-01-01 ?

MA2111 60 ? 1982-06-15 ?

MA2111 40 ? 1982-01-01 ?

MA2112 60 ? 1982-01-01 ?

MA2112 180 ? 1982-07-15 ?

MA2112 70 ? 1982-06-01 ?

MA2112 70 ? 1982-01-01 ?

MA2112 80 ? 1982-10-01 ?

MA2113 60 ? 1982-07-15 ?

MA2113 80 ? 1982-01-01 ?

MA2113 70 ? 1982-04-01 ?

MA2113 80 ? 1982-10-01 ?

MA2113 180 ? 1982-10-01 ?

OP1000 10 ? 1982-01-01 ?

OP1010 10 ? 1982-01-01 ?

OP1010 130 ? 1982-01-01 ?

510 IBM i: ������ SQL �����

Page 523: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

PROJNO ACTNO ACSTAFF ACSTDATE ACENDATE

OP2010 10 ? 1982-01-01 ?

OP2011 140 ? 1982-01-01 ?

OP2011 150 ? 1982-01-01 ?

OP2012 140 ? 1982-01-01 ?

OP2012 160 ? 1982-01-01 ?

OP2013 140 ? 1982-01-01 ?

OP2013 170 ? 1982-01-01 ?

PL2100 30 ? 1982-01-01 ?

�� �(ACT)

�� ���� ��� ��� ����.

�� ���� �� CREATE TABLE��� �����.

CREATE TABLE ACT(ACTNO SMALLINT NOT NULL,ACTKWD CHAR(6) NOT NULL,ACTDESC VARCHAR(20) NOT NULL,PRIMARY KEY (ACTNO))

�� � � �����.

CREATE UNIQUE INDEX XACT1ON ACT (ACTNO)

CREATE UNIQUE INDEX XACT2ON ACT (ACTKWD)

�� � ��� ����.

� �� ��

ACTNO �� ��

ACTKWD �� ��

ACTDESC �� �

ACT:

��� ACT ���� �� �� ��� ������.

ACTNO ACTKWD ACTDESC

10 MANAGE MANAGE/ADVISE

20 ECOST ESTIMATE COST

30 DEFINE DEFINE SPECS

40 LEADPR LEAD PROGRAM/DESIGN

50 SPECS WRITE SPECS

60 LOGIC DESCRIBE LOGIC

SQL ����� 511

Page 524: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

ACTNO ACTKWD ACTDESC

70 CODE CODE PROGRAMS

80 TEST TEST PROGRAMS

90 ADMQS ADM QUERY SYSTEM

100 TEACH TEACH CLASSES

110 COURSE DEVELOP COURSES

120 STAFF PERS AND STAFFING

130 OPERAT OPER COMPUTER SYS

140 MAINT MAINT SOFTWARE SYS

150 ADMSYS ADM OPERATING SYS

160 ADMDB ADM DATA BASES

170 ADMDC ADM DATA COMM

180 DOC DOCUMENT

��� ��� �(CL_SCHED)

��� ��� ���� ��� ���, ���� �� ��, ���� �� �� � ��� �� ���

�.

��� ��� ���� �� CREATE TABLE��� �����.

CREATE TABLE CL_SCHED(CLASS_CODE CHAR(7),"DAY" SMALLINT,STARTING TIME,ENDING TIME)

�� � ��� �����.

� �� ��

CLASS_CODE ��� �(room:teacher)

DAY 4 ���� ��

STARTING ��� �� ��

ENDING ��� �� ��

CL_SCHED:

��� CL_SCHED ���� �� ��� ������.

CLASS_CODE DAY STARTING ENDING

042:BF 4 12:10:00 14:00:00

553:MJA 1 10:30:00 11:00:00

543:CWM 3 09:10:00 10:30:00

778:RES 2 12:10:00 14:00:00

044:HD 3 17:12:30 18:00:00

512 IBM i: ������ SQL �����

Page 525: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

��� �(IN_TRAY)

�� ���� � �� �� ��� , � �� ��� ���� ��� ID � � � ��� �� �

� � �� ��� ����.

�� ���� �� CREATE TABLE��� �����.

CREATE TABLE IN_TRAY(RECEIVED TIMESTAMP,SOURCE CHAR(8),SUBJECT CHAR(64),NOTE_TEXT VARCHAR(3000))

�� � ��� �����.

� �� ��

RECEIVED �� �� � ��

SOURCE ��� ���� ���� ��� ID

SUBJECT ��� ��� �

NOTE_TEXT ��

IN_TRAY:

��� IN_TRAY ���� �� ��� ������.

RECEIVED SOURCE SUBJECT NOTE_TEXT

1 9 8 8 - 1 2 - 2 5 -

17.12.30.000000

BADAMSON FWD: Fantastic year! 4th Quarter

Bonus.

To: JWALKER Cc: QUINTANA,

NICHOLLS Jim, Looks like our hard

work has paid off. I have some good

beer in the fridge if you want to

come over to celebrate a bit. Delores

and Heather, are you interested as

well? Bruce <Forwarding from

ISTERN> Subject: FWD: Fantastic

year! 4th Quar ter Bonus . To:

Dept_D11 Congratulations on a job

well done. Enjoy this year’s bonus.

Irv <Forwarding from CHAAS>

Subject: Fantastic year! 4th Quarter

Bonus. To: All_Managers Our 4th

quarter results are in. We pulled

together as a team and exceeded our

plan! I am pleased to announce a

bonus this year of 18%. Enjoy the

holidays. Christine Haas

SQL ����� 513

Page 526: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

RECEIVED SOURCE SUBJECT NOTE_TEXT

1 9 8 8 - 1 2 - 2 3 -

08.53.58.000000

ISTERN FWD: Fantastic year! 4th Quarter

Bonus.

To: Dept_D11 Congratulations on a

job well done. Enjoy this year’s

bonus . I rv <Forward ing f rom

CHAAS> Subject: Fantastic year! 4th

Quarter Bonus. To: All_Managers Our

4th quarter results are in. We pulled

together as a team and exceeded our

plan! I am pleased to announce a

bonus this year of 18%. Enjoy the

holidays. Christine Haas

1 9 8 8 - 1 2 - 2 2 -

14.07.21.136421

CHAAS Fantastic year! 4th Quarter Bonus. To: All_Managers Our 4th quarter

results are in. We pulled together as

a team and exceeded our plan! I am

pleased to announce a bonus this year

of 18%. Enjoy the holidays. Christine

Haas

�� �(ORG)

�� ���� �� ��� ����.

�� ���� �� CREATE TABLE��� �����.

CREATE TABLE ORG(DEPTNUMB SMALLINT NOT NULL,DEPTNAME VARCHAR(14),MANAGER SMALLINT,DIVISION VARCHAR(10),LOCATION VARCHAR(13))

�� � ��� �����.

� �� ��

DEPTNUMB �� ��

DEPTNAME ���

MANAGER ��� ��� ��

DIVISION ��� �(Division)

LOCATION ��� ��

ORG:

��� ORG ���� �� ��� ������.

DEPTNUMB DEPTNAME MANAGER DIVISION LOCATION

10 Head Office 160 Corporate New York

15 New England 50 Eastern Boston

20 Mid Atlantic 10 Eastern Washington

38 South Atlantic 30 Eastern Atlanta

514 IBM i: ������ SQL �����

Page 527: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

DEPTNUMB DEPTNAME MANAGER DIVISION LOCATION

42 Great Lakes 100 Midwest Chicago

51 Plains 140 Midwest Dallas

66 Pacific 270 Western San Francisco

84 Mountain 290 Western Denver

� � �(STAFF)

��� ���� ��� �� � ��� ����.

��� ���� �� CREATE TABLE�� ���� �����.

CREATE TABLE STAFF(ID SMALLINT NOT NULL,NAME VARCHAR(9),DEPT SMALLINT,JOB CHAR(5),YEARS SMALLINT,SALARY DECIMAL(7,2),COMM DECIMAL(7,2))

�� � ��� ����.

� �� ��

ID �� ��

NAME �� �

DEPT �� ��

JOB ��

YEARS � �� ��

SALARY ��� ��

COMM ��� ���

STAFF:

��� STAFF ���� �� ��� ������.

ID NAME DEPT JOB YEARS SALARY COMM

10 Sanders 20 Mgr 7 18357.50 ?

20 Pernal 20 Sales 8 18171.25 612.45

30 Marenghi 38 Mgr 5 17506.75 ?

40 O’Brien 38 Sales 6 18006.00 846.55

50 Hanes 15 Mgr 10 20659.80 ?

60 Quigley 38 Sales 7 16508.30 650.25

70 Rothman 15 Sales 7 16502.83 1152.00

80 James 20 Clerk ? 13504.60 128.20

90 Koonitz 42 Sales 6 18001.75 1386.70

100 Plotz 42 Mgr 7 18352.80 ?

SQL ����� 515

Page 528: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

ID NAME DEPT JOB YEARS SALARY COMM

110 Ngan 15 Clerk 5 12508.20 206.60

120 Naughton 38 Clerk ? 12954.75 180.00

130 Yamaguchi 42 Clerk 6 10505.90 75.60

140 Fraye 51 Mgr 6 21150.00 ?

150 Williams 51 Sales 6 19456.50 637.65

160 Molinare 10 Mgr 7 22959.20 ?

170 Kermisch 15 Clerk 4 12258.50 110.10

180 Abrahams 38 Clerk 3 12009.75 236.50

190 Sneider 20 Clerk 8 14252.75 126.50

200 Scoutten 42 Clerk ? 11508.60 84.20

210 Lu 10 Mgr 10 20010.00 ?

220 Smith 51 Sales 7 17654.50 992.80

230 Lundquist 51 Clerk 3 13369.80 189.65

240 Daniels 10 Mgr 5 19260.25 ?

250 Wheeler 51 Clerk 6 14460.00 513.30

260 Jones 10 Mgr 12 21234.00 ?

270 Lea 66 Mgr 9 18555.50 ?

280 Wilson 66 Sales 9 18674.50 811.50

290 Quill 84 Mgr 10 19818.00 ?

300 Davis 84 Sales 5 15454.50 806.10

310 Graham 66 Sales 13 21000.00 200.30

320 Gonzales 66 Sales 4 16858.20 844.00

330 Burke 66 Clerk 1 10988.00 55.50

340 Edwards 84 Sales 7 17844.00 1285.00

3650 Gafney 84 Clerk 5 13030.50 188.00

�� �(SALES)

� ���� � � ��� � �� �� ��� ����.

� ���� �� CREATE TABLE�� ���� �����.

CREATE TABLE SALES(SALES_DATE DATE,SALES_PERSON VARCHAR(15),REGION VARCHAR(15),SALES INTEGER)

�� � ��� �����.

� �� ��

SALES_DATE �� ���� ��

SALES_PERSON � ��

REGION �� ���� �

516 IBM i: ������ SQL �����

Page 529: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

� �� ��

SALES � ��

SALES:

��� SALES ���� �� ��� ������.

SALES_DATE SALES_PERSON REGION SALES

12/31/1995 LUCCHESSI Ontario-South 1

12/31/1995 LEE Ontario-South 3

12/31/1995 LEE Quebec 1

12/31/1995 LEE Manitoba 2

12/31/1995 GOUNOT Quebec 1

03/29/1996 LUCCHESSI Ontario-South 3

03/29/1996 LUCCHESSI Quebec 1

03/29/1996 LEE Ontario-South 2

03/29/1996 LEE Ontario-North 2

03/29/1996 LEE Quebec 3

03/29/1996 LEE Manitoba 5

03/29/1996 GOUNOT Ontario-South 3

03/29/1996 GOUNOT Quebec 1

03/29/1996 GOUNOT Manitoba 7

03/30/1996 LUCCHESSI Ontario-South 1

03/30/1996 LUCCHESSI Quebec 2

03/30/1996 LUCCHESSI Manitoba 1

03/30/1996 LEE Ontario-South 7

03/30/1996 LEE Ontario-North 3

03/30/1996 LEE Quebec 7

03/30/1996 LEE Manitoba 4

03/30/1996 GOUNOT Ontario-South 2

03/30/1996 GOUNOT Quebec 18

03/30/1996 GOUNOT Manitoba 1

03/31/1996 LUCCHESSI Manitoba 1

03/31/1996 LEE Ontario-South 14

03/31/1996 LEE Ontario-North 3

03/31/1996 LEE Quebec 7

03/31/1996 LEE Manitoba 3

03/31/1996 GOUNOT Ontario-South 2

03/31/1996 GOUNOT Quebec 1

04/01/1996 LUCCHESSI Ontario-South 3

04/01/1996 LUCCHESSI Manitoba 1

04/01/1996 LEE Ontario-South 8

SQL ����� 517

Page 530: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

SALES_DATE SALES_PERSON REGION SALES

04/01/1996 LEE Ontario-North ?

04/01/1996 LEE Quebec 8

04/01/1996 LEE Manitoba 9

04/01/1996 GOUNOT Ontario-South 3

04/01/1996 GOUNOT Ontario-North 1

04/01/1996 GOUNOT Quebec 3

04/01/1996 GOUNOT Manitoba 7

XML �

XML ��� �� � � �� � �� ���� ��� � ����.

���� � ��� ��� �� SQL�� ����.

�� ����� �� ���� � ���� �� ��� �� ��(DDL) ���� ���� � � �

� INSERT�� �� ���� �� ���. ����� ���� ��� �� ���� ���

��. �� �� �� ������ ��� ��� SQL� System i Navigator� �� �� SQL ��

���� ��� � ����. SAMPLEXML� ��� ��� ����� ����� �� ���� ����

��.

CALL QSYS.CREATE_XML_SAMPLE ('SAMPLEXML')

����� ���� ���� ���. ���� �� �� �����. ����� ���� �� � �

CCSID� 65535 ��� ��� ��� ��� � ����. ��� �� ��� ����.

�: �� ����� �� ��(?)� ��� ����.

�� �(PRODUCT)

�� ���� �� ID� �� ��� ��� �� ��� ����.

�� ���� �� CREATE TABLE��� �����.

CREATE TABLE PRODUCT( PID VARCHAR(10) NOT NULL,NAME VARCHAR(128),PRICE DECIMAL(30,2),PROMOPRICE DECIMAL(30,2),PROMOSTART DATE,PROMOEND DATE,DESCRIPTION XML,PRIMARY KEY (PID) )

PRODUCT:

��� PRODUCT ���� �� ��� ������.

518 IBM i: ������ SQL �����

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|||||||||

|

|

Page 531: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

PID NAME PRICE PROMO

PRICE

PROMO

START

PROMO

END

DESCRIPTION, XMLSERIALIZE ���

�� ���� ��� �� ���� ��

� � ��

100-100-01 Snow Shovel,

Basic 22 inch

9.99 7.25 11/19/2004 12/19/2004 <product pid=″100-100-01″>

<description>

<name>Snow Shovel, Basic

22 inch</name>

<details>Basic Snow Shovel,

22 inches wide, straight

handle with D-Grip

</details>

<price>9.99</price>

<weight>1 kg</weight>

</description>

</product>

100-101-01 Snow Shovel,

Deluxe 24 inch

19.99 15.99 12/18/2005 02/28/2006 <product pid=″100-101-01″>

<description>

<name>Snow Shovel, Deluxe

24 inch</name>

<details>A Deluxe Snow Shovel,

24 inches wide,

ergonomic curved handle

with D-Grip</details>

<price>19.99</price>

<weight>2 kg</weight>

</description>

</product>

100-103-01 Snow Shovel,

Super Deluxe 26

inch

49.99 39.99 12/22/2005 02/22/2006 <product pid=″100-103-01″>

<description>

<name>Snow Shovel, Super Deluxe

26 inch</name>

<details>Super Deluxe Snow

Shovel, 26 inches wide,

ergonomic battery heated

curved handle with

upgraded D-Grip

</details>

<price>49.99</price>

<weight>3 kg</weight>

</description>

</product>

SQL ����� 519

|||||||||||||

|||||||||||||||||||

|||||||||||||||||||

||||

||||||||||||||||||

Page 532: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

PID NAME PRICE PROMO

PRICE

PROMO

START

PROMO

END

DESCRIPTION, XMLSERIALIZE ���

�� ���� ��� �� ���� ��

� � ��

100-201-01 I c e S c r a p e r ,

Windshie ld 4

inch

3.99 - - - <product pid=″100-201-01″>

<description>

<name>Ice Scraper, Windshield

4 inch</name>

<details>Basic Ice Scraper

4 inches wide, foam

handle</details>

<price>3.99</price>

</description>

</product>

�� � �(PURCHASEORDER)

� �� ���� � �� ID� �� � ��� ��� � � �� ��� ����.

�� ���� �� CREATE TABLE �� ALTER TABLE��� �����.

CREATE TABLE PURCHASEORDER( POID BIGINT NOT NULL,STATUS VARCHAR(10) NOT NULL WITH DEFAULT('Unshipped'),CUSTID BIGINTORDERDATE DATEPORDER XMLCOMMENTS VARCHAR(1000),PRIMARY KEY (POID) )

ALTER TABLE PURCHASEORDERADD FOREIGN KEY FK_PO_CUST(CUSTID)

REFERENCES CUSTOMER(CID)ON DELETE CASCADE

PURCHASEORDER:

��� PURCHASEORDER ���� �� ��� ������.

520 IBM i: ������ SQL �����

||||||||||||

||||

|||||||||||||||

|

|

|

|||||||||||||

|

|

Page 533: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

POID STATUS CUSTID ORDERDATE PORDER, XMLSERIALIZE ��� ��

���� ��� �� ���� ��� � �

COMMENTS

5000 Unshipped 1002 02/18/2006 <PurchaseOrder PoNum=″5000″

OrderDate=″2006-02-18″

Status=″Unshipped″>

<item>

<partid>100-100-01</partid>

<name>Snow Shovel, Basic

22 inch

</name>

<quantity>3</quantity>

<price>9.99</price>

</item>

<item>

<partid>100-103-01</partid>

<name>Snow Shovel, Super

Deluxe 26 inch

</name>

<quantity>5</quantity>

<price>49.99</price>

</item>

</PurchaseOrder>

THIS IS A NEW

PURCHASE ORDER

5001 Shipped 1003 02/03/2005 <PurchaseOrder PoNum=″5001″

OrderDate=″2005-02-03″

Status=″Shipped″>

<item>

<partid>100-101-01</partid>

<name>Snow Shovel, Deluxe

24 inch

</name>

<quantity>1</quantity>

<price>19.99</price>

</item>

<item>

<partid>100-103-01</partid>

<name>Snow Shovel, Super

Deluxe 26 inch

</name>

<quantity>2</quantity>

<price>49.99</price>

</item>

<item>

<partid>100-201-01</partid>

<name>Ice Scraper, Windshield

4 inch

</name>

<quantity>1</quantity>

<price>3.99</price>

</item>

</PurchaseOrder>

THIS IS A NEW

PURCHASE ORDER

SQL ����� 521

||||||||

|

||||||||||||||||||||||||

||

||||||||||||||||||||||||||||||||

||

Page 534: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

POID STATUS CUSTID ORDERDATE PORDER, XMLSERIALIZE ��� ��

���� ��� �� ���� ��� � �

COMMENTS

5002 Shipped 1001 02/29/2004 <PurchaseOrder PoNum=″5002″

OrderDate=″2004-02-29″

Status=″Shipped″>

<item>

<partid>100-100-01</partid>

<name>Snow Shovel, Basic

22 inch

</name>

<quantity>3</quantity>

<price>9.99</price>

</item>

<item>

<partid>100-101-01</partid>

<name>Snow Shovel, Deluxe

24 inch

</name>

<quantity>5</quantity>

<price>19.99</price>

</item>

<item>

<partid>100-201-01</partid>

<name>Ice Scraper, Windshield

4 inch

</name>

<quantity>5</quantity>

<price>3.99</price>

</item>

</PurchaseOrder>

THIS IS A NEW

PURCHASE ORDER

5003 Shipped 1002 02/28/2005 <PurchaseOrder PoNum=″5003″

OrderDate=″2005-02-28″

Status=″UnShipped″>

<item>

<partid>100-100-01</partid>

<name>Snow Shovel, Basic

22 inch

</name>

<quantity>1</quantity>

<price>9.99</price>

</item>

</PurchaseOrder>

THIS IS A NEW

PURCHASE ORDER

522 IBM i: ������ SQL �����

|||||||

|

||||||||||||||||||||||||||||||||

||

||||||||||||||||

||

Page 535: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

POID STATUS CUSTID ORDERDATE PORDER, XMLSERIALIZE ��� ��

���� ��� �� ���� ��� � �

COMMENTS

5004 Shipped 1005 11/18/2005 <PurchaseOrder PoNum=″5004″

OrderDate=″2005-11-18″

Status=″Shipped″>

<item>

<partid>100-100-01</partid>

<name>Snow Shovel, Basic

22 inch

</name>

<quantity>4</quantity>

<price>9.99</price>

</item>

< item>

<partid>100-103-01</partid>

<name>Snow Shovel, Super

Deluxe 26 inch

</name>

<quantity>2</quantity>

<price>49.99</price>

</item>

</PurchaseOrder>

THIS IS A NEW

PURCHASE ORDER

5005 Shipped 1002 03/01/2006 <PurchaseOrder PoNum=″5006″

OrderDate=″2006-03-01″

Status=″Shipped″>

<item>

<partid>100-100-01</partid>

<name>Snow Shovel, Basic

22 inch

</name>

<quantity>3</quantity>

<price>9.99</price>

</item>

<item>

<partid>100-101-01</partid>

<name>Snow Shovel, Deluxe

24 inch

</name>

<quantity>5</quantity>

<price>19.99</price>

</item>

<item>

<partid>100-201-01</partid>

<name>Ice Scraper, Windshield

4 inch

</name>

<quantity>5</quantity>

<price>3.99</price>

</item>

</PurchaseOrder>

THIS IS A NEW

PURCHASE ORDER

SQL ����� 523

|||||||

|

||||||||||||||||||||||||

||

||||||||||||||||||||||||||||||||

||

Page 536: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� �(CUSTOMER)

�� ���� � ID� �� �� ��� � � ��� ����.

�� ���� �� CREATE TABLE��� �����.

CREATE TABLE CUSTOMER( CID BIGINT NOT NULL,INFO XML,HISTORY XML,PRIMARY KEY (CID) )

CUSTOMER:

��� CUSTOMER ���� �� ��� ������.

CID INFO, XMLSERIALIZE ��� �� ���� ��� �� �

��� ��� � ��

HISTORY

1000 <customerinfo Cid=″1000″>

<name>Kathy Smith</name>

<addr country=″Canada″>

<street>5 Rosewood</street>

<city>Toronto</city>

<prov-state>Ontario</prov-state>

<pcode-zip>M6W 1E6</pcode-zip>

</addr>

<phone type=″work″>416-555-1358</phone>

</customerinfo>

?

1001 <customerinfo Cid=″1001″>

<name>Kathy Smith</name>

<addr country=″Canada″>

<street>25 EastCreek</street>

<city>Markham</city>

<prov-state>Ontario</prov-state>

<pcode-zip>N9C 3T6</pcode-zip>

</addr>

<phone type=″work″>905-555-7258</phone>

</customerinfo>

?

1002 <customerinfo Cid=″1002″>

<name>Jim Noodle</name>

<addr country=″Canada″>

<street>25 EastCreek</street>

<city>Markham</city>

<prov-state>Ontario</prov-state>

<pcode-zip>N9C 3T6</pcode-zip>

</addr>

<phone type=″work″>905-555-7258</phone>

</customerinfo>

?

524 IBM i: ������ SQL �����

|

|

|

|

|||||

|

|

|||||

|||||||||||

|

|||||||||||

|

|||||||||||

|

Page 537: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

CID INFO, XMLSERIALIZE ��� �� ���� ��� �� �

��� ��� � ��

HISTORY

1003 <customerinfo Cid=″1003″>

<name>Robert Shoemaker</name>

<addr country=″Canada″>

<street>1596 Baseline</street>

<city>Aurora</city>

<prov-state>Ontario</prov-state>

<pcode-zip>N8X 7F8</pcode-zip>

</addr>

<phone type=″work″>905-555-7258</phone>

<phone type=″home″>416-555-2937</phone>

<phone type=″cell″>905-555-8743</phone>

<phone type=″cottage″>613-555-3278</phone>

</customerinfo>

?

1004 <customerinfo Cid=″1004″>

<name>Matt Foreman</name>

<addr country=″Canada″>

<street>1596 Baseline</street>

<city>Toronto</city>

<prov-state>Ontario</prov-state>

<pcode-zip>M3Z 5H9</pcode-zip>

</addr>

<phone type=″work″>905-555-4789</phone>

<phone type=″home″>416-555-3376</phone>

<assistant>

<name>Gopher Runner</name>

<phone type=″home″>416-555-3426</phone>

</assistant>

</customerinfo>

?

1005 <customerinfo Cid=″1005″>

<name>Larry Menard</name>

<addr country=″Canada″>

<street>223 Nature Valley Road</street>

<city>Toronto</city>

<prov-state>Ontario</prov-state>

<pcode-zip>M4C 5K8</pcode-zip>

</addr>

<phone type=″work″>905-555-9146</phone>

<phone type=″home″>416-555-6121</phone>

<assistant>

<name>Goose Defender</name>

<phone type=″home″>416-555-1943</phone>

</assistant>

</customerinfo>

?

SQL ����� 525

||||

||||||||||||||

|

||||||||||||||||

|

||||||||||||||||

|

|

Page 538: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

���� �(CATALOG)

���� ���� � ����� ����.

���� ���� �� CREATE TABLE��� �����.

CREATE TABLE CATALOG( NAME VARCHAR(128) NOT NULL,CATLOG XML,PRIMARY KEY (NAME) )

CATALOG:

CATALOG ����� ���� �� �� ����.

��� �(SUPPLIERS)

��� ���� �� ���� ��� � ��� ��� ����.

��� ���� �� CREATE TABLE��� �����.

CREATE TABLE SUPPLIERS( SID VARCHAR(10) NOT NULL,ADDR XML,PRIMARY KEY (SID) )

SUPPLIERS:

��� SUPPLIERS ���� �� ��� ������.

SID ADDR

100 <supplierinfo xmlns=″http://posample.org″ Sid=″100″>

<name>Harry Suppliers</name>

<addr country=″Canada″>

<street>50 EastCreek</street>

<city>Markham</city>

<prov-state>Ontario</prov-state>

<pcode-zip>N9C 3T6</pcode-zip>

</addr>

</supplierinfo>

101 <supplierinfo xmlns=″http://posample.org″ Sid=″101″>

<name>Johnston Suppliers</name>

<addr country=″Canada″>

<street>302 NatureValley Road</street>

<city>Toronto</city>

<prov-state>Ontario</prov-state>

<pcode-zip>M4C 5K8</pcode-zip>

</addr>

</supplierinfo>

526 IBM i: ������ SQL �����

|

|

|

||||

|

|

|

|

|

||||

|

|

|||

||||||||||

|||||||||||

Page 539: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� �(INVENTORY)

�� ���� �� ID� ��� � � ����.

� ���� �� CREATE TABLE��� �����.

CREATE TABLE INVENTORY( PID VARCHAR(10) NOT NULL,QUANTITY INTEGER,LOCATION VARCHAR(128),PRIMARY KEY (PID) )

INVENTORY:

��� INVENTORY ���� �� ��� ������.

PID QUANTITY LOCATION

100-100-01 5 -

100-101-01 25 Store

100-103-01 55 Store

100-201-01 99 Warehouse

�� ��� �(PRODUCTSUPPLIER)

�� ��� ���� ��� ��� �� ��� ����.

�� ��� ���� �� CREATE TABLE��� �����.

CREATE TABLE PRODUCTSUPPLIER( PID VARCHAR(10) NOT NULL,SID VARCHAR(10) NOT NULL,PRIMARY KEY (PID, SID) )

PRODUCTSUPPLIER:

��� PRODUCTSUPPLIER ���� �� ��� ������.

PID SID

100-101-01 100

100-201-01 101

i� DB2 CL �� �

i� DB2� SQL� �� CL ��� �����.

v SQL ��� ��(CRTSQLPKG) ��

v SQL ��� ��(DLTSQLPKG) ��

v SQL �� �(PRTSQLINF) ��

v SQL� ��(RUNSQLSTM) ��

v SQL ��� � ��(STRSQL) ��

SQL ����� 527

|

|

|

|||||

|

|

||||

|||

|||

|||

||||

|

|

|

||||

|

|

|||

||

|||

|

Page 540: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� ��

457 ���� �i� DB2 �� ��� ������ ���

i� IBM DB2 Query Manager � SQL Development Kit ����� �� ����� �� �����

�� �� ��� � �� �����.

�� ���� � ���� ��

IBM� ���� ��� �� ��� �� ��� ��� ��� � �� ����� � �� ��� �

��� �� ���� �����.

��� � � �� ��� ���� IBM, � ���� ��� � ���� ���� �� �� ��

� �� �� ���� � � �� ��, ��� � �� ��� ��� �� �� ���

��(�, �� ��� ��) ���� ���� ��� ��� ��� �� ����.

��� �� IBM, � ���� ��� �� ���� � ���� ������� �� ��� ��

��� �� ����.

1. ��� �� �� ��

2. ��� , ���, ���� �� �� �� ��� ��� �� ��

3. �� � , ���, ��, �� �� ���� ��

� ����� ��� , ���� �� ��� �� �� ��� ���� ���� � ���� �

� ����� � �� ��� ����� ��� �� � ����.

528 IBM i: ������ SQL �����

Page 541: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

��. ����

� ��� ���� ���� �� � ����� �� ����.

IBM� �� ���� � �� �� �� � �� �� ��� ���� �� �� ����. �� ��

� � �� �� � ��� �� ��� �� IBM ���� ������. � ��� IBM ��, ���

� �� ��� ���� �� � IBM ��, ���� �� ���� ��� � ��� �� ���

�� ����. IBM� � ���� ���� �� �, ����� ��� ��, ���� �� ��� �

� ��� �� ����. �� IBM ��, ���� �� ��� ��� �� �� � �� ����

�����.

IBM� � ��� �� �� �� ��� �� ��� ��� ��� �� �� �� � ����.

� �� ���� �� ��� �� ���� � ���� �� � ��. ����� �� ����� �

��� ������.

135-700

� ��� ��� �%� 467-12, � �� ���

�� ��..$ �� �

�����

����: 080-023-8080

2���(DBCS) ��� �� ���� ��� �� IBM ������ ����� �� ��� �� ��

��� ����.

Intellectual Property Licensing

Legal and Intellectual Property Law

IBM Japan, Ltd.

3-2-12, Roppongi, Minato-ku, Tokyo 106-8711

�� ��� �� ��� ��� �� �� ��� ����. IBM� � � �� ��, �

�� � �� ��� ��� �� �� ��� ��(�, �� ��� ��) ���� ����

��� ��� �� � � �� ″�����″ �����. � ����� �� ���� �� �� ��

��� ����� ���� ����, � ��� ��� �� �� ����.

� ���� ���� ���� ���� ��� ��� �� � ����. � ��� ���� ��

�, � ��� ��� �����. IBM� � ��� �� �� �/�� ����� �� �� �

���� �� �/�� �� � ����.

� ���� ���� IBM� � ���� �� ��� �� ���, �� ����� �� � ����

%�� � �� �� � ��. � � ���� ��� IBM �� ��� �� ���� � � �

�� ���� � ��� ��� � ���� ���.

© Copyright IBM Corp. 1998, 2010 529

Page 542: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

IBM� ��� ��� ���� �� � ��� ��� ��� ���� ��� ��� ��� ��

��� �� � ����.

(i) � �� �� ����� �� ����( ���� )�� �� �� � (ii) �� ��� ��

��� ��� ����� �� ��� ��� ���� ���� ���� �� ��� ������.

135-700

� ��� ��� �%� 467-12, � �� ���

�� ��..$ �� �

�����

�� ��� � ��(�� ��, ��� �� �)��� ��� � ����.

��� �� ����� �� ���� � �� ��� �� ����� �� ��� IBM� IBM �

��, IBM ���� ���� ��(IPLA), IBM �� � ���� ��(License Agreement for Machine

Code) �� �� ��� ��� �� ��� ����.

��� �� �� ���� �� ��� �� ����. ��� �� �� ��� ���

��� �� �� � ����. � ��� �� ��� ����� ���� � ���� �� ��

� �� ��� �� ������ ��� ��� ��� � ��� � ���. �� � ��

� ��� �� ���� �� ���� �� ��� �� � ����. � �� ���� � ����

� �� ��� ��� ���.

IBM ��� �� ��� � ��� �� �, �� �� �� �� � ����� �� ����. IBM

��� �� ���� ����� �����, IBM ��� �� ��� ���, ��� �� �� ��

� ���� ��� � ���. IBM ��� ��� �� ����� � ��� �� �� �����

�.

IBM� ���� �� �� ��� �� �� ��� ��� �� � �� � ����.

� ���� �� ��� ���� ���� �� � � �� �� ��� �� ����. �� ���

� ��� ��� ���� ��� ��� � , �, � � ��� �� ��� � ����. �� �

� � ��� ��� �� � � � � ��� ������ �� ��� ����.

��� ����:

� ���� � �� ����� ����� ��� ���� ��� ������� �� ��

��. ��� �� ����� �� ��� �� ��� ������ ����� ����(API)�

���� ������� ��, ��, � �� �� ��� �� � � �� ����� ��

� ���� ��, �� � �� � ����. �� ����� �� ����� ��� ��� �

� � ��. ��� IBM� �� ����� �#�, �� ��� �� ��� ����� ����

����. ����� �� �� � ″�����″ �����. BM� ��� ���� ��

� ���� ��� �� ��� �� ����.

530 IBM i: ������ SQL �����

Page 543: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

�� ���� �� � ��� � ��� � ��� � ��� �� ��� �� �

�� ���.

© (��� ��) (��). � �� �� IBM Corp.� ������ ����.

© Copyright IBM Corp. _�� �� � ��_.

� ��� ������ � �� �� ��� � ��� ��� ���� �� �� ����.

����� ����� ��

� SQL ����� �� �� IBM i� ��� �� �� ����� ��� � �� ����� �

���� �� ����.

��

IBM, IBM � � ibm.com� � � � ��� �� IBM Corp.� � �� ��� ���. ��

�� � �� �� IBM �� ��� � ���. �� IBM � ��� �� Copyright and trademark

information(www.ibm.com/legal/copytrade.shtml)� ����.

Adobe, Adobe � , PostScript � PostScript � � �� �� �� ���� ���� Adobe Systems

Incorporated� ��� �� � ���.

Linux� �� �� �� ���� ���� Linus Torvalds� ��� ���.

Microsoft, Windows, Windows NT � Windows � � �� �� �� ���� ���� Microsoft

Corporation� � ���.

Java � �� Java � � � �� �� �� ���� ���� Sun Microsystems, Inc.� � ���.

UNIX� �� �� �� ���� ���� The Open Group� ��� ���.

�� �, �� � �� �� � �� � �� �� ���.

����

�� ��� �� � �� ��� � ����.

�� ��: �� ��� ��� ��� � ��� ��� � �� � , � ��� ��� �

����. ��� IBM� �� �� � �� �� � �� � �� ����� 2� ���� �

� � ���.

�� ��: �� ��� ��� ��� � ��� ��� � �� �� � �� ���� ��, �

� ��� � ����. ��� � �� ���� IBM� �� �� � � �� 2� ���� ��

�� � � �� � �� ��, � �� ��� � ���.

��. ���� 531

Page 544: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

���� ���� �� � ��� , � ��� � �� ��, ���, ����� �� �

� � ���� ���� ��� ��� ���� �� ��� �� �� ���� ���� ����.

IBM� � �� ��� IBM� � � ��� ����� ��� �� ����� ���� ��� �

��� ���� ��� ��� � � � ����.

��� �� ��� � �� ��� �� �� � ��� �$ � ��� ��� ���� ��

��� ���, �� �� ���� � ����.

IBM� � �� ��� �� ��� ��� �� ����. � � �� ��, ��� � �� ���

��� �� �� ��� �� (� �� ��� ��) ���� ���� ��� ��� �� �

� ���� �����.

532 IBM i: ������ SQL �����

Page 545: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

IBM �� ��� �� ��

IBM i��� ��SQL �����7.1

Page 546: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441
Page 547: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441
Page 548: IBM in SQL · : sqlda select .....429 : sql select .....434 .....436 sql .....438 sql .....439 .....441

����