7.108.2 自由形式の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) USING('SELECT "EMPNO" FROM "XDEMOLIB"."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) USING('SELECT DISTINCT "EMPNO" FROM "XDEMOLIB"."PSLSKL"')
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)
           USING('SELECT "SURNAME", "SALARY", "SALARY" * 1.10 FROM "XDEMOLIB"."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)

           USING('SELECT "EMPNO", "SURNAME", "ADDRESS2", "SALARY" FROM "XDEMOLIB"."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) 
           USING('SELECT "EMPNO", "SALARY", FROM "XDEMOLIB"."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) 
           USING('SELECT "EMPNO", "SALARY", FROM "XDEMOLIB"."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 
 

 

SELECT_SQLコマンドの他の例については、SET コレクションの「All About SELECT_SQL」を参照してください。