My favorites
▼
|
Sign in
javahotel
Hotel Software for small, medium and large
Project Home
Downloads
Wiki
Issues
Source
Checkout
Browse
Changes
Source path:
svn
/
trunk
/
examples
/
ntile_sql
/
create_package.sql
r586
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
create or replace
PACKAGE A_NTILETEST AS
--ORACLE CONSTANT BOOLEAN := TRUE;
ORACLE CONSTANT BOOLEAN := FALSE;
PROCEDURE RUN_TEST1;
PROCEDURE RUN_TEST2;
PROCEDURE RUN_TEST3;
PROCEDURE RUN_TEST4;
END A_NTFILETEST;
@
create or replace
PACKAGE BODY A_NTILETEST AS
PROCEDURE PREPARE_TEST AS
BEGIN
EXECUTE IMMEDIATE 'TRUNCATE TABLE EMPNO';
INSERT INTO EMPNO VALUES(1,'7369','SMITH');
INSERT INTO EMPNO VALUES(1,'7499','ALLEN');
INSERT INTO EMPNO VALUES(1,'7521','WARD');
INSERT INTO EMPNO VALUES(1,'7566','JONES');
INSERT INTO EMPNO VALUES(2,'7654','MARTIN');
INSERT INTO EMPNO VALUES(2,'7698','BLAKE');
INSERT INTO EMPNO VALUES(2,'7782','CLARK');
INSERT INTO EMPNO VALUES(2,'7788','SCOTT');
INSERT INTO EMPNO VALUES(3,'7839','KING');
INSERT INTO EMPNO VALUES(3,'7844','TURNER');
INSERT INTO EMPNO VALUES(3,'7876','ADAMS');
INSERT INTO EMPNO VALUES(4,'7900','JAMES');
INSERT INTO EMPNO VALUES(4,'7902','FORD');
INSERT INTO EMPNO VALUES(4,'7934','MILLER');
COMMIT;
END;
PROCEDURE PREPARE_TEST2 AS
BEGIN
EXECUTE IMMEDIATE 'TRUNCATE TABLE EMPSALARY';
INSERT INTO EMPSALARY VALUES ('Greenberg',12000);
INSERT INTO EMPSALARY VALUES ('Faviet', 9000);
INSERT INTO EMPSALARY VALUES ('Chen',8200);
INSERT INTO EMPSALARY VALUES ('Urman',7800);
INSERT INTO EMPSALARY VALUES ('Sciarra',7700);
INSERT INTO EMPSALARY VALUES ('Popp',6900);
END;
FUNCTION NTILE_FUN(A IN INTEGER, BUCKETNO IN INTEGER, NOFROWS IN INTEGER)
RETURN INTEGER
AS
MINROWS INTEGER;
MINREST INTEGER;
X INTEGER;
FIRSTB INTEGER;
LASTB INTEGER;
ACTB INTEGER;
BEGIN
MINROWS := FLOOR(NOFROWS / BUCKETNO);
MINREST := NOFROWS - (BUCKETNO * MINROWS);
-- X := FLOOR(A / MINROWS);
-- DBMS_OUTPUT.PUT_LINE(NOFROWS || ' ' || A || ' ' || MINROWS || ' ' || X );
ACTB := 1;
FIRSTB := 1;
WHILE FIRSTB <= NOFROWS LOOP
LASTB := FIRSTB + MINROWS - 1;
IF MINREST > 0 THEN
LASTB := LASTB + 1;
MINREST := MINREST - 1;
END IF;
IF A <= LASTB THEN
EXIT;
END IF;
FIRSTB := LASTB + 1;
ACTB := ACTB + 1;
END LOOP;
RETURN ACTB;
END;
FUNCTION RET_STMT RETURN VARCHAR2 AS
BEGIN
$IF A_NTILETEST.ORACLE $THEN
RETURN 'select ntile(4)over(order by empno) grp,
empno,
ename
from empno';
$ELSE
return 'select NTILE_FUN(row_number( )over(order by empno),4,
(SELECT COUNT(*) FROM empno)) grp,
empno,
ename
from empno order by empno';
$END
END;
FUNCTION RET_STMT2 RETURN VARCHAR2 AS
BEGIN
$IF A_NTILETEST.ORACLE $THEN
RETURN 'SELECT last_name, salary, NTILE(4) OVER (ORDER BY salary DESC)
AS quartile FROM empsalary';
$ELSE
RETURN 'SELECT last_name, salary,
NTILE_FUN(row_number( )over(ORDER BY salary DESC),4,
(SELECT COUNT(*) FROM empsalary))
AS quartile FROM empsalary';
$END
END;
PROCEDURE RUN_TEST1 AS
emp_refcur SYS_REFCURSOR;
GRP INTEGER;
EMPNO VARCHAR2(20);
ENAME VARCHAR2(100);
BEGIN
PREPARE_TEST;
OPEN emp_refcur FOR RET_STMT;
LOOP
FETCH emp_refcur INTO GRP,EMPNO,ENAME;
EXIT WHEN emp_refcur%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(grp || ' ' || empno || ' ' || ename);
END LOOP;
CLOSE emp_refcur;
END RUN_TEST1;
PROCEDURE RUN_TEST2 AS
emp_refcur SYS_REFCURSOR;
quartile INTEGER;
SALARY NUMBER;
LASTNAME VARCHAR2(100);
BEGIN
PREPARE_TEST2;
OPEN emp_refcur FOR RET_STMT2;
LOOP
FETCH emp_refcur INTO LASTNAME,SALARY,quartile;
EXIT WHEN emp_refcur%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(LASTNAME || ' ' || SALARY || ' ' || quartile);
END LOOP;
CLOSE emp_refcur;
END RUN_TEST2;
PROCEDURE PREPARE_TEST3 AS
BEGIN
EXECUTE IMMEDIATE 'TRUNCATE TABLE ContestResults';
INSERT INTO ContestResults VALUES (1,'Pumpkin', 716, 'Chad Johnson');
INSERT INTO ContestResults VALUES (2,'Pumpkin', 679, 'George Kopsell');
INSERT INTO ContestResults VALUES (3,'Pumpkin', 679, 'Dan Gardner');
INSERT INTO ContestResults VALUES (4,'Pumpkin', 481, 'John Suydam');
INSERT INTO ContestResults VALUES (5,'Pumpkin', 452, 'Mark Bardin');
INSERT INTO ContestResults VALUES (6,'Pumpkin', 442, 'Bill Kallas');
INSERT INTO ContestResults VALUES (7,'Pumpkin', 428, 'Theresa Helmer');
INSERT INTO ContestResults VALUES (8,'Pumpkin', 426, 'Terry Helmer');
INSERT INTO ContestResults VALUES (9,'Pumpkin', 346, 'Gary Spiel');
INSERT INTO ContestResults VALUES (10,'Pumpkin', 331, 'Kevin Rabell');
INSERT INTO ContestResults VALUES (11,'Pumpkin', 289, 'Jan Spiel');
INSERT INTO ContestResults VALUES (12,'Pumpkin', 247, 'Harvey Zale');
INSERT INTO ContestResults VALUES (13,'Pumpkin', 229, 'Harvey Zale');
INSERT INTO ContestResults VALUES (14,'Squash', 462, 'Dan Gardner');
INSERT INTO ContestResults VALUES (15,'Squash', 462, 'Harvey Zale') ; -- I made up this entry
INSERT INTO ContestResults VALUES (16,'Squash', 435, 'Terry Helmer'); -- I made up this entry
INSERT INTO ContestResults VALUES (17,'Squash', 405, 'Gary Spiel'); -- I made up this entry
INSERT INTO ContestResults VALUES (18,'Watermelon', 146, 'Mark Bardin');
INSERT INTO ContestResults VALUES (19,'Watermelon', 139, 'Christine Daak'); -- I made up this entry
INSERT INTO ContestResults VALUES (20,'Watermelon', 139, 'Carlotta Giudicelli'); -- I made up this entry
INSERT INTO ContestResults VALUES (21,'Watermelon', 132, 'Ubaldo Piangi'); -- I made up this entry
INSERT INTO ContestResults VALUES (22,'Watermelon', 132, 'Meg Giry'); -- I made up this entry
INSERT INTO ContestResults VALUES (23,'Watermelon', 129, 'Joseph Buquet'); -- I made up this entry
COMMIT;
END PREPARE_TEST3;
FUNCTION RET_STMT3 RETURN VARCHAR2 AS
BEGIN
$IF A_NTILETEST.ORACLE $THEN
RETURN '
SELECT
Category,
Weight,
Entrant,
NTILE(2) OVER (
PARTITION BY Category
ORDER BY Weight DESC
) AS Ntile
FROM ContestResults
';
$ELSE
RETURN '
SELECT
Category,
Weight,
Entrant,
NTILE_FUN(row_number( )over(
PARTITION BY Category
ORDER BY Weight DESC),2,
(SELECT COUNT(*) FROM ContestResults as C WHERE C.Category = CC.Category)
) AS Ntile
FROM ContestResults AS CC
';
$END
END;
PROCEDURE RUN_TEST3 AS
emp_refcur SYS_REFCURSOR;
Category varchar(10);
Weight int;
Entrant varchar(20);
NT int;
BEGIN
PREPARE_TEST3;
OPEN emp_refcur FOR RET_STMT3;
LOOP
FETCH emp_refcur INTO Category,Weight,Entrant,NT;
EXIT WHEN emp_refcur%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(NT || ' ' || Category || ' ' || Weight || ' ' || Entrant);
END LOOP;
CLOSE emp_refcur;
END RUN_TEST3;
FUNCTION RET_STMT4 RETURN VARCHAR2 AS
BEGIN
$IF A_NTILETEST.ORACLE $THEN
RETURN '
SELECT
Category,
Weight,
Entrant,
NTILE(2) OVER (
ORDER BY Weight DESC
) AS Ntile
FROM ContestResults
WHERE Category = ''Squash''
';
$ELSE
RETURN '
SELECT
Category,
Weight,
Entrant,
NTILE_FUN(
row_number( )over( ORDER BY Weight DESC),
2,
(SELECT COUNT(*) FROM ContestResults WHERE Category = ''Squash'')
) AS Ntile
FROM ContestResults
WHERE Category = ''Squash''
';
$END
END;
PROCEDURE RUN_TEST4 AS
emp_refcur SYS_REFCURSOR;
Category varchar(10);
Weight int;
Entrant varchar(20);
NT int;
BEGIN
PREPARE_TEST3;
OPEN emp_refcur FOR RET_STMT4;
LOOP
FETCH emp_refcur INTO Category,Weight,Entrant,NT;
EXIT WHEN emp_refcur%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(NT || ' ' || Category || ' ' || Weight || ' ' || Entrant);
END LOOP;
CLOSE emp_refcur;
END RUN_TEST4;
END A_NTILETEST;
@
Show details
Hide details
Change log
r392
by stanislawbartkowski on Jun 11, 2011
Diff
[No log message]
Go to:
...xamples/ntile_sql/create_ddl.sql
...les/ntile_sql/create_package.sql
Project members,
sign in
to write a code review
Older revisions
All revisions of this file
File info
Size: 8230 bytes, 271 lines
View raw file
File properties
svn:eol-style
native
Powered by
Google Project Hosting