7.109.3 SELECT_SQL の使用例
SELECT_SQLでDISTINCTオプションを使用する
SELECT_SQLと計算を組み合わせて使用する
SELECT_SQLでANDおよびOR演算子を使用する
SELECT_SQLでBETWEEN演算子を使用する
SELECT_SQLでDISTINCTオプションを使用する
以下の例は、SELECT_SQLコマンドでDISTINCTオプションを指定して、重複したフィールド値を排除する方法を示しています。また、追加オプションを指定しない標準のSELECT_SQLコマンドの使用方法も示します。
DEF_LIST NAME(#EMPBROWSE) FIELDS(#NDSTEMPNO #DSTEMPNO) DEFINE FIELD(#HEADING1) TYPE(*CHAR) LENGTH(79) INPUT_ATR(LC) DEFINE FIELD(#NDSTEMPNO) REFFLD(#EMPNO) COLHDG('Employee number' 'Not Distinct') DEFINE FIELD(#DSTEMPNO) REFFLD(#EMPNO) COLHDG('Employee Number' 'Distinct') DEFINE FIELD(#ENTRYNO) TYPE(*DEC) LENGTH(5) DECIMALS(0) DESC('List entry counter') CHANGE FIELD(#HEADING1) TO('''This function uses SELECT_SQL from PSLSKL.''') BEGIN_LOOP EXECUTE SUBROUTINE(NOTDISTINC) EXECUTE SUBROUTINE(DISTINCT) DISPLAY FIELDS(#HEADING1) DESIGN(*DOWN) IDENTIFY(*NOID) BROWSELIST(#EMPBROWSE) END_LOOP SUBROUTINE NAME(NOTDISTINC) CLR_LIST NAMED(#EMPBROWSE) CHANGE FIELD(#DSTEMPNO) TO(*NULL) SELECT_SQL FIELDS(#EMPNO) FROM_FILES((PSLSKL)) CHANGE FIELD(#NDSTEMPNO) TO(#EMPNO) ADD_ENTRY TO_LIST(#EMPBROWSE) ENDSELECT ENDROUTINE SUBROUTINE NAME(DISTINCT) CHANGE FIELD(#ENTRYNO) TO(1) SELECT_SQL FIELDS(#EMPNO) FROM_FILES((PSLSKL)) DISTINCT(*YES) GET_ENTRY NUMBER(#ENTRYNO) FROM_LIST(#EMPBROWSE) CHANGE FIELD(#DSTEMPNO) TO(#EMPNO) UPD_ENTRY IN_LIST(#EMPBROWSE) CHANGE FIELD(#ENTRYNO) TO('#ENTRYNO + 1') ENDSELECT ENDROUTINE
SELECT_SQLと計算を組み合わせて使用する
以下の例は、SELECT_SQLコマンドで取得した日付に対して計算を実行する方法を示しています。
DEF_LIST NAME(#EMPBROWSE) FIELDS(#SURNAME #SALARY #STD_AMNT) DEFINE FIELD(#HEADING1) TYPE(CHAR) LENGTH(79) INPUT_ATR(LC) DEFINE FIELD(#HEADING2) TYPE(*CHAR) LENGTH(79) INPUT_ATR(LC) DEFINE FIELD(#HEADING3) TYPE(*CHAR) LENGTH(79) INPUT_ATR(LC) OVERRIDE FIELD(#STD_AMNT) COLHDG('Salary 10%') CHANGE FIELD(#HEADING1) TO('''This function uses SELECT_SQL from PSLMST.''') CHANGE FIELD(#HEADING2) TO('''This shows a list of employee surnames and salaries and the salary 10%.''') CHANGE FIELD(#HEADING3) TO('''This can be done with one SELECT_SQL statement.''') BEGIN_LOOP CLR_LIST NAMED(#EMPBROWSE) SELECT_SQL FIELDS(#SURNAME #SALARY (#STD_AMNT 'SALARY 1.10')) FROM_FILES((PSLMST)) ADD_ENTRY TO_LIST(#EMPBROWSE) ENDSELECT DISPLAY FIELDS(#HEADING1 #HEADING2 #HEADING3) DESIGN(*DOWN) IDENTIFY(*NOID) BROWSELIST(#EMPBROWSE) END_LOOP
SELECT_SQLでANDおよびOR演算子を使用する
以下の例は、SLECT_SQLコマンドでANDおよびOR演算子を使用して、さらに複雑なクエリーを実行する方法を示しています。
DEF_LIST NAME(#EMPBROWSE) FIELDS(#EMPNO #ADDRESS2 #SALARY #SURNAME) DEFINE FIELD(#HEADING1) TYPE(*CHAR) LENGTH(79) INPUT_ATR(LC) DEFINE FIELD(#HEADING2) TYPE(*CHAR) LENGTH(79) INPUT_ATR(LC) DEFINE FIELD(#HEADING3) TYPE(*CHAR) LENGTH(79) INPUT_ATR(LC) CHANGE FIELD(#HEADING1) TO('''This function uses SELECT_SQL from PSLMST.''') CHANGE FIELD(#HEADING2) TO('''This lists all employees who either have a salary in the range 10000 to 20000,''') CHANGE FIELD(#HEADING3) TO('''or who live in SEVEN HILLS. This can be done with one SELECT_SQL statement.''') BEGIN_LOOP CLR_LIST NAMED(#EMPBROWSE) SELECT_SQL FIELDS(#EMPNO #SURNAME #ADDRESS2 #SALARY) FROM_FILES((PSLMST)) WHERE('((SALARY > 10000) AND (SALARY < 20000)) OR (ADDRESS2 = ''SEVEN HILLS.'')') ADD_ENTRY TO_LIST(#EMPBROWSE) ENDSELECT DISPLAY FIELDS(#HEADING1 #HEADING2 #HEADING3) DESIGN(*DOWN) IDENTIFY(*NOID) BROWSELIST(#EMPBROWSE) END_LOOP
SELECT_SQLでBETWEEN演算子を使用する
以下の例は、SELECT_SQLコマンドでBETWEEN演算子を使用する方法を示しています。BETWEEN演算子は、指定された値範囲のデータを取得するためにWHERE句内で使用できます。また、指定された値範囲を除外したデータを取得することもできます。
DEF_LIST NAME(#EMPBROWSE) FIELDS(#EMPNO #SALARY) DEFINE FIELD(#HEADING1) TYPE(*CHAR) LENGTH(079) INPUT_ATR(LC) DEFINE FIELD(#HEADING2) TYPE(*CHAR) LENGTH(079) INPUT_ATR(LC) DEFINE FIELD(#HEADING3) TYPE(*CHAR) LENGTH(079) INPUT_ATR(LC) DEF_COND NAME(*AS400) COND('*CPUTYPE = AS400') CHANGE FIELD(#HEADING1) TO('''EXAMPLE 1: Select all employees with a salary between 30,000 and 60,000.''') CHANGE FIELD(#HEADING2) TO(*BLANKS) CHANGE FIELD(#HEADING3) TO('''This can be done with one SELECT_SQL statement.''') BEGIN_LOOP CHANGE FIELD(#HEADING1) TO('''EXAMPLE 1: Select all employees with a salary between 30,000 and 60,000.''') CLR_LIST NAMED(#EMPBROWSE) SELECT_SQL FIELDS(#EMPNO #SALARY) FROM_FILES((PSLMST)) WHERE('SALARY BETWEEN 30000 AND 60000') ADD_ENTRY TO_LIST(#EMPBROWSE) ENDSELECT EXECUTE SUBROUTINE(DISP) CHANGE FIELD(#HEADING1) TO('''EXAMPLE 2: Select all employees with a salary outside range 30,000 to 60,000.''') CLR_LIST NAMED(#EMPBROWSE) SELECT_SQL FIELDS(#EMPNO #SALARY) FROM_FILES((PSLMST)) WHERE('SALARY NOT BETWEEN 30000 AND 60000') ADD_ENTRY TO_LIST(#EMPBROWSE) ENDSELECT EXECUTE SUBROUTINE(DISP) END_LOOP SUBROUTINE NAME(DISP) DISPLAY FIELDS(#HEADING1 #HEADING2 #HEADING3) DESIGN(*DOWN) IDENTIFY(*NOID) BROWSELIST(#EMPBROWSE) ENDROUTINE