'Web. 기타 언어/Devon-SQL'에 해당되는 글 5건

  1. 2017.01.25 5. Devon SQL - IN 조건
  2. 2017.01.25 4. Devon SQL Procedure 호출 (테이블용)
  3. 2017.01.25 3. Devon SQL Procedure 호출
  4. 2017.01.25 2. Devon IF 문장 7
  5. 2017.01.25 1. Devon SQL 변수 처리 4

[ 5. Devon SQL - IN 조건 ]


1. 정의

   sql문장에서 in조건에 몇건이 올지 모른다.

   그래서 ArrayList를 이용해서 값을 넣고,  sql단에서 iterate와 conjuction을 이용해서 in조건을 완성한다.


2. java단

1
2
3
4
5
6
7
8
9
10
11
12
13
if(lmData.getDataCount()!=0){
List<String> roleList = new ArrayList<String>();
String str = null;
 
        for(int i=1,cnt=lmData.getDataCount();i<=cnt;i++){
            str = new StringBuilder("MIN(decode(ppp.role_id,").append(i)
                                .append(", ppp.authority_type)) AS role")
                                .append(i).toString();
            roleList.add(str);
        }
        inData.set("roleList",roleList);
    }
    LMultiData resultData = dao.executeQuery("admn/admn020fQry/retrieveUserRoleManagement", inData);
 

3. sql단
1
2
3
4
5
6
7
8
9
10
11
12
13
<statement name="retrieveUserRoleManagement">
<![CDATA[
/ admn.admn020fQry.retrieveUserRoleManagement /
SELECT acol
{#colList}
, zcol
 
      FROM dual
   ]]>
   <append condition="${roleList}.NOTEMPTY" id="#colList" iterate="${roleList}" conjuction=",">
          ,${roleList:not}
   </append>
</statement>


4. 별도 방법 도 존재 함

   - dynamic sql문장을 이용해도 됨

   - java단

     . vo.setColId1("'a','c','d'");

   - sql단
     . where  컬럼1 in (${colId1:unchecked})


'Web. 기타 언어 > Devon-SQL' 카테고리의 다른 글

4. Devon SQL Procedure 호출 (테이블용)  (0) 2017.01.25
3. Devon SQL Procedure 호출  (0) 2017.01.25
2. Devon IF 문장  (7) 2017.01.25
1. Devon SQL 변수 처리  (4) 2017.01.25
Posted by 농부지기
,

[ 4. Devon SQL Procedure 호출 (테이블용) ]


1. 정의 

   - sql문장 from절에 Procedure_name을 놓고,  이 Procedure가 수행하고 결과가 레코드로

     받으면 테이블처럼 된다.

 

2. SQL 사용예)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<statement name="retrieveParameterList">
    SELECT program_name
         , ....
      FROM TABLE(pkg_name.get_parameter_list(p_program_id => ${programId:integer}
                                           , p_group_id => ${groupId:integer}
                                           , p_request_id => ${requestId:integer}
                                             )
                )
</statement>
 
<statement name="retrieveParameterList">
    SELECT xcm_get_pkg.get_plan_date  AS plan_date
      FROM dual
</statement>
 
<statement name="retrieveParameterList">
    SELECT xcm_get_pkg.get_plan_id(${pgCode:integer}, NULL, NULL)
      FROM dual
</statement>
 
<statement name="retrieveCopyData">
    SELECT TO_NUMBER(x.text) division_id
         , xcm_get_pkg.get_plan_name(y.dt) plan_name
         , xcm_get_pkg.get_plan_id(TO_NUMBER(x.text),TO_CHAR(y.dt,'YYYYMMDD')) plan_id
     FROM TABLE(xjm_mail_get_pkg.seperate_data_return_table(${divisionList})) x
         , ( SELECT NEXT_DAY(SYSDATE-7,2) dt
               FROM dual
           ) y
</statement>


3. From절에 위치할 Function 예) - name : get_parameter_list_copy

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
FUNCTION get_parameter_list_copy ( p_program_id IN NUMBER
, p_source_parameter_value IN VARCHAR2 DEFAULT NULL
) RETURN VARCHAR2
IS
v_procName VARCHAR2(30) := 'get_parameter_list';
--v_procDesc VARCHAR2(100) := 'get_parameter_list';
 
v_return_value                 VARCHAR2(500) := NULL;
 
 
CURSOR c_param     ( p_program_id                   IN     NUMBER
                   , p_source_parameter_value       IN     VARCHAR2
                   )
