Oracle 모델 문 시작

Model 문은 Oracle 10g의 새로운 기능 중 하나입니다.본고는 몇 가지 간단한 예를 통해 모델 문장의 용법을 이해하는데 도움을 주고 복잡한 사용 장면은 다른 문장을 참고하십시오.
환경: Oracle 10g 이상 필요
모델 문구가 무엇인가
  model Oracle10g , select , SQL 。 Having 。
select의 해석 실행 순서
1. from  
2. where   (    )
3. start with  
4. connect by  
5. where  
6. group by  
7. having  
8. model  
9. select  
10. union、minus、intersect       
11. order by  

모델의 장점
Oracle 9i까지는 다양한 컴퓨팅 분석 함수를 사용하고union all , 개발 언어(C# 및 Java 등)로 복잡한 컴퓨팅 통계 병합 등이 필요하다.Model을 사용하면 SQL에서 이러한 작업을 수행할 수 있습니다.
  model .
  • 합계 행 추가
  • 행렬 변환
  • 현재 줄의 앞뒤 줄 사용
  • RegExp_Replace

  • 2. HelloWorld
    먼저 간단한 예를 하나 보아라.
    예문1
    select ArrValue,soeji
    from (select 'abcdefghijklmn' as ArrValue, 1 as soeji from dual) 
     model 
    dimension by(soeji) 
    measures(ArrValue) 
    rules(ArrValue[1] = 'Hello World');

    결과:
     
    ArrValue
    soeji
    Hello World
    1
    설명:
    model  model , .
    dimension by  dimension , , .
    measures에서 수조로 지정한 열
    rules는 그룹에 대해 여러 가지 조작을 설명합니다.
    예문1의 이해:
     select 'abcdefghijklmn' as ArrValue,  1 as soeji from dual;
    상위 질의의 결과:
    ArrValue       soeji
     
     
    abcdefghijklmn
    1
    아래 문장에 근거하여
    model  dimension by (soeji)  measures(ArrValue)
    eji는 색인으로 수조ArrValue를 조작하고 rules(ArrValue[1] = 'Hello World') HelloWorld로 ArrValue[1]의 값을 덮어씁니다.
    예문2:
    select ArrValue,soeji    from (select 'abcdefghijklmn' as ArrValue,          1 as soeji from dual)   model  dimension by(soeji)  measures(ArrValue)  rules(ArrValue[1] = 'Hello World',        ArrValue[2] = 'Hello model');
    실행 결과:
    ArrValue       soeji
     
     
    Hello World
    1
    Hello model
    2 rules , , 따라서ArrValue[1] = 'Hello World' ,ArrValue[2] = 'Hello Model'insert 하나.
    예문3:
    select ArrValue,soeji    from (select 'abcdefghijklmn' as ArrValue,          1 assoeji from dual)   model  dimension by(soeji)  measures(ArrValue)  rules(ArrValue[3] ='Hello Oracle');

    결과:
    ArrValue       soeji
     
     
    abcdefghijklmn
    1
    Hello Oracle
    3
      model , 。
    예문 4:
    select ArrValue,soeji    from (select 'abcdefghijklmn' as ArrValue,          1 assoeji from dual)   model return updated rows  dimension by(soeji)  measures(ArrValue) rules(ArrValue[4] = 'Hello CodeZine');

    결과:
    ArrValue       soeji
     
     
    Hello CodeZine
    4 model return updated rowsrules를 사용하여 업데이트되거나 삽입된 줄을 표시합니다. 업데이트되지 않은 줄은 더 이상 SQL의 결과가 되지 않습니다.
    다시 한 번, 다음 표가 있는데, 검색 결과 뒤에 합계 줄을 추가하기를 희망합니다.
    addTotal
    ID
    Val
    1
    30
    2
    100
    3
    50
    4
    300
    select ID,Val    
    from addTotal   model  dimension by(ID)  measures(Val)  rules( Val[null] = Val[1]+Val[2]+Val[3]+Val[4] );
    결실
    ID
    Val
    1
    30
    2
    100
    3
    50
    4
    300
    null
    480
    사용하지 않음model rollup,union all .
    rollup 방법:
    select ID,sum(Val) as Val    from addTotal  group by rollup(ID);
    union all  :
    select ID,Val    from addTotal  union all  select null,Sum(Val)    from addTotal;
    =================================================
             ,    ( code  )      ( p_id  ),         (v1)    (v2)
                ,  ’10’=’30’+’31’,  ’10’    ,’30’ ’31’  ’10’      。
      SQL> create table t603 (code varchar(10),p_id varchar(7),v1 number(10),v2 number(10));
      Table created.
      SQL> insert into t603 values(’600001’,’30’,1,1);
      SQL> insert into t603 values(’600001’,’31’,1,1);
      SQL> insert into t603 values(’600001’,’10’,2,2);
      SQL> insert into t603 values(’600002’,’10’,3,2);
      SQL> insert into t603 values(’600002’,’31’,2,1);
      SQL> insert into t603 values(’600002’,’30’,2,1);
      SQL> commit;
      Commit complete.
      SQL> select * from t603;
      CODE P_ID V1 V2
      600001 30 1 1
      600001 31 1 1
      600001 10 2 2
      600002 10 3 2
      600002 31 2 1
      600002 30 2 1
      6 rows selected.
      SELECT code,
      p_id, v1
      FROM t603
      WHERE code IN (’600001’,’600002’)
      MODEL RETURN UPDATED ROWS
      PARTITION BY (code)
      DIMENSION BY (p_id)
      MEASURES (v1)
      RULES (
      v1[’err1’] = v1[’30’] + v1[’31’] -v1[’10’])
      ORDER BY code, p_id;
        rule      ,’err1’           ,     P_ID ’30’ v1 +P_ID ’31’ v1 -P_ID ’10’ v1 
      PARTITION BY (code)       ,            
      MODEL        RETURN UPDATED ROWS                       。                  ,          
      CODE P_ID V1
      600001 err1 0
      600002 err1 1
           =0,  v1[’30’] + v1[’31’] =v1[’10’]    ,  ,     
      SELECT code,
      p_id, v1,v2
      FROM t603
      WHERE code IN (’600001’,’600002’)
      MODEL RETURN UPDATED ROWS
      PARTITION BY (code)
      DIMENSION BY (p_id)
      MEASURES (v1,v2)
      RULES (
      v1[’err1’] = v1[’30’] + v1[’31’] -v1[’10’],
      v2[’err1’] = v2[’30’] + v2[’31’] -v2[’10’])
      ORDER BY code, p_id;
      CODE P_ID V1 V2
      600001 err1 0 0
      600002 err1 1 0
                    ,    ,           ,  2008      
      SELECT year,code,
      p_id, v1
      FROM t603_1
      WHERE code IN (’600001’,’600002’)
      MODEL RETURN UPDATED ROWS
      PARTITION BY (code)
      DIMENSION BY (p_id,year)
      MEASURES (v1)
      RULES (
      v1[’err1’,2008] = v1[’30’,2008] + v1[’31’,2008] -v1[’10’,2008])
      ORDER BY code, p_id;
      YEAR CODE P_ID V1
      2008 600001 err1 0
      2008 600002 err1 1
               ,      ,        
      SELECT year,code,
      p_id, v1
      FROM t603_1
      WHERE code IN (’600001’,’600002’)
      MODEL RETURN UPDATED ROWS
      PARTITION BY (code,year)
      DIMENSION BY (p_id)
      MEASURES (v1)
      RULES (
      v1[’err1’] = v1[’30’] + v1[’31’] -v1[’10’])
      ORDER BY code, p_id;
      YEAR CODE P_ID V1
      2008 600001 err1 0
      2008 600002 err1 1
      SQL> create table t603_2 as select * from t603_1;
      Table created.
      SQL> insert into t603_2 select ’2007’ year,code,p_id,v1,v2 from t603_1;
      6 rows created.
                  ,             
      SELECT year,code,
      p_id, v1
      FROM t603_2
      WHERE code IN (’600001’,’600002’)
      MODEL RETURN UPDATED ROWS
      PARTITION BY (code,year)
      DIMENSION BY (p_id)
      MEASURES (v1)
      RULES (
      v1[’err1’] = v1[’30’] + v1[’31’] -v1[’10’])
      ORDER BY code, p_id;
      YEAR CODE P_ID V1
      2008 600001 err1 0
      2007 600001 err1 0
      2007 600002 err1 1
      2008 600002 err1 1
                    ,            ,    2008  ’10’=2007  ’30’+’31’
      SELECT year,code,
      p_id, v1
      FROM t603_2
      WHERE code IN (’600001’,’600002’)
      MODEL RETURN UPDATED ROWS
      PARTITION BY (code)
      DIMENSION BY (p_id,year)
      MEASURES (v1)
      RULES (
      v1[’err1’,2008] = v1[’30’,2007] + v1[’31’,2007] -v1[’10’,2008])
      ORDER BY code, p_id;
      YEAR CODE P_ID V1
      2008 600001 err1 0
      2008 600002 err1 1
            ,           ,       CV()    
      SQL> insert into t603_2 select ’2006’ year,code,p_id,v1,v2 from t603_1;
      SELECT year,code,
      p_id, v1
      FROM t603_2
      WHERE code IN (’600001’,’600002’)
      MODEL RETURN UPDATED ROWS
      PARTITION BY (code)
      DIMENSION BY (p_id,year)
      MEASURES (v1)
      RULES (
      v1[’err1’,for year in( 2007 ,2008)] = v1[’30’,CV(year)-1] + v1[’31’,CV(year)-1] -v1[’10’,CV(year)])
      ORDER BY code, p_id;
      YEAR CODE P_ID V1
      2007 600001 err1 0
      2008 600001 err1 0
      2007 600002 err1 1
      2008 600002 err1 1
        year     ,    for year from 2007 to 2009 increment 1   ,       ,     in         ,
        for year in (select year from t603_2)。
               year in    ,year in                 , v1[’err1’,x]     。
               :
      SELECT year,code,
      p_id, v1
      FROM t603_2
      WHERE code IN (’600001’,’600002’)
      MODEL RETURN UPDATED ROWS
      PARTITION BY (code)
      DIMENSION BY (p_id,year)
      MEASURES (v1)
      RULES (
      v1[’err1’,2008] = v1[’30’,CV()] + v1[’31’,CV()] -v1[’10’,CV()])
      ORDER BY code, p_id;
      YEAR CODE P_ID V1
      2008 600001 err1 0
      2008 600002 err1 1
       
      SELECT year,code,
      p_id, v1
      FROM t603_2
      WHERE code IN (’600001’,’600002’)
      MODEL RETURN UPDATED ROWS
      PARTITION BY (code)
      DIMENSION BY (p_id,year)
      MEASURES (v1)
      RULES (
      v1[’err1’,year in (’2008’)] = v1[’30’,CV()] + v1[’31’,CV()] -v1[’10’,CV()])
         0 

    좋은 웹페이지 즐겨찾기