+ All Categories
Home > Documents > IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL...

IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL...

Date post: 05-Apr-2020
Category:
Upload: others
View: 76 times
Download: 0 times
Share this document with a friend
228
IBM i SQL 7.1
Transcript
Page 1: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

IBM i

������

��� SQL �����

7.1

���

Page 2: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89
Page 3: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

IBM i

������

��� SQL �����

7.1

���

Page 4: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

�!

� ��� � ���� ���� ��� ���� ��, 211 ���� ������� ��� �����.

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

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

© Copyright International Business Machines Corporation 1998, 2010.

Page 5: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

��

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

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

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

�� SQL ��� ��� ��� �� � �� . 2

SQL� ���� ����� � . . . . . 2

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

SQL�� �� ��� ��� �� �� . . . 5

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

� . . . . . . . . . . . . . . . . 5

��� ��� ���� ����� �� . . 6

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

�� . . . . . . . . . . . . . . 7

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

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

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

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

IBM i ����� �� . . . . . . . . 10

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

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

�: SQL �� � . . . . . . . . . 10

�: SQL �� �� �� �� . . . . . 11

WHENEVER�� ��� � �� �� . . 12

C � C++ ������� SQL� �� . . . . 14

SQL� ���� C � C++ �������

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

SQL� ���� C � C++ �������

SQL ��� � �� . . . . . . . . . 15

SQL� ���� C � C++ �������

SQL� � . . . . . . . . . . . . . 18

SQL� ���� C � C++ ������

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

SQL� ���� C � C++ �������

SQL� �� . . . . . . . . . . . . 18

SQL� ���� C � C++ �������

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

SQL� ���� C � C++ ������

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

SQL� ���� C � C++ ������

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

SQL� ���� C � C++ ������

�� NULL � NUL . . . . . . . . . 20

SQL� ���� C � C++ ������

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

SQL� ���� C � C++ ������

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

SQL� ���� C � C++ ������ 3

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

SQL� ���� C � C++ ������

WHENEVER� . . . . . . . . . . . 20

SQL� ���� C � C++ ������� �

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

SQL� ���� C � C++ �������

��� �� �� . . . . . . . . . . 21

SQL� ���� C � C++ �����

� �� ��� �� . . . . . . . . 21

SQL� ���� C � C++ �����

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

SQL� ���� C � C++ �����

� ��� ��� ��. . . . . . . . 25

SQL� ���� C � C++ �����

� 2� ��� ��. . . . . . . . . 27

SQL� ���� C � C++ �����

� LOB ��� �� . . . . . . . . 29

SQL� ���� C � C++ �����

� XML ��� �� . . . . . . . . 32

SQL� ���� C � C++ �����

� ROWID ��� �� . . . . . . . 35

SQL� ���� C � C++ �����

� �� � �� ��� ��� �� . . 35

SQL� ���� C � C++ ������� �

�� �� �� . . . . . . . . . . . . 36

SQL� ���� C � C++ ������

��� �� �� . . . . . . . . . . 37

SQL� ���� C � C++ ������

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

SQL� ���� C � C++ ������� �

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

SQL� ���� C � C++ ������

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

SQL� ���� C � C++ ������

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

SQL� ���� C � C++ ������� �

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

© Copyright IBM Corp. 1998, 2010 iii

|

||

|

||

Page 6: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

SQL� ���� C � C++ �������

typedef �� . . . . . . . . . . . . . 45

SQL� ���� C � C++ �������

ILE C ��� � �� �� �� . . . . 46

� � SQL � C �� C++ �� � �� 47

C � C++ �� �� � ��� �� �. . 50

SQL� ���� C � C++ ������� �

���� �� �� . . . . . . . . . . . 50

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

SQL� ���� COBOL �������

SQL �� � �� . . . . . . . . . . 51

SQL� ���� COBOL �������

SQL ��� � �� . . . . . . . . . 53

SQL� ���� COBOL �������

SQL� � . . . . . . . . . . . . . 55

SQL� ���� COBOL ������ �

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

SQL� ���� COBOL ������

SQL� �� . . . . . . . . . . . . 55

SQL� ���� COBOL �������

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

SQL� ���� COBOL ������

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

SQL� ���� COBOL ������

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

SQL� ���� COBOL ������ �

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

SQL� ���� COBOL ������

COBOL ��� � �� . . . . . . . 56

SQL� ���� COBOL ������ �

�� ��� . . . . . . . . . . . . 57

SQL� ���� COBOL ������

WHENEVER� . . . . . . . . . . . 57

�� � COBOL ��� � SQL

COBOL ����� . . . . . . . . . 57

SQL� ���� COBOL ������� ��

� �� �� . . . . . . . . . . . . . 57

SQL� ���� COBOL �������

��� �� �� . . . . . . . . . . 57

SQL� ���� COBOL ������

�� ��� �� . . . . . . . . . 57

SQL� ���� COBOL ������

�� � ��� �� . . . . . . . 59

SQL� ���� COBOL ������

�� ��� �� . . . . . . . . . 60

SQL� ���� COBOL ������

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

SQL� ���� COBOL ������

2� ��� �� . . . . . . . . . . 63

SQL� ���� COBOL ������

LOB ��� �� . . . . . . . . . 63

SQL� ���� COBOL ������

XML ��� �� . . . . . . . . . 66

SQL� ���� COBOL ������

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

SQL� ���� COBOL ������

ROWID ��� �� . . . . . . . . 68

SQL� ���� COBOL ������

�� � �� ��� ��� �� . . . 69

SQL� ���� COBOL ������� ��

� �� �� . . . . . . . . . . . . . 69

SQL� ���� COBOL ������ �

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

SQL� ���� COBOL ������ �

�� �� ����� � . . . . . . . 74

SQL� ���� COBOL �������

��� �� � �� . . . . . . . . 74

SQL� ���� COBOL ������ �

�� �� � . . . . . . . . . . . 75

SQL� ���� COBOL ������ �

�� � ����� �� . . . . . . . 79

SQL� ���� COBOL ������� �

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

SQL� ���� COBOL �������

��� �� �� �� � �� �� �� 80

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

COBOL �� �� � ��� �� � . . 83

SQL� ���� COBOL ������� ��

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

PL/I ������� SQL� �� . . . . . . 84

SQL� ���� PL/I ������� SQL �

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

SQL� ���� PL/I ������� SQL �

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

SQL� ���� PL/I ������� SQL�

� . . . . . . . . . . . . . . . . 87

�: SQL� ���� PL/I �������

SQL� � . . . . . . . . . . . . 87

SQL� ���� PL/I ������ �� 87

SQL� ���� PL/I ������� SQL

� ��. . . . . . . . . . . . . . 87

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

|

||

|

||

Page 7: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

SQL� ���� PL/I ������� �

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

SQL� ���� PL/I ������ � 88

SQL� ���� PL/I ������ �� �

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

SQL� ���� PL/I ������ ���

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

SQL� ���� PL/I ������

WHENEVER� . . . . . . . . . . . 88

SQL� ���� PL/I ������� ���

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

SQL� ���� PL/I ������� ��

� �� �� . . . . . . . . . . . . 89

SQL� ���� PL/I ������ ��

��� �� . . . . . . . . . . . 89

SQL� ���� PL/I ������ ��

��� �� . . . . . . . . . . . 89

SQL� ���� PL/I ������ 2�

��� �� . . . . . . . . . . . 90

SQL� ���� PL/I ������

LOB ��� �� . . . . . . . . . 91

SQL� ���� PL/I ������

ROWID ��� �� . . . . . . . . 93

SQL� ���� PL/I ������� ���

�� �� . . . . . . . . . . . . . . 93

SQL� ���� PL/I ������ ���

�� . . . . . . . . . . . . . . . 94

SQL� ���� PL/I ������ ���

�� ����� � . . . . . . . . . 95

SQL� ���� PL/I ������� ���

�� � �� . . . . . . . . . . . . 95

SQL� ���� PL/I ������ ���

�� � . . . . . . . . . . . . . 96

SQL� ���� PL/I ������ ��

� �� � ����� . . . . . . . 97

SQL� ���� PL/I ������� � �

� �� �� . . . . . . . . . . . . . 98

� � SQL � PL/I �� � �� . . . . 99

SQL� ���� PL/I ������� ���

�� �� �� . . . . . . . . . . . . 100

�� ��� �� ��� �� PL/I� ��

. . . . . . . . . . . . . . . . 101

RPG/400 ������� SQL� �� . . . . 101

SQL� ���� RPG/400 �������

SQL �� � �� . . . . . . . . . . 102

SQL� ���� RPG/400 �������

SQL ��� � �� . . . . . . . . . 103

SQL� ���� RPG/400 �������

SQL� �. . . . . . . . . . . . . 103

�: SQL� ���� RPG/400 �����

�� SQL� � . . . . . . . . . . 104

SQL� ���� RPG/400 ������

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

SQL� ���� RPG/400 �������

SQL� ��. . . . . . . . . . . . 104

SQL� ���� RPG/400 �������

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

SQL� ���� RPG/400 ������

� . . . . . . . . . . . . . . 105

SQL� ���� RPG/400 ������

�� �� . . . . . . . . . . . . 105

SQL� ���� RPG/400 ������

��� ��� . . . . . . . . . . . 105

SQL� ���� RPG/400 ������

WHENEVER� . . . . . . . . . . 105

SQL� ���� RPG/400 ������ ��

� �� �� . . . . . . . . . . . . 105

SQL� ���� RPG/400 �������

��� �� �� . . . . . . . . . . 105

SQL� ���� RPG/400 ������� �

�� �� �� . . . . . . . . . . . . 106

SQL� ���� RPG/400 ������� �

�� �� � �� . . . . . . . . . . 106

SQL� ���� RPG/400 �������

� �� �� �� . . . . . . . . . . 107

SQL� ���� RPG/400 ������

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

���. . . . . . . . . . . . . . 108

� � SQL � RPG/400 �� � �� 109

SQL� ���� RPG/400 ������

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

SQL� ���� RPG/400 ������� �

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

�: SQL� ���� RPG/400 �����

�� ����� �� �� . . . . . . . 112

�� ��� �� ��� �� RPG/400�

��. . . . . . . . . . . . . . . 112

SQL� ���� ��� RPG/400 ��� �

�� � . . . . . . . . . . . . . 113

ILE RPG ������� SQL� �� . . . . 113

�� v

Page 8: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

SQL� ���� ILE RPG �������

SQL �� � �� . . . . . . . . . . 114

SQL� ���� ILE RPG �������

SQL ��� � �� . . . . . . . . . 115

SQL� ���� ILE RPG �������

SQL� �. . . . . . . . . . . . . 117

SQL� ���� ILE RPG ������

�� . . . . . . . . . . . . . . 117

SQL� ���� ILE RPG �������

SQL� ��. . . . . . . . . . . . 118

SQL� ���� ILE RPG �������

� �� . . . . . . . . . . . . 118

SQL� ���� ILE RPG �������

��� �� . . . . . . . . . . . . 118

SQL� ���� ILE RPG ������

� . . . . . . . . . . . . . . 119

SQL� ���� ILE RPG ������

�� �� . . . . . . . . . . . . 119

SQL� ���� ILE RPG ������

��� ��� . . . . . . . . . . . 119

SQL� ���� ILE RPG ������

WHENEVER� . . . . . . . . . . 119

SQL� ���� ILE RPG �������

��� �� �� . . . . . . . . . . . 119

SQL� ���� ILE RPG �������

��� �� �� . . . . . . . . . . 120

SQL� ���� ILE RPG �����

�� 2� ��� �� �� . . . . . . 121

SQL� ���� ILE RPG �����

�� LOB ��� �� �� . . . . . 122

SQL� ���� ILE RPG �����

�� XML ��� �� �� . . . . . 125

SQL� ���� ILE RPG �����

�� ROWID �� �� . . . . . . 128

SQL� ���� ILE RPG �����

�� �� � �� ��� �� �� . . 128

SQL� ���� ILE RPG �������

��� �� �� . . . . . . . . . . . 129

SQL� ���� ILE RPG �������

��� �� � �� . . . . . . . . . 131

SQL� ���� ILE RPG �������

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

SQL� ���� ILE RPG ������

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

���. . . . . . . . . . . . . . 133

� � SQL � ILE RPG �� � �� 133

ILE RPG �� �� � ��� �� � 140

SQL� ���� ILE RPG �������

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

�: SQL� ���� ILE RPG �����

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

�: SQL� ���� ILE RPG ������

�� � � ��� �� SQLDA . . . . . 141

�: SQL� ���� ILE RPG ������

� SQL . . . . . . . . . . . . . 142

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

REXX ������� SQL �� � �� 143

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

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

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

SQL� ���� REXX ������ �� 149

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

SQL� ��. . . . . . . . . . . . 149

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

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

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

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

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

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

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

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

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

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

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

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

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

� �� �� . . . . . . . . . . . . 150

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

��� ��� �� � �� . . . 150

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

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

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

REXX �� �� . . . . . . . . . . 152

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

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

SQL�� ��� ��� � � �� . . . 153

SQL ������ � ��� . . . . . 153

SQL ������ �� . . . . . 154

SQL ������ � �� CCSID . . 155

SQL ������ � . . . . . . . 155

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

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

|

||

|

||

Page 9: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

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

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

� SQL ����� � . . . . . 156

ILE SQL ����� �� . . . . . . 161

SQL� ���� ILE ����� ���

��� . . . . . . . . . . . . 161

ILE SQL ����� �� . . . . . . . 162

SQL� ���� ILE ����� ���

���. . . . . . . . . . . . . . 162

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

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

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

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

SQL� ���� ����� ��� . . . . 165

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

� . . . . . . . . . . . . . . . 165

SQL ����� �� �� . . . . . . . 166

�� SQL� ��� ��� ��. . . . 166

�� SQL� ��� ��� ��:

DDM ��� . . . . . . . . . . 167

�� SQL� ��� ��� ��: ��

��� . . . . . . . . . . . . . 167

�� SQL� ��� ��: SQL �� �

. . . . . . . . . . . . . . . 167

�� ���: i� DB2 ��� �� . . . . . 168

�: ILE C � C++ ���� SQL� . . . 170

�: COBOL � ILE COBOL ����

SQL� . . . . . . . . . . . . . . 176

�: PL/I ���� SQL� . . . . . . . 185

�: RPG/400 ���� SQL�. . . . . . 190

�: ILE RPG ���� SQL� . . . . . 196

�: REXX ���� SQL� . . . . . . 202

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

� . . . . . . . . . . . . . . . . 206

��� �� ������ �� CL �� �� 207

Create SQL COBOL Program �� . . . . 208

Create SQL ILE COBOL Object �� . . . 208

Create SQL ILE C Object �� . . . . . 208

Create SQL ILE C++ Object �� . . . . 208

Create SQL PL/I Program �� . . . . . 209

Create SQL RPG Program �� . . . . . 209

Create SQL ILE RPG Object �� . . . . 209

�� SQL ������ �� � �� . . . 209

��. ���� . . . . . . . . . . . . . 211

����� ����� �� . . . . . . . . 213

�� . . . . . . . . . . . . . . . . 213

��� . . . . . . . . . . . . . . . 213

�� vii

Page 10: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

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

Page 11: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

��� SQL �����

� �� ������ i� DB2® SQL� � ��� ���� ��� ��� ����� ������

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

�: � ��� ���� 210 ���� �� ���� � ���� ���� ��� ���� ���.

IBM i 7.1� ��� ��

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

v C, C++, ILE COBOL � ILE RPG ������ XML ��� �� � � �����.

– 32 ���� �SQL� ���� C � C++ ������ XML ��� ���

– 66 ���� �SQL� ���� COBOL ������ XML ��� ���

– 125 ���� �SQL� ���� ILE RPG ������� XML ��� �� ���

v C, C++, COBOL � ILE RPG ������ �� � �� ��� ��� �� � � �����.

– 35 ���� �SQL� ���� C � C++ ������ �� � �� ��� ��� ���

– 69 ���� �SQL� ���� COBOL ������ �� � �� ��� ��� ���

– 128 ���� �SQL� ���� ILE RPG ������� �� � �� ��� �� ���

v ILE ��� � �� ���� ���� DBGENCKEY(��� � ���) ���� �����.

– 162 ���� �SQL� ���� ILE ����� ��� ����

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

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

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

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

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

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

�.

��� SQL ������ �� PDF ��

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

� ��� PDF ��� ��� ������ �� SQL �����(� 752KB)� ������.

© Copyright IBM Corp. 1998, 2010 1

|

|

|

|

|

|

|

|

|

|

Page 12: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

PDF �� ��

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

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

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

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

4. ��� �����.

Adobe® Reader ����

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

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

�� ��

209 ���� ��� SQL ������ �� � ���

�� � �� Information Center �� ����� �� SQL ����� �� ���� �� �

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

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

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

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

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

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

Kit� ���� �� ���. �� ���� �� ��� ��� ���� ���� ���� �� �

��.

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

Page 13: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

�� ��

14 ���� �C � C++ ������� SQL� ���

ILE C �� C++ ���� SQL�� ���� ��� � ����� � �� ����� �� �

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

51 ���� �COBOL ������� SQL� ���

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

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

84 ���� �PL/I ������� SQL� ���

PL/I ���� SQL�� ��� �� �� � ����� � �� ����� ��� ����. �

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

101 ���� �RPG/400 ������� SQL� ���

RPG/400® ����� �� ���� RPG II ���� RPG III ���� �� �����.

113 ���� �ILE RPG ������� SQL� ���

ILE RPG ���� SQL�� ��� �� �� � ����� � �� ����� � ��

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

143 ���� �REXX ������� SQL� ���

REXX ����� ������ ��� ���. ��� � REXX ������ ���� ��� ����

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

153 ���� �SQL�� ��� ��� � � ���

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

IBM Developer Kit for Java

SQL��� ��� �� ��

���� ��� ���� ���� ��� SELECT INTO� �� FETCH�� INTO�� ���

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

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

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

���� �� � ����(DESCRIBE TABLE�� �� SQL �� �� � ).

��� ��� ��� � �(�� �� �� � �)� � �� ���� ���� ��� ��� ��

��. ��� �� �� �� � FETCH � ���� INSERT�� ���� ��� ��� ���.

�: SQL�� ��� � �� ��� ��� ���� ������ �� �� ��� �� �� �

� � ����.

�� ��, WHERE��� �� �� ��� ���� �� �� � �� �� �� ��� ��� �

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

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

�� SQL ����� 3

Page 14: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

v WHERE���: ��� ��� ��� �� ��� ��� �� ����� ���� �� ��� ��

�� � ����. �� ��, �� ��� �� �� EMPID�� �� ��� �� ��� ���

��� 000110� ��� ��� �� � ����.

MOVE '000110' TO EMPID.EXEC SQLSELECT LASTNAMEINTO :PGM-LASTNAMEFROM CORPDATA.EMPLOYEEWHERE EMPNO = :EMPID

END-EXEC.

v � �� �� �����(INTO��� ���): ��� ��� ��� ��� �� � �� ��� �

� ��� �� �� �� � ����. INTO�� SQL� �� ���� � �� �� ���

��� �� �� �����. �� ��, CORPDATA.EMPLOYEE ��� ��� EMPNO, LASTNAME

� WORKDEPT � �� ���� �����. ����� � �� �� ��� ��� ��� �

INTO�� ��� ��� ��� �� � ����.

�:

EXEC SQLSELECT EMPNO, LASTNAME, WORKDEPTINTO :CBLEMPNO, :CBLNAME, :CBLDEPTFROM CORPDATA.EMPLOYEEWHERE EMPNO = :EMPID

END-EXEC.

� ��� ��� �� CBLEMPNO� EMPNO�� �� ��� CBLNAME� LASTNAME�� �

� ���� CBLDEPT� WORKDEPT�� �� �����.

v SELECT�� ����: SELECT��� �� ���� ���� ���� �� � ��� � ����

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

�:

MOVE '000220' TO PERSON.EXEC SQLSELECT "A", LASTNAME, SALARY, :RAISE,

SALARY + :RAISEINTO :PROCESS, :PERSON-NAME, :EMP-SAL,

:EMP-RAISE, :EMP-TTLFROM CORPDATA.EMPLOYEEWHERE EMPNO = :PERSON

END-EXEC.

��� ��� ����.

PROCESS PERSON-NAME EMP-SAL EMP-RAISE EMP-TTL

A LUTZ 29840 4476 34316

v SQL�� �� �� �� ����:

– UPDATE�� �� SET�

– INSERT�� �� VALUES�

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

Page 15: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

– CALL�

�� ��

i5/OS� DB2 SQL ��

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

SQL �� FETCH�, SELECT INTO�, SET� � VALUES INTO� �� �� ��� ��� ����

�. SQL �� INSERT�, UPDATE� � CALL� �� �� ��� ���� �����.

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

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

– ��� ��, ��� ��� � �� ��� ��� ��� � ����.

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

v CCSID ��� ���� �� �� ��� DBCS ��� ���� UCS-2 � UTF-16 ��� ��

�����. CCSID� ���� �� �� ��� ���� �����. �� �� �� �����. ��

� �� ��� SQL� �� �����. CCSID ��� ���� �� �� �� � DBCS ���

���� �� ��� ��� UCS-2 � UTF-16 ��� �� �����. CALL�� �� ��� ���

� ��� DBCS ��� ���� UCS-2 � UTF-16 ���� �����.

v 2� ���� 2� ����� �����.

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

v �� � � ��/� �� ���� ����. ��� �� �� ��� ��� ���� ��� �

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

����.

�� ��

i5/OS ����

�� ��

DECLARE VARIABLE

�� ��

��� ��

�� � ��

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

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

�.

v �� �� �� �� �� SQL� -1� ����� ��� �����.

v ����� ��� ���� �� �� �� �� ���� �� SQLCODE� �����.

v �� �� ��� �� �� �� ��� ��� �� SQL� ����� ��� -2� �����.

�� SQL ����� 5

Page 16: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

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

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

(LOB)� ���� ��, ���� �� ��� 32767�� �� � � �� ��� ��� �� � ��

��� ����� ��� ���� �� 32767��.

�� ����� ��� �� ������. ����� ��� �� 0 �� ���� �� �� �� �

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

�(��� �� 0, � �� ��� �� �� )�� ����� ���� ����.

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

�:

EXEC SQLSELECT COUNT(*), AVG(SALARY)INTO :PLICNT, :PLISAL:INDNULLFROM CORPDATA.EMPLOYEEWHERE EDLEVEL < 18

END-EXEC.

�� �� ����� INDNULL� ��� �� �� ���� ��� �� � ����. �� ��

���� �� ���� SQL�� ��(�� -1� ��) �� �� �� ��(�� -2� ��)� �����

� �� ���. ����� �� ��� ��� PLISAL� ��� �� �� � ����.

�� ��

��

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

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

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

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

� ����.

�� ��, COBOL��:

01 SAL-REC.10 MIN-SAL PIC S9(6)V99 USAGE COMP-3.10 AVG-SAL PIC S9(6)V99 USAGE COMP-3.10 MAX-SAL PIC S9(6)V99 USAGE COMP-3.

01 SALTABLE.02 SALIND PIC S9999 USAGE COMP-4 OCCURS 3 TIMES.01 EDUC-LEVEL PIC S9999 COMP-4.

...MOVE 20 TO EDUC-LEVEL....EXEC SQLSELECT MIN(SALARY), AVG(SALARY), MAX(SALARY)

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

Page 17: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

INTO :SAL-REC:SALINDFROM CORPDATA.EMPLOYEEWHERE EDLEVEL>:EDUC-LEVEL

END-EXEC.

� ��� SALIND� �� �(�� �� �� �� �� � ��)� �� �� ���. SQL�

�� �� �� ��� ��� ��� �����. MIN-SAL� ��� ��� �� �� �� ����

� �� SALIND(1)� -1� �����. ���� �� ����� ��� �� ��� ��� �� ��

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

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

����� ��� ��� INSERT� �� UPDATE��� �� ��� �� � ����.

INSERT�� UPDATE�� ���� � �� ��� �����(�� ������ �� �����)� ��

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

��� ���� �� �� �� �� �� � � ����. � ��� ������ �� MERGE��

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

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

�� ��� �� �� �� �� �� � �� �� �����. �� ��� -1�� � �� �� �� �

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

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

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

EXEC SQLUPDATE CORPDATA.EMPLOYEE

SET PHONENO = :NEWPHONE:PHONEINDWHERE EMPNO = :EMPID

END-EXEC.

NEWPHONE� �� �� �� �� ��� PHONEIND� 0�� ������. ��� ��� NEWPHONE

� ��� �� ��� SQL� ��� �� PHONEIND� �� ��� ������.

�� ������ ���� INSERT� � UPDATE� � � ������ ���� �����. ��

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

� �� � ����.

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

v ����� � 0� ��� ��� �� �� ��� � ���.

v ����� � -1, -2, -3, -4 �� -6� ��� �� ��� � ���.

v ����� � -5� �� �� �� ��� � ���.

v ����� � -7� �� ��� ��� � ���. � �� ���� �� �� � �� �� � �

��� ���� �� ��� �����. INSERT�� ���� �� �� ���� � ���.

�� SQL ����� 7

|

|

|

|

|

|

|

Page 18: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

���� �� �� �� �� � �� UPDATE�� ���� ��� �� �����.

EXEC SQLUPDATE CORPDATA.EMPLOYEE

SET PHONENO = :NEWPHONE:PHONEIND,LASTNAME = :LASTNAME:LASTNAMEIND,WORKDEPT = :WORKDEPT:WORKDEPTIND,EDLEVEL = :EDLEVEL:EDLEVELIND

WHERE EMPNO = :EMPIDEND-EXEC.

�� �� ��� UPDATE�� ��� SET�� ��� �� �� �� ��� �� � ����. ��

��, EDLEVEL �� ����� ���� EDLEVEL ��� � ��� ��� EDLEVELIND ���

��� 0�� ������. �� �� �����(PHONEIND, LASTNAMEIND � WORKDEPTIND)�

-7� ������. �� ���� ��� �� ��� �� ��� ���� �����.

EXEC SQLUPDATE CORPDATA.EMPLOYEE

SET EDLEVEL = :EDLEVEL:EDLEVELINDWHERE EMPNO = :EMPID

END-EXEC.

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

������ ����� ����� SET OPTION��� EXTIND(*YES) �� ����� ��� OPTION

����� *EXTIND� ������.

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

SQL�� ����� ���� �� SQL� �� �� SQLCODE � SQLSTATE �� ����.

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

��� �� �� SQL� ��� ��� SQLCODE� ��� SUBSTR(SQLSTATE,1,2)� ‘00’, ‘01’

�� ‘02’� �� ����. ��� �� �� SQL� � � ���� ��� �� �� SQLCODE�

��� SUBSTR(SQLSTATE,1,2)� ‘01’ �� ‘02’� ���. SQL�� �� �� � �� �� ��

�� SQLCODE� 0� SQLSTATE� ‘00000’� ���.

�: 0� SQLCODE� ���� ���� ��� ����� �� ��� ����. �� ��, ��� �

��� �� �� �� ���� ���� ��� SQLCODE� 0��. ��� SQL � �� �

��(SQLWARN1)� ��� �����. � �� SQLSTATE� ‘00000’� � ��.

��: �� SQLCODE� �� ��� ���� ��� WHENEVER SQLERROR�� ���� ���

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

� ����.

SQLSTATE� � ��� IBM � ����� �� ��� �� �� ��� �� �� ��

�� ���� ���. SQLSTATE� �� ����� � � �� ��� �� � �� ����

�.

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

Page 19: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

SQLCA� � ��� �� �� ����� SQLCA� �� �� �� � ��� ���� �� ���

���� ����� ���� ���� �� ����. �� SQLCA �� �� �����.

SQLCODE

�� ���.

SQLSTATE

�� ���.

SQLERRD(3)

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

SQLWARN0

W� ��� �� �� ��� SQL � ��(SQLWARN1 - SQLWARNA)� �����.

�� ��

i5/OS� DB2 SQL ��

SQL �� � �

SQL �� �� ��

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

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

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

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

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

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

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

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

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

�� ��

GET DIAGNOSTICS

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

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

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

�� � �� � ��� SQLCA� �� SQLERRM �� ��� 79��� �� �� ���� ���.

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

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

�. 136��� SQLCA� �� ���� �� �� ��� �� ��� � ����. ���� ���

SQLCA� ��� �� ��� ��� �� ����.

�� SQL ����� 9

Page 20: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

Current �������� ��� ��� SQLCA ��� �����.

EXEC SQL INCLUDE SQLCA; /* Existing SQLCA */

SQL �� �� ����� ����� ������ �� �� SQLSTATE ��� �����.

char SQLSTATE[6]; /* Stand-alone sqlstate */

�� �� SQLCODE ��� �� � ����.

long int SQLCODE; /* Stand-alone sqlcode */

SQL�� �� ��� �� SQLSTATE ��� ��� �����. �� SQL� �� � �����

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

char hv1[256];long int hv2;

EXEC SQL GET DIAGNOSTICS :hv1 = COMMAND_FUNCTION,:hv2 = COMMAND_FUNCTION_CODE;

IBM i ����� ��

IBM i ILE(Integrated Language Environment®)�� SQL �� �� �� � � ���� �� ��

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

�� �� � ���.

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

����� ����� SQLCA� ���� ���� �� �� �� �� SQLSTATE ���

�����.

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

�. �� SQLSTATE ��� ���� SQLSTATE� �� ��� �� �� �� ����� � �

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

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

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

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

����� ���� �� SQLCA� �� �����. �� SQLCA� ���� ����� ���

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

: SQL ��

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

EXEC SQL CREATE PROCEDURE check_input (IN p1 INT)LANGUAGE SQL READS SQL DATAtest: BEGINIF p1< 0 THEN

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

Page 21: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

SIGNAL SQLSTATE VALUE '99999'SET MESSAGE_TEXT = 'Bad input value';

END IF;END test;

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

char SQLSTATE[6]; /* Stand-alone sqlstate */long int SQLCODE; /* Stand-alone sqlcode */

long int hv1;char hv2[6];char hv3[256];

hv1 = -1;EXEC SQL CALL check_input(:hv1);

if (strncmp(SQLSTATE, "99999", 5) == 0){EXEC SQL GET DIAGNOSTICS CONDITION 1:hv2 = RETURNED_SQLSTATE,:hv3 = MESSAGE_TEXT;

}else{}

: SQL �� �� �� ��

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

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

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

� �� ���, ��� SQL� � , ��� SQLSTATE �, �� �� � �� �� �� ���� �

����.

char stmt_command[256];long int error_count;long int condition_number;char auth_id[256];char error_state[6];char msgid[128];char msgtext[1024];

EXEC SQL WHENEVER SQLERROR GOTO error;

(application code)

error:EXEC SQL GET DIAGNOSTICS :stmt_command = COMMAND_FUNCTION,

:error_count = NUMBER;

for (condition_number=1;condition_number<=error_count;++condition_number){EXEC SQL GET DIAGNOSTICS CONDITION :condition_number:auth_id = DB2_AUTHORIZATION_ID,

�� SQL ����� 11

Page 22: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

:error_state = RETURNED_SQLSTATE,:msgid = DB2_MESSAGE_ID,:msgtext = DB2_MESSAGE_TEXT;

EXEC SQL INSERT INTO error_log VALUES(CURRENT_TIMESTAMP,:stmt_command,:condition_number,:auth_id,:error_state,:msgid,:msgtext);

}

�� ��

GET DIAGNOSTICS

WHENEVER�� ���� �� ��

WHENEVER�� ���� SQL�� SQLSTATE � SQLCODE� ��� ���� �� ���� �

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

�� �� � �� �� ����(���� ��)� SQLCODE �� SQLSTATE �� �� ��

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

�: WHENEVER�� REXX ������ ���� ����.

WHENEVER�� ���� �� ��� �� ��� �� ��� �� � ����. ��� ��� �

��� WHENEVER�� �� � ����. � � �� WHENEVER�� ��� �� ��

WHENEVER�� � ���� �� �� SQL�� ����.

WHENEVER�� ��� ��� ����.

EXEC SQLWHENEVER condition actionEND-EXEC.

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

SQLWARNING

SQLWARN0 = W��� SQLCODE� 100 � � �� �� �� �� ��

(SUBSTR(SQLSTATE,1,2) =‘01’) �� ��� ����� SQLWARNING� ������.

�: SQLWARN0� �� �� ��� ��� � ����. �� ��, ��� ��� ��� �

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

SQLERROR

SQL�(SQLCODE < 0) (SUBSTR(SQLSTATE,1,2) > ‘02’)� ���� �� �� ���� �

� �� ��� ����� SQLERROR� ������.

12 IBM i: ����� �� SQL �����

Page 23: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

NOT FOUND

�� ��� �� SQLCODE +100 � SQLSTATE ‘02000’� ���� �� �� ��� ��

��� NOT FOUND� ������.

v �� �� �� FETCH� ����� �� � SELECT� ��� ��� ���� ���

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

v �� FETCH ���� �� � select�� ���� �� � �� �� �� ����.

v UPDATE, DELETE �� INSERT ���� �� ��� ��� �� ����.

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

CONTINUE

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

GO TO ��

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

WHENEVER ... GO TO��:

v COBOL��� ��� �� ���� �� ����� �

v PL/I � C��� ����

v RPG��� TAG� ����

�� ��, �� ��� �� ���� ���� FETCH�� ���� SQL� �� �� �� �� �

�� ��� �� �����. � ��� ���� WHENEVER NOT FOUND GO TO ... ���� �

�� SQL� �� ��� �� �� ���� CLOSE�� ���� ���� ��� ����� �

���.

�: WHENEVER�� �� WHENEVER� � �� �� �� � SQL�� ����.

�� �� � WHENEVER� ��(��� �� ���� �� WHENEVER� �)�� ��� ��

SQL�� ���� ���� ��� ��� �� WHENEVER�� �� �����.

�� �� WHENEVER�� �� �� SQL�� �� �� ���. WHENEVER� SQL� ��

�� �� ��� �� SQL��� ��� SQLCODE � SQLSTATE� �� ���� ���� ����.

��� ���� SQLCODE �� SQLSTATE� �� ���� ���� SQL�� ��� � �� ��

� ��� ���.

WHENEVER�� ���� ��� �� CALL� ���� ����. �� �� WHENEVER�� ���

� �� � SQL�� ��� ����� ��� � SQLCODE �� SQLSTATE �� � � ���

�.

�� SQL ����� 13

Page 24: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

C � C++ �������� SQL� ��

ILE C �� C++ ���� SQL�� ���� ��� � ����� � �� ����� �� �

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

�: � ��� ���� 210 ���� �� ���� � ���� ���� ��� ���� ���.

�� ��

2 ���� �SQL� ���� ����� ��

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

�� ��

168 ���� ��� ���: i� DB2 ��� ���

i� DB2�� ���� ��� ��� SQL�� ���� �� ��� � ������ ��� �

���.

170 ���� ��: ILE C � C++ ���� SQL��

� �� ���� C ����� ��� ����.

SQL� ���� C � C++ �������� SQL �� �� �

SQLCA� ��� �� SQL�� �� ��� ���� �� C �� C++ ���� ���� C �

� C++ ���� SQL �� �� ��� �� ��� �� � ����.

SQLCA� ���� �� SQL�� �� �� C �� C++ ���� �� � �� �� � �� ���

���.

v long SQLCODE� ��� SQLCODE ��

v char SQLSTATE[6]� ��� SQLSTATE ��

��

v SQLCA(SQLCODE � SQLSTATE ��� �� ��)

SQLCODE � SQLSTATE �� � SQL�� ��� � ����� ��� �����. ������

SQLCODE �� SQLSTATE �� ��� �� SQL�� ������ �� � ����.

SQLCA� C �� C++ ����� �� �� SQL INCLUDE�� ��� �� � ����. ��

���� ���� �� ���� ��� SQLCA� ������.

struct sqlca sqlca = {0x0000000000000000};

SQL INCLUDE�� ���� �� ��� ����� �����.

EXEC SQL INCLUDE SQLCA ;

�� ���� �� ��� ��� sqlca� �� �� �����.

SQLCODE, SQLSTATE � SQLCA ��� ��� �� ���� ���. ��� ��� ���� �

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

14 IBM i: ����� �� SQL �����

Page 25: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

SQLCA� �� ��� C � C++ ��� ��� ����.

struct sqlca {unsigned char sqlcaid[8];long sqlcabc;long sqlcode;short sqlerrml;unsigned char sqlerrmc[70];unsigned char sqlerrp[8];long sqlerrd[6];unsigned char sqlwarn[11];unsigned char sqlstate[5];};

#define SQLCODE sqlca.sqlcode#define SQLWARN0 sqlca.sqlwarn[0]#define SQLWARN1 sqlca.sqlwarn[1]#define SQLWARN2 sqlca.sqlwarn[2]#define SQLWARN3 sqlca.sqlwarn[3]#define SQLWARN4 sqlca.sqlwarn[4]#define SQLWARN5 sqlca.sqlwarn[5]#define SQLWARN6 sqlca.sqlwarn[6]#define SQLWARN7 sqlca.sqlwarn[7]#define SQLWARN8 sqlca.sqlwarn[8]#define SQLWARN9 sqlca.sqlwarn[9]#define SQLWARNA sqlca.sqlwarn[10]#define SQLSTATE sqlca.sqlstatestruct sqlca sqlca = {0x0000000000000000};

SQLCODE� �� ��� ���� � ������ SQLCA� ���� ���� SQLCADE�

SQLCODE� �����. SQLSTATE� �� ��� ���� � ������ SQLCA� ����

���� SQLSTOTE� SQLSTATE� �����.

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

� SQLCA sqlerrmc �� �� ��� ����. �� �� ��� C �� C++ �����

sqlerrmc� �� ���� �� � �� ��� ����.

�� ��

9 ���� �SQL �� � ���

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

SQLCA� �� ����� ������� �� � �� �� ��� �� ����.

�� ��

SQL �� �

GET DIAGNOSTICS

SQL� ���� C � C++ �������� SQL ��� �� �

SQL ��� ��� � �� � � ����. ��� ALLOCATE DESCRIPTOR�� ��� ���

��. �� ��� SQL ��� �(SQLDA) ��� ��� �����. � ����� SQLDA ���

���� �����.

�� ���� SQLDA� �� � ����.

�� SQL ����� 15

Page 26: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

v EXECUTE...USING DESCRIPTOR descriptor-name

v FETCH...USING DESCRIPTOR descriptor-name

v OPEN...USING DESCRIPTOR descriptor-name

v DESCRIBE statement-name INTO descriptor-name

v DESCRIBE CURSOR cursor-name INTO descriptor-name

v DESCRIBE INPUT statement-name INTO descriptor-name

v DESCRIBE PROCEDURE procedure-name INTO descriptor-name

v DESCRIBE TABLE host-variable INTO descriptor-name

v PREPARE statement-name INTO descriptor-name

v CALL...USING DESCRIPTOR descriptor-name

SQLCA�� �� ����� � ��� SQLDA� �� � ��� SQLDA� �� ��� �� � �

���. �� ����� SQLDA� ��� ���� �����. C �� C++ ����� �� �� SQL

INCLUDE�� ��� SQLDA� �� � ����. SQL INCLUDE�� ���� �� SQLDA ��

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

EXEC SQL INCLUDE SQLDA;

�� ���� �� ‘sqlda’� ��� �� ��� �����.

SQLDA� �� ��� C � C++ ��� ��� ����.

struct sqlda {unsigned char sqldaid[8];long sqldabc;short sqln;short sqld;struct sqlvar {

short sqltype;short sqllen;union {

unsigned char *sqldata;long long sqld_result_set_locator; };

union {short *sqlind;long sqld_row_change;long sqld_result_set_rows; ];

struct sqlname {short length;unsigned char data[30];} sqlname;

} sqlvar[1];};

INCLUDE SQLDA SQL�� ���� ��� �� �� ��� ��� � �� �� ����.

#define SQLDASIZE(n) (sizeof(struct sqlda) + (n-1)* sizeof(struc sqlvar))

16 IBM i: ����� �� SQL �����

|

|

|||||||||||||||||||||

Page 27: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

� ��� ���� ��� �� SQLVAR � � ��� SQLDA� ����� � � � ���

�. �� ���� SQLDASIZE ��� ��� 20�� SQLVAR � � ��� SQLDA� �����

����.

#include <stdlib.h>EXEC SQL INCLUDE SQLDA;

struct sqlda *mydaptr;short numvars = 20;..

mydaptr = (struct sqlda *) malloc(SQLDASIZE(numvars));mydaptr->sqln = 20;

INCLUDE SQLDA�� �� ��� �� �� ��� ��� ����.

GETSQLDOUBLED(daptr)

daptr� ��� ���� SQLDA� � � � ���� 1� ��� � � �� �� ���

� 0� �����. SQLDAID �� 7�� ���� ‘2’� ��� �� SQLDA� � � ��

�.

SETSQLDOUBLED(daptr, newvalue)

SQLDAID� 7�� ���� � ��� �����.

GETSQLDALONGLEN(daptr,n)

daptr� ���� SQLDA�� n�� ��� �� ��� �����. SQLDA� � � �� n

�� SQLVAR ��� �� � � LOB� ���� ������.

SETSQLDALONGLEN(daptr,n,len)

daptr� ���� SQLDA� SQLLONGLEN �� n�� ��� len�� �����. SQLDA�

� � �� n�� SQLVAR ��� �� � � LOB� ���� ������.

GETSQLDALENPTR(daptr,n)

daptr� ���� SQLDA�� n�� ��� ���� ��� �� ��� �� ���� ����

�. SQLDATALEN ��� �� (4���) ��� �� ���� �����. SQLDATALEN

���� 0� �� NULL ���� �����. SQLDA� � � � ���� ������.

SETSQLDALENPTR(daptr,n,ptr)

daptr� ���� SQLDA�� n�� ��� ���� ��� �� ��� �� ���� ����

�. SQLDA� � � � ���� ������.

SQLDA� ���� ��� ���� ���� ��� ��� ��� ��� ����� ���� SQL��

� �� � ��� �� �� SQLDA� ��� ���. ��� ��� ����� SQLDA� sqldata

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

�. � ��� ����� ���� ���� �� ��� ��� � � ���� EXECUTE,

OPEN, CALL � FETCH�� ���� �����. �� ��, mydaptr��� SQLDA� �� ����

��� ���� PREPARE��� �� ���� ��� �� �����.

EXEC SQL PREPARE mysname INTO :*mydaptr FROM :mysqlstring;

�� SQL ����� 17

Page 28: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

SQLDA ��� �� ��� ���� �� ��� ��� � ����. ��� C �� ��� ����.

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

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

SELECT��� SQL ��� �(SQLDA)� �����. ��� SELECT� ��� ���� �� �

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

�� ��

� SQL �����

�� ��

SQL ��� �

SQL� ���� C � C++ �������� SQL� �

C �� C++ ����� ��� �� �� � �� �� ��� SQL�� �� � ����.

��� SQL�� EXEC SQL� � � ��(;)�� �� ���. EXEC SQL ��� ��� �

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

�: C �� C++ ����� ��� UPDATE�� ��� �� �����.

EXEC SQLUPDATE DEPARTMENTSET MGRNO = :MGR_NUMWHERE DEPTNO = :INT_DEPT ;

#pragma convert� ��� SQL�� �� � �� ���� CCSID� ���� ����. SQL�� �

��� �� ���� � ��� CCSID� �� �����.

SQL� ���� C � C++ ������ ��

SQL ��(--)� ���� � �� ���� �� SQL��� ��� �� � �� �� ��(��

EXEC� SQL ��� � )� C ��(/*...*/)� �� � ��(//� � �� ��)� �� � ����.

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

SQL� ���� C � C++ �������� SQL� ��

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

��� �� � �� ���� SQL�� � � ����. ����(₩)� ��� ��� �� �� �

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

DBCS ��� �� �� ��� � �� ��� �� �� ��� � ����.

v ��� �� �� �� �� ��� SI� �� �� �� �� �� ��� SO� �� �� � �

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

18 IBM i: ����� �� SQL �����

|

|

Page 29: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

� SQL��� �� ��� �� G’<AABBCCDDEEFFGGHHIIJJKK>’� ���� ����. ��

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

*...+....1....+....2....+....3....+....4....+....5....+....6....+....7....*....8EXEC SQL SELECT * FROM GRAPHTAB WHERE GRAPHCOL = G'<AABBCCDDEEFFGGHH><IIJJKK>';

v �� �� ��� ��� ��� � � ����. � ���� �� 5 � 75� �����. �

SQL��� �� ��� �� G’<AABBCCDDEEFFGGHHIIJJKK>’� ���� ����.

*...(....1....+....2....+....3....+....4....+....5....+....6....+....7....)....8EXEC SQL SELECT * FROM GRAPHTAB WHERE GRAPHCOL = G'<AABBCCDD>

<EEFFGGHHIIJJKK>';

SQL� ���� C � C++ �������� �� ��

� �� �� SQL�� �� SQL�, C� �� C++�� �� � ����.

EXEC SQL INCLUDE member-name;

C � C++ #include�� SQL��� SQL��� ���� C �� C++ ��� ��� ��� ���� �

� �� � ����.

SQL� ���� C � C++ ������ ��

� ��� ��� ������� �� CRTSQLCI �� CRTSQLCPPI ��� MARGINS ����

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

MARGINS ���� *SRCFILE� ���� � ��� �� ��� �����. �� �� �� �

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

� ����. �� ��, �� ��� 200� ����� � � ��� �� ��� 80� ����

��� 80� �� � ���� ����. ��� ������ ��� � ��� �� ��� 200� �

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

� ��� ��� ��� ������� �� MARGINS ���� ��� �� ��� ����. 1

� � ��� ���� �� �� ��(SRCSTMF ���� ���)� SQL INCLUDE�� ���

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

EXEC SQL� � ��� � �� �� �� SQL ������ SQL�� ���� ����.

�� ��

207 ���� ���� �� ������ �� CL �� ���

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

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

SQL� ���� C � C++ ������� � ��

�� �� C �� C++ ���� ��� ��� �� � ����. �� ����� ��� �� ��

��� ����.

�� SQL ����� 19

Page 30: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

SQL, RDI �� DSN�� � �� ��� ����� � ���� ��� �� �� ���� ���

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

�� 128� �����.

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

SQL� ���� C � C++ ������� � NULL � NUL

C, C++ � SQL��� ���� ��� ����� �� �� � � �����.

C � C++ ���� �(null) ��(NUL), � ���(NULL) � � �( ��(;))� ���� ����. C

NUL� 0� ��� ��� �� ����. C NULL� �� �� �� �� ���� �� ���

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

�����.

SQL� ���� C � C++ ������ ��� ���

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

SQL� ���� C � C++ ������ ����� �

C �� C++ ����� ��� SQL ������ ��� ���. SQL��� C �� C++ ����

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

SQL� ���� C � C++ ������ 3���

C � C++ �� �� �� ��� �� ���� �� � ����. 3����� ��� ��� �

��� �� ��� C �� C++ � ���� � ����.

��� �� ���� ��� �� 3���� �� � ����.

v ??( �� ��

v ??) ��� ��

v ??< �� ���

v ??> ��� ���

v ??= ��

v ??/ ����

SQL� ���� C � C++ ������ WHENEVER�

SQL WHENEVER�� �� GOTO�� ��� WHENEVER�� �� �� SQL�� �� �� ��

���.

SQL� ���� C � C++ �������� ��� �� ��

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

20 IBM i: ����� �� SQL �����

Page 31: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

C��� ��� ��� ���� ���� C ��� �� BEGIN DECLARE SECTION�� �� �

�� END DECLARE SECTION�� �� ���. BEGIN DECLARE SECTION � END DECLARE

SECTION� ��� �� SQL�� ��� �� ��� �� ��� BEGIN DECLARE SECTION�� END

DECLARE SECTION� ��� �� ���. typedef ID� ��� ��� ��� ���� BEGIN

DECLARE SECTION � END DECLARE SECTION� �����. ��� typedef ��� � � ��

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

C++��� ��� ��� ���� ���� C++ ��� �� BEGIN DECLARE SECTION�� ��

� �� END DECLARE SECTION�� �� ���. BEGIN DECLARE SECTION�� END

DECLARE SECTION� ��� �� �� ��� ��� ��� �� � ����.

SQL� �� �� ��� �� ��� ��(:)� �� ���.

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

���.

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

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

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

SQL� ���� C � C++ �������� ��� �� ��

C � C++ ������ �� C � C++ ��� ���� �� ��� �� ���� �����.

SQL� ���� C � C++ ������ �� ��� ��:

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

��autoexternstatic

constvolatile

floatdoubledecimal ( precision )

, scale_Decimal32_Decimal64_Decimal128

intlong long

signed longshort

sqlint32sqlint64

�� SQL ����� 21

Page 32: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

� �

,

variable-name ;= expression

��

�:

1. ���� ���� �� �� ���. ���� 1 - 63 ��� �� � ����. ���� 0��

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

2. �� �� � � ���� �� �� �� decimal.h� ���� ���.

3. sqlint32 �� sqlint64� ���� �� �� �� sqlsystm.h� ���� ���.

4. _Decimal32, _Decimal64 � _Decimal128� C� ���� �����.

SQL� ���� C � C++ ������ �� ��� ��:

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

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

v �� �� ��

v NUL� �� �� ��

v VARCHAR �� ��

�� SQL VARCHAR ��� varchar ��� ��� ���� �� � ����.

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

�� � ��

��autoexternstatic

constvolatile

unsignedsigned

char �

� �

,

variable-name ;[ 1 ] = expression

��

NUL� ��� � ��

��autoexternstatic

constvolatile

unsignedsigned

char �

22 IBM i: ����� �� SQL �����

Page 33: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

� �

,

variable-name [ length ] ;= expression

��

�:

1. ��� 1��� � 32741��� �� �� �� �� ���.

2. *CNULRQD ��� CRTSQLCI �� CRTSQLCPPI ��� ��� �� ��� ���� NUL

��� ���� �� ���. � ��� ��� ���� ���� �� ��� NUL �

���. � ��� ��� �� � ��� NUL ��� � � �� � �� �� ��

��� �����.

v ��� ��

v �� ��� NUL ���

v SQLWARN1� ‘W’� ���

3. *NOCNULRQD ��� CRTSQLCI �� CRTSQLCPPI ��� ��� �� ���� NUL

��� ��� ���.

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

v ��� ��� ��� NUL ��� �� � �� �� � �� �� ��� �����.

– ��� ����� ��� ���� ����� ��

– NUL ��� �� �� �� �

v ��� ��� ��� �� � ��� NUL ��� �� � �� ��� �� �� ��

� �����.

– ��� ���

– NUL ��� ���� ��

– SQLWARN1� ‘N’�� ���

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

– ��� ��

– NUL ��� ���� ��

– SQLWARN1� ‘W’� ���

VARCHAR �� ��

��autoexternstatic

constvolatile

struct {_Packed tag

�� SQL ����� 23

Page 34: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

�int

short var-1 ;signed

char var-2 [ length ] ; }unsignedsigned

� �

,

variable-name ;= { expression , expression }

��

�:

1. length� 0��� � 32740��� �� �� �� �� ���.

2. var-1 � var-2� � �� �� �� ���� �� � �� ��� ��� ��� � ��

��.

3. ��� ��� �� �� �� ���� �� � ��� �� �� �� ��� ��

� �� � ����.

4. NULL ��� �� � �� � ���� VARCHAR �� ��� ��� ���. VARCHAR

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

5. _Packed� C++�� ����� � ���. �� �� �� #pragma pack(1)� ��� �� ��

#pragma pack()� ������.

�: #pragma pack()� #pragma pack (reset)� ���� ��� #pragma pack() �� #pragma pack

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

#pragma pack(1)struct VARCHAR {

short len;char s[10];} vstring;

#pragma pack()

�:

EXEC SQL BEGIN DECLARE SECTION;

/* valid declaration of host variable vstring */

struct VARCHAR {short len;char s[10];} vstring;

/* invalid declaration of host variable wstring */

struct VARCHAR wstring;

SQL VARCHAR ��

24 IBM i: ����� �� SQL �����

Page 35: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

�� �

,

VARCHAR variable-name [ length ] ;= ″init-data″

��

�:

1. VARCHAR� � ��� ��� �� � ����.

2. length� 0��� � 32740��� �� �� �� �� ���.

3. NULL ��� �� � �� � ���� SQL VARCHAR ��� ��� ���. SQL

VARCHAR ��� � ��� ��� ��� ����.

��� �� ���

VARCHAR vstring[528]="mydata";

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

_Packed struct { short len;char data[528];}

vstring={6, "mydata"};

��� �� ���

VARCHAR vstring1[111],vstring2[222]="mydata",vstring3[333]="more data";

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

_Packed struct { short len;char data[111];}

vstring1;

_Packed struct { short len;char data[222];}

vstring2={6,"mydata"};

_Packed struct { short len;char data[333};}

vstring3={9,"more data"};

SQL� ���� C � C++ ������ �� ��� ��:

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

v �� ��� ��

v NUL� �� ��� ��

v VARGRAPHIC �� ��

�� SQL ����� 25

Page 36: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

�� ��� ��

��autoexternstatic

constvolatile

wchar_t �

,

variable-name= expression

; ��

NUL� ��� ��� ��

��autoexternstatic

constvolatile

wchar_t �

,

variable-name [ length ] ;= expression

��

�:

1. length� 1��� � 16371��� �� �� �� �� ���.

2. *CNULRQD ��� CRTSQLCI �� CRTSQLCPPI ��� ��� �� ��� ���� �

�� NUL ��(/0/0)� ���� �� ���. � ��� ��� DBCS ���� ���� �

� ��� ��� NUL ����. � ��� ��� �� � ��� NUL ��� �

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

v ��� ��

v �� ��� ��� NUL ���

v SQLWARN1� ‘W’� ���

*NOCNULRQD ��� CRTSQLCI �� CRTSQLCPPI ��� ��� �� ��� ����

��� NUL ��� ��� ���. � ��� ��� �� �� ��� ����.

v ��� ��� ��� ��� NUL ��� �� � �� �� � �� �� ��� ���

��.

– ��� ����� DBCS ���� ����� ��

– ��� NUL ��� �� �� �� �

v ��� ��� ��� �� � ��� ��� NUL ��� �� � �� ��� �� �

� ��� �����.

– ��� ���

– ��� NUL ��� ���� ��

– SQLWARN1� ‘N’�� ���

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

– ��� ��

26 IBM i: ����� �� SQL �����

Page 37: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

– ��� NUL ��� ���� ��

– SQLWARN1� ‘W’� ���

VARGRAPHIC �� ��

��autoexternstatic

constvolatile

struct {_Packed tag

�int

short var-1 ;signed

wchar_t var-2 [ length ] ; } �

� �

,

variable-name ;= { expression , expression }

��

�:

1. length� 0��� � 16370��� �� �� �� �� ���.

2. var-1 � var-2� � �� �� �� ��� ��� ��� � ����.

3. ��� ��� �� �� �� ���� �� � ��� �� �� �� ��� ��

� �� � ����.

4. _Packed� C++�� ����� � ���. �� �� �� #pragma pack(1)� ��� �� ��

#pragma pack()� ������.

#pragma pack(1)struct VARGRAPH {

short len;wchar_t s[10];} vstring;

#pragma pack()

EXEC SQL BEGIN DECLARE SECTION;

/* valid declaration of host variable graphic string */

struct VARGRAPH {short len;wchar_t s[10];} vstring;

/* invalid declaration of host variable wstring */

struct VARGRAPH wstring;

SQL� ���� C � C++ ������ 2� ��� ��:

�� SQL ����� 27

Page 38: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

C � C++�� SQL 2� �� � � ���� ��� ����. �� �� � � �� �� � �

� ��� ��� ���� SQL TYPE IS�� ������. SQL ������ � ��� � �

��� C �� ��� �����.

BINARY

��autoexternstatic

constvolatile

SQL TYPE IS BINARY (length) �

,

variable-name= init-data

� ; ��

VARBINARY

��autoexternstatic

constvolatile

SQL TYPE IS VARBINARYBINARY VARYING

(length) �

� �

,

variable-name= { init-len,″init-data″ }= SQL_VARBINARY_INIT(″init-data″)

; ��

�:

1. BINARY ��� ��� �� ��� 1 - 32766 �� ���.

2. VARBINARY � BINARY VARYING ��� ��� �� ��� 1 - 32740 �� ���.

3. SQL TYPE IS, BINARY, VARBINARY � BINARY VARYING� � ��� ��� ��

� ����.

BINARY �

��� �� ���

SQL TYPE IS BINARY(4) myBinField;

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

char myBinField[4];

28 IBM i: ����� �� SQL �����

Page 39: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

VARBINARY �

��� �� ���

SQL TYPE IS VARBINARY(12) myVarBinField;

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

_Packed struct myVarBinField_t {short length;char data[12]; }myVarBinField;

SQL� ���� C � C++ ������ LOB ��� ��:

C � C++�� LOB(� �� �)� �� SQL �� � � ���� ��� ����. �� ��

� � �� �� � �� ��� ��� ���� SQL TYPE IS�� ������. SQL �����

� � ��� � � ��� C �� ��� �����.

LOB ��� ��

��autoexternstatic

constvolatile

SQL TYPE IS CLOBDBCLOBBLOB

( length )KMG

� �

,

variable-name ;= { init-len,″init-data″ }= SQL_CLOB_INIT(″init-data″)= SQL_DBCLOB_INIT(″init-data″)= SQL_BLOB_INIT(″init-data″)

��

�:

1. K� length� 1024� ����. M� length� 1048576� ����. G� length� 1073741824�

����.

2. BLOB � CLOB� �� 1 ≤ length ≤ 2147483647

3. DBCLOB� �� 1 ≤ length ≤ 1073741823

4. SQL TYPE IS, BLOB, CLOB, DBCLOB, K, M, G� � ��� ��� �� � ����.

5. �� ���� ���� �� ��� 32766�����.

6. �� �� init-len� �� �� ���(�, K, M �� G� �� � ��).

7. LOB� �� ��� ���� �� ���� ������ �� � ��� ��� ���

� ����.

8. ������ ��� ��� � � ���� �� � �� �� ��� ����.

�� SQL ����� 29

Page 40: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

9. LOB ��� ��� �� ���� �� ��� �� � � �� ���� ��� ��� �� �

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

10. LOB ��� ��� �� CCSID ��� �� �� � ��� ��� �� � � �� ��� �

����.

11. DBCLOB� ��� ���� ���� ���� ���� ‘L’(�� �� ���� ���)� �

���.

CLOB �

��� �� ��� ��:

SQL TYPE IS CLOB(128K) var1, var2 = {10, "data2data2"};

������ C� �� ��� ����.

_Packed struct var1_t {unsigned long length;char data[131072];} var1,var2={10,"data2data2"};

DBCLOB �

��� �� ��� ��:

SQL TYPE IS DBCLOB(128K) my_dbclob;

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

_Packed struct my_dbclob_t {unsigned long length;wchar_t data[131072]; } my_dbclob;

BLOB �

��� �� ���

static SQL TYPE IS BLOB(128K)my_blob=SQL_BLOB_INIT("mydata");

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

static struct my_blob_t {unsigned long length;char data[131072];

} my_blob=SQL_BLOB_INIT("my_data");

LOB �� ��

��autoexternstatic

constvolatile

SQL TYPE IS CLOB_LOCATORDBCLOB_LOCATORBLOB_LOCATOR

30 IBM i: ����� �� SQL �����

Page 41: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

� �

,

variable-name ;= init-value

��

�:

1. SQL TYPE IS, BLOB_LOCATOR, CLOB_LOCATOR, DBCLOB_LOCATOR� � ��� �

�� �� � ����.

2. init-value� ��� �� ��� ��� ��� �����. �� � � ��� �� � � ��

��.

3. LOB �� ���� �� ���� �� ��� �� � � �� ���� ��� ��� �� �

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

CLOB �� ��� �

��� �� ���

static SQL TYPE IS CLOB_LOCATOR my_locator;

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

static long int unsigned my_locator;

BLOB � DBCLOB �� ����� �� ��� ���� ����.

LOB �� �� ��

��autoexternstatic

constvolatile

SQL TYPE IS CLOB_FILEDBCLOB_FILEBLOB_FILE

� �

,

variable-name ;= init-value

��

�:

1. SQL TYPE IS, BLOB_FILE, CLOB_FILE, DBCLOB_FILE� � ��� ��� �� � �

���.

2. LOB �� �� ��� �� ���� �� ��� �� � � �� ���� ��� ��� ��

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

�� SQL ����� 31

Page 42: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

CLOB �� �� �

��� �� ���

static SQL TYPE IS CLOB_FILE my_file;

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

static _Packed struct {unsigned long name_length;unsigned long data_length;unsigned long file_options;

char name[255];} my_file;

BLOB � DBCLOB �� �� ���� �� ��� ���� ����.

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

� ��� ��� file_options ��� �� � ����.

v SQL_FILE_READ (2)

v SQL_FILE_CREATE (8)

v SQL_FILE_OVERWRITE (16)

v SQL_FILE_APPEND (32)

�� ��

LOB �� �� ��

SQL� ���� C � C++ ������ XML ��� ��:

C � C++�� XML� �� SQL �� � � ���� ��� ����. � �� � � �� ��

� �� ��� ��� ���� SQL TYPE IS�� ������. SQL ������ � ��� �

� ��� C �� ��� �����.

XML ��� ��

��autoexternstatic

constvolatile

SQL TYPE IS XML AS CLOBDBCLOBBLOB

( length )KMG

� �

,

variable-name ;= { init-len,″init-data″ }= SQL_CLOB_INIT(″init-data″)= SQL_DBCLOB_INIT(″init-data″)= SQL_BLOB_INIT(″init-data″)

��

�:

32 IBM i: ����� �� SQL �����

|

|

|

|

|

||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

|||||||||||||||||||||||||||||||||||||||||||

|

|

Page 43: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

1. K� length� 1024� ����. M� length� 1048576� ����. G� length� 1073741824�

����.

2. BLOB � CLOB� �� 1 ≤ length ≤ 2147483647

3. DBCLOB� �� 1 ≤ length ≤ 1073741823

4. SQL TYPE IS, XML AS, BLOB, CLOB, DBCLOB, K, M, G� � ��� ��� ��

� ����.

5. �� ���� ���� �� ��� 32766�����.

6. �� �� init-len� �� �� ���(�, K, M �� G� �� � ��).

7. XML ��� �� ��� ���� �� ���� ������ �� � ��� ���

���� ����.

8. ������ ��� ��� � � ���� �� � �� �� ��� ����.

9. XML ��� ��� �� ���� �� ��� �� � � �� ���� ��� ��� �� �

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

10. XML ��� ��� CCSID �� DECLARE VARIABLE�� �� ���� ��� � ���

�. ��� ��� SQL_XML_DATA_CCSID QAQQINI ��� �� ��� �� �����. �

QAQQINI ��� �� �� CCSID 1208��.

11. XML AS DBCLOB� ��� ���� ���� ���� ���� ‘L’(�� �� ���� �

��)� � ���.

XML �

��� �� ���

SQL TYPE IS XML AS CLOB(5000) var1;

������ C� �� ��� ����.

_Packed struct var1_t {unsigned long length;char data[5000];} var1;

XML �� ��

��autoexternstatic

constvolatile

SQL TYPE IS XML AS LOCATOR �

�� SQL ����� 33

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

||||

|

|||||||||||||||||||||||||||||||

||

Page 44: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

� �

,

variable-name ;= init-value

��

�:

1. SQL TYPE IS, XML AS LOCATOR� � ��� ��� �� � ����.

2. init-value� ��� �� ��� ��� ��� �����. �� � � ��� �� � � ��

��.

3. XML �� ���� �� ���� �� ��� �� � � �� ���� ��� ��� �� �

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

XML �� ��� �

��� �� ���

static SQL TYPE IS XML AS LOCATOR my_locator;

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

static long int unsigned my_locator;

XML �� �� ��

��autoexternstatic

constvolatile

SQL TYPE IS XML AS CLOB_FILEDBCLOB_FILEBLOB_FILE

� �

,

variable-name ;= init-value

��

�:

1. SQL TYPE IS, XML AS, BLOB_FILE, CLOB_FILE, DBCLOB_FILE� � ��� ��� �

� � ����.

2. XML �� �� ��� �� ���� �� ��� �� � � �� ���� ��� ��� ��

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

XML �� �� �

��� �� ���

static SQL TYPE IS XML AS CLOB_FILE my_file;

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

34 IBM i: ����� �� SQL �����

|||||||||||||||||||||||

|

|

|

|

|

|

|

|

|

|

|

|

|

|||||||||||||||||||||||||||||||||||||||||||

||||||||||||||||||||||||

|

|

|

|

|

|

|

|

|

|

Page 45: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

static _Packed struct {unsigned long name_length;unsigned long data_length;unsigned long file_options;

char name[255];} my_file;

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

� ��� ��� file_options ��� �� � ����.

v SQL_FILE_READ (2)

v SQL_FILE_CREATE (8)

v SQL_FILE_OVERWRITE (16)

v SQL_FILE_APPEND (32)

SQL� ���� C � C++ ������ ROWID ��� ��:

C � C++�� SQL �� � ROWID� ���� ��� ����. � �� � � �� �� �

�� ��� ��� ���� SQL TYPE IS�� ������. SQL ������ � ��� � �

��� C �� ��� �����.

ROWID

�� �

,

SQL TYPE IS ROWID variable-name ; ��

�: SQL TYPE IS ROWID� � ��� ��� �� � ����.

ROWID �

��� �� ���

SQL TYPE IS ROWID myrowid, myrowid2;

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

_Packed struct { short len;char data[40];}

myrowid1, myrowid2;

SQL� ���� C � C++ ������ �� � �� ��� ��� ��:

C � C++�� SQL �� � �� ��� �� � � ���� ��� ����. � �� � � �

� � �� ��� ��� ���� SQL TYPE IS�� ������. SQL ������ � ���

� � ��� C �� ��� �����.

�� SQL ����� 35

||||||

|

|

|

|

|

|

|

|

|

|

Page 46: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

�� �� �� ��

�� �

,

SQL TYPE IS RESULT_SET_LOCATOR variable-name ; ��

�: SQL TYPE IS RESULT_SET_LOCATOR� � ��� ��� �� � ����.

�� � �� ��� �

��� �� ���

SQL TYPE IS RESULT_SET_LOCATOR resloc1;

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

long long unsigned resloc1;

SQL� ���� C � C++ �������� ��� �� ��

C � C++ ������ � C �� C++ ��� ��� �� ��� ��� �� � ����.

��� ��� �� �� �� ��� � � ���� ��� ���� �� 2�� ��� �����.

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

��� ���� �� ��� � C �� C++ ��� ���� ���� � � ����.

�:

struct {struct {

char c1;char c2;} b_st;

} a_st;

� ��� b_st� � �� c1 � c2� ��� ��� ��� ����.

���� ��� ���� �� ���� �� � ��� 2�� ��� ���� �� � ����. �

��� ��� ��� ��� �� � ����(�: structure.field). ��� ��� 2�� ��� ���

��. (�� ��, � ��� �� ��� a_st� SQL�� �� � ����.) A ��� � �� ���

�� � ����. �� ��� a_st� ��� ��� ����� SQL��� �� � �����. SQL

��� ��� ��� 2�� ��� ��� ��� ��� ��� ��� �� �� � ����. �

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

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

�� ��, ��� ��� CORPDATA.EMPLOYEE ��� ��� ��� �� � �� �� � �

���.

struct { char empno[7];struct { short int firstname_len;

char firstname_text[12];

36 IBM i: ����� �� SQL �����

|

|||||||||||||||||

|

|

|

|

|

|

|

Page 47: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

} firstname;char midint,struct { short int lastname_len;

char lastname_text[15];} lastname;

char workdept[4];} pemp1;

.....strcpy(pemp1.empno, "000220");.....exec sqlSELECT *

INTO :pemp1FROM corpdata.employeeWHERE empno=:pemp1.empno;

pemp1� ���� � �� �� �� ��� � (firstname � lastname)� ��� ���� ����.

SQL� ���� C � C++ ������ ��� �� ��

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

��� ��

��autoexternstatic

constvolatile

struct {_Packed tag

�� SQL ����� 37

Page 48: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

� � �

,

float var-1 ; }doubledecimal ( precision )

, scale_Decimal32_Decimal64_Decimal128

intlong long

signed longshort

sqlint32sqlint64

varchar-structurevargraphic-structurebinarylobxmlSQL-varcharrowidresult-set-locator

,

char var-2 ;signed [ length ]unsigned

,

wchar_t var-5 ;[ length ]

� �

,

variable-name ;= expression

��

varchar ��:

intstruct { short var-3 ;

tag signed signedunsigned

� char var-4 [ length ] ; }

38 IBM i: ����� �� SQL �����

||

Page 49: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

��� ��(�)

vargraphic ��:

intstruct { short

tag signedvar-6 ; wchar_t var-7 [ length ] ; }

2�:

SQL TYPE IS BINARY ( length )VARBINARYBINARY VARYING

lob:

SQL TYPE IS CLOB ( length )DBCLOB KBLOB M

GCLOB_LOCATORDBCLOB_LOCATORBLOB_LOCATORCLOB_FILEDBCLOB_FILEBLOB_FILE

xml:

SQL TYPE IS XML AS CLOB ( length )DBCLOB KBLOB M

GLOCATOR

CLOB_FILEDBCLOB_FILEBLOB_FILE

SQL-varchar:

VARCHAR variable-name [ length ]

rowid:

SQL TYPE IS ROWID

�� �� �� ��:

SQL TYPE IS RESULT_SET_LOCATOR

�� SQL ����� 39

|||||||||||||||

|

Page 50: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

�:

1. ��, ��, ���, 2�, LOB, XML, ROWID � �� � �� ��� ��� �� ��� ��

���� ��, ��, ���, 2�, LOB, XML, ROWID � �� � �� ��� ��� ��

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

2. char �� wchar_t �� ����� � ��� ��� ��� SQL C � C++ ������

�� VARCHAR �� VARGRAPHIC ��� �����.

3. _Packed� C++�� ����� � ���. �� �� �� #pragma pack(1)� ��� �� ��

#pragma pack()� ������.

#pragma pack(1)struct {

short myshort;long mylong;char mychar[5];} a_st;

#pragma pack()

4. sqlint32 �� sqlint64� ���� �� �� �� sqlsystm.h� ���� ���.

5. _Decimal32, _Decimal64 � _Decimal128� C� ���� �����.

SQL� ���� C � C++ ������ ��� �� ����� ��

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

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

��autoexternstatic

constvolatile

intshort

signed�

� �

,

variable-name [ dimension ] ;= expression

��

�: ��� 1 - 32767 ��� �� �� ���.

SQL� ���� C � C++ �������� ��� �� �� ��

C � C++ ������ �� ��� ��� ��� �� �� �� � ����. �� �� �� �

� ��� � � ���� ��� �� ��� �� 2�� ��� �����. �� �� �� ���

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

C ��

40 IBM i: ����� �� SQL �����

|

|

|

Page 51: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

struct {_Packed struct{

char c1_var[20];short c2_var;} b_array[10];

} a_struct;

� C++ ��

#pragma pack(1)struct {

struct{char c1_var[20];short c2_var;} b_array[10];

} a_struct;#pragma pack()

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

v b_array� �� �� ��� �� �� ���� ���.

v ��� ��� �� _Packed ��� ���� ���.

v b_array� c1_var � c2_var ��� �� �� ��� �� �� ����.

v b_array� FETCH� � INSERT�� ���� ���� �� � ����.

v c1_var � c2_var� SQL�� �� ��� ��� � ��.

v A ��� � �� ��� �� � ����.

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

_Packed struct {char first_initial;char middle_initial;_Packed struct {short lastname_len;

char lastname_data[15];} lastname;

double total_salary;} employee_rec[10];

struct { short inds[4];} employee_inds[10];

...EXEC SQL DECLARE C1 CURSOR FORSELECT SUBSTR(FIRSTNME,1,1), MIDINIT, LASTNAME,

SALARY+BONUS+COMMFROM CORPDATA.EMPLOYEE;

EXEC SQL OPEN C1;EXEC SQL FETCH C1 FOR 10 ROWS INTO :employee_rec:employee_inds;...

SQL� ���� C � C++ ������ ��� �� ��

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

�� SQL ����� 41

Page 52: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

��autoexternstatic

constvolatile

_Packed struct {tag

� � �

,

float var-1 ; }doubledecimal ( precision )

, scale_Decimal32_Decimal64_Decimal128

intlong long

signed longshort

sqlint32sqlint64

varchar-structurevargraphic-structurebinarylobxmlSQL-varcharrowidresult-set-locator

,

char var-2 ;signed [ length ]unsigned

,

wchar_t var-5 ;[ length ]

� �

,

variable-name [ dimension ] ;= expression

��

varchar ��:

int_Packed struct { short var-3 ;

tag signed signedunsigned

� char var-4 [ length ] ; }

42 IBM i: ����� �� SQL �����

||

Page 53: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

vargraphic ��:

int_Packed struct { short var-6 ;

tag signed�

� wchar_t var-7 [ length ] ; }

2�:

SQL TYPE IS BINARY ( length )VARBINARYBINARY VARYING

lob:

SQL TYPE IS CLOB ( length )DBCLOB KBLOB M

GCLOB_LOCATORDBCLOB_LOCATORBLOB_LOCATORCLOB_FILEDBCLOB_FILEBLOB_FILE

xml:

SQL TYPE IS XML AS CLOB ( length )DBCLOB KBLOB M

GLOCATOR

CLOB_FILEDBCLOB_FILEBLOB_FILE

SQL-varchar:

VARCHAR variable-name [ length ]

rowid:

SQL TYPE IS ROWID

�� �� �� ��:

�� SQL ����� 43

||||||||||||||||

|||||||||||||||

Page 54: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

SQL TYPE IS RESULT_SET_LOCATOR

�:

1. ��, ��, ���, 2�, LOB, XML, ROWID � �� � �� ��� ��� �� ��� ��

���� �� ��� ��, �� ��� ��, ��� ��� ��, 2� ��� ��, LOB ���

��, XML ��� ��, ROWID ��� �� � �� � �� ��� ��� �� ��� ��

������.

2. ��� ��� �� �� �� ���� �� � ��� �� �� �� ��� ��

� �� � ����.

3. ��� 1 - 32767 ��� �� �� ���.

4. _Packed� C++�� ����� � ���. �� �� �� #pragma pack(1)� ��� �� ��

#pragma pack()� ������.

5. sqlint32 �� sqlint64� ���� �� �� �� sqlsystm.h� ���� ���.

6. _Decimal32, _Decimal64 � _Decimal128� C� ���� �����.

SQL� ���� C � C++ ������ ��� �� �� ����� ��

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

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

��autoexternstatic

constvolatile

struct {_Packed tag

�int

short var-1 [ dimension-1 ]signed

; } �

� �

,

variable-name [ dimension-2 ]= expression

; ��

�:

1. ��� ��� �� �� �� ���� �� � ��� �� �� �� ��� ��

� �� �� ����.

2. dimension-1 � dimension-2� � � 1 - 32767 ��� �� �� ���.

3. _Packed� C++�� ����� � ���. �� �� �� #pragma pack(1)� ��� �� ��

#pragma pack()� ������.

44 IBM i: ����� �� SQL �����

|

|

|

|

|

Page 55: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

SQL� ���� C � C++ �������� ��� ��� � ��

���� C � C++ �� � � �� ���� ��� ��� �� �� ��� ��� ��� ��

����� ����.

v ��� ��� ���� ��� �� �� ��� ��� ��� ��� ����� ��(*)� ��� �

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

short *mynum; /* Ptr to an integer */long **mynumptr; /* Ptr to a ptr to a long integer */char *mychar; /* Ptr to a single character */char(*mychara)[20]; /* Ptr to a char array of 20 bytes */struct { /* Ptr to a variable char array of 30 */

short mylen; /* bytes. */char mydata[30];} *myvarchar;

�: ��� NUL� �� �� �� �� ���� ���� ��(��� ���)�� �� � ��

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

���. �:

char (*a)[10]; /* pointer to a null-terminated char array */char *a[10]; /* pointer to an array of pointers */

v ��� ��� ���� ��� ���� ��� � �� �� ��� ��� �� ��� ��� ��

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

char *mychar; /* This declaration is valid */char mychar; /* But this one is invalid */

v SQL��� ��� ��� ���� �� ��� ��� ��� �� ���� ��� ���(NUL�

�� �� �� �� ���� ��� � ). �� ��, �� ���� ��� ������.

char (*mychara)[20]; /* ptr to char array of 20 bytes */

��� SELECT� �� SQL��� ��� ��� ���� ���� ��� ���� ����.

EXEC SQL SELECT name INTO :*mychara FROM mytable;

v ��(*)� ��� ���� �� ���� �� � ����.

v ��(*)� ��� ��� ��� ��� ��� ���� �� ��� ��� ��(*) �� �� ���

�.

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

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

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

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

SQL� ���� C � C++ �������� typedef ��

typedef ��� ��� short, float � double� �� C � ��� �� ���� �� ID� �� �

� ����.

�� SQL ����� 45

Page 56: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

��� ��� ���� ��� typedef ID� typedef ��� �� �� �� ����� �� ����

��� ��� �� ���. ���� BEGIN DECLARE SECTION�� END DECLARE SECTION

�� �� �� �� typedef ��� BEGIN DECLARE SECTION � END DECLARE SECTION� �

� ���� ��� ���. typedef ID� BEGIN DECLARE SECTION ��� SQL ������ �

� �����. C � C++ ������ ��� �� ����� �� typedef ��� ���� ����

�.

�� typedef�� �:

v typedef �� � typedef� ���� ��� �� ��

typedef long int LONG_T;LONG_T I1, *I2;

v �� � ��� typedef �� ��� �� ��� ��� � ��� � ��� ��� �� ����.

typedef char NAME_T[30];typedef char CHAR_T;CHAR_T name1[30]; /* Valid */NAME_T name2; /* Valid */NAME_T name3[10]; /* Not valid for SQL use */

v SQL TYPE IS�� typedef� �� � ����.

typedef SQL TYPE IS CLOB(5K) CLOB_T;CLOB_T clob_var1;

v ���� ��(auto, extern, static), volatile �� const ���� ��� �� ��� �� � ���

�.

typdef short INT_T;typdef short INT2_T;static INT_T i1;volatile INT2_T i2;

v ��� typedef� �����.

typedef _Packed struct {char dept[3];char deptname[30];long Num_employees;} DEPT_T;

DEPT_T dept_rec;DEPT_T dept_array[20]; /* use for blocked insert or fetch */

SQL� ���� C � C++ �������� ILE C ��� � �� �� ��

C �� C++ #pragma mapinc ���� #include ���� �� ��� � �� ��� ���� �

� � ����.

SQL� �� ���� ���� �� �� #pragma mapinc ���� SQL ������ �����. �

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

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

v ���

v � �� ���

v �� �� �� ���

46 IBM i: ����� �� SQL �����

Page 57: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

v ��

v �� ��

�����, ����, �� �� � ����� ������. ���� ��� typedef�� �����

� ���� ��� #pragma mapinc � #include ���� �� �� typedef�� �����. SQL� �

� ���� , � , � � � �� �����. �� ��� �� ���� �� D, p, z, _P �

1BYTE_CHAR��. �� ��� D� p� � � �� � ��� � � �� �� ��� ��

� ����. #pragma mapinc � #include ���� �� �� typedef ���� ��� ��� �

��� SQL��� ��� ��� �� � ��� ���� ��� �� � ����. typedef ��� �

� �� ��� SQL��� �� � ��� typedef� ��� ��� ��� �� � ����.

SQL ����� �� ���� i� DB2 � ��� ��� � �� DEPARTMENT� ��� ��

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

#pragma mapinc ("dept","CORPDATA/DEPARTMENT(*ALL)","both")#include "dept"CORPDATA_DEPARTMENT_DEPARTMENT_both_t Dept_Structure;

Dept_Structure�� ��� ��� DEPTNO, DEPTNAME, MGRNO � ADMRDEPT � � ���

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

�: DATE, TIME � TIMESTAMP �� �� ��� �� ��� ����. �� �� DATE, TIME

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

�� ��� DATE ��� ��� ��� ���� �� ���� ���� � � ����.

GRAPHIC �� VARGRAPHIC �� UCS-2 CCSID� ���� �� �� ��� ��� ����

UCS-2 CCSID� �����. GRAPHIC �� VARGRAPHIC �� UTF-16 CCSID� ���� ��

�� ��� ��� ���� UTF-16 CCSID� �����.

�, 2�(0� �� ��� �� ���) � ���� 10��� ILE C� �� �� ���� ���

� SQL� �� �� ��� �����. �� ��� ��(EPM) ��� ���� �� ��

� � � � �� ��� �� � ����. �� ��� ILE C/C++ �� ��� ��

� ������.

� SQL � C �� C++ ��� � ��

������ ��� ���� ��� ��� � SQLTYPE � SQLLEN� �����. ��� ���

����� ��� �� ���� SQLTYPE� � SQLTYPE + 1��.

� 1. ��� SQL �� � � ��� C �� C++ ��

C �� C++ �� � ��� ��� SQLTYPE ��� ��� SQLLEN SQL �� �

short int 500 2 SMALLINT

long int 496 4 INTEGER

long long int 492 8 BIGINT

�� SQL ����� 47

Page 58: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

� 1. ��� SQL �� � � ��� C �� C++ �� (��)

C �� C++ �� � ��� ��� SQLTYPE ��� ��� SQLLEN SQL �� �

decimal(p,s) 484 p(1���), s(2���) DECIMAL (p,s)

_Decimal32 996 4 SQL� � �� � � ��

����� ����

DECFLOAT(7)� �����.

_Decimal64 996 8 DECFLOAT(16)

_Decimal128 996 16 DECFLOAT(34)

float 480 4 FLOAT(����)

double 480 8 FLOAT(���)

�� �� �� 452 1 CHAR(1)

NUL� �� �� �� 460 �� VARCHAR(�� - 1)

VARCHAR �� �� 448 �� VARCHAR(��)

�� ��� �� 468 1 GRAPHIC(1)

NUL� �� �� ��� �

400 �� VARGRAPHIC(�� - 1)

VARGRAPHIC �� �� 464 �� VARGRAPHIC(��)

�� ��� ��� ��� SQL �� � � � � C �� C++ �� � � �� � ����.

� 2. ��� C �� C++ ��� ��� SQL �� �

SQL �� � C �� C++ �� � �

SMALLINT short int

INTEGER long int

BIGINT long long int

DECIMAL(p,s) decimal(p,s) p� 1 - 63 ��� �� ��� s� 0

- 63 ��� �� ����.

NUMERIC(p,s) �� ��� �� ���

2�

��� � ��� �� DECIMAL (p,s)� ������.

DECFLOAT(16) _Decimal64 C��� �����.

DECFLOAT(34) _Decimal128 C��� �����.

FLOAT(����) float

FLOAT(���) double

CHAR(1) �� �� ��

CHAR(n) ��� � ��� �� n>1� �� NUL� �� �� ���

������.

48 IBM i: ����� �� SQL �����

Page 59: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

� 2. ��� C �� C++ ��� ��� SQL �� � (��)

SQL �� � C �� C++ �� � �

VARCHAR(n) NUL� �� �� �� NUL ��� ����� n + 1� ��

� ������. ��� �� NUL(₩0)

� �� � �� �� VARCHAR ��

�� �� SQL VARCHAR� �����

�.

n� �� ����. n� ���� 32740

��.

VARCHAR �� �� n� ���� 32740��. SQL

VARCHAR ��� �� � ����.

CLOB �� SQL TYPE IS� ��� C �� C++

�� CLOB� ������.

GRAPHIC (1) �� ��� ��

GRAPHIC (n) ��� � ��� ��

VARGRAPHIC(n) NUL� �� ��� �� n > 1� �� NUL� �� ��� ��

� ������.

VARGRAPHIC �� �� ��� ��� NUL �(/0/0)� �� �

�� �� VARGRAPHIC �� ��� �

�����. NUL ��� ����� n +

1� ��� ������.

n� �� ����. n� ���� 16370

��.

DBCLOB �� SQL TYPE IS� ��� C �� C++

�� DBCLOB� ������.

BINARY �� SQL TYPE IS� ��� C �� C++

�� BINARY� ������.

VARBINARY �� SQL TYPE IS� ��� C �� C++

�� VARBINARY� ������.

BLOB �� SQL TYPE IS� ��� C �� C++

�� BLOB� ������.

DATE NUL� �� �� �� �� *USA, *ISO, *JIS �� *EUR�

�� NUL ��� ����� 11� �

�� ������. �� *MDY,

*YMD �� *DMY� �� NUL ��

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

�� *JUL� �� NUL ��� ��

��� 7� ��� ������.

VARCHAR �� �� �� *USA, *ISO, *JIS �� *EUR�

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

*MDY, *YMD �� *DMY� �� 8�

��� ������. �� *JUL� ��

6� ��� ������.

�� SQL ����� 49

Page 60: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

� 2. ��� C �� C++ ��� ��� SQL �� � (��)

SQL �� � C �� C++ �� � �

TIME NUL� �� �� �� NUL ��� ����� 7�( � ��

��� 9�) ��� ������.

VARCHAR �� �� 6� ��� ������. � �����

8� ��� ������.

TIMESTAMP NUL� �� �� �� NUL ��� ����� 20�(��� �

��� ���� � ����� 27�) �

�� ������. n� 27 �� ��

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

VARCHAR �� �� 19� ��� ������. ��� ���

� ���� � ����� 26�� ���

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

� ��� ����.

XML �� SQL TYPE IS� ��� C �� C++

�� XML� ������.

DATALINK ���� ��

ROWID �� SQL TYPE IS� ��� C �� C++�

� ROWID� ������.

�� � �� ��� �� SQL TYPE IS� ��� C �� C++�

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

C � C++ �� �� � ���� �� �

� ���(’)� � ���(″)� C, C++ � SQL�� �� �� � � ����.

C� C++��� � ���� ��� ��� ��� ��� � ���� ��� �� ��� ���

��. ���� SQL��� � ���� �� ID� ��� � ���� ��� �� ��� ���

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

SQL� ���� C � C++ �������� ����� �� ��

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

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

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

����.

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

EXEC SQL FETCH CLS_CURSOR INTO :ClsCd,:Day :DayInd,:Bgn :BgnInd,:End :EndInd;

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

50 IBM i: ����� �� SQL �����

||||

||||

Page 61: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

EXEC SQL BEGIN DECLARE SECTION;char ClsCd[8];char Bgn[9];char End[9];short Day, DayInd, BgnInd, EndInd;EXEC SQL END DECLARE SECTION;

�� ��

��� �� ��

5 ���� �SQL� ���� ������ ����� ���

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

��.

COBOL �������� SQL� ��

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

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

System i® ��� � ��� COBOL ���� �����. i� IBM DB2 Query Manager � SQL

Development Kit ����� �� ���� OPM COBOL � ILE COBOL ����� ��� ����

�.

�: � ��� ���� 210 ���� �� ���� � ���� ���� ��� ���� ���.

�� ��

2 ���� �SQL� ���� ����� ��

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

�� ��

168 ���� ��� ���: i� DB2 ��� ���

i� DB2�� ���� ��� ��� SQL�� ���� �� ��� � ������ ��� �

���.

176 ���� ��: COBOL � ILE COBOL ���� SQL��

� �� ���� COBOL ����� ��� ����.

SQL� ���� COBOL �������� SQL �� �� �

SQL �� �(SQLCA)� ��� �� SQL�� �� ��� ���� �� COBOL ���� �

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

SQLCA �� SQL �� �� ����� SET OPTION SQL�� �� SQLCA = *NO� �� ���

���.

SQLCA� ���� �� SQL�� �� �� COBOL ���� �� � �� �� � �� ��� �

��.

�� SQL ����� 51

Page 62: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

v PICTURE S9(9) BINARY, PICTURE S9(9) COMP-4 �� PICTURE S9(9) COMP� ��� SQLCODE

��

v PICTURE X(5)� ��� SQLSTATE ��

��

v SQLCA(SQLCODE � SQLSTATE ��� �� ��)

SQLCODE � SQLSTATE �� � SQL�� ��� � ����� ��� �����. ������

SQLCODE �� SQLSTATE �� ��� �� SQL�� ������ �� � ����.

SQLCA� COBOL ����� �� �� SQL INCLUDE�� ��� �� � ����. �� ��

�� ���� ���� ��� ������. SQL INCLUDE�� ���� �� ��� ����� ��

���.

EXEC SQL INCLUDE SQLCA END-EXEC.

SQLCODE, SQLSTATE � SQLCA �� ��� ���� WORKING-STORAGE SECTION ��

LINKAGE SECTION� ���� �� �� ���� �� �� ��� �� � �� �� ���

�� � ����.

INCLUDE�� ���� �� SQL COBOL ������ SQLCA� �� COBOL ��� ����

�.

01 SQLCA.05 SQLCAID PIC X(8). VALUE X"0000000000000000".05 SQLCABC PIC S9(9) BINARY.05 SQLCODE PIC S9(9) BINARY.05 SQLERRM.

49 SQLERRML PIC S9(4) BINARY.49 SQLERRMC PIC X(70).

05 SQLERRP PIC X(8).05 SQLERRD OCCURS 6 TIMES

PIC S9(9) BINARY.05 SQLWARN.

10 SQLWARN0 PIC X.10 SQLWARN1 PIC X.10 SQLWARN2 PIC X.10 SQLWARN3 PIC X.10 SQLWARN4 PIC X.10 SQLWARN5 PIC X.10 SQLWARN6 PIC X.10 SQLWARN7 PIC X.10 SQLWARN8 PIC X.10 SQLWARN9 PIC X.10 SQLWARNA PIC X.

05 SQLSTATE PIC X(5).

ILE COBOL� �� SQLCA� GLOBAL�� ��� �����. SQLCODE� �� ��� ����

� SQLCA� ������ �� ���� �� SQLCODE� SQLCADE� �����. SQLSTATE

� �� ��� ���� � SQLCA� ������ �� ���� �� SQLSTATE� SQLSTOTE�

�����.

52 IBM i: ����� �� SQL �����

Page 63: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

�� ��

9 ���� �SQL �� � ���

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

SQLCA� �� ����� ������� �� � �� �� ��� �� ����.

�� ��

SQL �� �

SQL� ���� COBOL �������� SQL ��� �� �

SQL ��� �(SQLDA)�� � �� � � ����. ��� ALLOCATE DESCRIPTOR�� ���

�����. �� ��� SQLDA ��� ��� �����. � ����� SQLDA ��� ����

�����.

�� ���� SQLDA� �� � ����.

v EXECUTE...USING DESCRIPTOR descriptor-name

v FETCH...USING DESCRIPTOR descriptor-name

v OPEN...USING DESCRIPTOR descriptor-name

v CALL...USING DESCRIPTOR descriptor-name

v DESCRIBE statement-name INTO descriptor-name

v DESCRIBE CURSOR cursor-name INTO descriptor-name

v DESCRIBE INPUT statement-name INTO descriptor-name

v DESCRIBE PROCEDURE procedure-name INTO descriptor-name

v DESCRIBE TABLE host-variable INTO descriptor-name

v PREPARE statement-name INTO descriptor-name

SQLCA�� �� ����� � ��� SQLDA� �� � ����. SQLDA� �� ��� �� �

����. SQLDA� COBOL ����� �� ����� INCLUDE�� ��� �� � ����.

SQL INCLUDE�� ���� �� SQLDA ��� ����� �����.

EXEC SQL INCLUDE SQLDA END-EXEC.

SQLDA� �� ��� COBOL ��� ��� ����.

�� SQL ����� 53

|

|

Page 64: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

SQLDA ��� ���� WORKING-STORAGE SECTION �� LINKAGE SECTION� ����

�� �� ���� �� �� ��� �� � �� �� ��� �� � ����. ILE COBOL� �

� SQLDA� GLOBAL�� ��� �����.

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

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

SELECT��� SQL ��� �(SQLDA)� �����. ��� SELECT� ��� ���� �� �

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

1 SQLDA.05 SQLDAID PIC X(8).05 SQLDABC PIC S9(9) BINARY.05 SQLN PIC S9(4) BINARY.05 SQLD PIC S9(4) BINARY.05 SQLVAR OCCURS 0 TO 409 TIMES DEPENDING ON SQLD.

10 SQLVAR1.15 SQLTYPE PIC S9(4) BINARY.15 SQLLEN PIC S9(4) BINARY.15 FILLER REDEFINES SQLLEN.

20 SQLPRECISION PIC X.20 SQLSCALE PIC X.

15 SQLRES PIC X(12).15 SQLDATA POINTER.15 SQL-RESULT-SET-LOCATOR-R REDEFINES SQLDATA.

20 SQL-RESULT-SET-LOCATOR PIC S9(18) BINARY.15 SQLIND POINTER.15 SQL-ROW-CHANGE-SQL-R REDEFINES SQLIND.

20 SQLD-ROW-CHANGE FIC S9(9) BINARY.15 SQL-RESULT-SET-ROWS-R PIC REDEFINES SQLIND.

20 SQLD-RESULT-SET-ROWS PIC S9(9) BINARY.15 SQLNAME.

49 SQLNAMEL PIC S9(4) BINARY.49 SQLNAMEC PIC X(30).

10 SQLVAR2 REDEFINES SQLVAR1.15 SQLVAR2-RESERVED-1 PIC S9(9) BINARY.15 SQLLONGLEN REDEFINEDS SQLVAR2-RESERVED-1

PIC S9(9) BINARY.15 SQLVAR2-RESERVED-2 PIC X(28).15 SQLDATALEN POINTER.15 SQLDATATYPE-NAME.

49 SQLDATATYPE_NAMEL PIC S9(4) BINARY.49 SQLDATATYPE_NAMEC PIC X(30).

�� 1. COBOL� �� INCLUDE SQLDA ��

54 IBM i: ����� �� SQL �����

|||||||||||||||||||||||||||||||||

|

Page 65: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

�� ��

� SQL �����

�� ��

SQL ��� �

SQL� ���� COBOL �������� SQL� �

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

SQL� ���� ��

BEGIN DECLARE SECTION

END DECLARE SECTION

DECLARE VARIABLE

DECLARE STATEMENT

WORKING-STORAGE SECTION �� LINKAGE SECTION

INCLUDE SQLCA

INCLUDE SQLDA

WORKING-STORAGE SECTION �� LINKAGE SECTION

INCLUDE member-name DATA DIVISION �� PROCEDURE DIVISION

�� PROCEDURE DIVISION

COBOL ���� � SQL�� EXEC SQL� � � END-EXEC� �� ���. SQL�� � ��

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

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

COBOL ����� ��� UPDATE�� ��� �� �����.

EXEC SQLUPDATE DEPARTMENTSET MGRNO = :MGR-NUMWHERE DEPTNO = :INT-DEPT

END-EXEC.

SQL� ���� COBOL ������ ��

SQL ��(--) � �� �� SQL� �(�� EXEC� SQL ��� � )� COBOL �� �(7�� *

�� /)� �� � ����. COBOL ��� �(7�� D)� ������� �� ��� �����.

SQL� ���� COBOL ������ SQL� ��

SQL�� � �� ��� EXEC SQL� ��� �� ���� ��� �� � �� �� COBOL��

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

�� SQL ����� 55

Page 66: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

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

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

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

DBCS ��� �� �� ��� ��� �� 72 �� SI ��� �� �� �� �� ��� ��

�� �� SO� �� �� �� ��� � ����.

� SQL��� �� ��� �� G’<AABBCCDDEEFFGGHHIIJJKK>’� ���� ����. ���

���� �����.

*...+....1....+....2....+....3....+....4....+....5....+....6....+....7....+....8EXEC SQLSELECT * FROM GRAPHTAB WHERE GRAPHCOL = G'<AABB>- '<CCDDEEFFGGHHIIJJKK>'END-EXEC.

SQL� ���� COBOL �������� �� ��

SQL� �� COBOL ��� �� ���� ���� �� � �� �� SQL�� �� ���

� ����.

EXEC SQL INCLUDE member-name END-EXEC.

COBOL COPY�� SQL� �� SQL��� ���� COBOL ��� ��� ��� ���� �� ��

� ����.

SQL� ���� COBOL ������ ��

12 - 72 �� SQL�� ��� ���. ��� � �(�, 12 � �)�� EXEC SQL� � �� SQL

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

SQL� ���� COBOL ������

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

SQL� ���� COBOL ������� � ��

�� �� COBOL ���� ��� ��� �� � ��� �� ����� ��� �� �����

����.

’SQL’, ’RDI’ �� ’DSN’�� � �� ��� ����� � ���� ���� ����. �� ��

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

SQL���� FILLER� �� �� ��� ��� �� ���� � � ����. ��� �� ��� �

��� �� COBOL �� �� �� �� ���� �� ����.

SQL� ���� COBOL ������ COBOL ��� � �

COBOL PROCESS�� COBOL ���� ��� � ��� ���� �� � ����.

PROCESS�� ���� ��� �� ������ �� � COBOL ���� ����� SQL �

���� ��� PROCESS�� ���� ����. ��� APOST � QUOTE� �� COBOL ��

56 IBM i: ����� �� SQL �����

Page 67: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

��� �� �� ��� PROCESS�� ����� � ���. �� *APOST � *QUOTE�

CRTSQLCBL � CRTSQLCBLI ��� OPTION ���� ��� ���.

SQL� ���� COBOL ������ ��� ���

PROCEDURE DIVISION� ��� SQL� ��� ���� �� � ����.

SQL� ���� COBOL ������ WHENEVER�

SQL WHENEVER�� �� GOTO�� ��� PROCEDURE DIVISION� �� ��� �� ����

�� ����� ���.

�� � COBOL ��� � SQL COBOL �����

SQL COBOL ������ PROCESS��� ��� �� � ���� ������ ���� ���

�.

SQL� ���� COBOL �������� ��� �� ��

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

��� ��� ���� ���� COBOL� ��� BEGIN DECLARE SECTION�� �� � �

�� END DECLARE SECTION�� �� ���. BEGIN DECLARE SECTION � END DECLARE

SECTION� ��� �� SQL�� ��� �� ��� �� ��� BEGIN DECLARE SECTION�� END

DECLARE SECTION� ��� �� ���.

SQL� �� �� ��� �� ��� ��(:)� �� ���.

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

COBOL ��� ����� ��(-)� ����� ��� ���� �� ��� �� ���.

SQL� ���� COBOL �������� ��� �� ��

COBOL ������ �� COBOL ��� ���� �� ��� �� ���� �����.

SQL� ���� COBOL ������ �� ��� ��:

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

BIGINT, INTEGER � SMALLINT

�� 0177level-1

variable-name PICTUREPIC

ISpicture-string

ISUSAGE

�� SQL ����� 57

Page 68: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

� BINARYCOMPUTATIONAL-4COMP-4COMPUTATIONAL-5COMP-5

ISVALUE numeric-constant

. ��

�:

1. BINARY, COMPUTATIONAL-4, COMP-4, COMPUTATIONAL-5 � COMP-5� � ���.

COMPUTATIONAL-4, COMP-4, COMPUTATIONAL-5 � COMP-5� ISO(International

Organization for Standardization)/ANSI COBOL��� ���� �� IBM �� ���� ���

��� ������ BINARY� ��� ���. �� � � � � picture-string� ��

S9(i)V9(d)(�� 9� ����� i � d� ��� S9...9V9...9) ���. i + d� 18 �� �

��.

2. level-1� 2 - 48 ��� COBOL ��� �����.

3. COMPUTATIONAL-5 � COMP-5� ILE COBOL� ���� �����.

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

DECIMAL

�� 0177level-1

variable-name PICTUREPIC

ISpicture-string

ISUSAGE

� PACKED-DECIMALCOMPUTATIONAL-3COMP-3COMPUTATIONALCOMP

ISVALUE numeric-constant

. ��

�:

1. PACKED-DECIMAL, COMPUTATIONAL-3 � COMP-3� �����. COMPUTATIONAL-3

� COMP-3� ISO/ANS COBOL�� ���� �� IBM �� ���� ��� ��� ���

��� PACKED-DECIMAL� ��� ���. �� � � � � picture-string� ��

S9(i)V9(d)(�� 9� ����� i � d� ��� S9...9V9...9) ���. i + d� 63 �� �

��.

2. COMPUTATIONAL� COMP� �����. ��� � � �� ���� �� �� ���� �

��� �� � � ���� ����. ��� COMP � COMPUTATIONAL� ��� ��

58 IBM i: ����� �� SQL �����

||

|

|

|

|

|

|

|

Page 69: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

����� ����� � ���. OPM COBOL ����� �� � � � � picture-string

� �� S9(i)V9(d)(�� 9� ����� i � d� ��� S9...9V9...9) ���. i + d� 63

�� ���.

3. level-1� 2 - 48 ��� COBOL ��� �����.

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

�� 0177level-1

variable-name PICTUREPIC

ISpicture-string �

�IS

USAGEDISPLAYdisplay clause

ISVALUE numeric-constant

. ��

�� �:

DISPLAY IS CHARACTERSIGN LEADING SEPARATE

�:

1. SIGN LEADING SEPARATE � DISPLAY� � � picture-string� �� S9(i)V9(d)(�� 9

� ����� i � d� ��� S9...9V9...9) ���. i + d� 18 �� ���.

2. level-1� 2 - 48 ��� COBOL ��� �����.

SQL� ���� COBOL ������ � �� ��� ��:

� ����� �� �� � ��� �� ��� ��� ����. �� � ��� ��� ILE

COBOL� ���� �����.

�� ���

�� 0177level-1

variable-name

ISUSAGE

COMPUTATIONAL-1COMP-1COMPUTATIONAL-2COMP-2

�� SQL ����� 59

Page 70: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

�IS

VALUE numeric-constant

. ��

�:

1. COMPUTATIONAL-1� COMP-1� �����. COMPUTATIONAL-2� COMP-2� �����.

2. level-1� 2 - 48 ��� COBOL ��� �����.

SQL� ���� COBOL ������ �� ��� ��:

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

�� � � ���

�� 0177level-1

variable-name PICTUREPIC

ISpicture-string

ISUSAGE

DISPLAY

�IS

VALUE string-constant

. ��

�:

1. �� ��� � � picture-string� X(m)(�� X� ����� m� ��� XXX...X) ��

�(1 ≤ m ≤ 32766).

2. level-1� 2 - 48 ��� COBOL ��� �����.

� � � ���

�� 01level-1

variable-name .IS

49 var-1 PICTURE picture-string-1PIC

ISUSAGE

BINARYCOMPUTATIONAL-4COMP-4COMPUTATIONAL-5COMP-5

ISVALUE numeric-constant

. �

60 IBM i: ����� �� SQL �����

||

Page 71: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

�IS

49 var-2 PICTURE picture-string-2PIC IS

USAGEDISPLAY

�IS

VALUE string-constant

. ��

�:

1. �� ��� � � picture-string-1� S9(m) �� 9� ����� m� ��� S9...9 ���.

m� 1 - 4 ���.

����� ��� OPM COBOL�� ��� ����� �� ������ S9(m) ��� �

� ��� �����. �� �� COBOL� �� �� �� �� ��� � � ��� ��

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

2. �� ��� � � picture-string-2� X(m) �� X� ����� m� ��� XX...X ���

(1 ≤ m ≤ 32740).

3. var-1 � var-2� ��� ��� �� � ����.

4. level-1� 2 - 48 ��� COBOL ��� �����.

5. COMPUTATIONAL-5 � COMP-5� ILE COBOL� ���� �����.

SQL� ���� COBOL ������ �� ��� ��:

��� ��� ��� ILE COBOL��� �����.

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

v � �� ��� ���

v �� �� ��� ���

�� � ��� ���

�� 0177level-1

variable-nameIS

PICTURE picture-stringPIC

ISUSAGE

DISPLAY-1NATIONAL IS

VALUE string-constant

. ��

�� SQL ����� 61

|

Page 72: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

�:

1. DISPLAY-1 ��� � � picture-string� G(m)(�� G� ����� m� ��� GGG...G)��

� N(m)(�� N� ����� m� ��� NNN...N)�� ���(1 ≤ m ≤ 16383).

2. NATIONAL ��� � � picture-string� N(m)(�� N� ����� m� ��� NNN...N)��

���(1 ≤ m ≤ 16383). NATIONAL� ILE COBOL� ���� �����. CCSID� ���

1200��. DECLARE VARIABLE�� NATIONAL� ��� ��� �� � ����.

3. level-1� 2 - 48 ��� COBOL ��� �����.

� � ��� ���

�� 01level-1

variable-name .IS

49 var-1 PICTURE picture-string-1PIC

ISUSAGE

BINARYCOMPUTATIONAL-4COMP-4COMPUTATIONAL-5COMP-5

ISVALUE numeric-constant

. �

�IS

49 var-2 PICTURE picture-string-2PIC

ISUSAGE

DISPLAY-1NATIONAL

�IS

VALUE string-constant

. ��

�:

1. �� ��� � � picture-string-1� S9(m) �� 9� ����� m� ��� S9...9 ���.

m� 1 - 4 ���.

����� ��� OPM COBOL�� ��� ����� �� ������ S9(m) ��� �

� ��� �����. �� �� COBOL� �� �� �� �� ��� � � ��� ��

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

2. DISPLAY-1 ��� � � picture-string-2� G(m), G� ����� m� ��� GG...G, N(m) �

� N� ����� m� ��� NN...N�� ���(1 ≤ m ≤ 16370).

3. NATIONAL ��� � � picture-string-2� N(m)(�� N� ����� m� ��� NNN...N)�

� ���(1 ≤ m ≤ 16383). NATIONAL� ILE COBOL� ���� �����. CCSID� ��

� 1200��. DECLARE VARIABLE�� NATIONAL� ��� ��� �� � ����.

4. �� var-1 � var-2� ��� ��� �� � ����.

62 IBM i: ����� �� SQL �����

|

Page 73: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

5. level-1� 2 - 48 ��� COBOL ��� �����.

6. COMPUTATIONAL-5 � COMP-5� ILE COBOL� ���� �����.

SQL� ���� COBOL ������ 2� ��� ��:

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

��� ��� ���� SQL TYPE IS�� ������. SQL ������ � ��� � � ��

� COBOL �� ��� �����.

BINARY � VARBINARY

�� 01 variable-name

ISUSAGE

SQL TYPE IS BINARY ( length )VARBINARYBINARY VARYING

. ��

�:

1. BINARY ��� ��� �� ��� 1 - 32766 �� ���.

2. VARBINARY �� BINARY VARYING ��� ��� �� ��� 1 - 32740 �� ���.

3. SQL TYPE IS, BINARY, VARBINARY � BINARY VARYING� � ��� ��� ��

� ����.

BINARY �

��� �� ���

01 MY-BINARY SQL TYPE IS BINARY(200).

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

01 MY-BINARY PIC X(200).

VARBINARY �

��� �� ���

01 MY-VARBINARY SQL TYPE IS VARBINARY(250).

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

01 MY-VARBINARY.49 MY-VARBINARY-LENGTH PIC 9(5) BINARY.49 MY-VARBINARY-DATA PIC X(250).

SQL� ���� COBOL ������ LOB ��� ��:

�� SQL ����� 63

|

Page 74: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

COBOL�� LOB(� �� �)� �� SQL �� � � ���� ��� ����. �� �� �

� �� �� � �� ��� ��� ���� SQL TYPE IS�� ������. SQL ������

� ��� � � ��� COBOL �� ��� �����.

LOB ��� ��� ILE COBOL��� �����.

LOB ��� ��

�� 01 variable-name

ISUSAGE

SQL TYPE IS CLOB ( lob-length )DBCLOB KBLOB M

. ��

�:

1. BLOB � CLOB� �� 1 ≤ lob-length ≤ 15,728,640

2. DBCLOB� �� 1 ≤ lob-length ≤ 7,864,320

3. SQL TYPE IS, BLOB, CLOB, DBCLOB� � ��� ��� �� � ����.

CLOB �

��� �� ���

01 MY-CLOB SQL TYPE IS CLOB(16384).

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

01 MY-CLOB.49 MY-CLOB-LENGTH PIC 9(9) BINARY.49 MY-CLOB-DATA PIC X(16384).

DBCLOB �

��� �� ���

01 MY-DBCLOB SQL TYPE IS DBCLOB(8192).

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

01 MY-DBCLOB.49 MY-DBCLOB-LENGTH PIC 9(9) BINARY.49 MY-DBCLOB-DATA PIC G(8192) DISPLAY-1.

BLOB �

��� �� ���

01 MY-BLOB SQL TYPE IS BLOB(16384).

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

64 IBM i: ����� �� SQL �����

Page 75: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

01 MY-BLOB.49 MY-BLOB-LENGTH PIC 9(9) BINARY.49 MY-BLOB-DATA PIC X(16384).

LOB �� ��

�� 01 variable-name

ISUSAGE

SQL TYPE IS CLOB-LOCATORDBCLOB-LOCATORBLOB-LOCATOR

. ��

�:

1. SQL TYPE IS, BLOB-LOCATOR, CLOB-LOCATOR, DBCLOB-LOCATOR� � ��� ��

� �� � ����.

2. LOB �� ���� SQL TYPE IS��� ��� � ����.

CLOB � DBCLOB �� ����� �� ��� ���� ����.

BLOB �� ��� �

��� �� ���

01 MY-LOCATOR SQL TYPE IS BLOB_LOCATOR.

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

01 MY-LOCATOR PIC 9(9) BINARY.

LOB �� �� ��

�� 01 variable-name

ISUSAGE

SQL TYPE IS CLOB-FILE .DBCLOB-FILEBLOB-FILE

��

�: SQL TYPE IS, BLOB-FILE, CLOB-FILE, DBCLOB-FILE� � ��� ��� �� � ���

�.

BLOB �� �� �

��� �� ���

01 MY-FILE SQL TYPE IS BLOB-FILE.

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

�� SQL ����� 65

Page 76: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

01 MY-FILE.49 MY-FILE-NAME-LENGTH PIC S9(9) COMP-5.49 MY-FILE-DATA-LENGTH PIC S9(9) COMP-5.49 MY-FILE-FILE-OPTIONS PIC S9(9) COMP-5.49 MY-FILE-NAME PIC X(255).

CLOB � DBCLOB �� �� ���� �� ��� ���� ����.

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

� ��� ��� xxx-FILE-OPTIONS ��� �� � ����.

v SQL_FILE_READ (2)

v SQL_FILE_CREATE (8)

v SQL_FILE_OVERWRITE (16)

v SQL_FILE_APPEND (32)

�� ��

LOB �� �� ��

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

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

��� ��� ���� SQL TYPE IS�� ������. SQL ������ � ��� � � ��

� COBOL �� ��� �����.

XML ��� ��� ILE COBOL��� �����.

XML ��� ��

�� 01 variable-name

ISUSAGE

SQL TYPE IS XML AS CLOB ( lob-length )DBCLOB KBLOB M

� . ��

�:

1. BLOB � CLOB� �� 1 ≤ lob-length ≤ 15,728,640

2. DBCLOB� �� 1 ≤ lob-length ≤ 7,864,320

3. SQL TYPE IS, XML AS, BLOB, CLOB, DBCLOB� � ��� ��� �� � ����.

4. XML ��� ��� CCSID �� DECLARE VARIABLE�� �� ���� ��� � ���

�. ��� ��� SQL_XML_DATA_CCSID QAQQINI ��� �� ��� �� �����. �

QAQQINI ��� �� �� CCSID 1208��.

66 IBM i: ����� �� SQL �����

|

|

|

|

|

|

|||||||||||||||||||||||||||||||||||||||||||||||

||||||||

|

|

|

|

|

|

|

|

Page 77: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

XML �

��� �� ���

01 MY-XML SQL TYPE IS CLOB(5000).

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

01 MY-XML.49 MY-XML-LENGTH PIC 9(9) BINARY.49 MY-XML-DATA PIC X(5000).

XML �� ��

�� 01 variable-name

ISUSAGE

SQL TYPE IS XML-LOCATOR . ��

�:

1. SQL TYPE IS, XML AS, XML-LOCATOR� � ��� ��� �� � ����.

2. LOB �� ���� SQL TYPE IS��� ��� � ����.

XML �� ��� �

��� �� ���

01 MY-LOCATOR SQL TYPE IS XML-LOCATOR.

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

01 MY-LOCATOR PIC 9(9) BINARY.

XML �� �� ��

�� 01 variable-name

ISUSAGE

SQL TYPE IS XML AS CLOB-FILE .DBCLOB-FILEBLOB-FILE

��

�: SQL TYPE IS, XML AS, BLOB-FILE, CLOB-FILE, DBCLOB-FILE� � ��� ��� ��

� ����.

XML �� �� �

��� �� ���

01 MY-FILE SQL TYPE IS XML AS CLOB-FILE.

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

�� SQL ����� 67

|

|

|

|

|||

|

||||||||||||||||||||||||||

|

|

|

|

|

|

|

|

|

|

||||||||||||||||||||||||||||||||||||

|

|

|

|

|

|

|

Page 78: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

01 MY-FILE.49 MY-FILE-NAME-LENGTH PIC S9(9) COMP-5.49 MY-FILE-DATA-LENGTH PIC S9(9) COMP-5.49 MY-FILE-FILE-OPTIONS PIC S9(9) COMP-5.49 MY-FILE-NAME PIC X(255).

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

� ��� ��� xxx-FILE-OPTIONS ��� �� � ����.

v SQL_FILE_READ (2)

v SQL_FILE_CREATE (8)

v SQL_FILE_OVERWRITE (16)

v SQL_FILE_APPEND (32)

SQL� ���� COBOL ������ �� � ��� ��:

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

� ILE COBOL� ���� �����.

�� � ��� ��

�� 0177level-1

variable-nameOF IS

FORMAT DATE format-optionsTIMETIMESTAMP

��

�:

1. level-1� 2 - 48 ��� COBOL ��� �����.

2. format-options� COBOL ���� ���� �� �� � ��� �����. ���� ILE

COBOL �� ��� � ������.

SQL� ���� COBOL ������ ROWID ��� ��:

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

� ��� ��� ���� SQL TYPE IS�� ������. SQL ������ � ��� � �

��� COBOL �� ��� �����.

ROWID

�� 01 variable-name SQL TYPE IS ROWID . ��

�: SQL TYPE IS ROWID� � ��� ��� �� � ����.

68 IBM i: ����� �� SQL �����

|||||

|

|

|

|

|

|

Page 79: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

ROWID �

��� �� ���

01 MY-ROWID SQL TYPE IS ROWID.

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

01 MY-ROWID.49 MY-ROWID-LENGTH PIC 9(2) BINARY.49 MY-ROWID-DATA PIC X(40).

SQL� ���� COBOL ������ �� � �� ��� ��� ��:

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

�� � �� ��� ��� ���� SQL TYPE IS�� ������. SQL ������ � ���

� � ��� COBOL �� ��� �����.

�� �� �� ��

�� 01 variable-name

ISUSAGE

SQL TYPE IS RESULT_SET_LOCATOR . ��

�: SQL TYPE IS RESULT_SET_LOCATOR� � ��� ��� �� � ����.

�� � �� ��� �

��� �� ���

01 RSLOC1 SQL TYPE IS RESULT_SET_LOCATOR.

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

01 RSLOC1 PIC 9(18) BINARY.

SQL� ���� COBOL �������� ��� �� ��

��� ��� ���� DATA DIVISION� ��� ��� ��� ��� ���.

��� ��� �� �� �� ��� � � ���� ��� ���� �� 2�� ��� �����.

�� 49 �� �� ��� ��� �� �� �� ���� ��� � ��.

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

�:

01 A02 B03 C1 PICTURE ...03 C2 PICTURE ...

� ��� B� � �� C1 � C2� ��� ��� ��� ����.

�� SQL ����� 69

|

|

|

|

|

|||||||||||||||||||||||||

|

|

|

|

|

|

|

Page 80: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

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

�� ��� ����� ��� ��� ������. �� ��, C1 OF B� C1 IN B��� B.C1�

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

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

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

v � A�� � � �� COBOL ��

v SQL�(SQL INCLUDE � )

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

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

�� ��, ��� ��� CORPDATA.EMPLOYEE ��� ��� ��� �� � �� �� � �

���.

01 PEMPL.10 EMPNO PIC X(6).10 FIRSTNME.

49 FIRSTNME-LEN PIC S9(4) USAGE BINARY.49 FIRSTNME-TEXT PIC X(12).

10 MIDINIT PIC X(1).10 LASTNAME.

49 LASTNAME-LEN PIC S9(4) USAGE BINARY.49 LASTNAME-TEXT PIC X(15).

10 WORKDEPT PIC X(3)....MOVE "000220" TO EMPNO....EXEC SQLSELECT *

INTO :PEMPLFROM CORPDATA.EMPLOYEEWHERE EMPNO = :EMPNO

END-EXEC.

PEMPL� ���� � �� �� �� ��� � (FIRSTNME � LASTNAME)� ��� ���� ��

��.

SQL� ���� COBOL ������ ��� ��

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

�� level-1 variable-name . �

70 IBM i: ����� �� SQL �����

Page 81: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

� �IS

level-2 var-1 PICTURE picture-string usage-clause .PIC

floating-point .. varchar-string .. vargraphic-string .binary .lob .xml .datetime .rowid .result-set-locator .

��

��� �:

ISUSAGE

BINARYCOMPUTATIONAL-4COMP-4COMPUTATIONAL-5COMP-5PACKED-DECIMALCOMPUTATIONAL-3COMP-3COMPUTATIONALCOMPDISPLAYdisplay-clauseDISPLAY-1NATIONAL

ISVALUE constant

�� �:

DISPLAY IS CHARACTERSIGN LEADING SEPARATE

�� ���:

ISUSAGE

COMPUTATIONAL-1COMP-1COMPUTATIONAL-2COMP-2

ISVALUE constant

varchar ���:

IS49 var-2 PICTURE picture-string-1

PIC�

�� SQL ����� 71

||

Page 82: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

ISUSAGE

BINARYCOMPUTATIONAL-4 ISCOMP-4 VALUE numeric-constantCOMPUTATIONAL-5COMP-5

. �

�IS

49 var-3 PICTURE picture-string-2PIC

�IS IS

USAGE VALUE constantDISPLAY

vargraphic ���:

IS49 var-2 PICTURE picture-string-1

PIC

ISUSAGE

BINARYCOMPUTATIONAL-4COMP-4COMPUTATIONAL-5COMP-5

�IS

VALUE numeric-constant

. �

ISIS USAGE

49 var-3 PICTURE picture-string-2 DISPLAY-1PIC NATIONAL

�IS

VALUE constant

2�:

ISUSAGE

SQL TYPE IS BINARY ( length )VARBINARYBINARY VARYING

72 IBM i: ����� �� SQL �����

||

||

Page 83: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

lob:

ISUSAGE

SQL TYPE IS CLOB ( lob-length )DBCLOB KBLOB MCLOB-LOCATORDBCLOB-LOCATORBLOB-LOCATORCLOB-FILEDBCLOB-FILEBLOB-FILE

xml:

ISUSAGE

SQL TYPE IS XML AS CLOB ( lob-length )DBCLOB KBLOB M

XML-LOCATORXML AS CLOB-FILE

DBCLOB-FILEBLOB-FILE

�� �:

OFvariable-name FORMAT DATE

TIMETIMESTAMP

ISformat-options

rowid:

SQL TYPE IS ROWID

�� �� �� ��:

SQL TYPE IS RESULT_SET_LOCATOR

�:

1. level-1� 1 - 47 ��� COBOL ��� �����.

2. level-2� 2 - 48 ��� COBOL ��� �����(level-2 > level-1).

3. ��� ��� ��, LOB ��� ��, XML ��� ��, �� � ��� �� � COMP-5 �

�� ��� ILE COBOL� ���� �����.

�� SQL ����� 73

|||||||||||||||||

|

|

Page 84: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

4. ��, ��, ���, 2�, LOB, XML, ROWID � �� � �� ��� ��� �� ��� ��

���� �� ��� ��, �� ��� ��, ��� ��� ��, 2� ��� ��, LOB ���

��, XML ��� ��, ROWID � �� � �� ��� ��� �� ��� �� ������.

5. format-options ��� COBOL ���� ���� �� �� � ��� �����. ���

� ILE COBOL �� ��� � ������.

SQL� ���� COBOL ������ ��� �� ����� ��

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

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

�� level-1 variable-name PICTUREPIC

ISpicture-string

ISUSAGE

� BINARYCOMPUTATIONAL-4COMP-4COMPUTATIONAL-5COMP-5

TIMESOCCURS dimension

ISVALUE constant

. ��

�:

1. ��� 1 - 32767 ��� �� ���.

2. level-1� 2 - 48 ��� �� ���.

3. BINARY, COMPUTATIONAL-4, COMP-4, COMPUTATIONAL-5 � COMP-5� � ���.

COMPUTATIONAL-4, COMP-4, COMPUTATIONAL-5 � COMP-5� ISO/ANSI COBOL��

���� �� IBM �� ���� ��� ��� ������ BINARY� ��� ���. �

� � � � � picture-string� �� S9(i)(�� i ���� 9� ��� S9...9) ���. i�

4 �� ���.

SQL� ���� COBOL �������� ��� �� �� ��

��� �� �� ���� Data Division� ��� ��� ��� ��� ��� OCCURS�� ��

� ����.

��� ��� �� �� �� ��� � � ���� ��� �� ��� �� 2�� ��� ����

�. �� �� ����� �� ��� �� 49� �����. ��� �� ��� �� ��� � ��

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

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

v B-ARRAY� �� ��� �� ���.

v B-ARRAY� �� � ����.

74 IBM i: ����� �� SQL �����

|

|

|

||

|

|

|

|

|

Page 85: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

v B-ARRAY� FETCH� � INSERT�� ���� ���� �� � ����.

v B-ARRAY� C1-VAR � C2-VAR ��� �� �� ��� �� �� ����.

v SYNCHRONIZED ��� ����� � ���.

v C1-VAR � C2-VAR� SQL�� �� ��� ��� � ��. A ��� � �� ��� �� �

����.

01 A-STRUCT.02 B-ARRAY OCCURS 10 TIMES.

03 C1-VAR PIC X(20).03 C2-VAR PIC S9(4).

CORPDATA.DEPARTMENT ���� 10�� �� ����� �� �� ������.

01 TABLE-1.02 DEPT OCCURS 10 TIMES.

05 DEPTNO PIC X(3).05 DEPTNAME.

49 DEPTNAME-LEN PIC S9(4) BINARY.49 DEPTNAME-TEXT PIC X(29).

05 MGRNO PIC X(6).05 ADMRDEPT PIC X(3).

01 TABLE-2.02 IND-ARRAY OCCURS 10 TIMES.

05 INDS PIC S9(4) BINARY OCCURS 4 TIMES.....EXEC SQLDECLARE C1 CURSOR FOR

SELECT *FROM CORPDATA.DEPARTMENT

END-EXEC.....EXEC SQL

FETCH C1 FOR 10 ROWS INTO :DEPT :IND-ARRAYEND-EXEC.

SQL� ���� COBOL ������ ��� �� ��

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

��TIMES

level-1 variable-name OCCURS dimension . �

�� SQL ����� 75

Page 86: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

� �IS

level-2 var-1 PICTURE picture-string-1 usage-clause .PIC

floating-point .. varchar-string .. vargraphic-string .binary .lob .xml .datetime .rowid .result-set-locator .

��

��� �:

ISUSAGE

BINARYCOMPUTATIONAL-4COMP-4COMPUTATIONAL-5COMP-5PACKED-DECIMALCOMPUTATIONAL-3COMP-3COMPUTATIONALCOMPDISPLAYdisplay-clauseDISPLAY-1NATIONAL

ISVALUE constant

�� �:

DISPLAY IS CHARACTERSIGN LEADING SEPARATE

�� ���:

ISUSAGE

COMPUTATIONAL-1COMP-1COMPUTATIONAL-2COMP-2

ISVALUE constant

varchar ���:

76 IBM i: ����� �� SQL �����

||

Page 87: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

49 var-2IS

PICTURE picture-string-2PIC

ISUSAGE

BINARYCOMPUTATIONAL-4COMP-4COMPUTATIONAL-5COMP-5

�IS

VALUE numeric-constant

. �

�IS

49 var-3 PICTURE picture-string-3PIC IS

USAGEDISPLAY

�IS

VALUE constant

vargraphic ���:

49 var-2IS

PICTURE picture-string-2PIC

ISUSAGE

BINARYCOMPUTATIONAL-4COMP-4COMPUTATIONAL-5COMP-5

�IS

VALUE numeric-constant

. �

ISIS USAGE

49 var-3 PICTURE picture-string-3 DISPLAY-1PIC NATIONAL

�IS

VALUE constant

2�:

�� SQL ����� 77

||

||

Page 88: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

ISUSAGE

SQL TYPE IS BINARY ( length )VARBINARYBINARY VARYING

lob:

ISUSAGE

SQL TYPE IS CLOB ( lob-length )DBCLOB KBLOB MCLOB-LOCATORDBCLOB-LOCATORBLOB-LOCATORCLOB-FILEDBCLOB-FILEBLOB-FILE

xml:

ISUSAGE

SQL TYPE IS XML AS CLOB ( lob-length )DBCLOB KBLOB M

XML-LOCATORXML AS CLOB-FILE

DBCLOB-FILEBLOB-FILE

�� �:

OFvariable-name FORMAT DATE

TIMETIMESTAMP

ISformat-options

rowid:

SQL TYPE IS ROWID

�� �� �� ��:

SQL TYPE IS RESULT_SET_LOCATOR

�:

1. level-1� 2 - 47 ��� COBOL ��� �����.

2. level-2� 3 - 48 ��� COBOL ��� �����(level-2 > level-1).

78 IBM i: ����� �� SQL �����

|||||||||||||||||

|

Page 89: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

3. ��� ��� ��, LOB ��� ��, XML ��� �� � �� � ��� ��� ILE COBOL

� ���� �����.

4. ��, ��, ���, 2�, LOB, XML, ROWID � �� � �� ��� ��� �� ��� ��

���� �� ��� ��, �� ��� ��, ��� ��� ��, 2� ��� ��, LOB, XML,

ROWID � �� � �� ��� ��� �� ��� �� ������.

5. ��� 1 - 32767 ��� �� �� ���.

6. format-options ��� COBOL ���� ���� �� �� � ��� �����. ���

� ILE COBOL �� ��� � ������.

SQL� ���� COBOL ������ ��� �� ����� ��

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

��TIMES

level-1 variable-name OCCURS dimension . �

�IS

level-2 var-1 PICTURE picture-stringPIC

ISUSAGE

BINARYCOMPUTATIONAL-4COMP-4COMPUTATIONAL-5COMP-5

�IS

VALUE constant

. ��

�:

1. level-1� 2 - 48 ��� COBOL ��� �����.

2. level-2� 3 - 48 ��� COBOL ��� �����(level-2 > level-1).

3. ��� 1 - 32767 ��� �� �� ���.

4. BINARY, COMPUTATIONAL-4, COMP-4, COMPUTATIONAL-5 � COMP-5� � ���.

COMPUTATIONAL-4, COMP-4, COMPUTATIONAL-5 � COMP-5� ISO/ANSI COBOL��

���� �� IBM �� ���� ��� ��� ������ BINARY� ��� ���. �

� � � � � picture-string� �� S9(i)(�� i ���� 9� ��� S9...9) ���. i�

4 �� ���.

�� SQL ����� 79

|

|

|

|

|

||

Page 90: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

SQL� ���� COBOL �������� � �� �� ��

SQL� COPY DD-format-name, COPY DD-ALL-FORMATS, COPY DDS-format-name, COPY

DDR-format-name, COPY DDR-ALL-FORMATS, COPY DDSR-format-name, COPY

DDS-ALL-FORMATS � COPY DDSR-ALL-FORMATS� ��� �� ���� ��� ��� ��

���.

REPLACING ��� ��� ���� ��� �� ��� �����. Var-1� ��� ��� ��

����. ��� ��� ��� �� var-2� � ���� �����.

�: COBOL ���� ��� �� �� ���� ��� ��� �� �� ����. COBOL ���

�� �� COPY DDx-format�� �� ���.

SQL ����� �� �� ���� i� DB2 � ��� ��� � �� DEPARTMENT� ���

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

01 DEPARTMENT-STRUCTURE.COPY DDS-ALL-FORMATS OF DEPARTMENT.

DEPTNO, DEPTNAME, MGRNO � ADMRDEPT�� �� 06 �� �� �� ��

DEPARTMENT-RECORD�� 05 �� �� ��� ��� �� DEPARTMENT-STRUCTURE� �

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

COBOL COPY ��� �� �� ��� IBM Publications Center �� ILE COBOL �� ���

� COBOL/400® ��� ���� ������.

SQL� ���� COBOL �������� ��� �� ��� �� � �� �� ��

COBOL� � �� ��� �� � �� ��� ��� ��� OCCURS�� ���� 04 ���

�� ���. ���� 05 ��� �� ��� �� � ����.

��� FILLER� �� �� �� �� ���� ��� ��� �� �� �� � ����.

�� ��� �� INDARA� ���� � ��� ������ �� ��� ��� ��� �� ��

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

�.

�� ��, ����� COPY–DDS� ��� ��� �� �� �� 10�� �� ��� �� �

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

01 DEPT.04 DEPT-ARRAY OCCURS 10 TIMES.COPY DDS-ALL-FORMATS OF DEPARTMENT....

EXEC SQL DECLARE C1 CURSOR FORSELECT * FROM CORPDATA.DEPARTMENT

END EXEC.

80 IBM i: ����� �� SQL �����

Page 91: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

EXEC SQL OPEN C1END-EXEC.

EXEC SQL FETCH C1 FOR 10 ROWS INTO :DEPARTMENTEND-EXEC.

�: DATE, TIME � TIMESTAMP �� DATE, TIME �� TIMESTAMP �� ��� � � �� �

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

� DATE ��� ��� ��� ���� ���� ���� � � ����.

GRAPHIC � VARGRAPHIC� OPM COBOL� �� ��� ������ SQL� �� GRAPHIC

� VARGRAPHIC ��� ����. GRAPHIC �� VARGRAPHIC �� UCS-2 CCSID� ��

�� �� �� ��� ��� ���� UCS-2 CCSID� �����. GRAPHIC �� VARGRAPHIC

�� UTF-16 CCSID� ���� �� �� ��� ��� ���� UTF-16 CCSID� �����.

� SQL � COBOL ��� � ��

������ � ��� ���� ��� ��� � SQLTYPE � SQLLEN� �����. ��� �

�� ����� ��� �� ���� SQLTYPE� � SQLTYPE + 1��.

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

COBOL �� � ��� ��� SQLTYPE ��� ��� SQLLEN SQL �� �

S9(i)V9(d) COMP-3, S9(i)V9(d) COMP

�� S9(i)V9(d) PACKED-DECIMAL

484 i+d(1���), d(2���) DECIMAL(i+d,d)

S9(i)V9(d) DISPLAY SIGN LEADING

SEPARATE

504 i+d(1���), d(2���) DECIMAL(i+d,d) ��

NUMERIC(i+d,d)� ��

�� ��� � ���

��

S9(i)V9(d)DISPLAY 488 i+d(1���), d(2���) NUMERIC(i+d,d)

S9(i) BINARY, S9(i) COMP-4 �� S9(i)

COMP-5(i� 1 - 4�)

500 2 SMALLINT

S9(i) BINARY, S9(i) COMP-4 �� S9(i)

COMP-5(i� 5 - 9 ���)

496 4 INTEGER

S9(i) BINARY, S9(i) COMP-4 �� S9(i)

COMP-5(i� 10 - 18 ���)

OPM COBOL��� ���� ����.

492 8 BIGINT

S9(i)V9(d) BINARY, S9(i)V9(d) COMP-4

�� S9(i)V9(d) COMP-5(i+d ≤ 4)

500 i+d(1���), d(2���) DECIMAL(i+d,d) ��

NUMERIC(i+d,d)� ��

�� ��� � ���

��

S9(i)V9(d) BINARY, S9(i)V9(d) COMP-4

�� S9(i)V9(d) COMP-5(4 < i+d ≤ 9)

496 i+d(1���), d(2���) DECIMAL(i+d,d) ��

NUMERIC(i+d,d)� ��

�� ��� � ���

��

COMP-1

OPM COBOL��� ���� ����.

480 4 FLOAT(����)

�� SQL ����� 81

||

||

|||

||

||

Page 92: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

� 3. ��� SQL �� � � ��� COBOL �� (��)

COBOL �� � ��� ��� SQLTYPE ��� ��� SQLLEN SQL �� �

COMP-2

OPM COBOL��� ���� ����.

480 8 FLOAT(���)

� �� �� �� 452 m CHAR(m)

�� �� �� �� 448 m VARCHAR(m)

� �� ��� ��

OPM COBOL��� ���� ����.

468 m GRAPHIC(m)

�� �� ��� ��

OPM COBOL��� ���� ����.

464 m VARGRAPHIC(m)

DATE

OPM COBOL��� ���� ����.

384 DATE

TIME

OPM COBOL��� ���� ����.

388 TIME

TIMESTAMP

OPM COBOL��� ���� ����.

392 26 TIMESTAMP

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

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

SQL �� � COBOL �� � �

SMALLINT S9(m) COMP-4 �� S9(m) COMP-5 m� 1 - 4 ���

INTEGER S9(m) COMP-4 �� S9(m) COMP-5 m� 5 - 9 ���

BIGINT ILE COBOL� S9(m) COMP-5 �� S9(m)

COMP-4

OPM COBOL��� ���� ����.

m� 10 - 18 ���

DECIMAL(p,s) p<64� ��: S9(p-s)V9(s)

PACKED-DECIMAL, S9(p-s)V9(s) COMP

�� S9(p-s)V9(s) COMP-3. p>63� ��:

���� ��

p� �����. s� �����.

0<=s<=p<=63. s=0� �� S9(p) ��

S9(p)V� ������. s=p� �� SV9(s)

� ������.

NUMERIC(p,s) p<19� ��: S9(p-s)V9(s) DISPLAY p>18

� ��: ���� ��

p� �����. s� �����.

0<=s<=p<=18. s=0� �� S9(p) ��

S9(p)V� ������. s=p� �� SV9(s)

� ������.

DECFLOAT ���� ��

FLOAT(����) ILE COBOL� COMP-1

OPM COBOL��� ���� ����.

FLOAT(���) ILE COBOL� COMP-2

OPM COBOL��� ���� ����.

CHAR(n) � �� �� ��� 32766≥n≥1

VARCHAR(n) �� �� �� ��� 32740≥n≥1

CLOB �� SQL TYPE IS� ��� ILE COBOL�

CLOB� ������.

OPM COBOL��� ���� ����.

GRAPHIC(n) ILE COBOL� � �� ��� ���

OPM COBOL��� ���� ����.

16383≥n≥1

82 IBM i: ����� �� SQL �����

|

|

|||

Page 93: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

� 4. ��� COBOL ��� ��� SQL �� � (��)

SQL �� � COBOL �� � �

VARGRAPHIC(n) ILE COBOL� �� �� ��� ���

OPM COBOL��� ���� ����.

16370≥n≥1

DBCLOB �� SQL TYPE IS� ��� ILE COBOL�

DBCLOB� ������.

OPM COBOL��� ���� ����.

BINARY �� SQL TYPE IS� ��� BINARY� �

�����.

VARBINARY �� SQL TYPE IS� ��� VARBINARY

� ������.

BLOB �� SQL TYPE IS� ��� BLOB� ���

���.

OPM COBOL��� ���� ����.

DATE ILE COBOL� DATE �� � �� ��

���

�� *USA, *JIS, *EUR �� *ISO�

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

*YMD, *DMY �� *MDY� �� 8�

��� ������. �� *JUL� �� 6

� ��� ������.

TIME ILE COBOL� TIME �� � �� ��

���

6� ��� ������. � ����� 8

� ��� ������.

TIMESTAMP ILE COBOL� TIMESTAMP �� � �

� �� ���

n� 19� ���� ���. ��� ���

� ���� � ����� n� 26��

���. n� 26 �� �� ���� �

�� ����.

XML �� SQL TYPE IS� ��� XML� ���

���.

OPM COBOL��� ���� ����.

DATALINK ���� ��

ROWID �� SQL TYPE IS� ��� ROWID� ��

����.

�� � �� ��� �� SQL TYPE IS� ��� �� � �� �

��� ������.

COBOL �� �� � ���� �� �

�� 77 �� �� �� ��� �� ��� REDEFINES ��� ��� � ����. ��� �� �

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

FILLER �� ��� ��� ��� ��� �� ��� �� � �� ��� � � ����.

SMALLINT, INTEGER � BIGINT �� � � �� COBOL ��� ��� 10��� �����.

����� ��� �� ��� ��� ���� COBOL ��� �� ��� �!�� ���� ��� �

�� ��� ��� � � ����. ��� COBOL�� �� �� ���� �� �� ��� ���

� �� ��� � � ����. ������ �� ��� ��� �!� ���� ������.

�� SQL ����� 83

|||||

||||

Page 94: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

SQL� ���� COBOL �������� ����� �� ��

����� ��� 2��� ����(PIC S9(m) USAGE BINARY(�� m� 1 - 4�)).

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

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

�� ��� � ����.

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

EXEC SQL FETCH CLS_CURSOR INTO :CLS-CD,:NUMDAY :NUMDAY-IND,:BGN :BGN-IND,:ENDCLS :ENDCLS-IND

END-EXEC.

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

EXEC SQL BEGIN DECLARE SECTION END-EXEC.77 CLS-CD PIC X(7).77 NUMDAY PIC S9(4) BINARY.77 BGN PIC X(8).77 ENDCLS PIC X(8).77 NUMDAY-IND PIC S9(4) BINARY.77 BGN-IND PIC S9(4) BINARY.77 ENDCLS-IND PIC S9(4) BINARY.EXEC SQL END DECLARE SECTION END-EXEC.

�� ��

��� �� ��

5 ���� �SQL� ���� ������ ����� ���

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

��.

PL/I �������� SQL� ��

PL/I ���� SQL�� ��� �� �� � ����� � �� ����� ��� ����. �

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

�: � ��� ���� 210 ���� �� ���� � ���� ���� ��� ���� ���.

84 IBM i: ����� �� SQL �����

Page 95: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

�� ��

2 ���� �SQL� ���� ����� ��

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

�� ��

168 ���� ��� ���: i� DB2 ��� ���

i� DB2�� ���� ��� ��� SQL�� ���� �� ��� � ������ ��� �

���.

185 ���� ��: PL/I ���� SQL��

� �� ���� PL/I ����� ��� ����.

SQL� ���� PL/I �������� SQL �� �� �

SQL�� �� �� PL/I ���� �� � � �� �� � �� ��� ���.

v FIXED BINARY(31)� ��� SQLCODE ��

v CHAR(5)� ��� SQLSTATE ��

��

v SQLCA(SQLCODE � SQLSTATE ��� �� ��)

SQLCODE � SQLSTATE �� � SQL�� ��� � ����� ��� �����. ������

SQLCODE �� SQLSTATE �� ��� �� SQL�� ������ �� � ����.

SQLCA� PL/I ����� �� �� SQL INCLUDE�� ��� �� � ����. SQL INCLUDE

�� ���� �� SQLCA ��� ����� �����.

EXEC SQL INCLUDE SQLCA ;

SQLCODE, SQLSTATE � SQLCA ��� ��� ���� �� �� SQL�� ��� ��� ��

�.

SQLCA� �� ��� PL/I ��� ��� ����.

DCL 1 SQLCA,2 SQLCAID CHAR(8),2 SQLCABC FIXED(31) BINARY,2 SQLCODE FIXED(31) BINARY,2 SQLERRM CHAR(70) VAR,2 SQLERRP CHAR(8),2 SQLERRD(6) FIXED(31) BINARY,2 SQLWARN,3 SQLWARN0 CHAR(1),3 SQLWARN1 CHAR(1),3 SQLWARN2 CHAR(1),3 SQLWARN3 CHAR(1),3 SQLWARN4 CHAR(1),3 SQLWARN5 CHAR(1),3 SQLWARN6 CHAR(1),3 SQLWARN7 CHAR(1),

�� SQL ����� 85

Page 96: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

3 SQLWARN8 CHAR(1),3 SQLWARN9 CHAR(1),3 SQLWARNA CHAR(1),

2 SQLSTATE CHAR(5);

SQLCODE� �� ��� ���� � SQLCA� ������ �� ���� �� SQLCODE�

SQLCADE� �����. SQLSTATE� �� ��� ���� � SQLCA� ������ �� �

��� �� SQLSTATE� SQLSTOTE� �����.

�� ��

SQL �� �

SQL� ���� PL/I �������� SQL ��� �

SQL ��� ��� � �� � � ����. ��� ALLOCATE DESCRIPTOR�� ��� ���

��. �� ��� SQLDA ��� ��� �����. � ����� SQLDA ��� ���� ����

�.

�� ���� SQLDA� �� � ����.

v EXECUTE...USING DESCRIPTOR descriptor-name

v FETCH...USING DESCRIPTOR descriptor-name

v OPEN...USING DESCRIPTOR descriptor-name

v CALL...USING DESCRIPTOR descriptor-name

v DESCRIBE statement-name INTO descriptor-name

v DESCRIBE CURSOR cursor-name INTO descriptor-name

v DESCRIBE INPUT statement-name INTO descriptor-name

v DESCRIBE PROCEDURE procedure-name INTO descriptor-name

v DESCRIBE TABLE host-variable INTO descriptor-name

v PREPARE statement-name INTO descriptor-name

SQLCA�� �� ����� � ��� SQLDA� �� � ��� SQLDA� �� ��� �� � �

���. SQLDA� PL/I ����� �� �� SQL INCLUDE�� ��� �� � ����. SQL

INCLUDE�� ���� �� SQLDA ��� ����� �����.

EXEC SQL INCLUDE SQLDA ;

SQLDA� �� ��� PL/I ��� ��� ����.

DCL 1 SQLDA BASED(SQLDAPTR),2 SQLDAID CHAR(8),2 SQLDABC FIXED(31) BINARY,2 SQLN FIXED(15) BINARY,2 SQLD FIXED(15) BINARY,2 SQLVAR(99),3 SQLTYPE FIXED(15) BINARY,3 SQLLEN FIXED(15) BINARY,

86 IBM i: ����� �� SQL �����

|

|

Page 97: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

3 SQLRES CHAR(12),3 SQLDATA PTR,3 SQLIND PTR,3 SQLNAME CHAR(30) VAR;

DCL SQLDAPTR PTR;

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

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

SELECT��� SQL ��� �(SQLDA)� �����. ��� SELECT� ��� ���� �� �

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

�� ��

� SQL �����

�� ��

SQL ��� �

SQL� ���� PL/I �������� SQL� �

PL/I ���� �� ���� PROCEDURE��� ���. PL/I ����� ��� �� ��

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

PL/I ���� �� � SQL�� EXEC SQL� � � ��(;)�� �� ���. �� EXEC

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

: SQL� ���� PL/I �������� SQL� �

�� �� �� PL/I ����� UPDATE�� �� � ����.

EXEC SQL UPDATE DEPARTMENTSET MGRNO = :MGR_NUMWHERE DEPTNO = :INT_DEPT ;

SQL� ���� PL/I ������ ��

SQL ��(--) � �� �� SQL��� ��� �� � �� �� ��(�� EXEC� SQL ���

� )� PL/I ��(/*...*/)� �� � ����.

SQL� ���� PL/I �������� SQL� ��

SQL�� � �� ��� EXEC SQL� ��� �� ���� ��� �� � �� �� PL/I�� �

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

DBCS ��� �� �� ��� SI � SO ��� � �� �� �� �� ��� � ���

� . � � � � � � � 2 � 7 2 � � � � � � . � S Q L � � � � � � � � � �

G’<AABBCCDDEEFFGGHHIIJJKK>’� ���� ����.

*(..+....1....+....2....+....3....+....4....+....5....+....6....+....7.)..EXEC SQL SELECT * FROM GRAPHTAB WHERE GRAPHCOL = G'<AABBCCDD><EEFFGGHHIIJJKK>';

�� SQL ����� 87

Page 98: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

SQL� ���� PL/I �������� �� ��

SQL� �� PL/I ��� �� ���� ���� �� � �� ���� �� SQL�� �� �

�� � ����.

EXEC SQL INCLUDE member-name ;

SQL��� PL/I ����� ���� �� � ����. PL/I %INCLUDE�� SQL� �� SQL��

� ���� PL/I ��� ��� ��� ���� �� �� � ����.

SQL� ���� PL/I ������ ��

CRTSQLPLI ��� MARGINS ���� �� ��� � ��� SQL�� ��� ���. EXEC SQL

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

�� ��

207 ���� ���� �� ������ �� CL �� ���

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

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

SQL� ���� PL/I ������� � ��

�� �� PL/I ���� ��� ��� �� � ��� �� ����� ��� �� ����� �

���.

’SQL’, ’RDI’ �� ’DSN’�� � �� ��� ����� � ���� ���� ����. �� ��

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

SQL� ���� PL/I ������ ��� ���

�� ��� SQL�(�: PL/I�)�� ��� ���� �� � ����.

SQL� ���� PL/I ������ WHENEVER�

SQL WHENEVER�� �� GOTO�� ��� PL/I � �� �� ����� �� WHENEVER

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

SQL� ���� PL/I �������� ��� �� ��

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

��� ��� ���� ���� PL/I� ��� BEGIN DECLARE SECTION�� �� � ���

END DECLARE SECTION�� �� ���. BEGIN DECLARE SECTION � END DECLARE

SECTION� ��� �� SQL�� ��� �� ��� �� ��� BEGIN DECLARE SECTION�� END

DECLARE SECTION� ��� �� ���.

SQL� �� �� ��� �� ��� ��(:)� �� ���.

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

���.

88 IBM i: ����� �� SQL �����

Page 99: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

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

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

SQL� ���� PL/I �������� ��� �� ��

PL/I ������ �� PL/I ��� ���� �� ��� �� ���� �����.

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

�� � ����� ����� ��� ���� ������ ��� PL/I � � ��� � ��

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

v EXTERNAL �� �� � STATIC ���� ��� ��� ���� INITIAL ���� ��� ��

���.

v BASED ���� ��� ��� �� PL/I � �� ��� ���� ���� ���.

SQL� ���� PL/I ������ �� ��� ��:

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

�� DECLAREDCL

variable-name,

( variable-name )

� BINARY FIXEDBIN ( precision )

FLOAT( precision )

DECIMAL FIXEDDEC ( precision )

,scaleFLOAT

( precision )PICTURE picture-string

� ;Alignment and/or Scope and/or Storage

��

�:

1. (BINARY, BIN, DECIMAL �� DEC), (FIXED �� FLOAT) � (precision, scale)� ��

��� �� � ����.

2. ‘9...9V9...R’ �� picture-string� �� ��� ��� �����. R� ����. ����� V

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

3. ‘S9...9V9...9’ �� picture-string� ��� ��� �� �� �� ��� �����. S� ��

��. ����� V� ��� �� �����.

SQL� ���� PL/I ������ �� ��� ��:

�� SQL ����� 89

Page 100: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

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

�� DECLAREDCL

variable-name,

( variable-name )

CHARACTERCHAR ( length ) VARYING

VAR

� ;Alignment and/or Scope and/or Storage

��

�:

1. VARYING �� VAR� ���� �� �� length ��� 32766 ��� �� �� ���.

2. VARYING �� VAR� ��� �� length� 32740 ��� �� ���.

SQL� ���� PL/I ������ 2� ��� ��:

PL/I�� SQL 2� �� � � ���� ��� ����. �� �� � � �� �� � �� �

�� ��� ���� SQL TYPE IS�� ������. SQL ������ � ��� � � ���

PL/I �� ��� �����.

BINARY � VARBINARY

�� DECLAREDCL

variable-name,

( variable-name )

SQL TYPE IS BINARYVARBINARYBINARY VARYING

( length ) ; ��

�:

1. BINARY ��� ��� �� ��� 1 - 32766 �� ���.

2. VARBINARY � BINARY VARYING ��� ��� �� ��� 1 - 32740 �� ���.

3. SQL TYPE IS, BINARY, VARBINARY, BINARY VARYING� � ��� ��� �� �

����.

BINARY �

��� �� ���

DCL MY_BINARY SQL TYPE IS BINARY(100);

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

DCL MY_BINARY CHARACTER(100);

90 IBM i: ����� �� SQL �����

Page 101: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

VARBINARY �

��� �� ���

DCL MY_VARBINARY SQL TYPE IS VARBINARY(250);

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

DCL MY_VARBINARY CHARACTER(250) VARYING;

SQL� ���� PL/I ������ LOB ��� ��:

PL/I�� LOB(� �� �)� �� SQL �� � � ���� ��� ����. �� �� � �

�� �� � �� ��� ��� ���� SQL TYPE IS�� ������. SQL ������ �

��� � � ��� PL/I �� ��� �����.

�� ����� �� LOB ��� ��� ��� ����.

LOB

�� DECLAREDCL

variable-name,

( variable-name )

SQL TYPE IS CLOBBLOB

( lob-length ) ;K

��

�:

1. BLOB � CLOB� �� 1 ≤ lob-length ≤ 32,766

2. SQL TYPE IS, BLOB, CLOB� � ��� ��� �� � ����.

CLOB �

��� �� ���

DCL MY_CLOB SQL TYPE IS CLOB(16384);

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

DCL 1 MY_CLOB,3 MY_CLOB_LENGTH BINARY FIXED (31) UNALIGNED,3 MY_CLOB_DATA CHARACTER (16384);

BLOB �

��� �� ���

DCL MY_BLOB SQL TYPE IS BLOB(16384);

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

DCL 1 MY_BLOB,3 MY_BLOB_LENGTH BINARY FIXED (31) UNALIGNED,3 MY_BLOB_DATA CHARACTER (16384);

�� SQL ����� 91

Page 102: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

�� ����� �� LOB �� ���� ��� ����.

LOB �� ��

�� DECLAREDCL

variable-name,

( variable-name )

SQL TYPE IS CLOB_LOCATOR ;DBCLOB_LOCATORBLOB_LOCATOR

��

�: SQL TYPE IS, BLOB_LOCATOR, CLOB_LOCATOR, DBCLOB_LOCATOR� � ��� ���

�� � ����.

CLOB �� ��� �

��� �� ���

DCL MY_LOCATOR SQL TYPE IS CLOB_LOCATOR;

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

DCL MY_LOCATOR BINARY FIXED(31) UNALIGNED;

BLOB � DBCLOB �� ����� �� ��� ���� ����.

�� ����� �� LOB �� �� ��� ��� ����.

LOB �� �� ��

�� DECLAREDCL

variable-name,

( variable-name )

SQL TYPE IS CLOB_FILE ;DBCLOB_FILEBLOB_FILE

��

�: SQL TYPE IS, BLOB_FILE, CLOB_FILE � DBCLOB_FILE� � ��� ��� �� � �

���.

CLOB �� �� �

��� �� ���

DCL MY_FILE SQL TYPE IS CLOB_FILE;

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

DCL 1 MY_FILE,3 MY_FILE_NAME_LENGTH BINARY FIXED(31) UNALIGNED,3 MY_FILE_DATA_LENGTH BINARY FIXED(31) UNALIGNED,3 MY_FILE_FILE_OPTIONS BINARY FIXED(31) UNALIGNED,3 MY_FILE_NAME CHAR(255);

BLOB � DBCLOB �� �� ���� �� ��� ���� ����.

92 IBM i: ����� �� SQL �����

Page 103: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

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

v SQL_FILE_READ (2)

v SQL_FILE_CREATE (8)

v SQL_FILE_OVERWRITE (16)

v SQL_FILE_APPEND (32)

�� ��

LOB �� �� ��

SQL� ���� PL/I ������ ROWID ��� ��:

PL/I�� SQL �� � ROWID� ���� ��� ����. � �� � � �� �� � �� �

�� ��� ���� SQL TYPE IS�� ������. SQL ������ � ��� � � ���

PL/I �� ��� �����.

ROWID

�� DECLAREDCL

variable-name,

( variable-name )

SQL TYPE IS ROWID ��

�: SQL TYPE IS ROWID� � ��� ��� �� � ����.

ROWID �

��� �� ���

DCL MY_ROWID SQL TYPE IS ROWID;

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

DCL MY_ROWID CHARACTER(40) VARYING;

SQL� ���� PL/I �������� ��� �� ��

PL/I ������ � PL/I ��� ��� �� ��� ��� �� � ����. ��� ���� �

� ��� � PL/I ��� ���� ���� � � ����.

�:

DCL 1 A,2 B,3 C1 CHAR(...),3 C2 CHAR(...);

� ��� B� � �� C1 � C2� ��� ��� ��� ����.

�� SQL ����� 93

Page 104: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

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

����(�: STRUCTURE.FIELD). ��� ��� 2�� ��� �����. (�� ��, � ��� �� �

�� A� SQL�� �� � ����.). A ��� � �� ��� �� � ����. �� ��� A�

��� ��� ����� SQL��� �� � �����. ��� B� �� �� ����. B� SQL

��� �� � ����. SQL ��� ��� ��� �� 2���� ��� ��� ��� ��

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

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

�� ��, ��� ��� CORPDATA.EMPLOYEE ��� ��� ��� �� � �� �� � �

���.

DCL 1 PEMPL,5 EMPNO CHAR(6),5 FIRSTNME CHAR(12) VAR,5 MIDINIT CHAR(1),5 LASTNAME CHAR(15) VAR,5 WORKDEPT CHAR(3);

...EMPID = '000220';...EXEC SQLSELECT *INTO :PEMPLFROM CORPDATA.EMPLOYEEWHERE EMPNO = :EMPID;

SQL� ���� PL/I ������ ��� ��

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

��� ��

�� DECLARE 1 variable-name ,DCL Scope and/or storage

level-1 variable-name ,

� �

,

level-2 var-1 data-types,

( var-2 )

; ��

�� �:

94 IBM i: ����� �� SQL �����

Page 105: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

BINARY FIXEDBIN FLOAT ( precision ) UNALIGNEDDECIMAL FIXEDDEC ( precision )

, scaleFLOAT

( precision ) UNALIGNEDPICTURE picture-string

CHARACTERCHAR ( length ) VARYING

VAR ALIGNEDSQL TYPE IS CLOB ( lob-length )

BLOB KCLOB_LOCATORDBCLOB_LOCATORBLOB_LOCATORCLOB_FILEDBCLOB_FILEBLOB_FILE

SQL TYPE IS ROWIDSQL TYPE IS BINARY ( length )

VARBINARYBINARY VARYING

�:

1. level-1� � �� ��� ��� �����.

2. level-1� 1 - 254 ��� �� �� ���.

3. level-2� 2 - 255 ��� �� �� ���.

4. ��, ��, LOB, ROWID � 2� ��� �� ��� �� ���� �� ��� ��, �� �

�� ��, LOB ��� ��, ROWID ��� �� � 2� ��� �� ��� �� ������.

SQL� ���� PL/I ������ ��� �� ����� ��

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

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

�� DECLAREDCL

variable-name ( dimension ),

( variable-name ( dimension ) )

BINARYBIN

FIXED �

�( precision )

;Alignment and/or scope and/or storage

��

�: ��� 1 - 32766 ��� �� �� ���.

SQL� ���� PL/I �������� ��� �� �� ��

PL/I ������ ��� �� �� �� � ����.

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

�� SQL ����� 95

Page 106: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

v B_ARRAY� C1_VAR � C2_VAR ��� �� �� ��� �� �� ����.

v B_ARRAY� �� � ����.

v B_ARRAY� FETCH� � INSERT�� ���� ���� �� �� � ����.

v B_ARRAY� �� ��� �� ��� �� ���.

v C1_VAR � C2_VAR� SQL�� �� ��� ��� � ��. A ��� � �� ��� ��

� ����. A_STRUCT� �� ��� �� � ����.

DCL 1 A_STRUCT,2 B_ARRAY(10),3 C1_VAR CHAR(20),3 C2_FIXED BIN(15) UNALIGNED;

CORPDATA.DEPARTMENT ���� 10�� �� ����� ��� ������.

DCL 1 DEPT(10),5 DEPTPNO CHAR(3),5 DEPTNAME CHAR(29) VAR,5 MGRNO CHAR(6),5 ADMRDEPT CHAR (3);

DCL 1 IND_ARRAY(10),5 INDS(4) FIXED BIN(15);

EXEC SQLDECLARE C1 CURSOR FOR

SELECT *FROM CORPDATA.DEPARTMENT;

EXEC SQLFETCH C1 FOR 10 ROWS INTO :DEPT :IND_ARRAY;

SQL� ���� PL/I ������ ��� �� ��

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

��� �� ��

�� DECLARE 1 variable-name ( dimension ) ,DCL Scope and/or storage

level-1 variable-name ,

� �

,

level-2 var-1 data-types,

( var-2 )

; ��

�� �:

96 IBM i: ����� �� SQL �����

Page 107: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

BINARY FIXED UNALIGNEDBIN FLOAT ( precision )DECIMAL FIXEDDEC ( precision )

, scaleFLOAT UNALIGNED

( precision )PICTURE picture-string

CHARACTERCHAR ( length ) VARYING

VARSQL TYPE IS CLOB ( lob-length )

BLOB KCLOB_LOCATORDBCLOB_LOCATORBLOB_LOCATORCLOB_FILEDBCLOB_FILEBLOB_FILE

SQL TYPE IS ROWIDSQL TYPE IS BINARY ( length )

VARBINARYBINARY VARYING

�:

1. level-1� � �� ��� ��� �����.

2. level-1� 1 - 254 ��� �� �� ���.

3. level-2� 2 - 255 ��� �� �� ���.

4. ��, ��, LOB, ROWID � 2� ��� �� ��� �� ���� �� ��� ��, �� �

�� ��, LOB ��� ��, ROWID � 2� ��� �� ��� �� ������.

5. ��� 1 - 32767 ��� �� �� ���.

SQL� ���� PL/I ������ ��� �� �� �����:

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

�� DECLARE 1 variable-name ( dimension ) ,DCL Scope and/or storage

level-1 variable-name ,

� level-2 identifier ( dimension-2 ) BINARY FIXEDBIN ( precision )

; ��

�:

1. level-1� � �� ��� ��� �����.

2. level-1� 1 - 254 ��� �� �� ���.

3. level-2� 2 - 255 ��� �� �� ���.

4. Dimension-1 � dimension-2� 1 - 32767 ��� �� �� ���.

�� SQL ����� 97

Page 108: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

SQL� ���� PL/I �������� � �� �� ��

PL/I %INCLUDE ���� ��� � ���� � �� ��� ��� �� � ����.

SQL� �� ���� ���� �� �� %INCLUDE ���� SQL ������ �����. � �

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

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

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

��� ���� �� �� � ��� �� �� � � ����. ��� %INCLUDE ����

COMMA � � ��� ���� ��� ��� ����.

SQL ����� �� ���� i� DB2 � ��� ��� � �� DEPARTMENT� ��� ��

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

DCL 1 TDEPT_STRUCTURE,%INCLUDE DEPARTMENT(DEPARTMENT,RECORD);

� ��� ��� �� TDEPT_STRUCTURE� �� �� ��� ��� �����. �� ��

DEPTNO, DEPTNAME, MGRNO � ADMRDEPT��.

�� ��� �� INDARA� ���� � ��� ������ �� ��� ��� ��� �� ��

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

DCL 1 DEPT_REC(10),%INCLUDE DEPARTMENT(DEPARTMENT,RECORD);

EXEC SQL DECLARE C1 CURSOR FORSELECT * FROM CORPDATA.DEPARTMENT;

EXEC SQL OPEN C1;

EXEC SQL FETCH C1 FOR 10 ROWS INTO :DEPT_REC;

�: DATE, TIME � TIMESTAMP �� DATE, TIME � TIMESTAMP �� ��� � � �� ��

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

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

���� 15�� � �� � � �� 0� �� ���� ��� 2� �� PL/I� �� � ��� ��

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

GRAPHIC � VARGRAPHIC� PL/I� �� ��� ������ SQL� �� ��� GRAPHIC �

VARGRAPHIC ��� ��� ����. GRAPHIC �� VARGRAPHIC �� UCS-2 CCSID� ��

�� �� �� ��� ��� ���� UCS-2 CCSID� �����. GRAPHIC �� VARGRAPHIC

�� UTF-16 CCSID� ���� �� �� ��� ��� ���� UTF-16 CCSID� �����.

98 IBM i: ����� �� SQL �����

Page 109: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

� SQL � PL/I ��� � ��

������ � ��� ���� ��� ��� � SQLTYPE � SQLLEN� �����.

��� ��� ����� ��� �� ���� SQLTYPE� � SQLTYPE + 1��.

� 5. ��� SQL �� � � ��� PL/I ��

PL/I �� � ��� ���

SQLTYPE ��� ��� SQLLEN

SQL �� �

BIN FIXED(p)(p� 1 - 15 ���) 500 2 SMALLINT

BIN FIXED(p)(p� 16 - 31 ���) 496 4 INTEGER

DEC FIXED(p,s) 484 p(1���), s(2���) DECIMAL(p,s)

BIN FLOAT(p)(p� 1 - 24 ���) 480 4 FLOAT(����)

BIN FLOAT(p)(p� 25 - 53 ���) 480 8 FLOAT(���)

DEC FLOAT(m)(m� 1 - 7 ���) 480 4 FLOAT(����)

DEC FLOAT(m)(m� 8 - 16 ���) 480 8 FLOAT(���)

PICTURE �� ���(��) 488 p(1���), s(2���) NUMERIC (p,s)

PICTURE �� ���(�� �� ��) 504 p(1���), s(2���) ��� � ��� ��

��. NUMERIC(p,s)�

������.

CHAR(n) 452 n CHAR(n)

CHAR(n) VARYING 448 n VARCHAR(n)

�� ��� ��� ��� SQL �� � � � � PL/I �� � � �� � ����.

� 6. ��� PL/I ��� ��� SQL �� �

SQL �� � PL/I �� �� �

SMALLINT BIN FIXED(p) p� 1 - 15 ��� �� ����.

INTEGER BIN FIXED(p) p� 16 - 31 ��� �� ����.

BIGINT ��� � ��� �� DEC FIXED(18)� ������.

DECIMAL(p,s) �� NUMERIC(p,s) DEC FIXED(p), DEC FIXED(p,s) ��

PICTURE �� ���

s(��� ��) � p(���)� �� ��

��. p� 1 - 31 ��� �� ����.

s� 0 - p ��� �� ����.

DECFLOAT ���� �� ���� ����.

FLOAT(����) BIN FLOAT(p) �� DEC FLOAT(m) p� 1 - 24 ��� �� ����.

m� 1 - 7 ��� �� ����.

FLOAT(���) BIN FLOAT(p) �� DEC FLOAT(m) p� 25 - 53 ��� �� ����.

m� 8 - 16 ��� �� ����.

CHAR(n) CHAR(n) n� 1 - 32766 ��� �� ����.

VARCHAR(n) CHAR(n) VARYING n� 1 - 32740 ��� �� ����.

CLOB �� SQL TYPE IS� ��� CLOB� ��

����.

GRAPHIC(n) ���� �� ���� ����.

VARGRAPHIC(n) ���� �� ���� ����.

�� SQL ����� 99

Page 110: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

� 6. ��� PL/I ��� ��� SQL �� � (��)

SQL �� � PL/I �� �� �

DBCLOB ���� �� ���� ����.

BINARY �� SQL TYPE IS� ��� BINARY�

������.

VARBINARY �� SQL TYPE IS� ���

VARBINARY� ������.

BLOB �� SQL TYPE IS� ��� BLOB� ��

����.

DATE CHAR(n) �� *USA, *JIS, *EUR �� *ISO�

�� n� 10� ���� ���. ��

*YMD, *DMY �� *MDY� �� n�

8� ���� ���. �� *JUL� �

� n� 6� ���� ���.

TIME CHAR(n) n� 6 ���� ���. � �����

n� 8 ���� ���.

TIMESTAMP CHAR(n) n� 19 ���� ���. ��� ���

� ���� � ����� n� 26��

���. n� 26 �� �� ����

��� ����.

XML ���� �� ���� ����.

DATALINK ���� �� ���� ����.

ROWID �� SQL TYPE IS� ��� ROWID� ��

����.

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

SQL� ���� PL/I �������� ����� �� ��

����� ��� 2��� ����(BIN FIXED(p), �� p� 1 - 15�).

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

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

�� ��� � ����.

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

EXEC SQL FETCH CLS_CURSOR INTO :CLS_CD,:DAY :DAY_IND,:BGN :BGN_IND,:END :END_IND;

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

EXEC SQL BEGIN DECLARE SECTION;DCL CLS_CD CHAR(7);DCL DAY BIN FIXED(15);

100 IBM i: ����� �� SQL �����

|||

|||

Page 111: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

DCL BGN CHAR(8);DCL END CHAR(8);DCL (DAY_IND, BGN_IND, END_IND) BIN FIXED(15);EXEC SQL END DECLARE SECTION;

�� ��

��� �� ��

5 ���� �SQL� ���� ������ ����� ���

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

��.

�� ���� �� ���� �� PL/I ���

PL/I ������ �� ��� �� �� �����(�� �� ��). � �� ��� �� �

� ���� SQL� ���� ���� PL/I ���� �� �����.

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

v PL/I %INCLUDE ��� ���� � ���� � ����� �����.

v ����� ��� ��� ��� �� ��� 32703�� ���. SQL��� ��� 64���� ���

� ��� �� ��� �� ��� 32703 + 64 = 32767��.

v PL/I ������ ��� �� ��� PL/I ��� � � �� ��� �����.

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

�� ��

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

RPG/400 �������� SQL� ��

RPG/400 ����� �� ���� RPG II ���� RPG III ���� �� �����.

SQL�� RPG III ������ �� � ����. RPG II� AutoReport� ���� ����. � �

��� �� RPG� �� �� ��� RPG III �� ILE RPG�� ����.

� ����� RPG/400 ���� SQL�� ��� �� �� � ����� � �� ����� �

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

�: � ��� ���� 210 ���� �� ���� � ���� ���� ��� ���� ���.

RPG� ��� ������ �� �� ��� IBM Publications Center �� RPG/400 ��� ��

� � RPG/400 ��� � ������.

�� SQL ����� 101

Page 112: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

�� ��

2 ���� �SQL� ���� ����� ��

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

�� ��

168 ���� ��� ���: i� DB2 ��� ���

i� DB2�� ���� ��� ��� SQL�� ���� �� ��� � ������ ��� �

���.

190 ���� ��: RPG/400 ���� SQL��

� �� ���� RPG ����� ��� ����.

SQL� ���� RPG/400 �������� SQL �� �� �

SQL ������ RPG/400 ���� ���� �� �� �� �� SQLCA� ���� �

���.

INCLUDE SQLCA� � ����� ����� � ���. � ���� INCLUDE SQLCA� �

��� ���� ���� �� �����. SQLCA(RPG/400� �� ��� ��):

ISQLCA DS SQLI* SQL COMMUNICATION AREA SQLI I X'0000000000000000' 1 8 SQLAID SQLI B 9 120SQLABC SQLI B 13 160SQLCOD SQLI B 17 180SQLERL SQLI 19 88 SQLERM SQLI 89 96 SQLERP SQLI 97 120 SQLERR SQLI B 97 1000SQLER1 SQLI B 101 1040SQLER2 SQLI B 105 1080SQLER3 SQLI B 109 1120SQLER4 SQLI B 113 1160SQLER5 SQLI B 117 1200SQLER6 SQLI 121 131 SQLWRN SQLI 121 121 SQLWN0 SQLI 122 122 SQLWN1 SQLI 123 123 SQLWN2 SQLI 124 124 SQLWN3 SQLI 125 125 SQLWN4 SQLI 126 126 SQLWN5 SQLI 127 127 SQLWN6 SQLI 128 128 SQLWN7 SQLI 129 129 SQLWN8 SQLI 130 130 SQLWN9 SQLI 131 131 SQLWNA SQLI 132 136 SQLSTT SQLI* END OF SQLCA SQL

�: RPG/400� �� ���� 6�� �����. �� SQLCA�� ��� 6�� �������. RPG/400

�� �� �� ��� ���� � �� ��� ���� �� ����. SQLERR� � � �

��� ���� SQLER1 - 6� ��� ��� �����.

102 IBM i: ����� �� SQL �����

Page 113: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

�� ��

SQL �� �

SQL� ���� RPG/400 �������� SQL ��� �� �

SQL ��� ��� � �� � � ����. ��� ALLOCATE DESCRIPTOR�� ��� ���

��. �� ��� SQLDA ��� ��� �����. � ����� SQLDA ��� ���� ����

�.

�� ���� SQLDA� �� � ����.

v EXECUTE...USING DESCRIPTOR descriptor-name

v FETCH...USING DESCRIPTOR descriptor-name

v OPEN...USING DESCRIPTOR descriptor-name

v CALL...USING DESCRIPTOR descriptor-name

v DESCRIBE statement-name INTO descriptor-name

v DESCRIBE CURSOR cursor-name INTO descriptor-name

v DESCRIBE INPUT statement-name INTO descriptor-name

v DESCRIBE PROCEDURE procedure-name INTO descriptor-name

v DESCRIBE TABLE host-variable INTO descriptor-name

v PREPARE statement-name INTO descriptor-name

SQLCA�� �� ����� � ��� SQLDA� �� � ��� SQLDA� �� ��� �� � �

���.

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

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

SELECT��� SQL ��� �(SQLDA)� �����. ��� SELECT� ��� ���� �� �

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

SQLDA� RPG/400�� ���� �� ��� ��� ����� RPG/400 ����� INCLUDE SQLDA

�� �� � ����. SQLDA� ����� SQLDA� C, C++, COBOL, PL/I �� ILE RPG ���

� �� ���� RPG ���� ���� ���.

�� ��

� SQL �����

�� ��

SQL ��� �

SQL� ���� RPG/400 �������� SQL� �

RPG/400 ����� ��� SQL�� �� ��� ��� ���. ��� C� �� 6� ���

���.

�� SQL ����� 103

|

|

Page 114: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

SQL�� � ��, �� �� �� RPG/400 ����� �� � ����. SQL�� RPG/400�� �

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

�� EXEC SQL� SQL�� � � �����. EXEC SQL� �� 7� /� �� ��� �� 8 - 16

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

�� END-EXEC� SQL�� �� �����. END-EXEC� �� 7� ���(/)� �� ��� ��

8 - 16� ��� ���. �� 17 - 74� ���� ���.

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

: SQL� ���� RPG/400 �������� SQL� �

RPG/400 ����� ��� UPDATE�� �� �� �� �����.

*...1....+....2....+....3....+....4....+....5....+....6....+....7...*C/EXEC SQL UPDATE DEPARTMENTC+ SET MANAGER = :MGRNUMC+ WHERE DEPTNO = :INTDEPC/END-EXEC

SQL� ���� RPG/400 ������ ��

SQL ��(--) � �� SQL��� ��� �� � �� �� ��(�� EXEC� SQL ��� � )�

RPG/400 ��� �� � ����.

SQL�� RPG/400 ��� ���� �� 7� ��(*)� �����.

SQL� ���� RPG/400 �������� SQL� ��

SQL�� ���� �� �� ��� ��� �� �� 7 - 74� �� � ����. �� 7� +(�

��) �� �� 8� ���� ���.

DBCS ��� �� �� ��� ��� �� �� 75� SI ��� �� �� �� �� 8� SO ��

� � � � � � � � � � � � � � � . � S Q L � � � � � � � � � �

G’<AABBCCDDEEFFGGHHIIJJKK>’� ���� ����.

*...1....+....2....+....3....+....4....+....5....+....6....+....7....+....8C/EXEC SQL SELECT * FROM GRAPHTAB WHERE GRAPHCOL = G'<AABB>C+<CCDDEEFFGGHHIIJJKK>'C/END-EXEC

SQL� ���� RPG/400 �������� �� ��

SQL�� RPG/400 �� ��� SQL�� �� ��� � ����.

*...1....+....2....+....3....+....4....+....5....+....6....+....7....+....8C/EXEC SQL INCLUDE member-nameC/END-EXEC

/COPY�� SQL� �� RPG/400 ��� ���� �� �� � ����.

104 IBM i: ����� �� SQL �����

Page 115: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

SQL� ���� RPG/400 ������

SQL ������ �� ��� �� CRTSQLRPG ��� �� OPTION ����

*NOSEQSRC/*SEQSRC ��� ���� ���.

*NOSEQSRC� ���� � ��� �� �����. *SEQSRC� �� �� 000001�� �

� 1� �����.

SQL� ���� RPG/400 ������� � ��

�� �� RPG ���� ��� ��� �� � ��� �� ����� ��� �� ����� �

���.

‘SQ’, ‘SQL’, ‘RDI’ �� ‘DSN’�� � �� ��� ����� � ���� ���� ����. ��

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

SQL� ���� RPG/400 ������ ��� ���

TAG�� �� SQL� �� � � ����. EXEC SQL �� �� ��� TAG�� ������.

SQL� ���� RPG/400 ������ WHENEVER�

GOTO�� ��� TAG�� ����� ���. GOTO/TAG� �� ��� ��� ���.

SQL� ���� RPG/400 ������ ��� �� ��

SQL�� ��� �� ��� ��� ���� ���� ���. LOB, XML, ROWID, �� � ��

��� � 2� ��� ��� RPG/400�� ���� ����.

RPG/400� �� SQL� SQL BEGIN DECLARE SECTION� � END DECLARE SECTION�� �

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

SQL� �� �� ��� �� ��� ��(:)� �� ���.

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

SQL� ���� RPG/400 �������� ��� �� ��

SQL RPG/400 ������ RPG/400 ��� ���� �� ��� �� ���� �����.

RPG/400� ��� ���� ��� SQL�� �� � ����. ���� �� ��� �� ���� �

�� ����.

v ����� ��(*INxx)

v ��

v UDATE

v UDAY

v UMONTH

�� SQL ����� 105

|

|

Page 116: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

v UYEAR

v �� �� �

v ��� ��

��� ��� ��� �� RPG/400� CALL/PARM ��� ��� SQL� �����. PARM� �

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

SQL� ���� RPG/400 �������� ��� �� ��

���� �� ��� �� �� RPG/400 �� ���� ��� ����� ��� � ����. SQL

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

���.

�� ��� ���� �� �� �� ���� �� � � ��� ����. �� ��� 9999

� � � �� ��� �� �� 256�� � �� ��� �� � ����.

�� ��� BIGCHR� ���� �� RPG/400 �� ����. SQL� BIGCHR� �� �� ��

� ��� 642� �� ����� �����.

*...1....+....2....+....3....+....4....+....5....+....6....+....7...*IBIGCHR DS 642

�� ��� PEMPL� ��� EMPNO, FIRSTN, MIDINT, LASTNAME � DEPTNO� ��� ��

� ��� ����. PEMPL� �� ����� ���� �����. �� ��, EMPLOYEE� �

� �� EMPNO� �� � �� �� FIRSTN� ��� ��� ����.

*...1....+....2....+....3....+....4....+....5....+....6....+....7. ..*IPEMPL DSI 01 06 EMPNOI 07 18 FIRSTNI 19 19 MIDINTI 20 34 LASTNAI 35 37 DEPTNO

...C MOVE '000220' EMPNO

...C/EXEC SQLC+ SELECT * INTO :PEMPLC+ FROM CORPDATA.EMPLOYEEC+ WHERE EMPNO = :EMPNOC/END-EXEC

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

��� ��� ������. �� ��, PEMPL.MIDINT� MIDINT� ���� �� �����.

SQL� ���� RPG/400 �������� ��� �� �� ��

��� �� �� � �� ��� �����. � �� ��� �� � �� � SQL FETCH��

� �� � ����.

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

106 IBM i: ����� �� SQL �����

Page 117: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

v BARRAY� �� ��� �� ��� �� ���.

v BARRAY� �� ��� ���� ���. �� FROM ��� 1�� �� TO � FROM ��

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

v �� � FETCH � ���� INSERT � �� ���� ���� � �� ��� ���� ��

�� �����. �� � FETCH � ���� INSERT� �� �� 1� �����.

*...1....+....2....+....3....+....4....+....5....+....6....+....7. ..*IBARRAY DS 10I 01 20 C1VARI B 21 220C2VAR

�� ���� DEPT � �� � FETCH���� ��� �� �� ��� DEPARTMENT ���

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

*...1....+....2....+....3....+....4....+....5....+....6....+....7...*E INDS 4 4 0IDEPT DS 10I 01 03 DEPTNOI 04 32 DEPTNMI 33 38 MGRNOI 39 41 ADMRDIINDARR DS 10I B 1 80INDS

...C/EXEC SQLC+ DECLARE C1 CURSOR FORC+ SELECT *C+ FROM CORPDATA.DEPARTMENTC/END-EXECC/EXEC SQLC+ OPEN C1C/END-EXECC/EXEC SQLC+ FETCH C1 FOR 10 ROWS INTO :DEPT:INDARRC/END-EXEC

SQL� ���� RPG/400 �������� � �� �� ��

SQL ������ ILE RPG ���� �� ��� ��� RPG/400 �� �����. �� ���

��� ��� ��� ��� �� /COPY�� ���� � ���.

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

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

�� ��� � �� DEPARTMENT� RPG/400 ����� ��� �����. SQL �����

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

*...1....+....2....+....3....+....4....+....5....+....6....+....7....*FTDEPT IP E DISKF TDEPT KRENAMEDEPTRECIDEPTRECI DEPTNAME DEPTNI ADMRDEPT ADMRD

�� SQL ����� 107

Page 118: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

�: RPG/400�� ��� ��� �� I/O � � ���� ���� RPG ����� ��� �� F-spec

� ������. SQL�� ��� ��� �� I/O � � ���� ���� � �� ��� �

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

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

��� ���� �����. ����� ��� ����� �� � � �� ��� TDEPT� �

�� ����� �� � ����. ��� 6��� �� ��� ��� ��� ���.

*...1....+....2....+....3....+....4....+....5....+....6....+....7....*ITDEPT E DSDEPARTMENTI DEPTNAME DEPTNI ADMRDEPT ADMRD

�: DATE, TIME � TIMESTAMP �� DATE, TIME � TIMESTAMP �� ��� � � �� ��

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

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

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

��.

GRAPHIC � VARGRAPHIC �� RPG/400� �� ��� ������ SQL� �� GRAPHIC �

VARGRAPHIC ��� ����. GRAPHIC �� VARGRAPHIC �� UCS-2 CCSID� ���� �

� �� ��� ��� ���� UCS-2 CCSID� �����. GRAPHIC �� VARGRAPHIC ��

UTF-16 CCSID� ���� �� �� ��� ��� ���� UTF-16 CCSID� �����.

SQL� ���� RPG/400 ������ ��� �� ��� �� � �� �� ����

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

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

�� ��� DEPARTMENT ��� RPG/400 ���� ���� ��� �� �� ���� �

����. �� �� �� � FETCH�� ��� 10�� �� ��� �� �� �����.

*...1....+....2....+....3....+....4....+....5....+....6....*ITDEPT E DSDEPARTMENT 10I DEPARTMENT DEPTNI ADMRDEPT ADMRD

...

C/EXEC SQLC+ DECLARE C1 CURSOR FORC+ SELECT *C+ FROM CORPDATA.DEPARTMENTC/END-EXEC

...

108 IBM i: ����� �� SQL �����

Page 119: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

C/EXEC SQLC+ FETCH C1 FOR 10 ROWS INTO :TDEPTC/END-EXEC

� SQL � RPG/400 ��� � ��

������ ��� ���� ��� ��� � SQLTYPE � SQLLEN� �����. ��� ���

����� ��� �� ���� SQLTYPE� � SQLTYPE + 1��.

� 7. ��� SQL �� � � ��� RPG/400 ��

RPG/400 ��

43 � 52 � �� RPG/400 �� ��� ���

SQLTYPE

��� ���

SQLLEN

SQL ��

�� �� ��

�� �� �� = n(n ≤ 256) 452 n CHAR(n)

�� ��(��

� ��)

�� �� �� �� �� = n(n ≤ 9999) 452 n CHAR(n)

� �� �� �� = n(n ≤ 256) 452 n CHAR(n)

�� �� � �� �� �� �� = n(n ≤ 256) 452 n CHAR(n)

�� �� ��

B 0 �� = 2 500 2 SMALLINT

�� �� ��

B 0 �� = 4 496 4 INTEGER

�� �� ��

B 1-4 �� = 2 500 2 DECIMAL(4,s)

(s=52 �)

�� �� ��

B 1-9 �� = 4 496 4 DECIMAL(9,s)

(s=52 �)

�� �� ��

P 0 - 9 �� = n(n� 1 - 16) 484 p(1���), s(2�

��)

DECIMAL(p,s)

(p = n*2-1,

s = 52 �)

� P 0 - 9 �� = n(n� 1 - 16) 484 p(1���), s(2�

��)

DECIMAL(p,s)

(p = n*2-1,

s = 52 �)

� �� 0 - 9 �� = n(n� 1 - 30) 484 p(1���), s(2�

��)

DECIMAL(p,s)

(p = n,

s = 52 �)

� B 0 - 4(n =

2� ��),

0 - 9(n =

4� ��)

�� = 2 �� 4 484 p(1���), s(2�

��)

DECIMAL(p,s)

(p=4(n=2� �

�)

�� 9(n=4�

��), s = 52

�)

�� �� � �� �� 0 - 9 �� = n(n� 1 - 30) 484 p(1���), s(2�

��)

DECIMAL(p,s)

(p = n,

s = 52 �)

�� �� ��

�� 0 - 9 �� = n(n� 1 - 30) 488 p(1���), s(2�

��)

NUMERIC(p,s)

(p = n,

s = 52 �)

�� SQL ����� 109

Page 120: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

�� ��� �� ��� ��� ��� SQL �� � � � � RPG/400 �� � � �����

�.

� 8. ��� RPG/400 ��� ��� SQL �� �

SQL �� � RPG/400 �� � �

SMALLINT �� ��� �����. �� 43� B� �

��� 2 �� ��� ��� �� 52�

0� ����.

INTEGER �� ��� �����. �� 43� B� �

��� 4 �� ��� ��� �� 52�

0� ����.

BIGINT ��� � ��� �� �� 43� P� ��� ��� ��� ��

52� 0� ������.

DECIMAL �� ��� �����. �� 43� P� �

��� ��� �� 52� 0 - 9� ����.

��

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

�.

�� ��� 16(��� 30)� �� ���� 9

��.

NUMERIC �� ��� �����. �� 43� ���

� ���� �� 52� 0 - 9� ����.

�� ��� 30(��� 30)� �� ���� 9

��.

DECFLOAT ���� �� ���� ��

FLOAT(����) ��� � ��� �� �� ��� �� �� �� � � ��� ��

����.

FLOAT(���) ��� � ��� �� �� ��� �� �� �� � � ��� ��

����.

CHAR(n) � �� �� ��� �����. �

�� �� 43 � 52� ��� ����.

��

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

n� 1 - 256 ��� � � ����.

CHAR(n) �� ��� ���� �� �� ����

�.

n� 1 - 9999 ��� � � ����.

VARCHAR(n) ��� � ��� �� ���� �� � VARCHAR �� �� � �

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

CLOB ���� �� ���� ��

GRAPHIC(n) ���� �� ���� ��

VARGRAPHIC(n) ���� �� ���� ��

DBCLOB ���� �� ���� ��

BINARY ���� �� ���� ��

VARBINARY ���� �� ���� ��

BLOB ���� �� ���� ��

110 IBM i: ����� �� SQL �����

Page 121: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

� 8. ��� RPG/400 ��� ��� SQL �� � (��)

SQL �� � RPG/400 �� � �

DATE �� ��� �����. ��� ��� �

� 52� ��� ����.

��

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

�� *USA, *JIS, *EUR �� *ISO� �� �

�� 10 ���� ���. �� *YMD,

*DMY �� *MDY� �� ��� 8 ����

���. �� *JUL� �� ��� 6 ����

���.

TIME �� ��� �����. ��� ��� �

� 52� ��� ����.

��

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

��� 6 ���� ���. � ����� ��

� 8 ���� ���.

TIMESTAMP �� ��� �����. ��� ��� �

� 52� ��� ����.

��

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

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

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

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

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

DATALINK ���� �� ���� ��

ROWID ���� �� ���� ��

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

SQL� ���� RPG/400 ������ �� ��

RPG/400� ���� ���� �� �� � � � ����.

RPG/400� �� ��� ��� ��� ��� �����. �� 2� ��� ��� ���� �

� ��� ���� �� ���� �� ��� ���� � ���(�� �� �� 2��� ��

�). SQL ��� ���� ��� ��� �� �� ����.

SQL� ���� RPG/400 �������� ����� �� ��

����� ��� 2��� ����.

109 ���� � 7�� SMALLINT SQL �� � � �� ��� ������.

����� ��� � ��� 4,0� �� ��� ��� ��� �� 43� B� �� �� ���

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

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

�� ��� � ����.

�� SQL ����� 111

|||

|||

Page 122: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

�� ��

��� �� ��

5 ���� �SQL� ���� ������ ����� ���

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

��.

: SQL� ���� RPG/400 �������� ����� �� ��

� ���� RPG�� ����� ��� ���� �� ����.

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

*...1....+....2....+....3....+....4....+....5....+....6....+....7...*C/EXEC SQL FETCH CLS_CURSOR INTO :CLSCD,C+ :DAY :DAYIND,C+ :BGN :BGNIND,C+ :END :ENDINDC/END-EXEC

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

*...1....+....2....+....3....+....4....+....5....+....6....+....7...*I DSI 1 7 CLSCDI B 8 90DAYI B 10 110DAYINDI 12 19 BGNI B 20 210BGNINDI 22 29 ENDI B 30 310ENDIND

�� ���� �� ���� �� RPG/400 ���

SQL RPG/400 ������ �� ��� �� �� �����(�� �� ��).

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

v ����� ��� ��� ��� �� ��� 9935�� ���. SQL��� ��� 64���� ���

� ��� �� ��� �� ��� 9935 + 64 = 9999��.

v ������ ���� �����(�� ���� ������� ��� �� �� �� �� 6��� �).

������ �� ��� ������� 6�� ���(″INDIC,1″�� 7�� ���) ������ �

� ���� �� ���.

v ��� ��� ��� 256�� ���. �� ���� �� �� ��� ��� ��� ���� ��

� 256�� ��� � � ����. ���� 256�� ��� ��� �� � ����.

112 IBM i: ����� �� SQL �����

Page 123: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

�� ��

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

SQL� ���� ��� RPG/400 ��� � �

SQL �� �� ��� ��� �� �� � SQL�� �� �� �(�� SQLDA)� �� ���

����.

�� �� SQLDA� ���� ���� ��� � �� � ���� �� �� � �� ���� �

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

SQL ������ SQL �� ��� ���� � ����� �� �� SQLDA� ��� �

���.

SQL� �� �� RPG/400 ���� �� SQL� �� �� �� ����� ���� RPG/400 ��

�� LR(Last Record) ������ � ��� ����� � ���. LR ������ � ��� �

��� ��� RPG/400 ���� ��� � � ����� �� �����. � ����� ��

���� �� SQLDA� ���� �� �����.

SQL�� �� �� ���� ���� SQL�� �� �� RPG/400 ���� �� � �� � �

��� ��� ���.

v RETRN� ��

v RT ������ ��� ��

� �� ���� �� SQLDA� �� ��� � �� �� �� � ����.

ILE RPG �������� SQL� ��

ILE RPG ���� SQL�� ��� �� �� � ����� � �� ����� � �� �

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

�: � ��� ���� 210 ���� �� ���� � ���� ���� ��� ���� ���.

ILE RPG� ��� ������ �� �� ��� ILE RPG ����� ��� �� � ILE RPG

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

�� SQL ����� 113

Page 124: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

�� ��

2 ���� �SQL� ���� ����� ��

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

�� ��

168 ���� ��� ���: i� DB2 ��� ���

i� DB2�� ���� ��� ��� SQL�� ���� �� ��� � ������ ��� �

���.

196 ���� ��: ILE RPG ���� SQL��

� �� ���� ILE RPG ����� ��� ����.

SQL� ���� ILE RPG �������� SQL �� �� �

SQL ������ SET OPTION SQLCA = *NO�� �� ��� ��� �� �� �� �� ILE

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

INCLUDE SQLCA� � ����� ����� � ���. � ���� INCLUDE SQLCA� �

��� ���� ���� �� �����. ILE RPG� SQLCA ��� ��� ����.

D* SQL COMMUNICATION AREAD SQLCA DSD SQLCAID 8A INZ(X'0000000000000000')D SQLAID 8A OVERLAY(SQLCAID)D SQLCABC 10I 0D SQLABC 9B 0 OVERLAY(SQLCABC)D SQLCODE 10I 0D SQLCOD 9B 0 OVERLAY(SQLCODE)D SQLERRML 5I 0D SQLERL 4B 0 OVERLAY(SQLERRML)D SQLERRMC 70AD SQLERM 70A OVERLAY(SQLERRMC)D SQLERRP 8AD SQLERP 8A OVERLAY(SQLERRP)D SQLERR 24AD SQLER1 9B 0 OVERLAY(SQLERR:*NEXT)D SQLER2 9B 0 OVERLAY(SQLERR:*NEXT)D SQLER3 9B 0 OVERLAY(SQLERR:*NEXT)D SQLER4 9B 0 OVERLAY(SQLERR:*NEXT)D SQLER5 9B 0 OVERLAY(SQLERR:*NEXT)D SQLER6 9B 0 OVERLAY(SQLERR:*NEXT)D SQLERRD 10I 0 DIM(6) OVERLAY(SQLERR)D SQLWRN 11AD SQLWN0 1A OVERLAY(SQLWRN:*NEXT)D SQLWN1 1A OVERLAY(SQLWRN:*NEXT)D SQLWN2 1A OVERLAY(SQLWRN:*NEXT)D SQLWN3 1A OVERLAY(SQLWRN:*NEXT)D SQLWN4 1A OVERLAY(SQLWRN:*NEXT)D SQLWN5 1A OVERLAY(SQLWRN:*NEXT)D SQLWN6 1A OVERLAY(SQLWRN:*NEXT)D SQLWN7 1A OVERLAY(SQLWRN:*NEXT)D SQLWN8 1A OVERLAY(SQLWRN:*NEXT)D SQLWN9 1A OVERLAY(SQLWRN:*NEXT)D SQLWNA 1A OVERLAY(SQLWRN:*NEXT)

114 IBM i: ����� �� SQL �����

Page 125: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

D SQLWARN 1A DIM(11) OVERLAY(SQLWRN)D SQLSTATE 5AD SQLSTT 5A OVERLAY(SQLSTATE)D* END OF SQLCA

SET OPTION SQLCA = *NO�� �� �� SQL ������ �� ��� SQLCODE � SQLSTATE

��� ���� ����. �� ��� SQLCA� ���� �� �� �� ��� �� �����.

D SQLCODE S 10I 0D SQLSTATE S 5A

�� ��

SQL �� �

SQL� ���� ILE RPG �������� SQL ��� �� �

SQL ��� �(SQLDA)�� � �� � � ����. ��� ALLOCATE DESCRIPTOR�� ���

�����. �� ��� SQLDA ��� ��� �����. � ����� SQLDA ��� ����

�����.

�� ���� SQLDA� �� � ����.

v EXECUTE...USING DESCRIPTOR descriptor-name

v FETCH...USING DESCRIPTOR descriptor-name

v OPEN...USING DESCRIPTOR descriptor-name

v CALL...USING DESCRIPTOR descriptor-name

v DESCRIBE statement-name INTO descriptor-name

v DESCRIBE CURSOR cursor-name INTO descriptor-name

v DESCRIBE INPUT statement-name INTO descriptor-name

v DESCRIBE PROCEDURE procedure-name INTO descriptor-name

v DESCRIBE TABLE host-variable INTO descriptor-name

v PREPARE statement-name INTO descriptor-name

SQLCA�� �� ����� � ��� SQLDA� �� � ��� SQLDA� �� ��� �� � �

���.

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

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

��� SQL ��� �(SQLDA)� �����. ��� SELECT� ��� ���� �� � ���

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

ILE RPG ����� INCLUDE SQLDA�� �� � ����. INCLUDE SQLDA�� ����

�� �� ����� ��� ��� ���� SQLDA ��� � � ����.

C/EXEC SQL INCLUDE SQLDAC/END-EXEC

�� SQL ����� 115

|

|

Page 126: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

INCLUDE SQLDA� ��� �� �� ��� ����.

D* SQL DESCRIPTOR AREAD SQLDA DSD SQLDAID 8AD SQLDABC 10I 0D SQLN 5I 0D SQLD 5I 0D SQL_VAR 80A DIM(SQL_NUM)D 33 48*D 49 64*D*D SQLVAR DSD SQLTYPE 5I 0D SQLLEN 6I 0D SQLRES 12AD SQLINFO1 16AD SQLDATA * OVERLAY(SQLINFO1:1)D SQL_RESULT_SET_LOCATOR...D 20I 0 OVERLAY(SQLINFO1:1)D SQLINFO2 16AD SQLIND * OVERLAY(SQLINFO2:1)D SQL_ROW_CHANGE...D 10I 0 OVERLAY(SQLINFO2:1)D SQL_RESULT_SET_ROWS...D 10I 0 OVERLAY(SQLINFO2:1)D SQLNAMELEN 5I 0D SQLNAME 30AD* END OF SQLDAD* EXTENDED SQLDAD SQLVAR2 DSD SQLLONGL 1 4I 0D SQLRSVDL 5 32AD SQLDATAL 33 48*D SQLTNAMELN 49 50I 0D SQLTNAME 51 80AD* END OF EXTENDED SQLDA

SQL_NUM �� ��� ����� ����. SQL_NUM� SQL_VAR� ��� ��� ��� �� ��

� ���� ���.

INCLUDE SQLDA� � �� �� ��� ����. � �� �� ��� � ��� �� ��

SQLDA� ��� ��� ���� �����.

SQLDA� � ��� ����� ���� SQLVAR� ����� � ��� ��� � SQLVAR�

SQL_VAR(n)� �� ���(�� n� SQLDA� �� �� ��). �� � ��� �� ���

�� �����.

SQLDA � ��� ��� �� �� ���� SQLVAR(n)� SQL_VAR� ����(�� n� �

� � ��� ��).

116 IBM i: ����� �� SQL �����

|||||||||||||||||||||||||||||||||||

|

Page 127: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

�� ��

� SQL �����

�� ��

SQL ��� �

SQL� ���� ILE RPG �������� SQL� �

ILE RPG ����� ��� SQL�� �� �� �� �� �� �� ��� �� � ����.

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

�� �����.

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

�� �� RPG

�� EXEC SQL� SQL�� � � �����. EXEC SQL� �� 7� /� �� ��� �� 8 -

16� ��� ���. SQL�� �� 17�� � � �� 80� ��� � ����.

�� END-EXEC� SQL�� �� �����. END-EXEC� �� 7� ���(/)� �� ��� ��

8 - 16� ��� ���. �� 17 - 80� ���� ���.

ILE RPG ����� ��� UPDATE�� ��� �� �����.

C/EXEC SQL UPDATE DEPARTMENTC+ SET MANAGER = :MGRNUMC+ WHERE DEPTNO = :INTDEPC/END-EXEC

�� �� RPG

��� SQL�� EXEC SQL� � � ��(;)�� �� ���. EXEC SQL ��� ��� �

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

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

�� ���� ��� UPDATE�� ��� �� �����.

EXEC SQL UPDATE DEPARTMENTSET MGRNO = :MGR_NUMWHERE DEPTNO = :INT_DEP;

SQL� ���� ILE RPG ������ ��

SQL ��(--) � �� SQL��� �� ��� �� � �� �� ��� ILE RPG ��� �� � �

���.

�� �� RPG

SQL�� ILE RPG ��� ���� �� 7� ��(*)� �����.

�� SQL ����� 117

Page 128: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

�� �� RPG

�� SQL�� �� 8 - 80 ���� ��� �� � �� �� ��(�� EXEC � SQL ��� �

)� ��� �� �� (/*...*/)� �� � ����. ��� � �� ��� ����. �� � ��(//)�

�� � ����.

SQL� ���� ILE RPG �������� SQL� ��

SQL�� ILE RPG� ��� �� ��� � ����.

�� �� RPG

SQL�� ���� �� �� ��� ��� �� �� 9 - 80� �� � ����. �� 7� � �

�(+) �� �� 8� ���� ���. ��� �� �� 80� �� �� �� 9� �����.

DBCS ��� �� �� ��� ��� �� �� 81� SI ��� �� �� �� �� 8� SO ��

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

� ��� SQL��� �� ��� �� G’<AABBCCDDEEFFGGHHIIJJKK>’� ���� ����.

C/EXEC SQL SELECT * FROM GRAPHTAB WHERE GRAPHCOL = G'<AABBCCDDEE>C+<FFGGHHIIJJKK>'C/END-EXEC

�� �� RPG

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

� �� ���� SQL�� � � ����. � ��(+)� ��� ��� ��� ��� ��

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

SQL� ���� ILE RPG �������� �� ��

SQL� � RPG ��� ILE RPG ������ ����� SQL INCLUDE�� ������.

C/EXEC SQL INCLUDE member-nameC/END-EXEC

RPG ���� RPG ����� �� ���(RPGPPOPT)� �� �� SQL ������ �� ��

���.

�� ��

�SQL� ���� ILE RPG ������� ��� ���

RPG ���� RPG ����� �� ���(RPGPPOPT)� �� �� SQL ������ �� �

����. RPG ������ ���� �� ����� �� ��� SQL ������ ����

�.

SQL� ���� ILE RPG �������� ��� ��

RPG ���� RPG ����� �� ���(RPGPPOPT)� �� �� SQL ������ �� ��

���. RPG ������ ���� �� ����� �� ��� SQL ������ �����.

118 IBM i: ����� �� SQL �����

Page 129: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

v �� *NONE�� RPG �� ������ �� RPG ������ ���� ����. � ���

��� ������� SQL�� ���� ���� ����. � ��� ������� /COPY ���

� SQL ������ �� �����. ��� /COPY�� ���� ����. �� �� �� ���

/COPY�� SQL ������ �� ���� ����. �� �� ���� RPG ���� ��� �

� �����. �� ��� �� ��� �� �� RPG� � SQL�� SQL ������ �� ��

�� ���� � ���.

v �� *LVL1�� RPG �� ������ �� RPG ������ �����. ��� /COPY�� �

�� �� /COPY�� ��� ��� ��� ���� �����.

v �� *LVL2�� RPG �� ������ �� RPG ������ �����. �� /COPY� �

/INCLUDE�� ��� ��� ��� ���� �����.

v *LVL1 �� *LVL2� ���� RPG ������ �� �� �� /COPY� � /INCLUDE��

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

� RPG ������ ���� �� ���.

�� ��

118 ���� �SQL� ���� ILE RPG ������� � ���

SQL� � RPG ��� ILE RPG ������ ����� SQL INCLUDE�� ������.

SQL� ���� ILE RPG ������

SQL ������ �� ��� �� CRTSQLRPGI ��� �� OPTION ����

*NOSEQSRC/*SEQSRC ��� ���� ���.

*NOSEQSRC� ���� � ��� �� �����. *SEQSRC� �� �� 000001�� �

� 1� �����.

SQL� ���� ILE RPG ������� � ��

�� �� ILE RPG ���� ��� ��� �� � ��� ��� �� ����� ����.

v SQ, SQL, RDI �� DSN�� � �� ��� ����� � ���� ���� ����. �� �

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

v ��� ���� �� ��� 64���.

SQL� ���� ILE RPG ������ ��� ���

TAG�� �� SQL� �� � � ����. EXEC SQL �� �� ��� TAG�� ������.

SQL� ���� ILE RPG ������ WHENEVER�

GOTO�� ��� TAG�� ����� ���. GOTO/TAG� �� ��� ��� ���.

SQL� ���� ILE RPG �������� ��� �� ��

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

�� SQL ����� 119

Page 130: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

ILE RPG� �� SQL� SQL BEGIN DECLARE SECTION � END DECLARE SECTION�� �

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

SQL� �� �� ��� �� ��� ��(:)� �� ���. ��� ��� ��� ��� ��� �

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

���.

��� ��� ���� SQL�� �� ��� �� �� �� ���. DECLARE CURSOR�� ���

� ��� OPEN� ��� �� ��� ����� �� �� DECLARE CURSOR�� OPEN�� ���

��� �� ���.

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

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

OPTIONS ���� *XREF� ��� ����� ��� ������.

SQL� ���� ILE RPG �������� ��� �� ��

SQL ILE RPG ������ �� ILE RPG ��� ���� �� ��� �� ���� ����

�.

ILE RPG� ��� ���� ��� SQL��� �� � ����. ���� �� ��� �� ����

��� ����.

v ��� ��

v ���

v ��

v UDATE

v UDAY

v UMONTH

v UYEAR

v �� �� �

v ��� ��

v �� �� �

v %SIZE �� %ELEM� ���� ��� ��

v ��� ���� ��� ��(��� OCCURS �� DIM� ���� ��� OCCURS �� DIM��

���� �� ��� ��� �� ��)

��� ��� ��� �� ILE RPG� CALL/PARM ��� ��� SQL� �����. PARM� �

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

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

���. ��� �� � � ���� CRTSQLRPGI ��� DATFMT, DATSEP, TIMFMT � TIMSEP

120 IBM i: ����� �� SQL �����

|

|

|

|

|

Page 131: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

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

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

��. DATFMT ��� �� �� �(*MDY, *YMD, *DMY �� *JUL)� �� �� � �

��� ���� 940 - 2039 �� �� �� �� �� �� ���. �� �� � ��� ���� ��

���� DATFMT� IBM SQL � *ISO, *USA, *EUR �� *JIS � ��� ��� ���.

SQL ������ VARYING(2)� ��� ��� ���� VARYING(4)� ���� ����. LEN

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

��� ��� ��� RPG CCSID �� �����(��� ��). SQL DECLARE VARIABLE�� UCS-2

�� UTF-16�� ��� ��� �� �� CCSID� RPG� ��� ��� ��� CCSID� ����

�� � ����.

������ RPG �� (�����) ��� ��� 1� ��� ����. � � � SQL�� �� �

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

��. 1 �� 0 �� �� �� ���� �����.

������ EXTNAME� ����� EXTNAME(filename : fmtname : fieldtype)(�� fieldtype�

*ALL, *INPUT, *OUTPUT �� *KEY�)� ���� ����.

������ LIKEREC(intrecname)� ����� ����� � �� ���� ���� ����.

������ EXTDESC(literal)� ����� EXTDESC(constant)� ���� ����.

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

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

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

OVERLAY ��� ��� ���� ��� �� ������ � ���� ����� �� ��

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

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

SQL� ���� ILE RPG �������� 2� ��� �� ��:

ILE RPG�� SQL 2� �� � � ���� ��� ����.

�� �� � � �� � �� ��� ��� ���� SQLTYPE ��� ������. SQL �

����� � ��� � � ��� ILE RPG �� ���� �����. 2� ��� �� ���

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

BINARY �

��� �� ���

D MYBINARY S SQLTYPE(BINARY:50)

�� SQL ����� 121

|

|

|

Page 132: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

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

D MYBINARY S 50A

VARBINARY �

��� �� ���

D MYVARBINARY S SQLTYPE(VARBINARY:100)

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

D MYVARBINARY S 100A VARYING

�:

1. BINARY ��� ��� �� ��� 1 - 32766 �� ���.

2. VARBINARY ��� ��� �� ��� 1 - 32740 �� ���.

3. BINARY � VARBINARY ��� ��� ��� ���� ��� � ����.

4. SQLTYPE, BINARY � VARBINARY� � ��� ��� �� � ����.

5. SQLTYPE� �� 44 - 80 ��� �� ���.

6. BINARY �� VARBINARY� �� ��� ��� ���� �� 24�� �� S� ���� �

� � �� 25� ���� ���.

7. BINARY �� VARBINARY ��� ��� ��� ���� ���� �� 24� �� � ��

��� S� �� ���.

SQL� ���� ILE RPG �������� LOB ��� �� ��:

ILE RPG�� LOB(� �� �)� �� SQL �� � � ���� ��� ����.

�� �� � � �� � �� ��� ��� ���� SQLTYPE ��� ������. SQL �

����� � ��� � � ��� ILE RPG �� ��� �����. LOB ��� �� ���

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

SQL� ���� ILE RPG ������ LOB ��� ��:

ILE RPG ������ �� �� LOB ��� ��(CLOB, DBCLOB, BLOB)� �� ��� ���

�.

CLOB �

��� �� ���

D MYCLOB S SQLTYPE(CLOB:1000)

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

122 IBM i: ����� �� SQL �����

Page 133: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

D MYCLOB DSD MYCLOB_LEN 10UD MYCLOB_DATA 1000A

DBCLOB �

��� �� ���

D MYDBCLOB S SQLTYPE(DBCLOB:400)

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

D MYDBCLOB DSD MYDBCLOB_LEN 10UD MYDBCLOB_DATA 400G

BLOB �

��� �� ���

D MYBLOB S SQLTYPE(BLOB:500)

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

D MYBLOB DSD MYBLOB_LEN 10UD MYBLOB_DATA 500A

�:

1. BLOB � CLOB� �� 1 ≤ lob-length ≤ 16773100��.

2. DBCLOB� �� 1≤ lob-length ≤ 8386550��.

3. LOB ��� ��� ��� ���� ��� � ����.

4. LOB ��� ��� ��� �� ��� ���� ����. LOB �� ���� �� ���

���.

5. �� �� ��� LOB ��� ��� �� ��� ��� �� � ����.

6. SQLTYPE, BLOB, CLOB, DBCLOB� � ��� ��� �� � ����.

7. SQLTYPE� �� 44 - 80 ��� �� ���.

8. LOB� �� ��� ��� ���� �� 24�� �� ‘S’� ���� �� � �� 25�

���� ���.

9. LOB� ��� ���� ���� �� 24� �� � ����� S� �� ���.

10. LOB ��� ��� �� � ����.

SQL� ���� ILE RPG ������ LOB �� ���:

BLOB, CLOB � DBCLOB �� ����� �� ��� ���� ����. BLOB �� ���� ��

��� ����.

�� SQL ����� 123

Page 134: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

�: BLOB �� ��

��� �� ���

D MYBLOB S SQLTYPE(BLOB_LOCATOR)

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

D MYBLOB S 10U

�:

1. LOB �� ���� ��� ���� ��� � ����.

2. SQLTYPE, BLOB_LOCATOR, CLOB_LOCATOR, DBCLOB_LOCATOR� � ��� ���

�� � ����.

3. SQLTYPE� �� 44 - 80 ��� �� ���.

4. LOB �� ���� �� ��� ��� ���� �� 24�� �� ‘S’� ���� �� �

�� 25� ���� ���.

5. LOB �� ���� ��� ���� ���� �� 24� �� � ����� S� �� ��

�.

6. LOB �� ���� �� � ����.

SQL� ���� ILE RPG ������ LOB �� �� ��:

ILE RPG� �� CLOB �� �� ��� �� ��� ����. BLOB � DBCLOB �� �� ����

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

CLOB �� �� �

��� �� ���

D MY_FILE S SQLTYPE(CLOB_FILE)

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

D MY_FILE DSD MY_FILE_NL 10UD MY_FILE_DL 10UD MY_FILE_FO 10UD MY_FILE_NAME 255A

BLOB � DBCLOB �� ����� �� ��� ���� ����.

�:

1. LOB �� �� ��� ��� ���� ��� � ����.

2. SQLTYPE, BLOB_FILE, CLOB_FILE, DBCLOB_FILE� � ��� ��� �� � ���

�.

3. SQLTYPE� �� 44 - 80 ��� �� ���.

124 IBM i: ����� �� SQL �����

Page 135: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

4. LOB �� ��� �� ��� ��� ���� �� 24�� �� ‘S’� ���� �� � �

� 25� ���� ���.

5. LOB �� �� ��� ��� ���� ���� �� 24� �� � ����� ‘S’� ��

���.

6. LOB �� �� ��� �� � ����.

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

� ��� ��� xxx_FO ��� �� � ����.

v SQFRD (2)

v SQFCRT (8)

v SQFOVR (16)

v SQFAPP (32)

�� ��

LOB �� �� ��

SQL� ���� ILE RPG �������� XML ��� �� ��:

ILE RPG�� XML� SQL �� � � ���� ��� ����.

� �� � � �� �� � �� ��� ��� ���� SQLTYPE ��� ������. SQL

������ � ��� � � ��� ILE RPG �� ��� �����. XML ��� �� ���

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

SQL� ���� ILE RPG ������ XML ��� ��

ILE RPG ������ �� �� XML ��� ��� �� ��� ����.

XML AS CLOB �

��� �� ���

D MYXMLCLOB S SQLTYPE(XML_CLOB:3000)

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

D MYXMLCLOB DSD MYXMLCLOB_LEN 10UD MYXMLCLOB_DATA 3000A

XML AS DBCLOB �

��� �� ���

D MYXMLDBCLOB S SQLTYPE(XML_DBCLOB:400)

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

�� SQL ����� 125

|

|

|

|

|

|

|

|

|

|

|

|||

|

|

|

|

Page 136: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

D MYXMLDBCLOB DSD MYXMLDBCLOB_LEN 10UD MYXMLDBCLOB_DATA 400G

XML AS BLOB �

��� �� ���

D MYXMLBLOB S SQLTYPE(XML_BLOB:780)

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

D MYXMLBLOB DSD MYXMLBLOB_LEN 10UD MYXMLBLOB_DATA 780A

�:

1. XML_BLOB � XML_CLOB� �� 1 ≤ lob-length ≤ 16773100

2. XML_DBCLOB� �� 1≤ lob-length ≤ 8386550

3. XML ��� ��� ��� ���� ��� � ����.

4. XML ��� ��� ��� �� ��� ���� ����. XML �� ���� �� ���

���.

5. �� �� ��� XML ��� ��� �� ��� ��� �� � ����.

6. SQLTYPE, XML_BLOB, XML_CLOB, XML_DBCLOB� � ��� ��� �� � ��

��.

7. SQLTYPE� �� 44 - 80 ��� �� ���.

8. XML ��� ��� CCSID �� DECLARE VARIABLE�� �� ���� ��� � ���

�. ��� ��� SQL_XML_DATA_CCSID QAQQINI ��� �� ��� �� �����. �

QAQQINI ��� �� �� CCSID 1208��.

9. XML� �� ��� ��� ���� �� 24�� �� ‘S’� ���� �� � �� 25�

���� ���.

10. XML� ��� ���� ���� �� 24� �� � ����� S� �� ���.

11. XML ��� ��� �� � ����.

SQL� ���� ILE RPG ������ XML �� ��

XML �� ���� �� ��� ����.

XML �� �� �

��� �� ���

D MYXMLLOC S SQLTYPE(XML_LOCATOR)

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

126 IBM i: ����� �� SQL �����

|||

|

|

|

|

|||

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

Page 137: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

D MYXMLLOC S 10U

�:

1. XML �� ���� ��� ���� ��� � ����.

2. SQLTYPE, XML_LOCATOR� � ��� ��� �� � ����.

3. SQLTYPE� �� 44 - 80 ��� �� ���.

4. XML �� ���� �� ��� ��� ���� �� 24�� �� ‘S’� ���� �� �

�� 25� ���� ���.

5. XML �� ���� ��� ���� ���� �� 24� �� � ����� S� �� �

��.

6. XML �� ���� �� � ����.

SQL� ���� ILE RPG ������ XML �� �� ��

ILE RPG� �� XML �� �� ��� �� ��� ����.

XML �� �� �

��� �� ���

D MY_XMLFILE S SQLTYPE(XML_CLOB_FILE)

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

D MY_XMLFILE DSD MY_XMLFILE_NL 10UD MY_XMLFILE_DL 10UD MY_XMLFILE_FO 10UD MY_XMLFILE_NAME 255A

XML_BLOB_FILE � XML_DBCLOB_FILE �� �� ���� �� ��� ���� ����.

�:

1. XML �� �� ��� ��� ���� ��� � ����.

2. SQLTYPE, XML_BLOB_FILE, XML_CLOB_FILE, XML_DBCLOB_FILE� � ��� ���

�� � ����.

3. SQLTYPE� �� 44 - 80 ��� �� ���.

4. XML �� ��� �� ��� ��� ���� �� 24�� �� ‘S’� ���� �� � �

� 25� ���� ���.

5. XML �� �� ��� ��� ���� ���� �� 24� �� � ����� ‘S’� ��

���.

6. XML �� �� ��� �� � ����.

�� SQL ����� 127

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|||||

|

|

|

|

|

|

|

|

|

|

|

Page 138: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

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

� ��� ��� xxx_FO ��� �� � ����.

v SQFRD (2)

v SQFCRT (8)

v SQFOVR (16)

v SQFAPP (32)

SQL� ���� ILE RPG �������� ROWID �� ��:

ILE RPG�� SQL �� � ROWID� ���� ��� ����.

� �� � � �� �� � �� ��� ��� ���� SQLTYPE ��� ������. SQL

������ � ��� � � ��� ILE RPG �� ���� �����. ROWID ��� �� �

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

ROWID �

��� �� ���

D MY_ROWID S SQLTYPE(ROWID)

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

D MYROWID S 40A VARYING

�:

1. SQLTYPE, ROWID� � ��� ��� �� � ����.

2. ROWID ��� ��� ��� ���� ��� � ����.

3. SQLTYPE� �� 44 - 80 ��� �� ���.

4. ROWID� �� ��� ��� ���� �� 24�� �� ‘S’� ���� �� � �� 25�

���� ���.

5. ROWID� ��� ���� ���� �� 24� �� � ����� ‘S’� �� ���.

6. ROWID ��� ��� �� � ����.

SQL� ���� ILE RPG �������� �� � �� ��� �� ��:

ILE RPG�� SQL �� � �� ��� �� � � ���� ��� ����.

� �� � � �� �� � �� ��� ��� ���� SQLTYPE ��� ������. SQL

������ � ��� � � ��� ILE RPG �� ���� �����. �� � �� ��� �

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

128 IBM i: ����� �� SQL �����

|

|

|

|

|

|

|

|

|

|

|

Page 139: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

�� � �� ��� �

��� �� ���

D RS_LOC1 S SQLTYPE(RESULT_SET_LOCATOR)

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

D RS_LOC1 S 20I 0

�:

1. SQLTYPE, RESULT_SET_LOCATOR� � ��� ��� �� � ����.

2. �� � �� ��� ��� ��� ��� ���� ��� � ����.

3. SQLTYPE� �� 44 - 80 ��� �� ���.

4. �� � �� ���� �� ��� ��� ���� �� 24�� �� ‘S’� ���� �� �

�� 25� ���� ���.

5. �� � �� ���� ��� ���� ���� �� 24� �� � ����� ‘S’� ��

���.

6. �� � �� ��� ��� ��� �� � ����.

SQL� ���� ILE RPG �������� ��� �� ��

���� �� ��� �� �� ILE RPG �� ���� ��� ����� �� � ����. SQL

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

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

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

�� ��� BIGCHR� ���� �� ILE �� ����. SQL� BIGCHR� �� ��� ���

642� �� ����� �����.

DBIGCHR DS 642

�� ��� PEMPL� ��� EMPNO, FIRSTN, MIDINT, LASTNAME � DEPTNO� ��� ��

� � � � �� � � . P E M P L � � � � � � � � � � � � � � � � � . �� � � ,

CORPDATA.EMPLOYEE� �� �� EMPNO� �� � �� �� FIRSTN� ��� ���

����.

DPEMPL DSD EMPNO 01 06AD FIRSTN 07 18AD MIDINT 19 19AD LASTNA 20 34AD DEPTNO 35 37A

...C MOVE '000220' EMPNO

...

�� SQL ����� 129

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

Page 140: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

C/EXEC SQLC+ SELECT * INTO :PEMPLC+ FROM CORPDATA.EMPLOYEEC+ WHERE EMPNO = :EMPNOC/END-EXEC

SQL� � � QUALIFIED �� ��� �� ���� �� ��� �� � ����. � �� �

��� ��� ����� �� ��� ��� ������. �� ��, PEMPL.MIDINT� MIDINT�

���� �� �����. �� ��� QUALIFIED ��� �� �� ���� �� ����� �

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

� ��� ��� ����� �� �� � �� �� ��(QUALIFIED �� ��� QUALIFIED�

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

Dfststruct DSD sub1 4B 0D sub2 9B 0D sub3 20I 0D sub4 9B 0

Dsecstruct DS QUALIFIEDD sub1 4AD sub2 12AD sub3 20I 0D myvar 5AD sub5 20A

D myvar S 10I 0

secstruct.sub1� ��� ��� ���� ��� 4� �� ��� ����.

sub2� ��� ��� ���� � ��� SQL �� � � ����. �� �� � � QUALIFIED

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

myvar� �� ��� �� ����� �� ��� ��� �� �� � � �����. secstruct.myvar

� ���� �� QUALIFIED ��� �� ��� �����.

sub5� QUALIFIED �� ��� �� ��� secstruct� ��� ���� �� �� � ����.

������ LIKEDS ��� ��� ��� ��� ��� �����. ��� ��� ��� SQL �

���� SQL�� �� ��� ���� �� � ����. �� �� �� DS� ��� S2� ���

�� ��� �� ��� ��� S1� �� �� SQL�� DS.S1.S2� ��� ��� ���� ���

S2� �� � ��� � ���. S1.S2� ��� �� ��� ���� �� ������ S1.S2�

DS.S1.S2� �����. ��� �� �� ����� ����.

v ��� �� �� DS� �� � � ����.

v S1.S2� �� ���. �, S1.S2� ��� ����� ��� S1.S2� ��� �� S1 �� ��

� DS3.S0.S1.S2� ��� �� D3� �� �� �� ��� ���� � ���.

130 IBM i: ����� �� SQL �����

Page 141: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

D CustomerInfo DS QUALIFIEDD Name 20AD Address 50A

D ProductInfo DS QUALIFIEDD Number 5AD Description 20AD Cost 9P 2

D SalesTransaction...D DS QUALIFIEDD Buyer LIKEDS(CustomerInfo)D Seller LIKEDS(CustomerInfo)D NumProducts 10I 0D Product LIKEDS(ProductInfo)D DIM(10)

C/EXEC SQLC+ SELECT * INTO :CustomerInfo.Name, :Buyer.Name FROM MYTABLEC/END-EXEC

CustomerIn fo .Name� UALIFIED � � � � � � � � � � � � � � � � . Buyer .Name�

SalesTransaction.Buyer.Name�� �����.

SQL ���� ��� ��� ��� ���� ��� SQL��� SalesTransaction.Buyer.Name� ��

� ����. cost� � �� �� ��� SQL�� Product.Cost� �� � ����.

SalesTransaction� �� ��� SalesTransaction2� �� �� ��� ���� SQL��� �� � �

���. SQL��� ��� ��� ��� ���� ��� Buyer.Name� �� ��� �����.

SQL� ���� ILE RPG �������� ��� �� �� ��

��� �� �� �� DIM� ��� �� �� �� � �� ��� �����. � � � �

� ��� �� �� � �� � SQL FETCH� �� INSERT��� �� � ����.

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

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

v �� ���� ���� ���. �� FROM ��� 1�� �� TO � FROM ���� ��

� ���� � ���.

v ��� �� � �� � � ���� �� � � �� ���� CRTSQLRPGI ��(�� SET

OPTION�)� �� DATFMT, DATSEP, TIMFMT � TIMSEP ���� ���� �� ���� �

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

���� FETCH � INSERT � � �� ������ � �� ��� ���� �� �� �� �

����. ���� FETCH � INSERT� �� �� 1� �����.

�� ���� DEPARTMENT�� ��� �� �� ���� FETCH�� ��� DEPARTMENT

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

�� SQL ����� 131

Page 142: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

DDEPARTMENT DS OCCURS(10)D DEPTNO 01 03AD DEPTNM 04 32AD MGRNO 33 38AD ADMRD 39 41A

DIND_ARRAY DS OCCURS(10)D INDS 5I 0 DIM(4)...C/EXEC SQLC+ DECLARE C1 CURSOR FORC+ SELECT *C+ FROM CORPDATA.DEPARTMENTC/END-EXEC...

C/EXEC SQLC+ FETCH C1 FOR 10 ROWSC+ INTO :DEPARTMENT:IND_ARRAYC/END-EXEC

���� FETCH � INSERT� DIM ��� ��� �� ��� ���� ��� SQL���.

MyStructure(index).Mysubfield� �� �� ��� �� ��� �� ��� SQL�� ���� ����.

Dfststruct DS DIM(10) QUALIFIEDD sub1 4B 0D sub2 9B 0D sub3 20I 0D sub4 9B 0

C/EXEC SQLC+ FETCH C1 FOR 10 ROWS INTO :fststructC/END-EXEC

SQL� ���� ILE RPG �������� � �� �� ��

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

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

SQL ������ �� � � � ��� ��� ���� �� *NOCVTDT �� *CVTDT�

CRTSQLRPGI ��� OPTION ���� ���� ���� �� ����. *NOCVTDT� ��� ��

�� � � � ��� � � ���� ��� �����. *CVTDT� ��� ���� �� � �

� �� �� � � � ���� ��� ������ �� ��� �� �� ��/� ��� �

�� �����. *CVTDT� ILE RPG ������ ��� ����.

GRAPHIC �� VARGRAPHIC �� UCS-2 CCSID� ���� �� �� ��� ��� ���� UCS-2

CCSID� �����. GRAPHIC �� VARGRAPHIC �� UTF-16 CCSID� ���� �� �� �

�� ��� ���� UTF-16 CCSID� �����.

�� ��� � �� DEPARTMENT� ILE RPG ����� ��� �����. SQL �����

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

132 IBM i: ����� �� SQL �����

Page 143: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

FDEPARTMENTIP E DISK RENAME(ORIGREC:DEPTREC)

�: ILE RPG�� ��� ��� �� I/O � � ���� ���� ILE RPG ����� ��� �

� F-spec� ������. SQL�� ��� ��� �� I/O � � ���� ���� � ��

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

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

��� ���� �����. ����� ��� ����� �� � � �� ��� TDEPT� �

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

��.

DTDEPT E DS EXTNAME(DEPARTMENT)D DEPTN E EXTFLD(DEPTNAME)D ADMRD E EXTFLD(ADMRDEPT)

SQL� ���� ILE RPG ������ ��� �� ��� �� � �� �� ����

�� ��� �� INDARA� ���� � ��� ������ �� ��� ��� ��� �� ��

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

OPTION(*NOCVTDT)� ��� �� �� �� � � � ��� ���� �� � � ��

CRTSQLRPGI ��� DATFMT, DATSEP, TIMFMT � TIMSEP ���� ���� �� �� ��

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

�� ��� DEPARTMENT ��� ILE RPG ���� ���� ��� �� �� ���� �

����. �� �� ���� FETCH�� ��� 10�� �� ��� �� �� �����.

DDEPARTMENT E DS OCCURS(10)

C/EXEC SQLC+ DECLARE C1 CURSOR FORC+ SELECT *C+ FROM CORPDATA.DEPARTMENTC/END-EXEC

...

C/EXEC SQLC+ FETCH C1 FOR 10 ROWSC+ INTO :DEPARTMENTC/END-EXEC

� SQL � ILE RPG ��� � ��

������ � ��� �� ��� ��� � SQLTYPE � SQLLEN� �����. ��� ���

����� ��� �� ���� SQLTYPE� � SQLTYPE + 1��.

�� SQL ����� 133

Page 144: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

� 9. ��� SQL �� � � ��� ILE RPG ��

RPG �� � RPG �� ��� ���

SQLTYPE

��� ���

SQLLEN

SQL �� �

�� ��(���

��)

�� = n(n ≤ 32766) 452 n CHAR(n)

� �� v �� � S �� ��� �

�� ���� �� ���

�����.

v �� � S� ��� ��

��� �����.

v �� � S �� ��� �

�� ��� �����.

488 p(1���), s(2��

�)

NUMERIC(p, s)(p� �!�

� s� � �!� ��)

�� v ��� ��� � �!�(��

69-70)� ��� �� ���

�����.

v �� � P� ��� ��

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

v �� � P �� ��� �

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

v �� � P� ���

��� �����.

484 p(1���), s(2��

�)

DECIMAL(p, s)(p� �!�

� s� � �!��)

�� � �!�� �

�� 2��� 2�v � � � ��, �� �

B � ��� �� 2� ���

���� �� ��� �

����.

v �� � B � 1 - 4 ��

� �!�� ��� �� �

�� �����.

v �� � B � ��� ��

2� ��� ��� ��

���.

500 2 SMALLINT

�� � �!�� �

�� 4��� 2�v � � � ��, �� �

B � ��� �� 4� ���

���� �� ��� �

����.

v �� � B � 5 - 9 ��

� �!�� ��� �� �

�� �����.

v �� � B � ��� ��

4� ��� ��� ��

���.

496 4 INTEGER

134 IBM i: ����� �� SQL �����

Page 145: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

� 9. ��� SQL �� � � ��� ILE RPG �� (��)

RPG �� � RPG �� ��� ���

SQLTYPE

��� ���

SQLLEN

SQL �� �

2��� �� v � � � ��, �� �

I � ��� �� 2� ���

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

��.

v �� � I � �!� 5�

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

�.

v �� � I � ��� ��

2� ��� ��� ��

���.

500 2 SMALLINT

4��� �� v � � � ��, �� �

I � ��� �� 4� ���

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

��.

v �� � I � �!� 10�

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

�.

v �� � I � ��� ��

4� ��� ��� ��

���.

496 4 INTEGER

8��� �� v � � � ��, �� �

I � ��� �� 8� ���

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

��.

v �� � I � �!� 20�

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

�.

v �� � I � ��� ��

8� ��� ��� ��

���.

492 8 BIGINT

short float �� � = F, �� = 4 480 4 FLOAT(����)

long float �� � = F, �� = 8 480 8 FLOAT(���)

�� �� � = A �� ��,

� �!� ��, �� 1 -

32766 ��

452 n CHAR (n)(n� ���)

254��� �� �

� ��

�� � = A �� ��,

� �!� ��, �� ���

VARYING �� ��

��� *VAR �

448 n VARCHAR (n)(n� ���)

�� SQL ����� 135

Page 146: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

� 9. ��� SQL �� � � ��� ILE RPG �� (��)

RPG �� � RPG �� ��� ���

SQLTYPE

��� ���

SQLLEN

SQL �� �

1 - 254 ��� ��

�� ��

�� � = A �� ��,

� �!� ��, �� ���

VARYING �� ��

��� *VAR �

456 n VARCHAR (n)(n� ���)

��� v � � � ��, �� �

G � ��� �� b� ���

���� �� ��� �

����.

v �� � G � �� n� �

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

v �� � G � ��� ��

b� ��� ��� ��

���.

468 m GRAPHIC(m)(m = n ��

m = b/2)

�� ��� v � � � ��, �� �

G, ��� �� b �

VARYING ��� ���

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

��.

v �� � G, �� n �

VARYING ��� ���

�� ��� �����.

v �� � G, ��� �� b

� � *VAR� ���

��� �����.

464 m VARGRAPHIC(m)(m = n

�� m = (b-2)/2)

UCS-2 v � � � ��, �� �

C � ��� �� b� ���

���� �� ��� �

����.

v �� � C � �� n� �

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

v �� � C � ��� ��

b� ��� ��� ��

���.

468 m CCSID� 13488�

GRAPHIC(m)(m = n ��

m = b/2)

136 IBM i: ����� �� SQL �����

Page 147: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

� 9. ��� SQL �� � � ��� ILE RPG �� (��)

RPG �� � RPG �� ��� ���

SQLTYPE

��� ���

SQLLEN

SQL �� �

�� UCS-2 v � � � ��, �� �

C, ��� �� b �

VARYING ��� ���

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

��.

v �� � C, �� n �

VARYING ��� ���

�� ��� �����.

v �� � C, ��� �� b

� � *VAR� ���

��� �����.

464 m CCSID� 13488�

VARGRAPHIC(m)(m = n

�� m = b/2)

�� v �� � D, � f �

DATFMT ��� ��� s�

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

�.

v �� � D, �� 31-34�

�, �� 35� ���� ��

� ��� �����.

384 n DATE DATFMT(f)

DATSEP(s)1

� v �� � T, � f �

TIMFMT ��� ��� s�

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

�.

v �� � T, �� 31-34�

� � �� 35� ���� �

�� ��� �����.

388 n TIME TIMFMT(f)

TIMSEP(s)1

� � �� � Z 392 n TIMESTAMP1SQL� CRTSQLRPGI ��� ��� DATE/TIME �� ��� ��/� ���� ����. ��� ��� SQL �

��� ��� ��� ���� ��� �� DATE/TIME ��� �����.

�� ��� ��� ��� SQL �� � � � � RPG �� � � �� � ����.

� 10. ��� RPG ��� ��� SQL �� �

SQL �� � RPG �� � �

SMALLINT �� ����. �� 40� I� � ��

� 5 �� �� 42� 0� ����.

��

�� ����. �� 40� B� � ��

� 4 �� �� �� 42� 0� ���

�.

�� SQL ����� 137

Page 148: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

� 10. ��� RPG ��� ��� SQL �� � (��)

SQL �� � RPG �� � �

INTEGER �� ����. �� 40� I� � ��

� 10�� �� �� 42� 0� ���

�.

��

�� ����. �� 40� B� � ��

� 5 - 9 �� �� �� 42� 0� �

���.

BIGINT �� ����. �� 40� I� � ��

� 20�� �� �� 42� 0� ���

�.

DECIMAL �� ����. �� 40� P� ���

��(���� �� ��)� ��� ��

41, 42� 0 - 30� ����.

��

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

�� ��� 16(��� 30)� �� ��

�� 30��.

NUMERIC �� ����. �� 40� S� ���

��(���� ��)� ��� �� 41,

42� 0 - 30� ����.

�� ��� 30(��� 30)� �� ��

�� 30��.

DECFLOAT ���� �� ���� ��

FLOAT(����) �� ����. �� 40� F� � �

�� 4 ���.

FLOAT(���) �� ����. �� 40� F� � �

�� 8�� ���.

CHAR(n) �� ����. �� 40� A �� ��

� � �� 41, 42� ��� ����.

��

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

��

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

�.

n� 1 - 32766 ��� � � ����.

CHAR(n) �� ��� ���� �� �� �

����.

n� 1 - 32766 ��� � � ����.

VARCHAR(n) �� ����. �� 40� A �� ��

� � �� 44 - 80� VARYING� �

���.

n� 1 - 32740 ��� � � ����.

CLOB ���� �� SQLTYPE ��� ��� CLOB�

������.

138 IBM i: ����� �� SQL �����

Page 149: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

� 10. ��� RPG ��� ��� SQL �� � (��)

SQL �� � RPG �� � �

GRAPHIC(n) �� ����. �� 40� G� ����.

��

�� 36� G� �� ��� ��� �

��.

n� 1 - 16383� � � ����.

VARGRAPHIC(n) �� ����. �� 40� G� � �

� 44 - 70� VARYING� ����.

n� 1 - 16370 ��� � � ����.

DBCLOB ���� �� SQLTYPE ��� ���

DBCLOB� ������.

BINARY ���� �� SQLTYPE ��� ��� BINARY�

������.

VARBINARY ���� �� SQLTYPE ��� ���

VARBINARY� ������.

BLOB ���� �� SQLTYPE ��� ��� BLOB�

������.

DATE �� �

��

�� 40� D� �� �� ����.

��

�� 36� D� �� ��� ��� �

��.

�� *USA, *JIS, *EUR �� *ISO�

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

*YMD, *DMY �� *MDY� �� ��

� 8 ���� ���. �� *JUL�

�� ��� 6 ���� ���.

TIME �� �

��

�� 40� T� �� �� ����.

��

�� 36� T� �� ��� ��� �

��.

��� 6 ���� ���. � ���

�� ��� 8 ���� ���.

TIMESTAMP �� �

��

�� 40� Z� �� �� ����.

��

�� 36� Z� �� ��� ��� �

��.

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

� ����� ��� 26 ���� ��

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

�� ����.

XML ���� �� SQLTYPE ��� ��� XML� �

�����.

�� SQL ����� 139

||||

Page 150: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

� 10. ��� RPG ��� ��� SQL �� � (��)

SQL �� � RPG �� � �

DATALINK ���� ��

ROWID ���� �� SQLTYPE ��� ��� ROWID� �

�����.

�� � �� ��� ���� �� SQLTYPE ��� ��� �� �

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

ILE RPG �� �� � ���� �� �

ILE RPG� ���� ���� �� �� � � � ����.

ILE RPG� �� ��� ��� ��� ��� �����. �� 2� ��� ��� ���� �

� ��� ���� �� ���� �� ��� ���� � ���(�� �� �� 2��� ��

�). SQL ��� ���� ��� ��� �� �� ����.

SQL� ���� ILE RPG �������� ����� �� ��

����� ��� ��� 5 �� 2� ���(2���).

����� �� ��� 4,0� �� � � ��� �� ��� DIM� ��� �� � ����.

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

�� ��� � ����.

�� ��

��� �� ��

5 ���� �SQL� ���� ������ ����� ���

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

��.

: SQL� ���� ILE RPG �������� ����� �� ��

ILE RPG�� ����� ��� ���� �� ��� ����.

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

C/EXEC SQL FETCH CLS_CURSOR INTO :CLSCD,C+ :DAY :DAYIND,C+ :BGN :BGNIND,C+ :END :ENDINDC/END-EXEC

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

D CLSCD S 7D DAY S 5I 0D DAYIND S 5I 0

140 IBM i: ����� �� SQL �����

||||

Page 151: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

D BGN S 8AD BGNIND S 5I 0D END S 8D ENDIND S 5I 0

: SQL� ���� ILE RPG ������ �� � �� ��� �� SQLDA

ILE RPG� �� � � ��� �� SQL ��� �(SQLDA)� �� ��� ����.

C/EXEC SQL INCLUDE SQLDAC/END-EXECDDEPARTMENT DS OCCURS(10)D DEPTNO 01 03AD DEPTNM 04 32AD MGRNO 33 38AD ADMRD 39 41A...

DIND_ARRAY DS OCCURS(10)D INDS 5I 0 DIM(4)...C* setup number of sqlda entries and length of the sqldaC eval sqld = 4C eval sqln = 4C eval sqldabc = 336C*C* setup the first entry in the sqldaC*C eval sqltype = 453C eval sqllen = 3C eval sql_var(1) = sqlvarC*C* setup the second entry in the sqldaC*C eval sqltype = 453C eval sqllen = 29C eval sql_var(2) = sqlvar...C*C* setup the forth entry in the sqldaC*C eval sqltype = 453C eval sqllen = 3C eval sql_var(4) = sqlvar

...C/EXEC SQLC+ DECLARE C1 FORC+ SELECT *C+ FROM CORPDATA.DEPARTMENTC/END-EXEC...

C/EXEC SQLC+ FETCH C1 FOR 10 ROWSC+ USING DESCRIPTOR :SQLDAC+ INTO :DEPARTMENT:IND_ARRAYC/END-EXEC

�� SQL ����� 141

Page 152: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

: SQL� ���� ILE RPG ������ � SQL

ILE RPG�� � SQL� ���� �� ��� ����.

D**************************************************D* Declare program variables. *D* STMT initialized to the *D* listed SQL statement. *D**************************************************D EMPNUM S 6AD NAME S 15AD STMT S 500A INZ('SELECT LASTNAME -D FROM CORPDATA.EMPLOYEE WHERE -D EMPNO = ?')

...

C*************************************************************C* Prepare STMT as initialized in declare section *C*************************************************************C/EXEC SQLC+ PREPARE S1 FROM :STMTC/END-EXECC*C*************************************C* Declare Cursor for STMT *C*************************************C/EXEC SQLC+ DECLARE C1 CURSOR FOR S1C/END-EXECC*C*****************************************************C* Assign employee number to use in select statement *C*****************************************************C eval EMPNUM = '000110'

C**********************C* Open Cursor *C**********************C/EXEC SQLC+ OPEN C1 USING :EMPNUMC/END-EXECC*C***********************************************C* Fetch record and put value of *C* LASTNAME into NAME *C***********************************************C/EXEC SQLC+ FETCH C1 INTO :NAMEC/END-EXEC...

C********************************C* Program processes NAME here *C********************************...C******************C* Close cursor *

142 IBM i: ����� �� SQL �����

Page 153: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

C******************C/EXEC SQLC+ CLOSE C1C/END-EXEC

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

REXX ����� ������ ��� ���. ��� � REXX ������ ���� ��� ����

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

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

*EXECSQL� �� � ����.

1. STRREXPRC CL ��� CMDENV ���

2. ADDRESS REXX ��� � �� ���

STRREXPRC CL �� �� ADDRESS REXX ��� �� �� ��� REXX/400 ����� ���

�� � REXX/400 ��� ��� ������.

�: � ��� ���� 210 ���� �� ���� � ���� ���� ��� ���� ���.

�� ��

2 ���� �SQL� ���� ����� ��

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

�� ��

168 ���� ��� ���: i� DB2 ��� ���

i� DB2�� ���� ��� ��� SQL�� ���� �� ��� � ������ ��� �

���.

202 ���� ��: REXX ���� SQL��

� �� ���� REXX ����� ��� ����.

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

SQL �� �(SQLCA)� ���� �� SQL/REXX ������ �� ���� �����.

INCLUDE SQLCA�� ���� ��� ���� ����. SQLCA� SQLCODE � SQLSTATE �

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

�. ������ SQLCODE �� SQLSTATE �� ��� �� SQL�� ������ �� �

����.

SQL/REXX �������� ��� SQL ��� � � ��� SQLCA� �����. ���

SQL/REXX ������ ��� �� �� ��� ��� ���� SQLCA� �� �������.

SQLCA� �� SQL/REXX ������ ������ ��� ��� �� �����.

�� SQL ����� 143

Page 154: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

SQLCODE

1� SQL �� �

SQLERRMC

�� � � �� ��

SQLERRP

�� �(��� �� ���� ��� ��� ��� ��� ��)

SQLERRD.n

�� ��� �� �� 6�� ��(n� 1 - 6 ��� ���)

SQLWARN.n

� ��� �� �� 7�� ��(n� 0 - 10 ��� ���)

SQLSTATE

�� SQL �� �

�� ��

SQL �� �

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

SQL ��� ��� � �� � � ����. ��� ALLOCATE DESCRIPTOR�� ��� ���

��. �� ��� SQL ��� �(SQLDA) ��� ��� �����. ��� SQLDA ��� ��

�� �����. �� ���� REXX�� ���� ����.

�� ���� SQLDA� �� � ����.

v EXECUTE...USING DESCRIPTOR descriptor-name

v FETCH...USING DESCRIPTOR descriptor-name

v OPEN...USING DESCRIPTOR descriptor-name

v CALL...USING DESCRIPTOR descriptor-name

v DESCRIBE statement-name INTO descriptor-name

v DESCRIBE TABLE host-variable INTO descriptor-name

SQLCA�� �� ������ � ��� SQLDA� �� � ��� SQLDA� �� ��� �� � �

���.

��� SQLDA� �� �� ��� REXX �� �� ���� ����(�� �� ��� �� SQL

�� descriptor-name�). �� � ��� ���. �, � ���� � �� ���� ���� �

���. SQL/REXX ������ ��� � ����� �� SQLDA� �� ���� �����.

INCLUDE SQLDA�� ���� ��� ���� ����.

SQL/REXX �������� ��� SQL ��� � � ��� SQLDA� �����. ���

SQL/REXX ������ ��� �� �� ��� ��� ���� SQLDA� �� �������.

144 IBM i: ����� �� SQL �����

Page 155: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

�� ��� DESCRIBE, DESCRIBE TABLE �� PREPARE INTO� �� ������ �����.

stem.n.SQLNAME

�� ��� �� n�� �� ����.

EXECUTE...USING DESCRIPTOR, OPEN...USING DESCRIPTOR, CALL...USING DESCRIPTOR

�� FETCH...USING DESCRIPTOR� �� ��� �� ��� ������ ��� ���.

�� ��� DESCRIBE, DESCRIBE TABLE �� PREPARE INTO� �� ������ �

����.

stem.SQLD

SQLDA� ��� �� �� �� � � ���.

stem.n.SQLTYPE

n�� � � �� � � ���� ����(�: �� � � stem.1.SQLTYPE� ��).

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

400/401

NUL� �� ��� ���

404/405

BLOB ��� ��

408/409

CLOB ��� ��

412/413

DBCLOB ��� ��

460/461

NUL� �� �� ���

476/477

PASCAL L ���

496/497

� ��(���� 0�� �)

500/501

� ��(���� 0�� �)

504/505

DISPLAY SIGN LEADING SEPARATE

904/905

ROWID

908/909

VARBINARY ��� ��

�� SQL ����� 145

Page 156: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

912/913

BINARY ��� ��

916/917

BLOB �� �� ��

920/921

CLOB �� �� ��

924/925

DBCLOB �� �� ��

960/961

BLOB �� ���

964/965

CLOB �� ���

968/969

DBCLOB �� ���

972 �� � �� ���

988/989

XML ��� ��

996/997

�� �� � ��� ��

2452/2453

XML �� ���

stem.n.SQLLEN

SQLTYPE� DECIMAL �� NUMERIC �� � � ���� �� �� ��� �� ���

stem.n.SQLDATA� ���� ����.

stem.n.SQLLEN.SQLPRECISION

�� � � DECIMAL �� NUMERIC� �� ��� ���� �� ����.

stem.n.SQLLEN.SQLSCALE

� � DECIMAL �� NUMERIC� �� ��� ���� �� ����.

stem.n.SQLCCSID

��� �� n�� �� CCSID��.

EXECUTE...USING DESCRIPTOR �� OPEN...USING DESCRIPTOR� �� ��� �� �

�� ������ ��� �� �� ��� FETCH...USING DESCRIPTOR� �� ��

���� �����. �� ��� DESCRIBE, DESCRIBE TABLE �� PREPARE INTO� �

�� ���� ����.

146 IBM i: ����� �� SQL �����

||

|

|

|

|

Page 157: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

stem.n.SQLDATA

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

� �� SQLTYPE, SQLLEN, SQLPRECISION � SQLSCALE� ��� ���� �����.

stem.n.SQLIND

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

�� ��

SQL ��� �

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

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

REXX ����� �� �� SQL�� EXECSQL(� �� ��)� � � �� �� ��� �����

�.

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

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

�:

EXECSQL “COMMIT”

� ��� � ���.

rexxvar = “COMMIT”EXECSQL rexxvar

��� ��� REXX ��� ����. �� ��, �� �� � ��� REXX�� �� � ��� �

��� ��(;)� ���� � ����. �� REXX��� ���� � ���� �� � ����.

�:

'EXECSQL COMMIT'

�� SQL ����� 147

Page 158: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

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

ALTER FUNCTION

ALTER PROCEDURE

ALTER SEQUENCE

ALTER TABLE

CALL 2

CLOSE

COMMENT

COMMIT

CREATE ALIAS

CREATE FUNCTION

CREATE INDEX

CREATE PROCEDURE

CREATE SCHEMA

CREATE SEQUENCE

CREATE TABLE

CREATE TRIGGER

CREATE TYPE

CREATE VIEW

DECLARE CURSOR 2

DECLARE GLOBAL TEMPORARY TABLE

DELETE 2

DESCRIBE

DESCRIBE TABLE

DROP

EXECUTE

EXECUTE IMMEDIATE

FETCH 1

GRANT

INSERT 1

LABEL

LOCK TABLE

OPEN

PREPARE

REFRESH TABLE

RELEASE SAVEPOINT

RENAME

REVOKE

ROLLBACK

SAVEPOINT

SET CURRENT DECFLOAT ROUNDING MODE

SET CURRENT IMPLICIT XMLPARSE OPTION

SET ENCRYPTION PASSWORD

SET OPTION 3

SET PATH

SET SCHEMA

SET TRANSACTION

SET variable 2

UPDATE 2

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

ALLOCATE CURSOR

ALLOCATE DESCRIPTOR

ASSOCIATE LOCATORS

BEGIN DECLARE SECTION

CONNECT

DEALLOCATE DESCRIPTOR

DECLARE PROCEDURE

DECLARE STATEMENT

DECLARE VARIABLE

DESCRIBE CURSOR

DESCRIBE INPUT

DESCRIBE PROCEDURE

DISCONNECT

END DECLARE SECTION

FREE LOCATOR

GET DESCRIPTOR

GET DIAGNOSTICS

HOLD LOCATOR

INCLUDE

MERGE

RELEASE

SELECT INTO

SET CONNECTION

SET CURRENT DEGREE

SET DESCRIPTOR

SET RESULT SETS

SET SESSION AUTHORIZATION

SIGNAL

VALUES INTO

WHENEVER4

148 IBM i: ����� �� SQL �����

||

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

||||||||||||||||||||||||

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|||||||||||||||

Page 159: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

1. � ���� ���� ��� ���� ����.

2. �� ���� ��� ��� ��� �� ���� �� �� � ����. �� ����

PREPARE � EXECUTE� �� � ���.

3. SET OPTION �� REXX ����� ��� SQL� ��� ���� �� �� � ��� ��

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

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

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

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

SQL�� ���� ������ SQL ��(--)� REXX ��� �� � ����.

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

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

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

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

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

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

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

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

� �(.)� ��� �� �� REXX ��� ��� ��� �� � ����. ��� 64� �� �

��.

���� ‘SQL’, ‘RDI’, ‘DSN’, ‘RXSQL’ �� ‘QRW’� � � ����.

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

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

REXX�� �(null) ���(��� 0� ���)� � �(��� ����� ��� �)� ���� ����.

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

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

REXX ����� � �� ���� ��� � ����.

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

WHENEVER�� SQL/REXX ������� ���� ����. ��� �� � ��� �� �

����.

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

�� SQL ����� 149

Page 160: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

v ����� ��� ��� �� � � ��(SQL/REXX ������ ��� ��� � )� ���

� �� � SQL� �� REXX SQLCODE �� SQLSTATE �� ��

v �� � � ��� ���� �� � SQL� �� REXX RC �� ��. EXECSQL ��� �� �

��� RC ��� �� ��� �����.

0 ���� �������.

+10 SQL �� �����.

-10 SQL ��� �����.

-100 SQL/REXX ����� ��� �����.

�� ����� �� �� SQL/REXX ������ ��� �� � �� ���� �� �

����.

v SIGNAL ON ERROR � SIGNAL ON FAILURE �� ��(�� RC �)� ���� �� �

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

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

REXX� �� ��� �� ���� ����.

LOB, XML, ROWID, 2� � �� � �� ��� ��� ��� REXX�� ���� ����. � �

�� ������ ��� ���� �����. ��� �� ��� ��� BEGIN DECLARE SECTION

� � END DECLARE SECTION�� ���� ����.

SQL� �� �� ��� �� ��� ��(:)� �� ���.

SQL/REXX ������ ���� ����� ���� ���� �� �� ���� ��� ����

�. �:

a = 1b = 2EXECSQL 'OPEN c1 USING :x.a.b'

� x.1.2� ��� SQL� �����.

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

REXX� �� ��� ��� ����.

��� ��(EXECUTE� �� OPEN�� ’USING host variable’�� ��� ��� ��)� ��

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

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

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

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

150 IBM i: ����� �� SQL �����

|

|

|

Page 161: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

� 11. REXX�� ��� ��� �� � ��

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

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

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

��� �� 496/497 INTEGER

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

��.

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

2147483647�� ��� -2147483647�� � ��

��.

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

m� ��� � �!���. n� � ��� �

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

��� 484/485 DECIMAL(m,n)

�� �� �� ���� � ����(�� �

� ’E’ �� ’e’, ����� � �� ����

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

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

�� � 480/481 DOUBLE PRECISION

� ����� ��� � ��� n� �� �� �

� � ���(’) �� � ���(″)� ��� ��

���.

�� � ���(’)� � ���� ����� ��

X �� x� � � ���(’)� � ���(″)� �

�� �����. X �� x� � ����� ��

� � ���� ��� 2n��. ��� ��� ��

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

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

����� ��� � �� ��� n� �����.

�� �� �� ��� 448/449 VARCHAR(n)

1� �� �� �� � � � ���(’) �� �

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

v G, g, N �� n�� � �� �����. � �

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

SO(x’0E’) ��� ���. � ��� ��� ���

�� 2�� n�� ��� ��� ���. ����

SI(X’0F’) ��� � ��� �� � ���(� �

���� � � ���� ��� ��)� ��

���.

v �� GX, Gx, gX �� gx� ���� ���

� ��� �� � ���� SO(x’0E’) ��� �

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

� 2�� n�� ��� ��� ���. ����

SI(X’0F’) ��� � ��� �� � ���(� �

���� � � ���� ��� ��)� ��

���. GX� ����� ��� � ���� ��

� 4n��. ��� ��� 4� ��� �� ��

� ��� 16� ����.

�� �� ��� ��� 464/465 VARGRAPHIC(n)

�� SQL ����� 151

Page 162: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

� 11. REXX�� ��� ��� �� � �� (��)

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

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

������.1 �� � ��� �� �� �� ���� X’0E’ SO ���� � � ��� �� �� �� ���� X’0F’ SI ����.

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

� ��� ��(�, FETCH�� ‘INTO host variable’�� ��� ��� ��)� �� � � ��

��� ����.

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

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

v �� G �� ������, � ������ � SO/SI ��� �� ��� �� ����.

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

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

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

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

v �� � �� � �� ��� ��� �� �� �� ���� �� ����. ‘E’� ����

�.

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

���� ��� ���� � ��� � � ��� ���� ��� ���� �’�� �� ���. ��

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

�:

stringvar = '100'

� REXX� stringvar ��� �� 100( � ��� ��)� ����� ����� ���. �� SQL/REXX

������ �� �� 100�� ���� SQL� �����.

��

stringvar = “'“100”'”

� REXX� stringvar ��� �� ‘100’( � ��� ��)� ����� ����� ���. �� SQL/REXX

������ �� ��� 100�� ���� SQL� �����.

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

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

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

�� ���.

152 IBM i: ����� �� SQL �����

Page 163: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

�� ��

��� �� ��

5 ���� �SQL� ���� ������ ����� ���

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

��.

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

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

�� ��

2 ���� �SQL� ���� ����� ��

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

SQL ����� �� ���

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

� ���.

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

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

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

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

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

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

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

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

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

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

��� ��� ����.

�:

1. � �� �� � ��� �����.

2. SQL�� ��� ����� SQL��� ��� �� �� ��� �� ��� �� �� �

� ���(� � *OBJOPR). SQL�� ���� ��� �� ��� ��� � �����.

3. RDB ���� CRTSQLxxx ��� ���� �� �� ������ ��� � ��

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

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

� CALL�� SQL ����� �� � ��� ����. �� SQL�� ��(�: DECLARE�) SQL

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

�� SQL ����� 153

Page 164: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

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

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

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

v CRTSQLxxx� �� OPTION(*SOURCE *XREF)(�� xxx=CBL, PLI �� RPG)

v CRTSQLxxx� �� OPTION(*XREF) OUTPUT(*PRINT)(�� xxx=CI, CPPI, CBLI �� RPGI)

�� ��

����� �����

����� �� �

i5/OS� DB2 SQL ��

SQL ������ ��

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

� ��� �� �� � ILE ������ ���� � ��� ��� �� �� ����.

PL/I, C � C++ � ����� SQL�� CRTSQLPLI, CRTSQLCI � CRTSQLCPPI ��� MARGINS

���� ��� �� ��� ���. MARGINS ���� � ��� ���� ����� ��

���� �����.

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

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

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

�.

SQL INCLUDE�� ��� CRTSQLxxx ��� INCFILE �� INCDIR ���� �� ��� ��

� 2� � � � ����. SQL INCLUDE�� ��� �� �� � ��� ��� ��� ��

�. ��� �� �� ����� INCLUDE�� �� � ��� ����� ���� SQL��

� � �� � ����.

� ��� ������� �� INCFILE ���� ��� SQL INCLUDE�� ��� �� ���

�. � ��� ��� ������� �� INCDIR ���� �����. �� ��� INCLUDE��

���� �� ������ �� �� ����� �����. �� ��� �� �� INCLUDE�� ��

� ��� INCDIR �� �����. �� ��� �� �� ������ �� �� ����� �

����. INCLUDE�� �� ��� ���� �� ������ INCDIR �� �����. INCLUDE

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

��� DBCS ��� ����� ��� �� ��� �� � ��� ��� CCSID ���.

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

����. ��� DATFMT, COMMIT � NAMING� �� ��� �����. �� ���

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

154 IBM i: ����� �� SQL �����

Page 165: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

�: ����� ��� SET OPTION�� �� � �� �� ���� SET OPTION�� �� �����.

CRTSQLRPGI ��� RPG ����� ��(RPGPPOPT) ����� RPG ������ ���� �

�� ��� ����. *LVL1 �� *LVL2� ��� �� SQL ������ ���� �� RPG ���

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

���� �� � ����. ����� �� QTEMP� QSQLPRE ��� ����. � �� SQL

������ �� �����. SQL ������� ���� CCSID� QSQLPRE� CCSID��.

�� ��

SET OPTION

Create SQL ILE RPG Object(CRTSQLRPGI) ��

SQL ����� � �� CCSID

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

SQL INCLUDE� �� � �� �� �� �� 1� �� CCSID� �����. �� �� 1�

�� CCSID� �� � ��� ��� ����.

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

���. �� ��, �� ��(¬)� CCSID 500� ’BA’X� ����. �� � ��� CCSID� 500��

SQL��� �� ��(¬)� ’BA’X� �� ��� ����� �� � ���.

� �� CCSID� 65535�� SQL� CCSID� 37� ��� �� ��� �����. �� SQL� ’5F’X

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

SQL ����� �

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

���:

� ���� CRTSQLxxx ��� PRTFILE ���� �� ��� ��� ��� �����.

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

v ����� ��

CRTSQLxxx ��� ��� ����.

v ����� �

� � � ����� ��� ������ �� �� ��� �����(��� ��� ��

� ��).

v ����� �� ��

*XREF� OPTION ���� ��� �� � � � �� �� ���� �����. � ������

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

�� SQL ����� 155

Page 166: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

v ����� ��

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

��� ��� �� � ��� CCSID � 65535� �����. ��� ��� ��� ��� � ��

�� ����.

SQL ������ ��� �� � �� �:

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

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

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

� � ��� TOSRCFILE ���� CRTSQLxxx ��� �����. C � C++ � ��� ��

�� ��� QTEMP ����� �� QSQLTEMP��(ILE RPG� �� QSQLTEMP1). C � C++

� �� *CALC� � � ��� ����� � � ��� �� ��� 92 ���� QSQLTEMP�

�����. �� ��� 92�� C �� C++ � ��� �� � � ���� QSQLTxxxxx(

�� xxxxx� �� ���)� ����. � � �� ��� ��� CRTSQLxxx ��� PGM ��

OBJ ���� ��� ��� �����. � ��� ���� �� �� ���� ��� �� �

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

�� �����.

������� � ��� QTEMP� � � ��� ��� ���� ����� �� ����� � �

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

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

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

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

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

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

SQL ������ CRTSRCPF ��� ��� � � ��� ����. � ��� �� �� �

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

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

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

�� SQL ����� � :

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

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

v ILE ������ �� *SOURCE (*SRC) � *XREF ��� CRTSQLxxx ��� OPTION �

��� ������.

156 IBM i: ����� �� SQL �����

Page 167: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

v ILE ������ �� OPTION(*XREF) � OUTPUT(*PRINT)� CRTSQLxxx ��� ������.

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

xxxxST1 VxRxMx yymmdd Create SQL COBOL Program CBLTEST1 08/06/07 11:14:21 Page 1Source type...............COBOLProgram name..............CORPDATA/CBLTEST1Source file...............CORPDATA/SRCMember....................CBLTEST1To source file............QTEMP/QSQLTEMP(1)Options...................*SRC *XREF *SQLTarget release............VxRxMxINCLUDE file..............*SRCFILECommit....................*CHGAllow copy of data........*YESClose SQL cursor..........*ENDPGMAllow blocking............*READDelay PREPARE.............*NOGeneration level..........10Printer file..............*LIBL/QSYSPRTDate format...............*JOBDate separator............*JOBTime format...............*HMSTime separator ...........*JOBReplace...................*YESRelational database.......*LOCALUser .....................*CURRENTRDB connect method........*DUWDefault collection........*NONEDynamic default

collection..............*NOPackage name..............*PGMLIB/*PGMPath......................*NAMINGSQL rules.................*DB2User profile..............*NAMINGDynamic user profile......*USERSort sequence.............*JOBLanguage ID...............*JOBIBM SQL flagging..........*NOFLAGANS flagging..............*NONEText......................*SRCMBRTXTSource file CCSID.........65535Job CCSID.................65535Decimal result options:Maximum precision.......31Maximum scale...........31Minimum divide scale....0

DECFLOAT rounding mode....*HALFEVENCompiler options..........*NONE(2) Source member changed on 06/06/00 10:16:44

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

2 � ��� �� �� ��� ����.

�� 2. � COBOL ����� � �

�� SQL ����� 157

Page 168: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

xxxxST1 VxRxMx yymmdd Create SQL COBOL Program CBLTEST1 08/06/07 11:14:21 Page 2(1)Record *...+... 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 (2)SEQNBR (3)Last Change

1 IDENTIFICATION DIVISION. 1002 PROGRAM-ID. CBLTEST1. 2003 ENVIRONMENT DIVISION. 3004 CONFIGURATION SECTION. 4005 SOURCE-COMPUTER. IBM-AS400. 5006 OBJECT-COMPUTER. IBM-AS400. 6007 INPUT-OUTPUT SECTION. 7008 FILE-CONTROL. 8009 SELECT OUTFILE, ASSIGN TO PRINTER-QPRINT, 90010 FILE STATUS IS FSTAT. 100011 DATA DIVISION. 110012 FILE SECTION. 120013 FD OUTFILE 130014 DATA RECORD IS REC-1, 140015 LABEL RECORDS ARE OMITTED. 150016 01 REC-1. 160017 05 CC PIC X. 170018 05 DEPT-NO PIC X(3). 180019 05 FILLER PIC X(5). 190020 05 AVERAGE-EDUCATION-LEVEL PIC ZZZ. 200021 05 FILLER PIC X(5). 210022 05 AVERAGE-SALARY PIC ZZZZ9.99. 220023 01 ERROR-RECORD. 230024 05 CC PIC X. 240025 05 ERROR-CODE PIC S9(5). 250026 05 ERROR-MESSAGE PIC X(70). 260027 WORKING-STORAGE SECTION. 270028 EXEC SQL 280029 INCLUDE SQLCA 290030 END-EXEC. 300031 77 FSTAT PIC XX. 310032 01 AVG-RECORD. 320033 05 WORKDEPT PIC X(3). 330034 05 AVG-EDUC PIC S9(4) USAGE COMP-4. 340035 05 AVG-SALARY PIC S9(6)V99 COMP-3. 350036 PROCEDURE DIVISION. 360037 *************************************************************** 370038 * This program will get the average education level and the * 380039 * average salary by department. * 390040 *************************************************************** 400041 A000-MAIN-PROCEDURE. 410042 OPEN OUTPUT OUTFILE. 420043 *************************************************************** 430044 * Set up WHENEVER statement to handle SQL errors. * 440045 *************************************************************** 450046 EXEC SQL 460047 WHENEVER SQLERROR GO TO B000-SQL-ERROR 470048 END-EXEC. 4800

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

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

2 � ���� ��� ���. �� � ����(SEU)� ��� � ��� �� � ���� ���

�.

3 � ��� �� �� ��� ����. � ��� ��� ���� ��� �� �� ��� � ��� ��

���.

158 IBM i: ����� �� SQL �����

Page 169: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

xxxxST1 VxRxMx yymmdd Create SQL COBOL Program CBLTEST1 08/06/07 11:14:21 Page 3Record *...+... 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 SEQNBR Last change

49 *************************************************************** 490050 * Declare cursor * 500051 *************************************************************** 510052 EXEC SQL 520053 DECLARE CURS CURSOR FOR 530054 SELECT WORKDEPT, AVG(EDLEVEL), AVG(SALARY) 540055 FROM CORPDATA.EMPLOYEE 550056 GROUP BY WORKDEPT 560057 END-EXEC. 570058 *************************************************************** 580059 * Open cursor * 590060 *************************************************************** 600061 EXEC SQL 610062 OPEN CURS 620063 END-EXEC. 630064 *************************************************************** 640065 * Fetch all result rows * 650066 *************************************************************** 660067 PERFORM A010-FETCH-PROCEDURE THROUGH A010-FETCH-EXIT 670068 UNTIL SQLCODE IS = 100. 680069 *************************************************************** 690070 * Close cursor * 700071 *************************************************************** 710072 EXEC SQL 720073 CLOSE CURS 730074 END-EXEC. 740075 CLOSE OUTFILE. 750076 STOP RUN. 760077 *************************************************************** 770078 * Fetch a row and move the information to the output record. * 780079 *************************************************************** 790080 A010-FETCH-PROCEDURE. 800081 MOVE SPACES TO REC-1. 810082 EXEC SQL 820083 FETCH CURS INTO :AVG-RECORD 830084 END-EXEC. 840085 IF SQLCODE IS = 0 850086 MOVE WORKDEPT TO DEPT-NO 860087 MOVE AVG-SALARY TO AVERAGE-SALARY 870088 MOVE AVG-EDUC TO AVERAGE-EDUCATION-LEVEL 880089 WRITE REC-1 AFTER ADVANCING 1 LINE. 890090 A010-FETCH-EXIT. 900091 EXIT. 910092 *************************************************************** 920093 * An SQL error occurred. Move the error number to the error * 930094 * record and stop running. * 940095 *************************************************************** 950096 B000-SQL-ERROR. 960097 MOVE SPACES TO ERROR-RECORD. 970098 MOVE SQLCODE TO ERROR-CODE. 980099 MOVE "AN SQL ERROR HAS OCCURRED" TO ERROR-MESSAGE. 9900100 WRITE ERROR-RECORD AFTER ADVANCING 1 LINE. 10000101 CLOSE OUTFILE. 10100102 STOP RUN. 10200

* * * * * E N D O F S O U R C E * * * * *

�� SQL ����� 159

Page 170: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

1 ���� ��� ���� �����.

2 �� �� ��� ���� � ��� �����. � ��� SQL ������ �� ����.

****� �� �� ���� � �� ������ ��� ���� � �� � ���.

3 �� � �� � � ��� �� �� �� ���.

v ���� ��(4)

v ���� ��� � ��(5)

���� �� ��� ��� ���� �� �� � (6) �� �� �� (7)� �����.

xxxxST1 VxRxMx yymmdd Create SQL COBOL Program CBLTEST1 08/06/07 11:14:21 Page 4CROSS REFERENCE1 2 3Data Names Define ReferenceAVERAGE-EDUCATION-LEVEL 20 IN REC-1AVERAGE-SALARY 22 IN REC-1AVG-EDUC 34 SMALL INTEGER PRECISION(4,0) IN AVG-RECORDAVG-RECORD 32 STRUCTURE

83AVG-SALARY 35 DECIMAL(8,2) IN AVG-RECORDBIRTHDATE 55 DATE(10) COLUMN IN CORPDATA.EMPLOYEEBONUS 55 DECIMAL(9,2) COLUMN IN CORPDATA.EMPLOYEEB000-SQL-ERROR **** LABEL

47CC 17 CHARACTER(1) IN REC-1CC 24 CHARACTER(1) IN ERROR-RECORDCOMM 55 DECIMAL(9,2) COLUMN IN CORPDATA.EMPLOYEECORPDATA **** (4) SCHEMA

(5) 55CURS 53 CURSOR

62 73 83DEPT-NO 18 CHARACTER(3) IN REC-1EDLEVEL **** COLUMN

54(6)

EDLEVEL 55 SMALL INTEGER PRECISION(4,0) COLUMN (NOT NULL) IN CORPDATA.EMPLOYEEEMPLOYEE **** TABLE IN CORPDATA (7)

55EMPNO 55 CHARACTER(6) COLUMN (NOT NULL) IN CORPDATA.EMPLOYEEERROR-CODE 25 NUMERIC(5,0) IN ERROR-RECORDERROR-MESSAGE 26 CHARACTER(70) IN ERROR-RECORDERROR-RECORD 23 STRUCTUREFIRSTNME 55 VARCHAR(12) COLUMN (NOT NULL) IN CORPDATA.EMPLOYEEFSTAT 31 CHARACTER(2)HIREDATE 55 DATE(10) COLUMN IN CORPDATA.EMPLOYEEJOB 55 CHARACTER(8) COLUMN IN CORPDATA.EMPLOYEELASTNAME 55 VARCHAR(15) COLUMN (NOT NULL) IN CORPDATA.EMPLOYEEMIDINIT 55 CHARACTER(1) COLUMN (NOT NULL) IN CORPDATA.EMPLOYEEPHONENO 55 CHARACTER(4) COLUMN IN CORPDATA.EMPLOYEEREC-1 16SALARY **** COLUMN

54SALARY 55 DECIMAL(9,2) COLUMN IN CORPDATA.EMPLOYEESEX 55 CHARACTER(1) COLUMN IN CORPDATA.EMPLOYEEWORKDEPT 33 CHARACTER(3) IN AVG-RECORDWORKDEPT **** COLUMN

54 56WORKDEPT 55 CHARACTER(3) COLUMN IN CORPDATA.EMPLOYEENo errors found in source102 Source records processed* * * * * E N D O F L I S T I N G * * * * *

160 IBM i: ����� �� SQL �����

Page 171: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

�ILE SQL ����� ��

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

CRTSQLCBL(OPM COBOL� ��), CRTSQLPLI(PL/I PRPQ� ��) � RPG/400� ���

CRTSQLRPG(RPG III� ��)� �� ILE ����� ��� ���� ����.

�� ��� �� ���� ����. �� ��, *APOST � *QUOTE ��� COBOL�� ����.

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

�� ��

207 ���� ���� �� ������ �� CL �� ���

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

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

SQL� ���� �ILE ������ ��� ���

SQL ������ *NOGEN� ��� ��� ��� ������ ���� ��� � ��� �� �

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

����, � ���, ����� � � ���, ��� � USRPRF� ��� CRTxxxPGM �

�� �����.

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

v COBOL� �� *QUOTE �� *APOST� CRTCBLPGM ��� �����.

v RPG � COBOL� �� SAAFLAG (*FLAG)� CRTxxxPGM ��� �����.

v RPG � COBOL� �� CRTSQLxxx ��� SRTSEQ � LANGID ���� CRTxxxPGM ���

�����.

v RPG � COBOL� �� CVTOPT (*DATETIME *VARCHAR)� �� CRTxxxPGM ��� ���

��.

v COBOL � RPG� �� CRTSQLxxx ��� TGTRLS ��� �� CRTxxxPGM ��� ����

�. TGTRLS� CRTPLIPGM ��� ���� ����. ���� CRTSQLPLI ��� TGTRLS

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

v PL/I� �� MARGINS� �� � ���� �����.

v �� ��� �� CRTSQLxxx ��� REPLACE ���� CRTxxxPGM ��� �����.

���� ����� ���� ��� ��� CRTSQLxxx ��� REPLACE ��� ��

CRTSQLPKG ��� �����.

v �� ��� �� USRPRF(*NAMING)� ��� �� ��(*SYS) �� USRPRF(*USER)� ���

� USRPRF(*USER)� CRTxxxPGM ��� �����. USRPRF(*NAMING)� ��� SQL ��(*SQL)

�� USRPRF(*OWNER)� ���� USRPRF(*OWNER)� CRTxxxPGM ��� �����.

CRTxxxPGM ��� ��� �� �� ���� ���� �� �� �����.

�� SQL ����� 161

Page 172: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

����� ��� OPTION ���� *NOGEN� ��� ��� �� ���� �� ��� ���

� � ����. *NOGEN� ��� �� ���� ���� ��� �����. CRTSQLxxx ��� �

� �� ��� ����� ��� ������ � � ��� � ��� �����(CRTSQLxxx

��� TOSRCFILE ���� ���). �� ���� ��� �� ���� ��� � � ��

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

� CRTSQLPKG ��� ��� �� ���� SQL ���� � � ����.

�: CRTxxxPGM �� �� ��� QTEMP/QSQLTEMP�� � ��� ����� � ���. ���

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

ILE SQL ����� ��

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

CRTSQLCPPI, CRTSQLCBLI � CRTSQLRPGI ILE ����� ��� �����.

� ��� ��� �� ����� ��� �����(ILE C, ILE C++, ILE COBOL � ILE RPG). �

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

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

*APOST � *QUOTE ��� COBOL�� ����. �� ��� �� ��� �� ���� ����

����.

�� ��

207 ���� ���� �� ������ �� CL �� ���

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

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

SQL� ���� ILE ������ ��� ���

SQL ������ *NOGEN� ��� ��� ��� CRTSQLxxx ��� �� ������ ����

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

*MODULE ��� ��� �� SQL ������ CRTxxxMOD ��� ��� ��� ����.

*PGM ��� ��� �� SQL ������ CRTBNDxxx ��� ��� ���� ����.

*SRVPGM ��� ��� �� SQL ������ CRTxxxMOD ��� ��� ��� �� � Create

Service Program(CRTSRVPGM) ��� ��� �� ���� ����. CRTSQLCPPI ���

*MODULE �� �� ����.

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

v DBGVIEW(*SOURCE)� CRTSQLxxx ��� ��� �� DBGVIEW(*ALL)� CRTxxxMOD ��

� CRTBNDxxx ��� �����.

v OUTPUT(*PRINT)� CRTSQLxxx ��� ��� �� CRTxxxMOD ��� CRTBNDxxx ���� �

����.

162 IBM i: ����� �� SQL �����

Page 173: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

OUTPUT(*NONE)� CRTSQLxxx ��� ��� �� CRTxxxMOD �� �� CRTBNDxxx ���

���� ����.

v CRTSQLxxx ��� TGTRLS ��� �� CRTxxxMOD, CRTBNDxxx � Create Service

Program(CRTSRVPGM) ��� �����.

v CRTSQLxxx ��� REPLACE ��� �� CRTxxxMOD, CRTBNDxxx � CRTSRVPGM ���

�����.

���� ����� ���� ��� ��� CRTSQLxxx ��� REPLACE ��� ��

CRTSQLPKG ��� �����.

v OBJTYPE� *PGM �� *SRVPGM�� USRPRF(*NAMING)� ��� �� ��(*SYS) ��

USRPRF(*USER)� ��� �� USRPRF(*USER)� CRTBNDxxx �� CRTSRVPGM ��� ��

���.

OBJTYPE� *PGM �� *SRVPGM�� USRPRF(*NAMING)� ��� SQL ��(*SQL) ��

USRPRF(*OWNER)� ��� �� USRPRF(*OWNER)� CRTBNDxxx �� CRTSRVPGM ���

�����.

v CRTSQLxxx ��� DBGENCKEY �� CRTxxxMOD �� CRTBNDxxx ��� �����.

v C � C++� �� MARGINS� �� � ���� �����.

������ LOB ��� ��� � ��� 15M� ���� ��� ���� �� TERASPACE( *YES

*TSIFC) ��� CRTCMOD, CRTBNDC �� CRTCPPMOD ��� �����.

v C � C++� �� DECFLTRND �� CRTCMOD, CRTBNDC �� CRTCPPMOD ���� ���

��.

v COBOL� �� *QUOTE �� *APOST� CRTBNDCBL �� CRTCBLMOD ���� �����.

v RPG � COBOL� �� CRTSQLxxx ��� SRTSEQ � LANGID ���� CRTxxxMOD �

CRTBNDxxx ��� �����.

v COBOL� �� CVTOPT(*VARCHAR *DATETIME *PICGGRAPHIC *FLOAT)� ���

CRTCBLMOD � CRTBNDCBL ��� �����. OPTION(*NOCVTDT)� ��� ��(��� �

� �� �) �� �� *DATE *TIME *TIMESTAMP� CVTOPT� �� �����.

v RPG� �� OPTION(*CVTDT)� ���� CVTOPT(*DATETIME)� CRTRPGMOD � CRTBNDRPG

��� �����.

����� ��� OPTION ���� *NOGEN� ��� ��� �� ���� �� ��� ���

� � ����. *NOGEN� ��� �� ���� ���� ��� �����. CRTSQLxxx ��� �

�� ����� ����� ��� ������ � � ��� � ��� ����(TOSRCFILE

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

� �� �� � ����. ������ ���� ��� ��� ��� �� CRTSQLPKG ��� ��

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

�� SQL ����� 163

|

|

|

Page 174: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

��� ��� �� �� ���� ��� USRPRF ���� CRTBNDxxx, Create

Program(CRTPGM) �� Create Service Program(CRTSRVPGM) ��� ��� ���� �� � ��

��. SQL ���� USRPRF ���� ��� ��� ���� �����. �� ��� ���� �

� USRPRF ���� *USER� ���� ���. SQL ��� ���� �� USRPRF ����

*OWNER� ���� ���.

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

COMPILEOPT ���� ����� ��� SET OPTION��� �� ���� ��� ��� ��

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

COMPILEOPT ���� ������ �� ��� ��� �����. � ���� ���� ���

�� � ���� ���� 2�� ��� �� ��� ���� �� � ����. SQL �����

� ���� COMPILEOPT ���� ���� ���� ����. �� ���� ���� ����

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

��� �� � ����. � �� �� ��� ��� �� �� ��� COMPILEOPT ����

��� � ����.

″INCDIR(″� COMPILEOPT ���� ��� ������ SRCSTMF ���� ��� ����

�����.

EXEC SQL SET OPTION COMPILEOPT ='OPTION(*SHOWINC *EXPMAC)INCDIR(''/QSYS.LIB/MYLIB.LIB/MYFILE.MBR '')';

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

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

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

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

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

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

v COBOL� COPY DDS

v PL/I� %INCLUDE

v C �� C++� #pragma mapinc � #include

v RPG� � �� �� � � �� �� ��

SQL ������ ��� ��� ���� ��� �� �������. ���� EXEC SQL�� �

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

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

164 IBM i: ����� �� SQL �����

Page 175: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

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

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

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

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

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

�� SQL ���� �� �� � � ���� �����. �� SQL ���(RDB ����

CRTSQLxxx ��� ���)� �� �� � � ��� � ������� SQL ���� ����

�.

SQL� ��� �� �� ��� ���� �� � � �� � �� �����. ILE ����

�� �� ���� CRTxxxPGM ��� ��� ���� ����. ILE ���� �� �� ���

� CRTBNDxxx, CRTPGM �� CRTSRVPGM ��� ��� ���� ����. i� DB2� ���

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

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

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

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

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

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

� ��� �� SQLCODE� �����.

2. ���� ���� �� ��� ����� � �� ��� ����. �� �� � �� �

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

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

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

��� �����.

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

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

� ��� �����. �� � � �� � �� �� �� SQLCODE� �����. � ����

���� SQL�� ��� CRTSQLxxx ��� �� ��� ��� ��� ���.

���� TABLEA� COLUMNA� ���� SQL�� �� ��� COLUMNA� � �� ���� �

�� ���� TABLEA� �� � �� ��� �����. ���� ���� COLUMNA� �

�� ���� �� ��� �� ���� �����. � ���� ��� �� ��� � CRTSQLxxx

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

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

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

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

�� SQL ����� 165

Page 176: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

CL �� Display Program References(DSPPGMREF)� ��� ���� �� �� � ��� ��

� ����. SQL �� ��� ���� �� ������ �� �� � � ��� OIR� ����

�.

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

2. SQL�� ��� ��� �� DFTRDBCOL ���� ���� �� �� ���� ��� ID�

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

3. SQL�� ��� ��� �� DFTRDBCOL ���� ��� �� DFTRDBCOL ���� ��

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

�� �� ��� ���� �� ������ �� �� � � ��� OIR� �����.

1. �� ��� ��� ��� �� ������ �� ���� �����.

2. �� �� ���� � DFTRDBCOL ���� ���� �� �� *LIBL� �����.

3. SQL�� ��� ��� �� DFTRDBCOL ���� ��� �� DFTRDBCOL ���� ��

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

SQL ����� � �

SQL ����� ���� ���� ����� Display Module(DSPMOD), Display Program(DSPPGM)

�� Display Service Program(DSPSRVPGM) ��� ��� SQL ������ ��� �� � ���

�� � ����.

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

��� SQL ����� ��� CRTSQLxxx ��� �� � ����.

Print SQL Information(PRTSQLINF) ��� SQL ������ ��� �� � ��� ���� ��

� ����.

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

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

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

�� ����� CALL�

CALL pgm-name

� ����.

�: � ���� ��� � ����� ���� �� *CHANGE ��� ��� SQL(Structured Query

Language) ��� �� � QHST� CPF2218 ��� ��� � ����. *CHANGE ��� �

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

166 IBM i: ����� �� SQL �����

Page 177: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

�� ��

�� ��(CL)

� � SQL� ���� ��� ��: DDM ����

SQL� �� �� �(DDM) ��� �� ��� �� ��� ���� ���� . SQL�

DRDA®(Distributed Relational Database Architecture™)� �� ��� ��� �����.

� � SQL� ���� ��� ��: �� ����

��(OVRDBF ��� �� ���)� ��� �� �� �� ��� ����� ��� ��� ��

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

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

v TOFILE

v MBR

v SEQONLY

v INHWRT

v WAITRCD

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

1. OVRDBF ��� OVRSCOPE(*JOB) ��� ��

2. Submit Remote Command(SBMRMTCMD) ��� ��� ����� ��� �� ��

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

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

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

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

�� ��

����� �����

����� �� �

� � SQL� ��� ��: SQL �� ��

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

SQL� �� � SQLCODE �� SQLSTATE� �� � ����.

�� SQL ����� 167

Page 178: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

�� ��

SQL �� � �

�� ����: i� DB2 ��� ��

i� DB2�� ���� ��� ��� SQL�� ���� �� ��� � ������ ��� ��

��.

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

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

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

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

�� ���� �� �

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

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

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

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

�:

1. RPG/400��� 6��� � �� ��� �� ��� ��� ���.

2. REXX� � �� ��� ���� ����.

2 SQL INCLUDE SQLCA�� PL/I, C � COBOL ���� SQLCA� ���� �����.

RPG ���� �� SQL ������ ���� SQLCA �� ��� �� ��� ��

�� �� ����. REXX� �� SQLCA �� SQLCA� �� ��� �� �� ��

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

3 � SQL WHENEVER�� SQLERROR(SQLCODE < 0)� SQL��� ��� �� ��� �

��� ��� �� ���� �����. � WHENEVER SQLERROR�� �� WHENEVER

SQLERROR�� � �� ��� �� SQL� ��� ����. REXX� WHENEVER�

� ���� ����. �� REXX� SIGNAL ON ERROR �� �����.

4 � SQL UPDATE�� SALARY �� ���� � ��� ��� �� PERCENTAGE(RPG� �

� PERCNT)� ��� �� �� �� �� ����. ��� �� �� �� 2000�� �

���. REXX� �� ��� ��� ��� UPDATE� �� �� � �� ��� � ��

PREPARE � EXECUTE��.

5 � SQL COMMIT�� SQL UPDATE�� �� �� ����� �����. ��� � ���

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

168 IBM i: ����� �� SQL �����

Page 179: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

�: COMMIT(*CHG)� ��� ���� ����������. (REXX� �� *CHG� �

� ���.)

6 � SQL DECLARE CURSOR�� � ��(EMPLOYEE � EMPPROJACT)� ��� �

� ��� ��( � > 2000)� ���� �� ���� � C1� �����. �� �� � �

�� �� ��(PROJNO � EMPNO �)� ���� ����� �����. REXX� �� ��

� ��� ���� ��� ��� ���� ��� �� DECLARE CURSOR�� �� � �

� ��� PREPARE � DECLARE CURSOR��.

7 � SQL OPEN�� �� �� � ��� � C1� ���.

8 � SQL WHENEVER�� �� �� ��� ��(SQLCODE = 100) ��� ���� ��� �

� ���� �����. REXX� �� SQLCODE� ���� ��� ���.

9 � SQL FETCH�� � C1� ���� �� �� ��� ��� �� ��� ��� �� �

� ����.

10 �� �� ���� ��� � ���� �����. SQL CLOSE�� � C1� ����.

11 � SQL DECLARE CURSOR�� �� ��(EMPPROJACT, PROJECT � EMPLOYEE)

� ���� � C2� �����. ��� PROJNO � PROJNAME �� ���� ������.

COUNT ��� � ��� �� � �� �����. SUM ��� � �� �� � � ��

�����. ORDER BY 1�� � �� �(EMPPROJACT.PROJNO)� ��� ���� �� �

���� �����. REXX� �� ��� ��� ���� ��� ��� ���� ��� ��

DECLARE CURSOR�� �� � �� ��� PREPARE � DECLARE CURSOR��.

12 � SQL FETCH�� � C2� �� �� ��� ��� �� ���� ��� ��� ���

�� � � ����.

13 CONTINUE ��� ��� � SQL WHENEVER�� ���� SQL ROLLBACK�� ��� �

���� ��� �� ���� ��� �� �����. SQL ROLLBACK���� ��� �

��� ��� � ���� ��� ��� �� ���� ��� ���� ��� ���. REXX�

WHENEVER�� ���� ����. �� REXX� SIGNAL OFF ERROR �� �����.

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

�� SQL ����� 169

Page 180: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

�� ��

14 ���� �C � C++ ������� SQL� ���

ILE C �� C++ ���� SQL�� ���� ��� � ����� � �� ����� �� �

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

51 ���� �COBOL ������� SQL� ���

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

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

84 ���� �PL/I ������� SQL� ���

PL/I ���� SQL�� ��� �� �� � ����� � �� ����� ��� ����. �

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

113 ���� �ILE RPG ������� SQL� ���

ILE RPG ���� SQL�� ��� �� �� � ����� � �� ����� � ��

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

101 ���� �RPG/400 ������� SQL� ���

RPG/400 ����� �� ���� RPG II ���� RPG III ���� �� �����.

143 ���� �REXX ������� SQL� ���

REXX ����� ������ ��� ���. ��� � REXX ������ ���� ��� ����

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

: ILE C � C++ ��� SQL�

� �� ���� C ����� ��� ����.

�� ��� �� �� ��� ���� C++�� ����.

v 18 � �� SQL BEGIN DECLARE SECTION�� ���

v 42 � �� SQL END DECLARE SECTION�� ���

�: � ��� ���� 210 ���� �� ���� � ���� ���� ��� ���� ���.

170 IBM i: ����� �� SQL �����

Page 181: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

xxxxST1 VxRxMx yymmdd Create SQL ILE C Object CEX 08/06/07 15:52:26 Page 1Source type...............CObject name...............CORPDATA/CEXSource file...............CORPDATA/SRCMember....................CEXTo source file............QTEMP/QSQLTEMPOptions...................*XREFListing option............*PRINTTarget release............VxRxMxINCLUDE file..............*SRCFILECommit....................*CHGAllow copy of data........*YESClose SQL cursor..........*ENDACTGRPAllow blocking............*READDelay PREPARE.............*NOGeneration level..........10Margins...................*SRCFILEPrinter file..............*LIBL/QSYSPRTDate format...............*JOBDate separator............*JOBTime format...............*HMSTime separator ...........*JOBReplace...................*YESRelational database.......*LOCALUser .....................*CURRENTRDB connect method........*DUWDefault collection........*NONEDynamic defaultcollection..............*NO

Package name..............*OBJLIB/*OBJPath......................*NAMINGSQL rules.................*DB2Created object type.......*PGMDebugging view............*NONEUser profile..............*NAMINGDynamic user profile......*USERSort sequence.............*JOBLanguage ID...............*JOBIBM SQL flagging..........*NOFLAGANS flagging..............*NONEText......................*SRCMBRTXTSource file CCSID.........65535Job CCSID.................65535Decimal result options:Maximum precision.......31Maximum scale...........31Minimum divide scale....0

DECFLOAT rounding mode....*HALFEVENCompiler options..........*NONESource member changed on 06/06/00 17:15:17

�� 3. SQL�� ���� � C ���

�� SQL ����� 171

Page 182: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

xxxxST1 VxRxMx yymmdd Create SQL ILE C Object CEX 08/06/07 15:52:26 Page 2Record *...+... 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 SEQNBR Last change

1 #include "string.h" 1002 #include "stdlib.h" 2003 #include "stdio.h" 3004 4005 main() 5006 { 6007 /* A sample program which updates the salaries for those employees */ 7008 /* whose current commission total is greater than or equal to the */ 8009 /* value of 'commission'. The salaries of those who qualify are */ 90010 /* increased by the value of 'percentage', retroactive to 'raise_date'.*/ 100011 /* A report is generated showing the projects that these employees */ 110012 /* have contributed to, ordered by project number and employee ID. */ 120013 /* A second report shows each project having an end date occurring */ 130014 /* after 'raise_date' (is potentially affected by the retroactive */ 140015 /* raises) with its total salary expenses and a count of employees */ 150016 /* who contributed to the project. */ 160017 170018 short work_days = 253; /* work days during in one year */ 180019 float commission = 2000.00; /* cutoff to qualify for raise */ 190020 float percentage = 1.04; /* raised salary as percentage */ 200021 char raise_date??(12??) = "1982-06-01"; /* effective raise date */ 210022 220023 /* File declaration for qprint */ 230024 FILE *qprint; 240025 250026 /* Structure for report 1 */ 260027 1 #pragma mapinc ("project","CORPDATA/PROJECT(PROJECT)","both","p z") 270028 #include "project" 280029 struct { 290030 CORPDATA_PROJECT_PROJECT_both_t Proj_struct; 300031 char empno??(7??); 310032 char name??(30??); 320033 float salary; 330034 } rpt1; 340035 350036 /* Structure for report 2 */ 360037 struct { 370038 char projno??(7??); 380039 char project_name??(37??); 390040 short employee_count; 400041 double total_proj_cost; 410042 } rpt2; 420043 430044 2 exec sql include SQLCA; 440045 450046 qprint=fopen("QPRINT","w"); 460047 470048 /* Update the selected projects by the new percentage. If an error */ 480049 /* occurs during the update, ROLLBACK the changes. */ 490050 3 EXEC SQL WHENEVER SQLERROR GO TO update_error; 500051 4 EXEC SQL 510052 UPDATE CORPDATA/EMPLOYEE 520053 SET SALARY = SALARY * :percentage 530054 WHERE COMM >= :commission ; 540055 550056 /* Commit changes */ 560057 5 EXEC SQL 570058 COMMIT; 580059 EXEC SQL WHENEVER SQLERROR GO TO report_error; 590060 6000

172 IBM i: ����� �� SQL �����

Page 183: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

xxxxST1 VxRxMx yymmdd Create SQL ILE C Object CEX 08/06/07 15:52:26 Page 3Record *...+... 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 SEQNBR Last change

61 /* Report the updated statistics for each employee assigned to the */ 610062 /* selected projects. */ 620063 630064 /* Write out the header for Report 1 */ 640065 fprintf(qprint," REPORT OF PROJECTS AFFECTED ₩ 650066 BY RAISES"); 660067 fprintf(qprint,"₩n₩nPROJECT EMPID EMPLOYEE NAME "); 670068 fprintf(qprint, " SALARY₩n"); 680069 690070 6 exec sql 700071 declare c1 cursor for 710072 select distinct projno, empprojact.empno, 720073 lastname||', '||firstnme, salary 730074 from corpdata/empprojact, corpdata/employee 740075 where empprojact.empno = employee.empno and comm >= :commission 750076 order by projno, empno; 760077 7 EXEC SQL 770078 OPEN C1; 780079 790080 /* Fetch and write the rows to QPRINT */ 800081 8 EXEC SQL WHENEVER NOT FOUND GO TO done1; 810082 820083 do { 830084 10 EXEC SQL 840085 FETCH C1 INTO :Proj_struct.PROJNO, :rpt1.empno, 850086 :rpt1.name,:rpt1.salary; 860087 fprintf(qprint,"₩n%6s %6s %-30s %8.2f", 870088 rpt1.Proj_struct.PROJNO,rpt1.empno, 880089 rpt1.name,rpt1.salary); 890090 } 900091 while (SQLCODE==0); 910092 920093 done1: 930094 EXEC SQL 940095 CLOSE C1; 950096 960097 /* For all projects ending at a date later than the 'raise_date' * / 970098 /* (that is, those projects potentially affected by the salary raises), */ 980099 /* generate a report containing the project number, project name */ 9900100 /* the count of employees participating in the project, and the */ 10000101 /* total salary cost of the project. */ 10100102 10200103 /* Write out the header for Report 2 */ 10300104 fprintf(qprint,"₩n₩n₩n ACCUMULATED STATISTICS₩ 10400105 BY PROJECT"); 10500106 fprintf(qprint, "₩n₩nPROJECT ₩ 10600107 NUMBER OF TOTAL"); 10700108 fprintf(qprint, "₩nNUMBER PROJECT NAME ₩ 10800109 EMPLOYEES COST₩n"); 10900110 11000111 11 EXEC SQL 11100112 DECLARE C2 CURSOR FOR 11200113 SELECT EMPPROJACT.PROJNO, PROJNAME, COUNT(*), 11300114 SUM ( ( DAYS(EMENDATE) - DAYS(EMSTDATE) ) * EMPTIME * 11400115 (DECIMAL( SALARY / :work_days ,8,2))) 11500116 FROM CORPDATA/EMPPROJACT, CORPDATA/PROJECT, CORPDATA/EMPLOYEE 11600117 WHERE EMPPROJACT.PROJNO=PROJECT.PROJNO AND 11700118 EMPPROJACT.EMPNO =EMPLOYEE.EMPNO AND 11800119 PRENDATE > :raise_date 11900120 GROUP BY EMPPROJACT.PROJNO, PROJNAME 12000121 ORDER BY 1; 12100122 EXEC SQL 12200123 OPEN C2; 12300

�� SQL ����� 173

Page 184: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

xxxxST1 VxRxMx yymmdd Create SQL ILE C Object CEX 08/06/07 15:52:26 Page 4Record *...+... 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 SEQNBR Last change124 12400125 /* Fetch and write the rows to QPRINT */ 12500126 EXEC SQL WHENEVER NOT FOUND GO TO done2; 12600127 12700128 do { 12800129 12 EXEC SQL 12900130 FETCH C2 INTO :rpt2; 13000131 fprintf(qprint,"₩n%6s %-36s %6d %9.2f", 13100132 rpt2.projno,rpt2.project_name,rpt2.employee_count, 13200133 rpt2.total_proj_cost); 13300134 } 13400135 while (SQLCODE==0); 13500136 13600137 done2: 13700138 EXEC SQL 13800139 CLOSE C2; 13900140 goto finished; 14000141 14100142 /* Error occurred while updating table. Inform user and rollback */ 14200143 /* changes. */ 14300144 update_error: 14400145 13 EXEC SQL WHENEVER SQLERROR CONTINUE; 14500146 fprintf(qprint,"*** ERROR Occurred while updating table. SQLCODE=" 14600147 "%5d₩n",SQLCODE); 14700148 14 EXEC SQL 14800149 ROLLBACK; 14900150 goto finished; 15000151 15100152 /* Error occurred while generating reports. Inform user and exit. */ 15200153 report_error: 15300154 fprintf(qprint,"*** ERROR Occurred while generating reports. " 15400155 "SQLCODE=%5d₩n",SQLCODE); 15500156 goto finished; 15600157 15700158 /* All done */ 15800159 finished: 15900160 fclose(qprint); 16000161 exit(0); 16100162 16200163 } 16300

* * * * * E N D O F S O U R C E * * * * *

174 IBM i: ����� �� SQL �����

Page 185: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

xxxxST1 VxRxMx yymmdd Create SQL ILE C Object CEX 08/06/07 15:52:26 Page 5

CROSS REFERENCEData Names Define Referencecommission 19 FLOAT(24)

54 75done1 **** LABEL

81done2 **** LABEL

126employee_count 40 SMALL INTEGER PRECISION(4,0) IN rpt2empno 31 VARCHAR(7) IN rpt1

85name 32 VARCHAR(30) IN rpt1

86percentage 20 FLOAT(24)

53project_name 39 VARCHAR(37) IN rpt2projno 38 VARCHAR(7) IN rpt2raise_date 21 VARCHAR(12)

119report_error **** LABEL

59rpt1 34rpt2 42 STRUCTURE

130salary 33 FLOAT(24) IN rpt1

86total_proj_cost 41 FLOAT(53) IN rpt2update_error **** LABEL

50work_days 18 SMALL INTEGER PRECISION(4,0)

115ACTNO 74 SMALL INTEGER PRECISION(4,0) COLUMN (NOT NULL) IN CORPDATA.EMPPROJACTBIRTHDATE 74 DATE(10) COLUMN IN CORPDATA.EMPLOYEEBONUS 74 DECIMAL(9,2) COLUMN IN CORPDATA.EMPLOYEECOMM **** COLUMN

54 75COMM 74 DECIMAL(9,2) COLUMN IN CORPDATA.EMPLOYEECORPDATA **** SCHEMA

52 74 74 116 116 116C1 71 CURSOR

78 85 95C2 112 CURSOR

123 130 139DEPTNO 27 VARCHAR(3) IN Proj_structDEPTNO 116 CHARACTER(3) COLUMN (NOT NULL) IN CORPDATA.PROJECTEDLEVEL 74 SMALL INTEGER PRECISION(4,0) COLUMN (NOT NULL) IN CORPDATA.EMPLOYEEEMENDATE 74 DATE(10) COLUMN IN CORPDATA.EMPPROJACTEMENDATE **** COLUMN

114EMPLOYEE **** TABLE IN CORPDATA

52 74 116EMPLOYEE **** TABLE

75 118EMPNO **** COLUMN IN EMPPROJACT

72 75 76 118EMPNO **** COLUMN IN EMPLOYEE

75 118EMPNO 74 CHARACTER(6) COLUMN (NOT NULL) IN CORPDATA.EMPPROJACTEMPNO 74 CHARACTER(6) COLUMN (NOT NULL) IN CORPDATA.EMPLOYEEEMPPROJACT **** TABLE

72 75 113 117 118 120EMPPROJACT **** TABLE IN CORPDATA

74 116

�� SQL ����� 175

Page 186: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

�� ��

14 ���� �C � C++ ������� SQL� ���

ILE C �� C++ ���� SQL�� ���� ��� � ����� � �� ����� �� �

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

: COBOL � ILE COBOL ��� SQL�

� �� ���� COBOL ����� ��� ����.

�: � ��� ���� 210 ���� �� ���� � ���� ���� ��� ���� ���.

xxxxST1 VxRxMx yymmdd Create SQL ILE C Object CEX 08/06/07 15:52:26 Page 6CROSS REFERENCE

EMPTIME 74 DECIMAL(5,2) COLUMN IN CORPDATA.EMPPROJACTEMPTIME **** COLUMN

114EMSTDATE 74 DATE(10) COLUMN IN CORPDATA.EMPPROJACTEMSTDATE **** COLUMN

114FIRSTNME **** COLUMN

73FIRSTNME 74 VARCHAR(12) COLUMN (NOT NULL) IN CORPDATA.EMPLOYEEHIREDATE 74 DATE(10) COLUMN IN CORPDATA.EMPLOYEEJOB 74 CHARACTER(8) COLUMN IN CORPDATA.EMPLOYEELASTNAME **** COLUMN

73LASTNAME 74 VARCHAR(15) COLUMN (NOT NULL) IN CORPDATA.EMPLOYEEMAJPROJ 27 VARCHAR(6) IN Proj_structMAJPROJ 116 CHARACTER(6) COLUMN IN CORPDATA.PROJECTMIDINIT 74 CHARACTER(1) COLUMN (NOT NULL) IN CORPDATA.EMPLOYEEProj_struct 30 STRUCTURE IN rpt1PHONENO 74 CHARACTER(4) COLUMN IN CORPDATA.EMPLOYEEPRENDATE 27 DATE(10) IN Proj_structPRENDATE **** COLUMN

119PRENDATE 116 DATE(10) COLUMN IN CORPDATA.PROJECTPROJECT **** TABLE IN CORPDATA

116PROJECT **** TABLE

117PROJNAME 27 VARCHAR(24) IN Proj_structPROJNAME **** COLUMN

113 120PROJNAME 116 VARCHAR(24) COLUMN (NOT NULL) IN CORPDATA.PROJECTPROJNO 27 VARCHAR(6) IN Proj_struct

85PROJNO **** COLUMN

72 76PROJNO 74 CHARACTER(6) COLUMN (NOT NULL) IN CORPDATA.EMPPROJACTPROJNO **** COLUMN IN EMPPROJACT

113 117 120PROJNO **** COLUMN IN PROJECT

117PROJNO 116 CHARACTER(6) COLUMN (NOT NULL) IN CORPDATA.PROJECTPRSTAFF 27 DECIMAL(5,2) IN Proj_structPRSTAFF 116 DECIMAL(5,2) COLUMN IN CORPDATA.PROJECTPRSTDATE 27 DATE(10) IN Proj_structPRSTDATE 116 DATE(10) COLUMN IN CORPDATA.PROJECTRESPEMP 27 VARCHAR(6) IN Proj_structRESPEMP 116 CHARACTER(6) COLUMN (NOT NULL) IN CORPDATA.PROJECTSALARY **** COLUMN

53 53 73 115SALARY 74 DECIMAL(9,2) COLUMN IN CORPDATA.EMPLOYEESEX 74 CHARACTER(1) COLUMN IN CORPDATA.EMPLOYEEWORKDEPT 74 CHARACTER(3) COLUMN IN CORPDATA.EMPLOYEENo errors found in source163 Source records processed* * * * * E N D O F L I S T I N G * * * * *

176 IBM i: ����� �� SQL �����

Page 187: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

xxxxST1 VxRxMx yymmdd Create SQL COBOL Program CBLEX 08/06/07 11:09:13 Page 1Source type...............COBOLProgram name..............CORPDATA/CBLEXSource file...............CORPDATA/SRCMember....................CBLEXTo source file............QTEMP/QSQLTEMPOptions...................*SRC *XREFTarget release............VxRxMxINCLUDE file..............*SRCFILECommit....................*CHGAllow copy of data........*YESClose SQL cursor..........*ENDPGMAllow blocking............*READDelay PREPARE.............*NOGeneration level..........10Printer file..............*LIBL/QSYSPRTDate format...............*JOBDate separator............*JOBTime format...............*HMSTime separator ...........*JOBReplace...................*YESRelational database.......*LOCALUser .....................*CURRENTRDB connect method........*DUWDefault collection........*NONEDynamic defaultcollection..............*NO

Package name..............*PGMLIB/*PGMPath......................*NAMINGSQL rules.................*DB2Created object type.......*PGMUser profile..............*NAMINGDynamic user profile......*USERSort sequence.............*JOBLanguage ID...............*JOBIBM SQL flagging..........*NOFLAGANS flagging..............*NONEText......................*SRCMBRTXTSource file CCSID.........65535Job CCSID.................65535Decimal result options:Maximum precision.......31Maximum scale...........31Minimum divide scale....0

DECFLOAT rounding mode....*HALFEVENCompiler options..........*NONESource member changed on 07/01/96 09:44:58

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

�� SQL ����� 177

Page 188: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

xxxxST1 VxRxMx yymmdd Create SQL COBOL Program CBLEX 08/06/07 11:09:13 Page 2Record *...+... 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 SEQNBR Last change

12 ****************************************************************3 * A sample program that updates the salaries for those *4 * employees whose current commission total is greater than or *5 * equal to the value of COMMISSION. The salaries of those who *6 * qualify are increased by the value of PERCENTAGE retroactive *7 * to RAISE-DATE. A report is generated showing the projects *8 * that these employees have contributed to ordered by the *9 * project number and employee ID. A second report shows each *10 * project having an end date occurring after RAISE-DATE *11 * (that is, potentially affected by the retroactive raises ) *12 * with its total salary expenses and a count of employees *13 * who contributed to the project. *14 ****************************************************************151617 IDENTIFICATION DIVISION.1819 PROGRAM-ID. CBLEX.20 ENVIRONMENT DIVISION.21 CONFIGURATION SECTION.22 SOURCE-COMPUTER. IBM-AS400.23 OBJECT-COMPUTER. IBM-AS400.24 INPUT-OUTPUT SECTION.2526 FILE-CONTROL.27 SELECT PRINTFILE ASSIGN TO PRINTER-QPRINT28 ORGANIZATION IS SEQUENTIAL.2930 DATA DIVISION.3132 FILE SECTION.3334 FD PRINTFILE35 BLOCK CONTAINS 1 RECORDS36 LABEL RECORDS ARE OMITTED.37 01 PRINT-RECORD PIC X(132).3839 WORKING-STORAGE SECTION.40 77 WORK-DAYS PIC S9(4) BINARY VALUE 253.41 77 RAISE-DATE PIC X(11) VALUE "1982-06-01".42 77 PERCENTAGE PIC S999V99 PACKED-DECIMAL.43 77 COMMISSION PIC S99999V99 PACKED-DECIMAL VALUE 2000.00.4445 ***************************************************************46 * Structure for report 1. *47 ***************************************************************4849 1 01 RPT1.50 COPY DDS-PROJECT OF CORPDATA-PROJECT.51 05 EMPNO PIC X(6).52 05 NAME PIC X(30).53 05 SALARY PIC S9(6)V99 PACKED-DECIMAL.5455

178 IBM i: ����� �� SQL �����

Page 189: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

xxxxST1 VxRxMx yymmdd Create SQL COBOL Program CBLEX 08/06/07 11:09:13 Page 3Record *...+... 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 SEQNBR Last change

56 ***************************************************************57 * Structure for report 2. *58 ***************************************************************5960 01 RPT2.61 15 PROJNO PIC X(6).62 15 PROJECT-NAME PIC X(36).63 15 EMPLOYEE-COUNT PIC S9(4) BINARY.64 15 TOTAL-PROJ-COST PIC S9(10)V99 PACKED-DECIMAL.6566 2 EXEC SQL67 INCLUDE SQLCA68 END-EXEC.69 77 CODE-EDIT PIC ---99.7071 ***************************************************************72 * Headers for reports. *73 ***************************************************************7475 01 RPT1-HEADERS.76 05 RPT1-HEADER1.77 10 FILLER PIC X(21) VALUE SPACES.78 10 FILLER PIC X(111)79 VALUE "REPORT OF PROJECTS AFFECTED BY RAISES".80 05 RPT1-HEADER2.81 10 FILLER PIC X(9) VALUE "PROJECT".82 10 FILLER PIC X(10) VALUE "EMPID".83 10 FILLER PIC X(35) VALUE "EMPLOYEE NAME".84 10 FILLER PIC X(40) VALUE "SALARY".85 01 RPT2-HEADERS.86 05 RPT2-HEADER1.87 10 FILLER PIC X(21) VALUE SPACES.88 10 FILLER PIC X(111)89 VALUE "ACCUMULATED STATISTICS BY PROJECT".90 05 RPT2-HEADER2.91 10 FILLER PIC X(9) VALUE "PROJECT".92 10 FILLER PIC X(38) VALUE SPACES.93 10 FILLER PIC X(16) VALUE "NUMBER OF".94 10 FILLER PIC X(10) VALUE "TOTAL".95 05 RPT2-HEADER3.96 10 FILLER PIC X(9) VALUE "NUMBER".97 10 FILLER PIC X(38) VALUE "PROJECT NAME".98 10 FILLER PIC X(16) VALUE "EMPLOYEES".99 10 FILLER PIC X(65) VALUE "COST".100 01 RPT1-DATA.101 05 PROJNO PIC X(6).102 05 FILLER PIC XXX VALUE SPACES.103 05 EMPNO PIC X(6).104 05 FILLER PIC X(4) VALUE SPACES.105 05 NAME PIC X(30).106 05 FILLER PIC X(3) VALUE SPACES.107 05 SALARY PIC ZZZZZ9.99.108 05 FILLER PIC X(96) VALUE SPACES.109 01 RPT2-DATA.110 05 PROJNO PIC X(6).111 05 FILLER PIC XXX VALUE SPACES.112 05 PROJECT-NAME PIC X(36).113 05 FILLER PIC X(4) VALUE SPACES.114 05 EMPLOYEE-COUNT PIC ZZZ9.115 05 FILLER PIC X(5) VALUE SPACES.116 05 TOTAL-PROJ-COST PIC ZZZZZZZZ9.99.117 05 FILLER PIC X(56) VALUE SPACES.118

�� SQL ����� 179

Page 190: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

xxxxST1 VxRxMx yymmdd Create SQL COBOL Program CBLEX 08/06/07 11:09:13 Page 4Record *...+... 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 SEQNBR Last change119 PROCEDURE DIVISION.120121 A000-MAIN.122 MOVE 1.04 TO PERCENTAGE.123 OPEN OUTPUT PRINTFILE.124125 ***************************************************************126 * Update the selected employees by the new percentage. If an *127 * error occurs during the update, roll back the changes, *128 ***************************************************************129130 3 EXEC SQL131 WHENEVER SQLERROR GO TO E010-UPDATE-ERROR132 END-EXEC.133 4 EXEC SQL134 UPDATE CORPDATA/EMPLOYEE135 SET SALARY = SALARY * :PERCENTAGE136 WHERE COMM >= :COMMISSION137 END-EXEC.138139 ***************************************************************140 * Commit changes. *141 ***************************************************************142143 5 EXEC SQL144 COMMIT145 END-EXEC.146147 EXEC SQL148 WHENEVER SQLERROR GO TO E020-REPORT-ERROR149 END-EXEC.150151 ***************************************************************152 * Report the updated statistics for each employee receiving *153 * a raise and the projects that the employee participates in *154 ***************************************************************155156 ***************************************************************157 * Write out the header for Report 1. *158 ***************************************************************159160 write print-record from rpt1-header1161 before advancing 2 lines.162 write print-record from rpt1-header2163 before advancing 1 line.164 6 exec sql165 declare c1 cursor for166 SELECT DISTINCT projno, empprojact.empno,167 lastname||", "||firstnme ,salary168 from corpdata/empprojact, corpdata/employee169 where empprojact.empno =employee.empno and170 comm >= :commission171 order by projno, empno172 end-exec.173 7 EXEC SQL174 OPEN C1175 END-EXEC.176177 PERFORM B000-GENERATE-REPORT1 THRU B010-GENERATE-REPORT1-EXIT178 UNTIL SQLCODE NOT EQUAL TO ZERO.179

180 IBM i: ����� �� SQL �����

Page 191: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

xxxxST1 VxRxMx yymmdd Create SQL COBOL Program CBLEX 08/06/07 11:09:13 Page 5Record *...+... 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 SEQNBR Last change180 10 A100-DONE1.181 EXEC SQL182 CLOSE C1183 END-EXEC.184185 *************************************************************186 * For all projects ending at a date later than the RAISE- *187 * DATE (that is, those projects potentially affected by the*188 * salary raises), generate a report containing the project *189 * number, project name, the count of employees *190 * participating in the project, and the total salary cost *191 * for the project. *192 *************************************************************193194195 ***************************************************************196 * Write out the header for Report 2. *197 ***************************************************************198199 MOVE SPACES TO PRINT-RECORD.200 WRITE PRINT-RECORD BEFORE ADVANCING 2 LINES.201 WRITE PRINT-RECORD FROM RPT2-HEADER1202 BEFORE ADVANCING 2 LINES.203 WRITE PRINT-RECORD FROM RPT2-HEADER2204 BEFORE ADVANCING 1 LINE.205 WRITE PRINT-RECORD FROM RPT2-HEADER3206 BEFORE ADVANCING 2 LINES.207208 EXEC SQL209 11 DECLARE C2 CURSOR FOR210 SELECT EMPPROJACT.PROJNO, PROJNAME, COUNT(*),211 SUM ( (DAYS(EMENDATE)-DAYS(EMSTDATE)) *212 EMPTIME * DECIMAL((SALARY / :WORK-DAYS),8,2))213 FROM CORPDATA/EMPPROJACT, CORPDATA/PROJECT,214 CORPDATA/EMPLOYEE215 WHERE EMPPROJACT.PROJNO=PROJECT.PROJNO AND216 EMPPROJACT.EMPNO =EMPLOYEE.EMPNO AND217 PRENDATE > :RAISE-DATE218 GROUP BY EMPPROJACT.PROJNO, PROJNAME219 ORDER BY 1220 END-EXEC.221 EXEC SQL222 OPEN C2223 END-EXEC.224225 PERFORM C000-GENERATE-REPORT2 THRU C010-GENERATE-REPORT2-EXIT226 UNTIL SQLCODE NOT EQUAL TO ZERO.227228 A200-DONE2.229 EXEC SQL230 CLOSE C2231 END-EXEC232233 ***************************************************************234 * All done. *235 ***************************************************************236237 A900-MAIN-EXIT.238 CLOSE PRINTFILE.239 STOP RUN.240

�� SQL ����� 181

Page 192: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

xxxxST1 VxRxMx yymmdd Create SQL COBOL Program CBLEX 08/06/07 11:09:13 Page 6Record *...+... 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 SEQNBR Last change241 ***************************************************************242 * Fetch and write the rows to PRINTFILE. *243 ***************************************************************244245 B000-GENERATE-REPORT1.246 8 EXEC SQL247 WHENEVER NOT FOUND GO TO A100-DONE1248 END-EXEC.249 9 EXEC SQL250 FETCH C1 INTO :PROJECT.PROJNO, :RPT1.EMPNO,251 :RPT1.NAME, :RPT1.SALARY252 END-EXEC.253 MOVE CORRESPONDING RPT1 TO RPT1-DATA.254 MOVE PROJNO OF RPT1 TO PROJNO OF RPT1-DATA.255 WRITE PRINT-RECORD FROM RPT1-DATA256 BEFORE ADVANCING 1 LINE.257258 B010-GENERATE-REPORT1-EXIT.259 EXIT.260261 ***************************************************************262 * Fetch and write the rows to PRINTFILE. *263 ***************************************************************264265 C000-GENERATE-REPORT2.266 EXEC SQL267 WHENEVER NOT FOUND GO TO A200-DONE2268 END-EXEC.269 12 EXEC SQL270 FETCH C2 INTO :RPT2271 END-EXEC.272 MOVE CORRESPONDING RPT2 TO RPT2-DATA.273 WRITE PRINT-RECORD FROM RPT2-DATA274 BEFORE ADVANCING 1 LINE.275276 C010-GENERATE-REPORT2-EXIT.277 EXIT.278279 ***************************************************************280 * Error occurred while updating table. Inform user and *281 * roll back changes. *282 ***************************************************************283284 E010-UPDATE-ERROR.285 13 EXEC SQL286 WHENEVER SQLERROR CONTINUE287 END-EXEC.288 MOVE SQLCODE TO CODE-EDIT.289 STRING "*** ERROR Occurred while updating table. SQLCODE="290 CODE-EDIT DELIMITED BY SIZE INTO PRINT-RECORD.291 WRITE PRINT-RECORD.292 14 EXEC SQL293 ROLLBACK294 END-EXEC.295 STOP RUN.296297 ***************************************************************298 * Error occurred while generating reports. Inform user and *299 * exit. *300 ***************************************************************301302 E020-REPORT-ERROR.303 MOVE SQLCODE TO CODE-EDIT.304 STRING "*** ERROR Occurred while generating reports. SQLCODE305 - "=" CODE-EDIT DELIMITED BY SIZE INTO PRINT-RECORD.306 WRITE PRINT-RECORD.307 STOP RUN.

* * * * * E N D O F S O U R C E * * * * *

182 IBM i: ����� �� SQL �����

Page 193: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

xxxxST1 VxRxMx yymmdd Create SQL COBOL Program CBLEX 08/06/07 11:09:13 Page 7CROSS REFERENCEData Names Define ReferenceACTNO 168 SMALL INTEGER PRECISION(4,0) COLUMN (NOT NULL) IN CORPDATA.EMPPROJACTA100-DONE1 **** LABEL

247A200-DONE2 **** LABEL

267BIRTHDATE 134 DATE(10) COLUMN IN CORPDATA.EMPLOYEEBONUS 134 DECIMAL(9,2) COLUMN IN CORPDATA.EMPLOYEECODE-EDIT 69COMM **** COLUMN

136 170COMM 134 DECIMAL(9,2) COLUMN IN CORPDATA.EMPLOYEECOMMISSION 43 DECIMAL(7,2)

136 170CORPDATA **** SCHEMA

134 168 168 213 213 214C1 165 CURSOR

174 182 250C2 209 CURSOR

222 230 270DEPTNO 50 CHARACTER(3) IN PROJECTDEPTNO 213 CHARACTER(3) COLUMN (NOT NULL) IN CORPDATA.PROJECTEDLEVEL 134 SMALL INTEGER PRECISION(4,0) COLUMN (NOT NULL) IN CORPDATA.EMPLOYEEEMENDATE 168 DATE(10) COLUMN IN CORPDATA.EMPPROJACTEMENDATE **** COLUMN

211EMPLOYEE **** TABLE IN CORPDATA

134 168 214EMPLOYEE **** TABLE

169 216EMPLOYEE-COUNT 63 SMALL INTEGER PRECISION(4,0) IN RPT2EMPLOYEE-COUNT 114 IN RPT2-DATAEMPNO 51 CHARACTER(6) IN RPT1

250EMPNO 103 CHARACTER(6) IN RPT1-DATAEMPNO 134 CHARACTER(6) COLUMN (NOT NULL) IN CORPDATA.EMPLOYEEEMPNO **** COLUMN IN EMPPROJACT

166 169 171 216EMPNO **** COLUMN IN EMPLOYEE

169 216EMPNO 168 CHARACTER(6) COLUMN (NOT NULL) IN CORPDATA.EMPPROJACTEMPPROJACT **** TABLE

166 169 210 215 216 218EMPPROJACT **** TABLE IN CORPDATA

168 213EMPTIME 168 DECIMAL(5,2) COLUMN IN CORPDATA.EMPPROJACTEMPTIME **** COLUMN

212EMSTDATE 168 DATE(10) COLUMN IN CORPDATA.EMPPROJACTEMSTDATE **** COLUMN

211E010-UPDATE-ERROR **** LABEL

131E020-REPORT-ERROR **** LABEL

148FIRSTNME 134 VARCHAR(12) COLUMN (NOT NULL) IN CORPDATA.EMPLOYEEFIRSTNME **** COLUMN

167HIREDATE 134 DATE(10) COLUMN IN CORPDATA.EMPLOYEEJOB 134 CHARACTER(8) COLUMN IN CORPDATA.EMPLOYEELASTNAME 134 VARCHAR(15) COLUMN (NOT NULL) IN CORPDATA.EMPLOYEELASTNAME **** COLUMN

167MAJPROJ 50 CHARACTER(6) IN PROJECTMAJPROJ 213 CHARACTER(6) COLUMN IN CORPDATA.PROJECTMIDINIT 134 CHARACTER(1) COLUMN (NOT NULL) IN CORPDATA.EMPLOYEENAME 52 CHARACTER(30) IN RPT1

251NAME 105 CHARACTER(30) IN RPT1-DATA

�� SQL ����� 183

Page 194: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

xxxxST1 VxRxMx yymmdd Create SQL COBOL Program CBLEX 08/06/07 11:09:13 Page 8CROSS REFERENCEPERCENTAGE 42 DECIMAL(5,2)

135PHONENO 134 CHARACTER(4) COLUMN IN CORPDATA.EMPLOYEEPRENDATE 50 DATE(10) IN PROJECTPRENDATE **** COLUMN

217PRENDATE 213 DATE(10) COLUMN IN CORPDATA.PROJECTPRINT-RECORD 37 CHARACTER(132)PROJECT 50 STRUCTURE IN RPT1PROJECT **** TABLE IN CORPDATA

213PROJECT **** TABLE

215PROJECT-NAME 62 CHARACTER(36) IN RPT2PROJECT-NAME 112 CHARACTER(36) IN RPT2-DATAPROJNAME 50 VARCHAR(24) IN PROJECTPROJNAME **** COLUMN

210 218PROJNAME 213 VARCHAR(24) COLUMN (NOT NULL) IN CORPDATA.PROJECTPROJNO 50 CHARACTER(6) IN PROJECT

250PROJNO 61 CHARACTER(6) IN RPT2PROJNO 101 CHARACTER(6) IN RPT1-DATAPROJNO 110 CHARACTER(6) IN RPT2-DATAPROJNO **** COLUMN

166 171PROJNO 168 CHARACTER(6) COLUMN (NOT NULL) IN CORPDATA.EMPPROJACTPROJNO **** COLUMN IN EMPPROJACT

210 215 218PROJNO **** COLUMN IN PROJECT

215PROJNO 213 CHARACTER(6) COLUMN (NOT NULL) IN CORPDATA.PROJECTPRSTAFF 50 DECIMAL(5,2) IN PROJECTPRSTAFF 213 DECIMAL(5,2) COLUMN IN CORPDATA.PROJECTPRSTDATE 50 DATE(10) IN PROJECTPRSTDATE 213 DATE(10) COLUMN IN CORPDATA.PROJECTRAISE-DATE 41 CHARACTER(11)

217RESPEMP 50 CHARACTER(6) IN PROJECTRESPEMP 213 CHARACTER(6) COLUMN (NOT NULL) IN CORPDATA.PROJECTRPT1 49RPT1-DATA 100RPT1-HEADERS 75RPT1-HEADER1 76 IN RPT1-HEADERSRPT1-HEADER2 80 IN RPT1-HEADERSRPT2 60 STRUCTURE

270RPT2-DATA 109SS REFERENCERPT2-HEADERS 85RPT2-HEADER1 86 IN RPT2-HEADERSRPT2-HEADER2 90 IN RPT2-HEADERSRPT2-HEADER3 95 IN RPT2-HEADERSSALARY 53 DECIMAL(8,2) IN RPT1

251SALARY 107 IN RPT1-DATASALARY **** COLUMN

135 135 167 212SALARY 134 DECIMAL(9,2) COLUMN IN CORPDATA.EMPLOYEESEX 134 CHARACTER(1) COLUMN IN CORPDATA.EMPLOYEETOTAL-PROJ-COST 64 DECIMAL(12,2) IN RPT2TOTAL-PROJ-COST 116 IN RPT2-DATAWORK-DAYS 40 SMALL INTEGER PRECISION(4,0)

212WORKDEPT 134 CHARACTER(3) COLUMN IN CORPDATA.EMPLOYEENo errors found in source307 Source records processed

* * * * * E N D O F L I S T I N G * * * * *

184 IBM i: ����� �� SQL �����

Page 195: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

�� ��

51 ���� �COBOL ������� SQL� ���

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

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

: PL/I ��� SQL�

� �� ���� PL/I ����� ��� ����.

�: � ��� ���� 210 ���� �� ���� � ���� ���� ��� ���� ���.

xxxxST1 VxRxMx yymmdd Create SQL PL/I Program PLIEX 08/06/07 12:53:36 Page 1Source type...............PLIProgram name..............CORPDATA/PLIEXSource file...............CORPDATA/SRCMember....................PLIEXTo source file............QTEMP/QSQLTEMPOptions...................*SRC *XREFTarget release............VxRxMxINCLUDE file..............*SRCFILECommit....................*CHGAllow copy of data........*YESClose SQL cursor..........*ENDPGMAllow blocking............*READDelay PREPARE.............*NOGeneration level..........10Margins...................*SRCFILEPrinter file..............*LIBL/QSYSPRTDate format...............*JOBDate separator............*JOBTime format...............*HMSTime separator ...........*JOBReplace...................*YESRelational database.......*LOCALUser .....................*CURRENTRDB connect method........*DUWDefault collection........*NONEDynamic defaultcollection..............*NO

Package name..............*PGMLIB/*PGMPath......................*NAMINGSQL rules.................*DB2User profile..............*NAMINGDynamic user profile......*USERSort sequence.............*JOBLanguage ID...............*JOBIBM SQL flagging..........*NOFLAGANS flagging..............*NONEText......................*SRCMBRTXTSource file CCSID.........65535Job CCSID.................65535Decimal result options:Maximum precision.......31Maximum scale...........31Minimum divide scale....0

DECFLOAT rounding mode....*HALFEVENCompiler options..........*NONESource member changed on 07/01/96 12:53:08

�� 5. SQL�� ���� � PL/I ���

�� SQL ����� 185

Page 196: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

xxxxST1 VxRxMx yymmdd Create SQL PL/I Program PLIEX 08/06/07 12:53:36 Page 2Record *...+... 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 SEQNBR Last change

1 /* A sample program that updates the salaries for those employees */ 1002 /* whose current commission total is greater than or equal to the */ 2003 /* value of COMMISSION. The salaries of those who qualify are */ 3004 /* increased by the value of PERCENTAGE, retroactive to RAISE_DATE. */ 4005 /* A report is generated showing the projects that these employees */ 5006 /* have contributed to, ordered by project number and employee ID. */ 6007 /* A second report shows each project having an end date occurring */ 7008 /* after RAISE_DATE (that is, those projects potentially affected */ 8009 /* by the retroactive raises) with its total salary expenses and a */ 90010 /* count of employees who contributed to the project. */ 100011 /*********************************************************************/ 110012 120013 130014 PLIEX: PROC; 140015 150016 DCL RAISE_DATE CHAR(10); 160017 DCL WORK_DAYS FIXED BIN(15); 170018 DCL COMMISSION FIXED DECIMAL(8,2); 180019 DCL PERCENTAGE FIXED DECIMAL(5,2); 190020 200021 /* File declaration for sysprint */ 210022 DCL SYSPRINT FILE EXTERNAL OUTPUT STREAM PRINT; 220023 230024 /* Structure for report 1 */ 240025 DCL 1 RPT1, 250026 1%INCLUDE PROJECT (PROJECT, RECORD,,COMMA); 260027 15 EMPNO CHAR(6), 270028 15 NAME CHAR(30), 280029 15 SALARY FIXED DECIMAL(8,2); 290030 300031 /* Structure for report 2 */ 310032 DCL 1 RPT2, 320033 15 PROJNO CHAR(6), 330034 15 PROJECT_NAME CHAR(36), 340035 15 EMPLOYEE_COUNT FIXED BIN(15), 350036 15 TOTL_PROJ_COST FIXED DECIMAL(10,2); 360037 370038 2 EXEC SQL INCLUDE SQLCA; 380039 390040 COMMISSION = 2000.00; 400041 PERCENTAGE = 1.04; 410042 RAISE_DATE = '1982-06-01'; 420043 WORK_DAYS = 253; 430044 OPEN FILE(SYSPRINT); 440045 450046 /* Update the selected employees' salaries by the new percentage. */ 460047 /* If an error occurs during the update, roll back the changes. */ 470048 3 EXEC SQL WHENEVER SQLERROR GO TO UPDATE_ERROR; 480049 4 EXEC SQL 490050 UPDATE CORPDATA/EMPLOYEE 500051 SET SALARY = SALARY * :PERCENTAGE 510052 WHERE COMM >= :COMMISSION ; 520053 530054 /* Commit changes */ 540055 5 EXEC SQL 550056 COMMIT; 560057 EXEC SQL WHENEVER SQLERROR GO TO REPORT_ERROR; 570058 5800

186 IBM i: ����� �� SQL �����

Page 197: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

xxxxST1 VxRxMx yymmdd Create SQL PL/I Program PLIEX 08/06/07 12:53:36 Page 3Record *...+... 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 SEQNBR Last change

59 /* Report the updated statistics for each project supported by one */ 590060 /* of the selected employees. */ 600061 610062 /* Write out the header for Report 1 */ 620063 put file(sysprint) 630064 edit('REPORT OF PROJECTS AFFECTED BY EMPLOYEE RAISES') 640065 (col(22),a); 650066 put file(sysprint) 660067 edit('PROJECT','EMPID','EMPLOYEE NAME','SALARY') 670068 (skip(2),col(1),a,col(10),a,col(20),a,col(55),a); 680069 690070 6 exec sql 700071 declare c1 cursor for 710072 select DISTINCT projno, EMPPROJACT.empno, 720073 lastname||', '||firstnme, salary 730074 from CORPDATA/EMPPROJACT, CORPDATA/EMPLOYEE 740075 where EMPPROJACT.empno = EMPLOYEE.empno and 750076 comm >= :COMMISSION 760077 order by projno, empno; 770078 7 EXEC SQL 780079 OPEN C1; 790080 800081 /* Fetch and write the rows to SYSPRINT */ 810082 8 EXEC SQL WHENEVER NOT FOUND GO TO DONE1; 820083 830084 DO UNTIL (SQLCODE ^= 0); 840085 9 EXEC SQL 850086 FETCH C1 INTO :RPT1.PROJNO, :rpt1.EMPNO, :RPT1.NAME, 860087 :RPT1.SALARY; 870088 PUT FILE(SYSPRINT) 880089 EDIT(RPT1.PROJNO,RPT1.EMPNO,RPT1.NAME,RPT1.SALARY) 890090 (SKIP,COL(1),A,COL(10),A,COL(20),A,COL(54),F(8,2)); 900091 END; 910092 920093 DONE1: 930094 10 EXEC SQL 940095 CLOSE C1; 950096 960097 /* For all projects ending at a date later than 'raise_date' */ 970098 /* (that is, those projects potentially affected by the salary */ 980099 /* raises), generate a report containing the project number, */ 9900100 /* project name, the count of employees participating in the */ 10000101 /* project, and the total salary cost of the project. */ 10100102 10200103 /* Write out the header for Report 2 */ 10300104 PUT FILE(SYSPRINT) EDIT('ACCUMULATED STATISTICS BY PROJECT') 10400105 (SKIP(3),COL(22),A); 10500106 PUT FILE(SYSPRINT) 10600107 EDIT('PROJECT','NUMBER OF','TOTAL') 10700108 (SKIP(2),COL(1),A,COL(48),A,COL(63),A); 10800109 PUT FILE(SYSPRINT) 10900110 EDIT('NUMBER','PROJECT NAME','EMPLOYEES','COST') 11000111 (SKIP,COL(1),A,COL(10),A,COL(48),A,COL(63),A,SKIP); 11100112 11200

�� SQL ����� 187

Page 198: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

xxxxST1 VxRxMx yymmdd Create SQL PL/I Program PLIEX 08/06/07 12:53:36 Page 4Record *...+... 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 SEQNBR Last change113 11 EXEC SQL 11300114 DECLARE C2 CURSOR FOR 11400115 SELECT EMPPROJACT.PROJNO, PROJNAME, COUNT(*), 11500116 SUM( (DAYS(EMENDATE) - DAYS(EMSTDATE)) * EMPTIME * 11600117 DECIMAL(( SALARY / :WORK_DAYS ),8,2) ) 11700118 FROM CORPDATA/EMPPROJACT, CORPDATA/PROJECT, CORPDATA/EMPLOYEE 11800119 WHERE EMPPROJACT.PROJNO=PROJECT.PROJNO AND 11900120 EMPPROJACT.EMPNO =EMPLOYEE.EMPNO AND 12000121 PRENDATE > :RAISE_DATE 12100122 GROUP BY EMPPROJACT.PROJNO, PROJNAME 12200123 ORDER BY 1; 12300124 EXEC SQL 12400125 OPEN C2; 12500126 12600127 /* Fetch and write the rows to SYSPRINT */ 12700128 EXEC SQL WHENEVER NOT FOUND GO TO DONE2; 12800129 12900130 DO UNTIL (SQLCODE ^= 0); 13000131 12 EXEC SQL 13100132 FETCH C2 INTO :RPT2; 13200133 PUT FILE(SYSPRINT) 13300134 EDIT(RPT2.PROJNO,RPT2.PROJECT_NAME,EMPLOYEE_COUNT, 13400135 TOTL_PROJ_COST) 13500136 (SKIP,COL(1),A,COL(10),A,COL(50),F(4),COL(62),F(8,2)); 13600137 END; 13700138 13800139 DONE2: 13900140 EXEC SQL 14000141 CLOSE C2; 14100142 GO TO FINISHED; 14200143 14300144 /* Error occurred while updating table. Inform user and roll back */ 14400145 /* changes. */ 14500146 UPDATE_ERROR: 14600147 13 EXEC SQL WHENEVER SQLERROR CONTINUE; 14700148 PUT FILE(SYSPRINT) EDIT('*** ERROR Occurred while updating table.'|| 14800149 ' SQLCODE=',SQLCODE)(A,F(5)); 14900150 14 EXEC SQL 15000151 ROLLBACK; 15100152 GO TO FINISHED; 15200153 15300154 /* Error occurred while generating reports. Inform user and exit. */ 15400155 REPORT_ERROR: 15500156 PUT FILE(SYSPRINT) EDIT('*** ERROR Occurred while generating '|| 15600157 'reports. SQLCODE=',SQLCODE)(A,F(5)); 15700158 GO TO FINISHED; 15800159 15900160 /* All done */ 16000161 FINISHED: 16100162 CLOSE FILE(SYSPRINT); 16200163 RETURN; 16300164 16400165 END PLIEX; 16500

* * * * * E N D O F S O U R C E * * * * *

188 IBM i: ����� �� SQL �����

Page 199: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

xxxxST1 VxRxMx yymmdd Create SQL PL/I Program PLIEX 08/06/07 12:53:36 Page 5CROSS REFERENCEData Names Define ReferenceACTNO 74 SMALL INTEGER PRECISION(4,0) COLUMN (NOT NULL) IN CORPDATA.EMPPROJACTBIRTHDATE 74 DATE(10) COLUMN IN CORPDATA.EMPLOYEEBONUS 74 DECIMAL(9,2) COLUMN IN CORPDATA.EMPLOYEECOMM **** COLUMN

52 76COMM 74 DECIMAL(9,2) COLUMN IN CORPDATA.EMPLOYEECOMMISSION 18 DECIMAL(8,2)

52 76CORPDATA **** SCHEMA

50 74 74 118 118 118C1 71 CURSOR

79 86 95C2 114 CURSOR

125 132 141DEPTNO 26 CHARACTER(3) IN RPT1DEPTNO 118 CHARACTER(3) COLUMN (NOT NULL) IN CORPDATA.PROJECTDONE1 **** LABEL

82DONE2 **** LABEL

128EDLEVEL 74 SMALL INTEGER PRECISION(4,0) COLUMN (NOT NULL) IN CORPDATA.EMPLOYEEEMENDATE 74 DATE(10) COLUMN IN CORPDATA.EMPPROJACTEMENDATE **** COLUMN

116EMPLOYEE **** TABLE IN CORPDATA

50 74 118EMPLOYEE **** TABLE

75 120EMPLOYEE_COUNT 35 SMALL INTEGER PRECISION(4,0) IN RPT2EMPNO 27 CHARACTER(6) IN RPT1

86EMPNO **** COLUMN IN EMPPROJACT

72 75 77 120EMPNO **** COLUMN IN EMPLOYEE

75 120EMPNO 74 CHARACTER(6) COLUMN (NOT NULL) IN CORPDATA.EMPPROJACTEMPNO 74 CHARACTER(6) COLUMN (NOT NULL) IN CORPDATA.EMPLOYEEEMPPROJACT **** TABLE

72 75 115 119 120 122EMPPROJACT **** TABLE IN CORPDATA

74 118EMPTIME 74 DECIMAL(5,2) COLUMN IN CORPDATA.EMPPROJACTEMPTIME **** COLUMN

116EMSTDATE 74 DATE(10) COLUMN IN CORPDATA.EMPPROJACTEMSTDATE **** COLUMN

116FIRSTNME **** COLUMN

73FIRSTNME 74 VARCHAR(12) COLUMN (NOT NULL) IN CORPDATA.EMPLOYEEHIREDATE 74 DATE(10) COLUMN IN CORPDATA.EMPLOYEEJOB 74 CHARACTER(8) COLUMN IN CORPDATA.EMPLOYEELASTNAME **** COLUMN

73LASTNAME 74 VARCHAR(15) COLUMN (NOT NULL) IN CORPDATA.EMPLOYEEMAJPROJ 26 CHARACTER(6) IN RPT1MAJPROJ 118 CHARACTER(6) COLUMN IN CORPDATA.PROJECTMIDINIT 74 CHARACTER(1) COLUMN (NOT NULL) IN CORPDATA.EMPLOYEENAME 28 CHARACTER(30) IN RPT1

86PERCENTAGE 19 DECIMAL(5,2)

51PHONENO 74 CHARACTER(4) COLUMN IN CORPDATA.EMPLOYEE

�� SQL ����� 189

Page 200: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

�� ��

84 ���� �PL/I ������� SQL� ���

PL/I ���� SQL�� ��� �� �� � ����� � �� ����� ��� ����. �

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

: RPG/400 ��� SQL�

� �� ���� RPG ����� ��� ����.

�: � ��� ���� 210 ���� �� ���� � ���� ���� ��� ���� ���.

xxxxST1 VxRxMx yymmdd Create SQL PL/I Program PLIEX 08/06/07 12:53:36 Page 6CROSS REFERENCEPRENDATE 26 DATE(10) IN RPT1PRENDATE **** COLUMN

121PRENDATE 118 DATE(10) COLUMN IN CORPDATA.PROJECTPROJECT **** TABLE IN CORPDATA

118PROJECT **** TABLE

119PROJECT_NAME 34 CHARACTER(36) IN RPT2PROJNAME 26 VARCHAR(24) IN RPT1PROJNAME **** COLUMN

115 122PROJNAME 118 VARCHAR(24) COLUMN (NOT NULL) IN CORPDATA.PROJECTPROJNO 26 CHARACTER(6) IN RPT1

86PROJNO 33 CHARACTER(6) IN RPT2PROJNO **** COLUMN

72 77PROJNO 74 CHARACTER(6) COLUMN (NOT NULL) IN CORPDATA.EMPPROJACTPROJNO **** COLUMN IN EMPPROJACT

115 119 122PROJNO **** COLUMN IN PROJECT

119PROJNO 118 CHARACTER(6) COLUMN (NOT NULL) IN CORPDATA.PROJECTPRSTAFF 26 DECIMAL(5,2) IN RPT1PRSTAFF 118 DECIMAL(5,2) COLUMN IN CORPDATA.PROJECTPRSTDATE 26 DATE(10) IN RPT1PRSTDATE 118 DATE(10) COLUMN IN CORPDATA.PROJECTRAISE_DATE 16 CHARACTER(10)

121REPORT_ERROR **** LABEL

57RESPEMP 26 CHARACTER(6) IN RPT1RESPEMP 118 CHARACTER(6) COLUMN (NOT NULL) IN CORPDATA.PROJECTRPT1 25 STRUCTURERPT2 32 STRUCTURE

132SALARY 29 DECIMAL(8,2) IN RPT1

87SALARY **** COLUMN

51 51 73 117SALARY 74 DECIMAL(9,2) COLUMN IN CORPDATA.EMPLOYEESEX 74 CHARACTER(1) COLUMN IN CORPDATA.EMPLOYEESYSPRINT 22TOTL_PROJ_COST 36 DECIMAL(10,2) IN RPT2UPDATE_ERROR **** LABEL

48WORK_DAYS 17 SMALL INTEGER PRECISION(4,0)

117WORKDEPT 74 CHARACTER(3) COLUMN IN CORPDATA.EMPLOYEENo errors found in source165 Source records processed

* * * * * E N D O F L I S T I N G * * * * *

190 IBM i: ����� �� SQL �����

Page 201: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

xxxxST1 VxRxMx yymmdd Create SQL RPG Program RPGEX 08/06/07 12:55:22 Page 1Source type...............RPGProgram name..............CORPDATA/RPGEXSource file...............CORPDATA/SRCMember....................RPGEXTo source file............QTEMP/QSQLTEMPOptions...................*SRC *XREFTarget release............VxRxMxINCLUDE file..............*SRCFILECommit....................*CHGAllow copy of data........*YESClose SQL cursor..........*ENDPGMAllow blocking............*READDelay PREPARE.............*NOGeneration level..........10Printer file..............*LIBL/QSYSPRTDate format...............*JOBDate separator............*JOBTime format...............*HMSTime separator ...........*JOBReplace...................*YESRelational database.......*LOCALUser .....................*CURRENTRDB connect method........*DUWDefault collection........*NONEDynamic defaultcollection..............*NO

Package name..............*PGMLIB/*PGMPath......................*NAMINGSQL rules.................*DB2User profile..............*NAMINGDynamic user profile......*USERSort sequence.............*JOBLanguage ID...............*JOBIBM SQL flagging..........*NOFLAGANS flagging..............*NONEText......................*SRCMBRTXTSource file CCSID.........65535Job CCSID.................65535Decimal result options:Maximum precision.......31Maximum scale...........31Minimum divide scale....0

DECFLOAT rounding mode....*HALFEVENCompiler options..........*NONESource member changed on 07/01/96 17:06:17

�� 6. SQL�� ���� � RPG/400 ���

�� SQL ����� 191

Page 202: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

xxxxST1 VxRxMx yymmdd Create SQL RPG Program RPGEX 08/06/07 12:55:22 Page 2Record *...+... 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 SEQNBR Last change

1 H 1002 F* File declaration for QPRINT 2003 F* 3004 FQPRINT O F 132 PRINTER 4005 I* 5006 I* Structure for report 1. 6007 I* 7008 1 IRPT1 E DSPROJECT 8009 I PROJNAME PROJNM 90010 I RESPEMP RESEM 100011 I PRSTAFF STAFF 110012 I PRSTDATE PRSTD 120013 I PRENDATE PREND 130014 I MAJPROJ MAJPRJ 140015 I* 150016 I DS 160017 I 1 6 EMPNO 170018 I 7 36 NAME 180019 I P 37 412SALARY 190020 I* 200021 I* Structure for report 2. 210022 I* 220023 IRPT2 DS 230024 I 1 6 PRJNUM 240025 I 7 42 PNAME 250026 I B 43 440EMPCNT 260027 I P 45 492PRCOST 270028 I* 280029 I DS 290030 I B 1 20WRKDAY 300031 I P 3 62COMMI 310032 I 7 16 RDATE 320033 I P 17 202PERCNT 330034 2 C* 340035 C Z-ADD253 WRKDAY 350036 C Z-ADD2000.00 COMMI 360037 C Z-ADD1.04 PERCNT 370038 C MOVEL'1982-06-'RDATE 380039 C MOVE '01' RDATE 390040 C SETON LR 390141 C* 400042 C* Update the selected projects by the new percentage. If an 410043 C* error occurs during the update, roll back the changes. 420044 C* 430045 3 C/EXEC SQL WHENEVER SQLERROR GOTO UPDERR 440046 C/END-EXEC 450047 C* 460048 4 C/EXEC SQL 470049 C+ UPDATE CORPDATA/EMPLOYEE 480050 C+ SET SALARY = SALARY * :PERCNT 490051 C+ WHERE COMM >= :COMMI 500052 C/END-EXEC 510053 C* 520054 C* Commit changes. 530055 C* 540056 5 C/EXEC SQL COMMIT 550057 C/END-EXEC 560058 C* 570059 C/EXEC SQL WHENEVER SQLERROR GO TO RPTERR 580060 C/END-EXEC 5900

192 IBM i: ����� �� SQL �����

Page 203: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

xxxxST1 VxRxMx yymmdd Create SQL RPG Program RPGEX 08/06/07 12:55:22 Page 3Record *...+... 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 SEQNBR Last change

61 C* 600062 C* Report the updated statistics for each employee assigned to 610063 C* selected projects. 620064 C* 630065 C* Write out the header for report 1. 640066 C* 650067 C EXCPTRECA 660068 6 C/EXEC SQL DECLARE C1 CURSOR FOR 670069 C+ SELECT DISTINCT PROJNO, EMPPROJACT.EMPNO, 680070 C+ LASTNAME||', '||FIRSTNME, SALARY 690071 C+ FROM CORPDATA/EMPPROJACT, CORPDATA/EMPLOYEE 700072 C+ WHERE EMPPROJACT.EMPNO = EMPLOYEE.EMPNO AND 710073 C+ COMM >= :COMMI 720074 C+ ORDER BY PROJNO, EMPNO 730075 C/END-EXEC 740076 C* 750077 7 C/EXEC SQL 760078 C+ OPEN C1 770079 C/END-EXEC 780080 C* 790081 C* Fetch and write the rows to QPRINT. 800082 C* 810083 8 C/EXEC SQL WHENEVER NOT FOUND GO TO DONE1 820084 C/END-EXEC 830085 C SQLCOD DOUNE0 840086 C/EXEC SQL 850087 9 C+ FETCH C1 INTO :PROJNO, :EMPNO, :NAME, :SALARY 860088 C/END-EXEC 870089 C EXCPTRECB 880090 C END 890091 C DONE1 TAG 900092 C/EXEC SQL 910093 10 C+ CLOSE C1 920094 C/END-EXEC 930095 C* 940096 C* For all project ending at a date later than the raise date 950097 C* (that is, those projects potentially affected by the salary raises), 960098 C* generate a report containing the project number, project name, 970099 C* the count of employees participating in the project, and the 9800100 C* total salary cost of the project. 9900101 C* 10000102 C* Write out the header for report 2. 10100103 C* 10200104 C EXCPTRECC 10300105 11 C/EXEC SQL 10400106 C+ DECLARE C2 CURSOR FOR 10500107 C+ SELECT EMPPROJACT.PROJNO, PROJNAME, COUNT(*), 10600108 C+ SUM((DAYS(EMENDATE) - DAYS(EMSTDATE)) * EMPTIME * 10700109 C+ DECIMAL((SALARY/:WRKDAY),8,2)) 10800110 C+ FROM CORPDATA/EMPPROJACT, CORPDATA/PROJECT, CORPDATA/EMPLOYEE 10900111 C+ WHERE EMPPROJACT.PROJNO = PROJECT.PROJNO AND 11000112 C+ EMPPROJACT.EMPNO = EMPLOYEE.EMPNO AND 11100113 C+ PRENDATE > :RDATE 11200114 C+ GROUP BY EMPPROJACT.PROJNO, PROJNAME 11300115 C+ ORDER BY 1 11400116 C/END-EXEC 11500117 C* 11600118 C/EXEC SQL OPEN C2 11700119 C/END-EXEC 11800120 C* 11900121 C* Fetch and write the rows to QPRINT. 12000122 C* 12100123 C/EXEC SQL WHENEVER NOT FOUND GO TO DONE2 12200124 C/END-EXEC 12300

�� SQL ����� 193

Page 204: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

xxxxST1 VxRxMx yymmdd Create SQL RPG Program RPGEX 08/06/07 12:55:22 Page 4125 C SQLCOD DOUNE0 12400126 C/EXEC SQL 12500127 12 C+ FETCH C2 INTO :RPT2 12600128 C/END-EXEC 12700129 C EXCPTRECD 12800130 C END 12900131 C DONE2 TAG 13000132 C/EXEC SQL CLOSE C2 13100133 C/END-EXEC 13200134 C RETRN 13300135 C* 13400136 C* Error occurred while updating table. Inform user and roll back 13500137 C* changes. 13600138 C* 13700139 C UPDERR TAG 13800140 C EXCPTRECE 13900141 13 C/EXEC SQL WHENEVER SQLERROR CONTINUE 14000142 C/END-EXEC 14100143 C* 14200144 14 C/EXEC SQL 14300145 C+ ROLLBACK 14400146 C/END-EXEC 14500147 C RETRN 14600148 C* 14700149 C* Error occurred while generating reports. Inform user and exit. 14800150 C* 14900151 C RPTERR TAG 15000152 C EXCPTRECF 15100153 C* 15200154 C* All done. 15300155 C* 15400156 C FINISH TAG 15500157 OQPRINT E 0201 RECA 15700158 O 45 'REPORT OF PROJECTS AFFEC' 15800159 O 64 'TED BY EMPLOYEE RAISES' 15900160 O E 01 RECA 16000161 O 7 'PROJECT' 16100162 O 17 'EMPLOYEE' 16200163 O 32 'EMPLOYEE NAME' 16300164 O 60 'SALARY' 16400165 O E 01 RECB 16500166 O PROJNO 6 16600167 O EMPNO 15 16700168 O NAME 50 16800169 O SALARYL 61 16900170 O E 22 RECC 17000171 O 42 'ACCUMULATED STATISTIC' 17100172 O 54 'S BY PROJECT' 17200173 O E 01 RECC 17300174 O 7 'PROJECT' 17400175 O 56 'NUMBER OF' 17500176 O 67 'TOTAL' 17600177 O E 02 RECC 17700178 O 6 'NUMBER' 17800179 O 21 'PROJECT NAME' 17900180 O 56 'EMPLOYEES' 18000181 O 66 'COST' 18100182 O E 01 RECD 18200183 O PRJNUM 6 18300184 O PNAME 45 18400185 O EMPCNTL 54 18500186 O PRCOSTL 70 18600187 O E 01 RECE 18700188 O 28 '*** ERROR Occurred while' 18800189 O 52 ' updating table. SQLCODE' 18900190 O 53 '=' 19000191 O SQLCODL 62 19100192 O E 01 RECF 19200193 O 28 '*** ERROR Occurred while' 19300194 O 52 ' generating reports. SQL' 19400195 O 57 'CODE=' 19500196 O SQLCODL 67 19600

* * * * * E N D O F S O U R C E * * * * *

194 IBM i: ����� �� SQL �����

Page 205: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

xxxxST1 VxRxMx yymmdd Create SQL RPG Program RPGEX 08/06/07 12:55:22 Page 5CROSS REFERENCEData Names Define ReferenceACTNO 68 SMALL INTEGER PRECISION(4,0) COLUMN (NOT NULL) IN CORPDATA.EMPPROJACTBIRTHDATE 48 DATE(10) COLUMN IN CORPDATA.EMPLOYEEBONUS 48 DECIMAL(9,2) COLUMN IN CORPDATA.EMPLOYEECOMM **** COLUMN

48 68COMM 48 DECIMAL(9,2) COLUMN IN CORPDATA.EMPLOYEECOMMI 31 DECIMAL(7,2)

48 68CORPDATA **** SCHEMA

48 68 68 105 105 105C1 68 CURSOR

77 86 92C2 105 CURSOR

118 126 132DEPTNO 8 CHARACTER(3) IN RPT1DEPTNO 105 CHARACTER(3) COLUMN (NOT NULL) IN CORPDATA.PROJECTDONE1 91 LABEL

83DONE2 131 LABEL

123EDLEVEL 48 SMALL INTEGER PRECISION(4,0) COLUMN (NOT NULL) IN CORPDATA.EMPLOYEEEMENDATE 68 DATE(10) COLUMN IN CORPDATA.EMPPROJACTEMENDATE **** COLUMN

105EMPCNT 26 SMALL INTEGER PRECISION(4,0) IN RPT2EMPLOYEE **** TABLE IN CORPDATA

48 68 105EMPLOYEE **** TABLE

68 105EMPNO 17 CHARACTER(6)

86EMPNO 48 CHARACTER(6) COLUMN (NOT NULL) IN CORPDATA.EMPLOYEEEMPNO **** COLUMN IN EMPPROJACT

68 68 68 105EMPNO **** COLUMN IN EMPLOYEE

68 105EMPNO 68 CHARACTER(6) COLUMN (NOT NULL) IN CORPDATA.EMPPROJACTEMPPROJACT **** TABLE

68 68 105 105 105 105EMPPROJACT **** TABLE IN CORPDATA

68 105EMPTIME 68 DECIMAL(5,2) COLUMN IN CORPDATA.EMPPROJACTEMPTIME **** COLUMN

105EMSTDATE 68 DATE(10) COLUMN IN CORPDATA.EMPPROJACTEMSTDATE **** COLUMN

105FINISH 156 LABELFIRSTNME 48 VARCHAR(12) COLUMN (NOT NULL) IN CORPDATA.EMPLOYEEFIRSTNME **** COLUMN

68HIREDATE 48 DATE(10) COLUMN IN CORPDATA.EMPLOYEEJOB 48 CHARACTER(8) COLUMN IN CORPDATA.EMPLOYEELASTNAME 48 VARCHAR(15) COLUMN (NOT NULL) IN CORPDATA.EMPLOYEELASTNAME **** COLUMN

68MAJPRJ 8 CHARACTER(6) IN RPT1MAJPROJ 105 CHARACTER(6) COLUMN IN CORPDATA.PROJECTMIDINIT 48 CHARACTER(1) COLUMN (NOT NULL) IN CORPDATA.EMPLOYEENAME 18 CHARACTER(30)

86PERCNT 33 DECIMAL(7,2)

48PHONENO 48 CHARACTER(4) COLUMN IN CORPDATA.EMPLOYEEPNAME 25 CHARACTER(36) IN RPT2PRCOST 27 DECIMAL(9,2) IN RPT2PREND 8 DATE(10) IN RPT1PRENDATE **** COLUMN

105

�� SQL ����� 195

Page 206: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

�� ��

101 ���� �RPG/400 ������� SQL� ���

RPG/400 ����� �� ���� RPG II ���� RPG III ���� �� �����.

: ILE RPG ��� SQL�

� �� ���� ILE RPG ����� ��� ����.

�: � ��� ���� 210 ���� �� ���� � ���� ���� ��� ���� ���.

xxxxST1 VxRxMx yymmdd Create SQL RPG Program RPGEX 08/06/07 12:55:22 Page 6PRENDATE 105 DATE(10) COLUMN IN CORPDATA.PROJECTPRJNUM 24 CHARACTER(6) IN RPT2CROSS REFERENCEPROJECT **** TABLE IN CORPDATA

105PROJECT **** TABLE

105PROJNAME **** COLUMN

105 105PROJNAME 105 VARCHAR(24) COLUMN (NOT NULL) IN CORPDATA.PROJECTPROJNM 8 VARCHAR(24) IN RPT1PROJNO 8 CHARACTER(6) IN RPT1

86PROJNO **** COLUMN

68 68PROJNO 68 CHARACTER(6) COLUMN (NOT NULL) IN CORPDATA.EMPPROJACTPROJNO **** COLUMN IN EMPPROJACT

105 105 105PROJNO **** COLUMN IN PROJECT

105PROJNO 105 CHARACTER(6) COLUMN (NOT NULL) IN CORPDATA.PROJECTPRSTAFF 105 DECIMAL(5,2) COLUMN IN CORPDATA.PROJECTPRSTD 8 DATE(10) IN RPT1PRSTDATE 105 DATE(10) COLUMN IN CORPDATA.PROJECTRDATE 32 CHARACTER(10)

105RESEM 8 CHARACTER(6) IN RPT1RESPEMP 105 CHARACTER(6) COLUMN (NOT NULL) IN CORPDATA.PROJECTRPTERR 151 LABEL

59RPT1 8 STRUCTURERPT2 23 STRUCTURE

126SALARY 19 DECIMAL(9,2)

86SALARY **** COLUMN

48 48 68 105SALARY 48 DECIMAL(9,2) COLUMN IN CORPDATA.EMPLOYEESEX 48 CHARACTER(1) COLUMN IN CORPDATA.EMPLOYEESTAFF 8 DECIMAL(5,2) IN RPT1UPDERR 139 LABEL

45WORKDEPT 48 CHARACTER(3) COLUMN IN CORPDATA.EMPLOYEEWRKDAY 30 SMALL INTEGER PRECISION(4,0)

105No errors found in source196 Source records processed

* * * * * E N D O F L I S T I N G * * * * *

196 IBM i: ����� �� SQL �����

Page 207: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

xxxxST1 VxRxMx yymmdd Create SQL ILE RPG Object RPGLEEX 08/06/07 16:03:02 Page 1Source type...............RPGObject name...............CORPDATA/RPGLEEXSource file...............CORPDATA/SRCMember....................*OBJTo source file............QTEMP/QSQLTEMP1Options...................*XREFRPG preprocessor options..*NONEListing option............*PRINTTarget release............VxRxMxINCLUDE file..............*SRCFILECommit....................*CHGAllow copy of data........*YESClose SQL cursor..........*ENDMODAllow blocking............*READDelay PREPARE.............*NOGeneration level..........10Printer file..............*LIBL/QSYSPRTDate format...............*JOBDate separator............*JOBTime format...............*HMSTime separator ...........*JOBReplace...................*YESRelational database.......*LOCALUser .....................*CURRENTRDB connect method........*DUWDefault collection........*NONEDynamic defaultcollection..............*NO

Package name..............*OBJLIB/*OBJPath......................*NAMINGSQL rules.................*DB2Created object type.......*PGMDebugging view............*NONEUser profile..............*NAMINGDynamic user profile......*USERSort sequence.............*JOBLanguage ID...............*JOBIBM SQL flagging..........*NOFLAGANS flagging..............*NONEText......................*SRCMBRTXTSource file CCSID.........65535Job CCSID.................65535Decimal result options:Maximum precision.......31Maximum scale...........31Minimum divide scale....0

DECFLOAT rounding mode....*HALFEVENCompiler options..........*NONESource member changed on 07/01/96 15:55:32

�� 7. SQL�� ���� � ILE RPG ���

�� SQL ����� 197

Page 208: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

xxxxST1 VxRxMx yymmdd Create SQL ILE RPG Object RPGLEEX 08/06/07 16:03:02 Page 2Record *...+... 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 SEQNBR Last change Comments

1 H 1002 F* File declaration for QPRINT 2003 F* 3004 FQPRINT O F 132 PRINTER 4005 D* 5006 D* Structure for report 1. 6007 D* 7008 1 DRPT1 E DS EXTNAME(PROJECT) 8009 D* 900

10 D DS 100011 D EMPNO 1 6 110012 D NAME 7 36 120013 D SALARY 37 41P 2 130014 D* 140015 D* Structure for report 2. 150016 D* 160017 DRPT2 DS 170018 D PRJNUM 1 6 180019 D PNAME 7 42 190020 D EMPCNT 43 44B 0 200021 D PRCOST 45 49P 2 210022 D* 220023 D DS 230024 D WRKDAY 1 2B 0 240025 D COMMI 3 6P 2 250026 D RDATE 7 16 260027 D PERCNT 17 20P 2 270028 * 280029 2 C Z-ADD 253 WRKDAY 290030 C Z-ADD 2000.00 COMMI 300031 C Z-ADD 1.04 PERCNT 310032 C MOVEL '1982-06-' RDATE 320033 C MOVE '01' RDATE 330034 C SETON LR 340035 C* 350036 C* Update the selected projects by the new percentage. If an 360037 C* error occurs during the update, roll back the changes. 370038 C* 380039 3 C/EXEC SQL WHENEVER SQLERROR GOTO UPDERR 390040 C/END-EXEC 400041 C* 410042 C/EXEC SQL 420043 4 C+ UPDATE CORPDATA/EMPLOYEE 430044 C+ SET SALARY = SALARY * :PERCNT 440045 C+ WHERE COMM >= :COMMI 450046 C/END-EXEC 460047 C* 470048 C* Commit changes. 480049 C* 490050 5 C/EXEC SQL COMMIT 500051 C/END-EXEC 510052 C* 520053 C/EXEC SQL WHENEVER SQLERROR GO TO RPTERR 530054 C/END-EXEC 540055 C* 550056 C* Report the updated statistics for each employee assigned to 560057 C* selected projects. 570058 C* 5800

12000

198 IBM i: ����� �� SQL �����

Page 209: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

xxxxST1 VxRxMx yymmdd Create SQL ILE RPG Object RPGLEEX 08/06/07 16:03:02 Page 3Record *...+... 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 SEQNBR Last change Comments59 C* Write out the header for report 1. 590060 C* 600061 C EXCEPT RECA 610062 6 C/EXEC SQL DECLARE C1 CURSOR FOR 620063 C+ SELECT DISTINCT PROJNO, EMPPROJACT.EMPNO, 630064 C+ LASTNAME||', '||FIRSTNME, SALARY 640065 C+ FROM CORPDATA/EMPPROJACT, CORPDATA/EMPLOYEE 650066 C+ WHERE EMPPROJACT.EMPNO = EMPLOYEE.EMPNO AND 660067 C+ COMM >= :COMMI 670068 C+ ORDER BY PROJNO, EMPNO 680069 C/END-EXEC 690070 C* 700071 7 C/EXEC SQL 710072 C+ OPEN C1 720073 C/END-EXEC 730074 C* 740075 C* Fetch and write the rows to QPRINT. 750076 C* 760077 8 C/EXEC SQL WHENEVER NOT FOUND GO TO DONE1 770078 C/END-EXEC 780079 C SQLCOD DOUNE 0 790080 C/EXEC SQL 800081 9 C+ FETCH C1 INTO :PROJNO, :EMPNO, :NAME, :SALARY 810082 C/END-EXEC 820083 C EXCEPT RECB 830084 C END 840085 C DONE1 TAG 850086 C/EXEC SQL 860087 10 C+ CLOSE C1 870088 C/END-EXEC 880089 C* 890090 C* For all project ending at a date later than the raise date 900091 C* (that is, those projects potentially affected by the salary raises), 910092 C* generate a report containing the project number, project name, 920093 C* the count of employees participating in the project, and the 930094 C* total salary cost of the project. 940095 C* 950096 C* Write out the header for report 2. 960097 C* 970098 C EXCEPT RECC 980099 C/EXEC SQL 9900

100 11 C+ DECLARE C2 CURSOR FOR 10000101 C+ SELECT EMPPROJACT.PROJNO, PROJNAME, COUNT(*), 10100102 C+ SUM((DAYS(EMENDATE) - DAYS(EMSTDATE)) * EMPTIME * 10200103 C+ DECIMAL((SALARY/:WRKDAY),8,2)) 10300104 C+ FROM CORPDATA/EMPPROJACT, CORPDATA/PROJECT, CORPDATA/EMPLOYEE 10400105 C+ WHERE EMPPROJACT.PROJNO = PROJECT.PROJNO AND 10500106 C+ EMPPROJACT.EMPNO = EMPLOYEE.EMPNO AND 10600107 C+ PRENDATE > :RDATE 10700108 C+ GROUP BY EMPPROJACT.PROJNO, PROJNAME 10800109 C+ ORDER BY 1 10900110 C/END-EXEC 11000111 C* 11100112 C/EXEC SQL OPEN C2 11200113 C/END-EXEC 11300114 C* 11400115 C* Fetch and write the rows to QPRINT. 11500116 C* 11600117 C/EXEC SQL WHENEVER NOT FOUND GO TO DONE2 11700118 C/END-EXEC 11800119 C SQLCOD DOUNE 0 11900120 C/EXEC SQL121 12 C+ FETCH C2 INTO :RPT2 12100122 C/END-EXEC 12200123 C EXCEPT RECD 12300

�� SQL ����� 199

Page 210: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

xxxxST1 VxRxMx yymmdd Create SQL ILE RPG Object RPGLEEX 08/06/07 16:03:02 Page 4124 C END 12400125 C DONE2 TAG 12500126 C/EXEC SQL CLOSE C2 12600127 C/END-EXEC 12700128 C RETURN 12800129 C* 12900130 C* Error occurred while updating table. Inform user and roll back 13000131 C* changes. 13100132 C* 13200133 C UPDERR TAG 13300134 C EXCEPT RECE 13400135 13 C/EXEC SQL WHENEVER SQLERROR CONTINUE 13500136 C/END-EXEC 13600137 C* 13700138 14 C/EXEC SQL 13800139 C+ ROLLBACK 13900140 C/END-EXEC 14000141 C RETURN 14100142 C* 14200143 C* Error occurred while generating reports. Inform user and exit. 14300144 C* 14400145 C RPTERR TAG 14500146 C EXCEPT RECF 14600147 C* 14700148 C* All done. 14800149 C* 14900150 C FINISH TAG 15000151 OQPRINT E RECA 0 2 01 15100152 O 42 'REPORT OF PROJECTS AFFEC' 15200153 O 64 'TED BY EMPLOYEE RAISES' 15300154 O E RECA 0 1 15400155 O 7 'PROJECT' 15500156 O 17 'EMPLOYEE' 15600157 O 32 'EMPLOYEE NAME' 15700158 O 60 'SALARY' 15800159 O E RECB 0 1 15900160 O PROJNO 6 16000161 O EMPNO 15 16100162 O NAME 50 16200163 O SALARY L 61 16300164 O E RECC 2 2 16400165 O 42 'ACCUMULATED STATISTIC' 16500166 O 54 'S BY PROJECT' 16600167 O E RECC 0 1 16700168 O 7 'PROJECT' 16800169 O 56 'NUMBER OF' 16900170 O 67 'TOTAL' 17000171 O E RECC 0 2 17100172 O 6 'NUMBER' 17200173 O 21 'PROJECT NAME' 17300174 O 56 'EMPLOYEES' 17400175 O 66 'COST' 17500176 O E RECD 0 1 17600177 O PRJNUM 6 17700178 O PNAME 45 17800179 O EMPCNT L 54 17900180 O PRCOST L 70 18000181 O E RECE 0 1 18100182 O 28 '*** ERROR Occurred while' 18200183 O 52 ' updating table. SQLCODE' 18300184 O 53 '=' 18400185 O SQLCOD L 62 18500186 O E RECF 0 1 18600187 O 28 '*** ERROR Occurred while' 18700188 O 52 ' generating reports. SQL' 18800189 O 57 'CODE=' 18900190 O SQLCOD L 67 19000

* * * * * E N D O F S O U R C E * * * * *

200 IBM i: ����� �� SQL �����

Page 211: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

xxxxST1 VxRxMx yymmdd Create SQL ILE RPG Object RPGLEEX 08/06/07 16:03:02 Page 5CROSS REFERENCEData Names Define ReferenceACTNO 62 SMALL INTEGER PRECISION(4,0) COLUMN (NOT NULL) IN CORPDATA.EMPPROJACTBIRTHDATE 42 DATE(10) COLUMN IN CORPDATA.EMPLOYEEBONUS 42 DECIMAL(9,2) COLUMN IN CORPDATA.EMPLOYEECOMM **** COLUMN

42 62COMM 42 DECIMAL(9,2) COLUMN IN CORPDATA.EMPLOYEECOMMI 25 DECIMAL(7,2)

42 62CORPDATA **** SCHEMA

42 62 62 99 99 99C1 62 CURSOR

71 80 86C2 99 CURSOR

112 120 126DEPTNO 8 CHARACTER(3) IN RPT1DEPTNO 99 CHARACTER(3) COLUMN (NOT NULL) IN CORPDATA.PROJECTDONE1 85DONE1 **** LABEL

77DONE2 125DONE2 **** LABEL

117EDLEVEL 42 SMALL INTEGER PRECISION(4,0) COLUMN (NOT NULL) IN CORPDATA.EMPLOYEEEMENDATE 62 DATE(10) COLUMN IN CORPDATA.EMPPROJACTEMENDATE **** COLUMN

99EMPCNT 20 SMALL INTEGER PRECISION(4,0) IN RPT2EMPLOYEE **** TABLE IN CORPDATA

42 62 99EMPLOYEE **** TABLE

62 99EMPNO 11 CHARACTER(6) DBCS-open

80EMPNO 42 CHARACTER(6) COLUMN (NOT NULL) IN CORPDATA.EMPLOYEEEMPNO **** COLUMN IN EMPPROJACT

62 62 62 99EMPNO **** COLUMN IN EMPLOYEE

62 99EMPNO 62 CHARACTER(6) COLUMN (NOT NULL) IN CORPDATA.EMPPROJACTEMPPROJACT **** TABLE

62 62 99 99 99 99EMPPROJACT **** TABLE IN CORPDATA

62 99EMPTIME 62 DECIMAL(5,2) COLUMN IN CORPDATA.EMPPROJACTEMPTIME **** COLUMN

99EMSTDATE 62 DATE(10) COLUMN IN CORPDATA.EMPPROJACTEMSTDATE **** COLUMN

99FINISH 150FIRSTNME 42 VARCHAR(12) COLUMN (NOT NULL) IN CORPDATA.EMPLOYEEFIRSTNME **** COLUMN

62HIREDATE 42 DATE(10) COLUMN IN CORPDATA.EMPLOYEEJOB 42 CHARACTER(8) COLUMN IN CORPDATA.EMPLOYEELASTNAME 42 VARCHAR(15) COLUMN (NOT NULL) IN CORPDATA.EMPLOYEELASTNAME **** COLUMN

62MAJPROJ 8 CHARACTER(6) IN RPT1MAJPROJ 99 CHARACTER(6) COLUMN IN CORPDATA.PROJECTMIDINIT 42 CHARACTER(1) COLUMN (NOT NULL) IN CORPDATA.EMPLOYEENAME 12 CHARACTER(30) DBCS-open

80PERCNT 27 DECIMAL(7,2)

42PHONENO 42 CHARACTER(4) COLUMN IN CORPDATA.EMPLOYEEPNAME 19 CHARACTER(36) DBCS-open IN RPT2PRCOST 21 DECIMAL(9,2) IN RPT2PRENDATE 8 DATE(8) IN RPT1

�� SQL ����� 201

Page 212: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

�� ��

113 ���� �ILE RPG ������� SQL� ���

ILE RPG ���� SQL�� ��� �� �� � ����� � �� ����� � ��

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

: REXX ��� SQL�

� �� ���� REXX ����� ��� ����.

�: � ��� ���� 210 ���� �� ���� � ���� ���� ��� ���� ���.

xxxxST1 VxRxMx yymmdd Create SQL ILE RPG Object RPGLEEX 08/06/07 16:03:02 Page 6PRENDATE **** COLUMN

99PRENDATE 99 DATE(10) COLUMN IN CORPDATA.PROJECTPRJNUM 18 CHARACTER(6) DBCS-open IN RPT2CROSS REFERENCEPROJECT **** TABLE IN CORPDATA

99PROJECT **** TABLE

99PROJNAME 8 VARCHAR(24) IN RPT1PROJNAME **** COLUMN

99 99PROJNAME 99 VARCHAR(24) COLUMN (NOT NULL) IN CORPDATA.PROJECTPROJNO 8 CHARACTER(6) IN RPT1

80PROJNO **** COLUMN

62 62PROJNO 62 CHARACTER(6) COLUMN (NOT NULL) IN CORPDATA.EMPPROJACTPROJNO **** COLUMN IN EMPPROJACT

99 99 99PROJNO **** COLUMN IN PROJECT

99PROJNO 99 CHARACTER(6) COLUMN (NOT NULL) IN CORPDATA.PROJECTPRSTAFF 8 DECIMAL(5,2) IN RPT1PRSTAFF 99 DECIMAL(5,2) COLUMN IN CORPDATA.PROJECTPRSTDATE 8 DATE(8) IN RPT1PRSTDATE 99 DATE(10) COLUMN IN CORPDATA.PROJECTRDATE 26 CHARACTER(10) DBCS-open

99RESPEMP 8 CHARACTER(6) IN RPT1RESPEMP 99 CHARACTER(6) COLUMN (NOT NULL) IN CORPDATA.PROJECTRPTERR 145RPTERR **** LABEL

53RPT1 8 STRUCTURERPT2 17 STRUCTURE

120SALARY 13 DECIMAL(9,2)

80SALARY **** COLUMN

42 42 62 99SALARY 42 DECIMAL(9,2) COLUMN IN CORPDATA.EMPLOYEESEX 42 CHARACTER(1) COLUMN IN CORPDATA.EMPLOYEEUPDERR 133UPDERR **** LABEL

39WORKDEPT 42 CHARACTER(3) COLUMN IN CORPDATA.EMPLOYEEWRKDAY 24 SMALL INTEGER PRECISION(4,0)

99No errors found in source

190 Source records processed* * * * * E N D O F L I S T I N G * * * * *

202 IBM i: ����� �� SQL �����

Page 213: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

Record *...+... 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 81 /*********************************************************************/2 /* A sample program which updates the salaries for those employees */3 /* whose current commission total is greater than or equal to the */4 /* value of COMMISSION. The salaries of those who qualify are */5 /* increased by the value of PERCENTAGE, retroactive to RAISE_DATE. */6 /* A report is generated and dumped to the display which shows the */7 /* projects which these employees have contributed to, ordered by */8 /* project number and employee ID. A second report shows each */9 /* project having an end date occurring after RAISE DATE (i.e. is */10 /* potentially affected by the retroactive raises) with its total */11 /* salary expenses and a count of employees who contributed to the */12 /* project. */13 /*********************************************************************/141516 /* Initialize RC variable */17 RC = 01819 /* Initialize HV for program usage */20 COMMISSION = 2000.00;21 PERCENTAGE = 1.04;22 RAISE_DATE = '1982-06-01';23 WORK_DAYS = 253;2425 /* Create the output file to dump the 2 reports. Perform an OVRDBF */26 /* to allow us to use the SAY REXX command to write to the output */27 /* file. */28 ADDRESS '*COMMAND',29 'DLTF FILE(CORPDATA/REPORTFILE)'30 ADDRESS '*COMMAND',31 'CRTPF FILE(CORPDATA/REPORTFILE) RCDLEN(80)'32 ADDRESS '*COMMAND',33 'OVRDBF FILE(STDOUT) TOFILE(CORPDATA/REPORTFILE) MBR(REPORTFILE)'3435 /* Update the selected employee's salaries by the new percentage. */36 /* If an error occurs during the update, ROLLBACK the changes. */37 3SIGNAL ON ERROR38 ERRLOC = 'UPDATE_ERROR'39 UPDATE_STMT = 'UPDATE CORPDATA/EMPLOYEE ',40 'SET SALARY = SALARY * ? ',41 'WHERE COMM >= ? '42 EXECSQL,43 'PREPARE S1 FROM :UPDATE_STMT'44 4EXECSQL,45 'EXECUTE S1 USING :PERCENTAGE,',46 ' :COMMISSION '47 /* Commit changes */48 5EXECSQL,49 'COMMIT'50 ERRLOC = 'REPORT_ERROR'51

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

�� SQL ����� 203

Page 214: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

Record *...+... 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 852 /* Report the updated statistics for each project supported by one */53 /* of the selected employees. */5455 /* Write out the header for Report 1 */56 SAY ' '57 SAY ' '58 SAY ' '59 SAY ' REPORT OF PROJECTS AFFECTED BY EMPLOYEE RAISES'60 SAY ' '61 SAY 'PROJECT EMPID EMPLOYEE NAME SALARY'62 SAY '------- ----- ------------- ------'63 SAY ' '6465 SELECT_STMT = 'SELECT DISTINCT PROJNO, EMPPROJACT.EMPNO, ',66 ' LASTNAME||'', ''||FIRSTNME, SALARY ',67 'FROM CORPDATA/EMPPROJACT, CORPDATA/EMPLOYEE ',68 'WHERE EMPPROJACT.EMPNO = EMPLOYEE.EMPNO AND ',69 ' COMM >= ? ',70 'ORDER BY PROJNO, EMPNO '71 EXECSQL,72 'PREPARE S2 FROM :SELECT_STMT'73 6EXECSQL,74 'DECLARE C1 CURSOR FOR S2'75 7EXECSQL,76 'OPEN C1 USING :COMMISSION'7778 /* Handle the FETCH errors and warnings inline */79 SIGNAL OFF ERROR8081 /* Fetch all of the rows */82 DO UNTIL (SQLCODE <> 0)83 9EXECSQL,84 'FETCH C1 INTO :RPT1.PROJNO, :RPT1.EMPNO,',85 ' :RPT1.NAME, :RPT1.SALARY '8687 /* Process any errors that may have occurred. Continue so that */88 /* we close the cursor for any warnings. */89 IF SQLCODE < 0 THEN90 SIGNAL ERROR9192 /* Stop the loop when we hit the EOF. Don't try to print out the */93 /* fetched values. */94 8IF SQLCODE = 100 THEN95 LEAVE9697 /* Print out the fetched row */98 SAY RPT1.PROJNO ' ' RPT1.EMPNO ' ' RPT1.NAME ' ' RPT1.SALARY99 END;100101 10EXECSQL,102 'CLOSE C1'103104 /* For all projects ending at a date later than 'raise_date' */105 /* (that is, those projects potentially affected by the salary raises) */106 /* generate a report containing the project number, project name, */107 /* the count of employees participating in the project, and the */108 /* total salary cost of the project. */109

204 IBM i: ����� �� SQL �����

Page 215: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

Record *...+... 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8110 /* Write out the header for Report 2 */111 SAY ' '112 SAY ' '113 SAY ' '114 SAY ' ACCUMULATED STATISTICS BY PROJECT'115 SAY ' '116 SAY 'PROJECT PROJECT NAME NUMBER OF TOTAL'117 SAY 'NUMBER EMPLOYEES COST'118 SAY '------- ------------ --------- -----'119 SAY ' '120121122 /* Go to the common error handler */123 SIGNAL ON ERROR124125 SELECT_STMT = 'SELECT EMPPROJACT.PROJNO, PROJNAME, COUNT(*), ',126 ' SUM( (DAYS(EMENDATE) - DAYS(EMSTDATE)) * EMPTIME * ',127 ' DECIMAL(( SALARY / ? ),8,2) ) ',128 'FROM CORPDATA/EMPPROJACT, CORPDATA/PROJECT, CORPDATA/EMPLOYEE',129 'WHERE EMPPROJACT.PROJNO = PROJECT.PROJNO AND ',130 ' EMPPROJACT.EMPNO = EMPLOYEE.EMPNO AND ',131 ' PRENDATE > ? ',132 'GROUP BY EMPPROJACT.PROJNO, PROJNAME ',133 'ORDER BY 1 '134 EXECSQL,135 'PREPARE S3 FROM :SELECT_STMT'136 11EXECSQL,137 'DECLARE C2 CURSOR FOR S3'138 EXECSQL,139 'OPEN C2 USING :WORK_DAYS, :RAISE_DATE'140141 /* Handle the FETCH errors and warnings inline */142 SIGNAL OFF ERROR143144 /* Fetch all of the rows */145 DO UNTIL (SQLCODE <> 0)146 12EXECSQL,147 'FETCH C2 INTO :RPT2.PROJNO, :RPT2.PROJNAME, ',148 ' :RPT2.EMPCOUNT, :RPT2.TOTAL_COST '149150 /* Process any errors that may have occurred. Continue so that */151 /* we close the cursor for any warnings. */152 IF SQLCODE < 0 THEN153 SIGNAL ERROR154155 /* Stop the loop when we hit the EOF. Don't try to print out the */156 /* fetched values. */157 IF SQLCODE = 100 THEN158 LEAVE159160 /* Print out the fetched row */161 SAY RPT2.PROJNO ' ' RPT2.PROJNAME ' ' ,162 RPT2.EMPCOUNT ' ' RPT2.TOTAL_COST163 END;164165 EXECSQL,166 'CLOSE C2'167

�� SQL ����� 205

Page 216: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

�� ��

143 ���� �REXX ������� SQL� ���

REXX ����� ������ ��� ���. ��� � REXX ������ ���� ��� ����

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

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

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

REPORT OF PROJECTS AFFECTED BY RAISES

PROJECT EMPID EMPLOYEE NAME SALARY

AD3100 000010 HAAS, CHRISTINE 54860.00AD3110 000070 PULASKI, EVA 37616.80AD3111 000240 MARINO, SALVATORE 29910.40AD3113 000270 PEREZ, MARIA 28475.20IF1000 000030 KWAN, SALLY 39780.00IF1000 000140 NICHOLLS, HEATHER 29556.80

168 /* Delete the OVRDBF so that we will continue writing to the output */169 /* display. */170 ADDRESS '*COMMAND',171 'DLTOVR FILE(STDOUT)'172173 /* Leave procedure with a successful or warning RC */174 EXIT RC175176177 /* Error occurred while updating the table or generating the */178 /* reports. If the error occurred on the UPDATE, rollback all of */179 /* the changes. If it occurred on the report generation, display the */180 /* REXX RC variable and the SQLCODE and exit the procedure. */181 ERROR:182183 13SIGNAL OFF ERROR184185 /* Determine the error location */186 SELECT187 /* When the error occurred on the UPDATE statement */188 WHEN ERRLOC = 'UPDATE_ERROR' THEN190 DO191 SAY '*** ERROR Occurred while updating table.',192 'SQLCODE = ' SQLCODE193 14EXECSQL,194 'ROLLBACK'195 END196 /* When the error occurred during the report generation */197 WHEN ERRLOC = 'REPORT_ERROR' THEN198 SAY '*** ERROR Occurred while generating reports. ',199 'SQLCODE = ' SQLCODE200 OTHERWISE201 SAY '*** Application procedure logic error occurred '202 END203204 /* Delete the OVRDBF so that we will continue writing to the */205 /* output display. */206 ADDRESS '*COMMAND',207 'DLTOVR FILE(STDOUT)'208209 /* Return the error RC received from SQL. */210 EXIT RC211 * * * * * E N D O F S O U R C E * * * * *

206 IBM i: ����� �� SQL �����

Page 217: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

IF2000 000030 KWAN, SALLY 39780.00IF2000 000140 NICHOLLS, HEATHER 29556.80MA2100 000010 HAAS, CHRISTINE 54860.00MA2100 000110 LUCCHESSI, VICENZO 48360.00MA2110 000010 HAAS, CHRISTINE 54860.00MA2111 000200 BROWN, DAVID 28849.60MA2111 000220 LUTZ, JENNIFER 31033.60MA2112 000150 ADAMSON, BRUCE 26291.20OP1000 000050 GEYER, JOHN 41782.00OP1010 000090 HENDERSON, EILEEN 30940.00OP1010 000280 SCHNEIDER, ETHEL 27300.00OP2010 000050 GEYER, JOHN 41782.00OP2010 000100 SPENSER, THEODORE 27196.00OP2012 000330 LEE, WING 26384.80PL2100 000020 THOMPSON, MICHAEL 42900.00

ACCUMULATED STATISTICS BY PROJECT

PROJECT NUMBER OF TOTALNUMBER PROJECT NAME EMPLOYEES COST

AD3100 ADMIN SERVICES 1 19623.11AD3110 GENERAL ADMIN SYSTEMS 1 58877.28AD3111 PAYROLL PROGRAMMING 7 66407.56AD3112 PERSONNEL PROGRAMMING 9 28845.70AD3113 ACCOUNT PROGRAMMING 14 72114.52IF1000 QUERY SERVICES 4 35178.99IF2000 USER EDUCATION 5 55212.61MA2100 WELD LINE AUTOMATION 2 114001.52MA2110 W L PROGRAMMING 1 85864.68MA2111 W L PROGRAM DESIGN 3 93729.24MA2112 W L ROBOT DESIGN 6 166945.84MA2113 W L PROD CONT PROGS 5 71509.11OP1000 OPERATION SUPPORT 1 16348.86OP1010 OPERATION 5 167828.76OP2010 SYSTEMS SUPPORT 2 91612.62OP2011 SCP SYSTEMS SUPPORT 2 31224.60OP2012 APPLICATIONS SUPPORT 2 41294.88OP2013 DB/DC SUPPORT 2 37311.12PL2100 WELD LINE PLANNING 1 43576.92

��� �� ������ �� CL �� ��

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

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

�� SQL ����� 207

Page 218: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

�� ��

161 ���� �ILE SQL ����� ���

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

CRTSQLCBL(OPM COBOL� ��), CRTSQLPLI(PL/I PRPQ� ��) � RPG/400� ���

CRTSQLRPG(RPG III� ��)� �� ILE ����� ��� ���� ����.

�� ��

162 ���� �ILE SQL ����� ���

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

CRTSQLCPPI, CRTSQLCBLI � CRTSQLRPGI ILE ����� ��� �����.

Create SQL COBOL Program ��

Create SQL COBOL Program(CRTSQLCBL) ��� SQL ������ �����.

� ������ SQL�� �� �� COBOL �� ������ �� � ��� �� � ��

�� COBOL ���� ��� ���� ������.

�� ��

Create SQL COBOL Program(CRTSQLCBL) ��

Create SQL ILE COBOL Object ��

Create SQL ILE COBOL Object(CRTSQLCBLI) ��� SQL�� �� �� COBOL �� �����

� �� � ��� �� � ���� ILE COBOL ���� ��� ��, ��� �� ��

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

�� ��

Create SQL ILE COBOL Object(CRTSQLCBLI) ��

Create SQL ILE C Object ��

Create SQL ILE C Object(CRTSQLCI) ��� SQL�� �� �� C �� ������ �� �

��� �� � ���� ILE C ���� ��� ��, ��� �� �� ���� ���

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

�� ��

Create SQL ILE C Object(CRTSQLCI) ��

Create SQL ILE C++ Object ��

Create SQL ILE C++ Object(CRTSQLCPPI) ��� SQL�� �� �� C++ �� ������ �

� � ��� �� � ���� C++ ���� ��� ��� ��� SQL ������ ��

���.

208 IBM i: ����� �� SQL �����

Page 219: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

�� ��

Create SQL C++ Object(CRTSQLCPPI) ��

Create SQL PL/I Program ��

Create SQL PL/I Program(CRTSQLPLI) ��� SQL�� �� �� PL/I �� ������ ��

� ��� �� ���� PL/I ���� ��� ���� ����� SQL ������ ��

���.

�� ��

Create SQL PL/I Program(CRTSQLPLI) ��

Create SQL RPG Program ��

Create SQL RPG Program(CRTSQLRPG) ��� SQL�� �� �� RPG �� ������ ��

� ��� �� � ���� RPG ���� ��� ���� ����� SQL ������ �

����.

�� ��

Create SQL RPG Program(CRTSQLRPG) ��

Create SQL ILE RPG Object ��

Create SQL ILE RPG Object(CRTSQLRPGI) ��� SQL�� �� �� RPG �� ������ �

� � ��� �� � ���� ILE RPG ���� ��� ��, ��� �� �� ����

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

�� ��

Create SQL ILE RPG Object(CRTSQLRPGI) ��

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

�� � �� Information Center �� ����� �� SQL ����� �� ���� �� �

�� �� ����. �� PDF ��� ��� �� � ����.

���

v ILE RPG ����� ���(� 5,733KB)

v ILE RPG ���(� 4,193KB)

v ILE COBOL ����� ���(� 6,436KB)

v ILE COBOL ���(� 3,685KB)

v REXX/400 ����� ���(� 854KB)

v REXX/400 ���(� 515KB)

v i5/OS� DB2 SQL ��� PDF(� 6,321KB)

�� SQL ����� 209

Page 220: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

�� � IBM i Information Center� ���� �� ����. ��� �� � ��� ���

� � ����. � � IBM Publications Center�� ��� � ��� ����� ����� ��

� ���� �� � ����.

v COBOL/400 ��� ���(� 5,980KB)

v COBOL/400 ���(� 2,150KB)

v RPG/400 ��� ���(� 2,090KB)

v RPG/400 ���(� 2,520KB)

�� �

��� �� � ��� ��� ��� � ����.

v ����� � � �� ��

v SQL �� �� �����

v SQL �� � �

v SQL �����

�� ���� � ���� ��

IBM� ���� ��� �� ��� �� ��� �� ��� �� ����� � �� �� �

��� � � �� ����.

� � �� �� ��� ��� IBM, �� ��� ��� � ���� ��� �� �� ��

� �� �� �� �� ��� �� �, ��� � �� ��� ��� �� �� ��� ��

�(�, �� ��� ��) ���� ���� ��� �� ��� �� ����.

��� ���� IBM, �� ��� ��� �� ���� � ��� ��� ��� �� ��� ��

��� �� ����.

1. �� �� �� ��

2. ���, ���, ����� � �� �� ���� ���� �� ��

3. ��� ��, ���, �, �� �� ���� ��

�� ���� ���, ����� � ��� � �� ��� ���� ���� � ���� �

� ���� �� �� ��� ����� ��� �� � ����.

210 IBM i: ����� �� SQL �����

Page 221: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

��. ����

� ��� ��� ���� �� � ����� �� ���.

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 211

Page 222: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

IBM� ��� ��� ��� �� �� ��� ��� ��� ���� ��� ��� ��� ��

��� � � ����.

(i) ���� �� ���� �� ���( ��� ��)� �� �� � (ii) ��� ��� ��

��� ��� ���� � ��� ��� ��� ���� ���� �� � � ������.

135-700

����� ��� ��� 467-12, ����� ��

�� ��..� ����

�����

�� ��� �� ��(�� ��, ��� � )��� ��� � ����.

� ��� ��� ����� �� ��� � ���� �� �� �� �� ����� �� ��

� IBM� IBM � ��, IBM �� ��� ���� ��(IPLA), �� �� IBM ���� ��

�� �� � � ��� �� ��� ���.

��� ��� �� � ��� ��� ���� ��� ���. ��� �� � ���� ���

��� ��� �� � ����. �� �� �� ��� �� �� ����� � ���� �� ���

� ���� ��� �� �� ��� ���� ��� ���� �� � ����. �� �� �

� ��� �� ����� �� ���� �� ��� �� � ����. � �� ���� �� ���

�� �� ���� ��� ���.

IBM ��� � ��� �� ��� ����, �� �� �� �� �� ���� �� ���. IBM

��� �� ���� ���� � ���, IBM ��� �� �� ���, ��� �� �� ��

� ���� �� � ����. IBM ��� �� �� ����� �� ��� ����� �����

�.

IBM� ���� �� �� ��� � �� ��� ��� �� �� ��� � ����.

� ���� ��� ��� ��� ���� �� � ��� �� ��� �� ����. �� ���

� ��� �� ���� ���� �� ��, ��, �� � ��� ��� ��� � ����. �� �

�� �� ��� ��� �� ��� �� � � � ������ �� ��� ����.

� � ����:

� ���� � ����� ����� �� ��� ��� � � ������ �� ��

��. ��� �� � ���� � ��� � � ��� ����� ����� �����(API)�

���� ������ ��, ��, � �� � ��� �� � �� �� � ���� ��

� ��� ��, �� � � � ����. �� � ���� �� ����� ��� ��� �

� � ��. ��� IBM� �� � ���� ���, �� �� �� �� ����� ����

����. The sample programs are provided ″AS IS″, without warranty of any kind. BM� ��� �

��� ��� ��� ��� �� ��� �� ����.

212 IBM i: ����� �� SQL �����

Page 223: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

�� � ��� �� � ��� � ��� � ���� �� ��� �� � � ��� ���

� ���.

© (��� ���) (��). � �� ��� 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� ��� �� ����.

�� ��, �� � �� ��� �� ��� �� �� �����.

����

�� ��� �� � �� �� � ����.

��� ��: �� �� ��� ���� ��� �� ��� � �� ��, �� ��� �� �

����. ��� IBM� �� �� �� �� �� � ��� � �� ����� 2� � �� �

� � ����.

�� ��: �� �� ��� ���� ��� �� ��� � �� �� ���� ���� ��, �

� �� � ����. ��� ���� ��� IBM� ��� �� �� � �� 2� � �� ��

�� � � �� � ��� ��, � �� �� � ����.

���� ���� �� ��� � �, � ��� � �� ��� ��, ��, ���� �� �

� � ���� ���� ��� ��� ���� �� ��� �� �� ���� ��� ����.

IBM� � �� ��� IBM� ��� ��� ����� ��� ��� ����� ���� ��� �

��� �� ���� �� ��� �� � ����.

��� � �� � � ��� ��� �� � �� � � ��� ��� ���� ����

��� ���, �� �� ��� � ����.

��. ���� 213

Page 224: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

IBM� � �� ��� �� ��� ��� �� ����. ��� �� �, ��� � �� ���

��� �� �� ��� ��� (� �� ��� ��) ���� ���� ��� �� �� ��

� ���� �����.

214 IBM i: ����� �� SQL �����

Page 225: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

IBM �� ��� �� ��

IBM i������� SQL �����7.1

Page 226: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89
Page 227: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89
Page 228: IBM in SQL...SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I 88 SQL PL/I WHENEVER 88 SQL PL/I 88 SQL PL/I 89 SQL PL/I 89

����


Recommended