IS
    WITH w_programs AS (
          SELECT p.program_id                                    program_id
                ,p.program_name                                  program_name
          FROM   xjm_programs p
          WHERE  1 = 1
          AND    p.program_id = p_program_id
         )
        ,w_seq AS (
          SELECT LEVEL seq
          FROM   w_programs wp
          CONNECT BY LEVEL <= wp.parameter_count
         )
    )
    SELECT wsp.parameter_list             name
          ,wsp.seq                        seq
          ,wsp.in_out                     in_out
          ,wsp.data_type                  data_type
          ,CASE
               WHEN (SUBSTR(wsp.recommend_default_value, 1, 2) = '%%') THEN wsp.recommend_default_value  
               --ELSE COALESCE(wpp.source_parameter_value, wpp.parameter_value, wsp.recommend_default_value)
               ELSE COALESCE(wpp.source_parameter_value, wpp.parameter_value)
           END                            value
    FROM   w_sys_parm     wsp
          ,w_program_parm wpp
          ,w_programs     wp
    WHERE  1 = 1
    AND    wsp.parameter_list = wpp.parameter_list (+)
    ORDER BY wsp.seq
;
BEGIN
 
FOR r_param        IN  c_param( p_program_id
                              , p_source_parameter_value
                              ) LOOP
    EXIT WHEN c_param%NOTFOUND;
 
    v_return_value := v_return_value||','||r_param.value;
 
END LOOP;
 
RETURN SUBSTR(v_return_value,2);


4. From절에 위치할 Function 예) - name : seperate_data_return_table


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
CREATE OR REPLACE PACKAGE XSCM.xjm_mail_get_pkg IS
 
    TYPE seperateTabTyp                 IS TABLE  OF seperateRecTyp  INDEX BY BINARY_INTEGER;
 
    FUNCTION  seperate_data_return_table    ( p_data                         IN     VARCHAR2
                                            , p_key                          IN     VARCHAR2 DEFAULT NULL
                                            , p_delimiter                    IN     VARCHAR2 DEFAULT xjm_common_pkg.C_COMMA
                                            ) RETURN xjm_mail_get_pkg.arraySepRec PIPELINED;
END xjm_mail_get_pkg;
 
FUNCTION seperate_data_return_table ( p_data IN VARCHAR2
, p_key IN VARCHAR2 DEFAULT NULL
, p_delimiter IN VARCHAR2 DEFAULT xjm_common_pkg.C_COMMA
) RETURN xjm_mail_get_pkg.arraySepRec PIPELINED
IS
v_procName VARCHAR2(30) := 'seperate_data_return_table';
t_sepRec xjm_mail_get_pkg.seperateTabTyp;
 
n_seperate_cnt                 NUMBER         := 0;
i                              NUMBER         := 0;
BEGIN
 
n_seperate_cnt := 5;
 
IF (n_seperate_cnt > 0) THEN
    FOR i        IN  1..n_seperate_cnt LOOP
        t_sepRec(i).key := p_key;
        PIPE ROW(t_sepRec(i));
 
    END LOOP;
END IF;
 
RETURN;
EXCEPTION
WHEN NO_DATA_NEEDED THEN
NULL;
 
WHEN OTHERS THEN
    dbms_output.put_line(CHR(10)||
        '[E] >>> Error Status Display Start <<<'||CHR(10)||
        '[E] Procedure : '|| C_MODULE_NAME||'.'||v_procName||':EXCEPTION:OTHERS'     ||CHR(10)||
        '[E] Date : '|| TO_CHAR(SYSDATE, xjm_common_pkg.C_DEFAULT_DISPLAY_DATE_TIME) ||CHR(10)||
        '[E] ERRM : '|| SQLERRM ||CHR(10)||
        '[E] >>> Error Status Display End <<<'||CHR(10)
        );
 
    RAISE;
END seperate_data_return_table;


'Web. 기타 언어 > Devon-SQL' 카테고리의 다른 글

5. Devon SQL - IN 조건  (0) 2017.01.25
3. Devon SQL Procedure 호출  (0) 2017.01.25
2. Devon IF 문장  (7) 2017.01.25
1. Devon SQL 변수 처리  (4) 2017.01.25
Posted by 농부지기
,

[ 3. Devon SQL Procedure 호출 ]


1. SQL문장 기술 방법

    <statement name="doProcedureCall">

        {call pkg_nm.pl_program_parameters( ${pkId:integer:inparam}

                                                  , ${o_errmsg:string:outparam}

                                                 , ${o_retcode:integer:outparam})}

    </statement>


2. dao단에서 procedure 호출 Method

   LData result = dao.executeQueryProcedure(sQueryPath, paramData);





