Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

[ Image Removed |../../index.htm#lansa/select_sql_e.htm]
現在地:

...

7.109.3 SELECT_SQL の使用例

SELECT_SQLでDISTINCTオプションを使用する

SELECT_SQLと計算を組み合わせて使用する

SELECT_SQLでANDおよびOR演算子を使用する

SELECT_SQLでBETWEEN演算子を使用する

Anchor
SELECT_SQL_EX1
SELECT_SQL_EX1
SELECT_SQLでDISTINCTオプションを使用する

以下の例は、SELECT_SQLコマンドでDISTINCTオプションを指定して、重複したフィールド値を排除する方法を示しています。また、追加オプションを指定しない標準のSELECT_SQLコマンドの使用方法も示します。 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

Anchor
SELECT_SQL_EX2
SELECT_SQL_EX2
SELECT_SQLと計算を組み合わせて使用する

以下の例は、SELECT_SQLコマンドで取得した日付に対して計算を実行する方法を示しています。 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

Anchor
SELECT_SQL_EX3
SELECT_SQL_EX3
SELECT_SQLでANDおよびOR演算子を使用する

以下の例は、SLECT_SQLコマンドでANDおよびOR演算子を使用して、さらに複雑なクエリーを実行する方法を示しています。 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

Anchor
SELECT_SQL_EX4
SELECT_SQL_EX4
SELECT_SQLでBETWEEN演算子を使用する

以下の例は、SELECT_SQLコマンドでBETWEEN演算子を使用する方法を示しています。BETWEEN演算子は、指定された値範囲のデータを取得するためにWHERE句内で使用できます。また、指定された値範囲を除外したデータを取得することもできます。 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