You are viewing an old version of this page. View the current version.

Compare with Current View Page History

Version 1 Next »

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   
 

  • No labels