'Web. 기타 언어 > Devon-SQL' 카테고리의 다른 글

5. Devon SQL - IN 조건  (0) 2017.01.25
4. Devon SQL Procedure 호출 (테이블용)  (0) 2017.01.25
2. Devon IF 문장  (7) 2017.01.25
1. Devon SQL 변수 처리  (4) 2017.01.25
Posted by 농부지기
,

[ 2. Devon IF 문장 ]



1. 정의

   - SQL문장 구성 시 IF문과 같은 조건식을 구현하여 값이 존재 시  where조건에 추가 되고

     값이 미 존재 시 조건절에서 제외 시켜 sql수행시간을 단축 시킬 수 있다.


2. 사용예)

   - SELECT 컬럼1, 컬럼2

       FROM TableName

      WHERE 1=1

          {#userName}


     <append condition="${userName}.NOTEMPTY" id="#userName">

         AND user_name= ${userName}

     </append>

    

    - 위 와 같이 userName에 값이 존재시에만 조건에 추가 된다.


3. IF 문장의 비교법

   -condition절에 기술방법

 조건문

비교값 

예 

 GE

>= 

 "${userName}.GE.AA"

 GT

 >

  "${userName}.GT.AA"

 LE

<= 

  "${userName}.LE.AA"

 EQ

=

  "${userName}.EQ.AA"

 NE

 !=

  "${userName}.NE.AA"

 LT

  "${userName}.LT.AA"

EMPTY 

값이 공백 

  "${userName}.EMPTY "

 NULL

NULL 인 경우 

  "${userName}.NULL"

 NOTNULL

 Not null인 경우

  "${userName}.NOTNULL"

 NOTEMPTY

 값이 있을 경우  "${userName}.NOTEMPTY"

 NONE

 null이거나 빈 스트링인 경우  "${userName}.NONE"

 NOTNONE

 null이 아니고 빈 스트링이 아닌 경우  "${userName}.NOTNONE"



4. Condition에  and, or 넣는 방법

   - and

      예) condition="${userName}.EQ.김세민&amp;${userNo}.EQ.33" 

   - or

      예) condition="${userName}.EQ.김세민||${userNo}.EQ.33" 


   - &amp;    ||    양쪽에 공백이 존재 하면 안됨

 

'Web. 기타 언어 > Devon-SQL' 카테고리의 다른 글

5. Devon SQL - IN 조건  (0) 2017.01.25
4. Devon SQL Procedure 호출 (테이블용)  (0) 2017.01.25
3. Devon SQL Procedure 호출  (0) 2017.01.25
1. Devon SQL 변수 처리  (4) 2017.01.25
Posted by 농부지기
,

[ 1. Devon SQL 변수 처리 ]


1. 정의

   - sql문장에서 고정된 값이 아니라 sql문장이 수행하면서 변경되는 값을 조건으로 걸고 싶을 경우 사용


2. Sql단에서 String 형식으로 받기

   1. java단에서 vo에서 값 setting

      - vo.setColId("값1");


   2. sql단에서 받기

      - 예)      where 컬럼1 = ${colId}

        수행시) where 컬럼1 = "값1"; //과 같이 값 양쪽에 double quote가 붙는다.

      - 예) ${colId:integer} : 변수에 대한 type 지정

        . 이렇게 하면 integer기 때문에 값 양쪽에 double quote가 안생길까?   테스트는 안해 봤음


3. Sql단에서 sql문장으로 받기 (dynamic sql문장)

   1. sql문장을 java단에서 string으로 만들어 dynamic하게 만들경우에 사용

   2. java단에서

     - vo.setColumnList("컬럼1, 컬럼2, 컬럼10, 컬럼kk");

     - vo.setTableName("TableName");

   3. sql단에서 받기

     - 예) SELECT  ${columnList:unchecked}

              FROM  ${tableName:unchecked}

     - 보통은 sql단에서  양쪽에 double quote가 붙지만

       unchecked를 사용하므로써 double quote가 붙지 않고 sql문장 형식처럼  그대로 유지 

     - 실행SQL : SELECT  럼1, 컬럼2, 컬럼10, 컬럼kk

                      FROM  TableName


'Web. 기타 언어 > Devon-SQL' 카테고리의 다른 글

5. Devon SQL - IN 조건  (0) 2017.01.25
4. Devon SQL Procedure 호출 (테이블용)  (0) 2017.01.25
3. Devon SQL Procedure 호출  (0) 2017.01.25
2. Devon IF 문장  (7) 2017.01.25
Posted by 농부지기
,