Oracle 모델 문 시작
11352 단어 Oracle 데이터베이스
환경: 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 rows ,
rules
를 사용하여 업데이트되거나 삽입된 줄을 표시합니다. 업데이트되지 않은 줄은 더 이상 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