comparison Data/Create Scripts/Oracle.sql @ 0:f990fcb411a9

Копия текущей версии из github
author cin
date Thu, 27 Mar 2014 21:46:09 +0400
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:f990fcb411a9
1 -- Person Table
2
3 DROP SEQUENCE PersonSeq
4 /
5 DROP TABLE Doctor
6 /
7 DROP TABLE Patient
8 /
9 DROP TABLE Person
10 /
11 DROP SEQUENCE BinaryDataSeq
12 /
13 DROP TABLE BinaryData
14 /
15 DROP SEQUENCE DataTypeTestSeq
16 /
17 DROP TABLE DataTypeTest
18 /
19 DROP TABLE GrandChild
20 /
21 DROP TABLE Child
22 /
23 DROP TABLE Parent
24 /
25 DROP TABLE LinqDataTypes
26 /
27 DROP SEQUENCE SequenceTestSeq
28 /
29 DROP TABLE SequenceTest
30 /
31 DROP TABLE "STG_TRADE_INFORMATION"
32 /
33 DROP table t_test_user_contract
34 /
35 DROP table t_test_user
36 /
37 DROP sequence sq_test_user
38 /
39 DROP sequence sq_test_user_contract
40 /
41
42
43 CREATE SEQUENCE PersonSeq
44 /
45
46 CREATE TABLE Person
47 ( PersonID NUMBER NOT NULL PRIMARY KEY
48 , Firstname VARCHAR2(50) NOT NULL
49 , Lastname VARCHAR2(50) NOT NULL
50 , Middlename VARCHAR2(50)
51 , Gender CHAR(1) NOT NULL
52
53 , CONSTRAINT Ck_Person_Gender CHECK (Gender IN ('M', 'F', 'U', 'O'))
54 )
55 /
56
57 -- Insert Trigger for Person
58
59 CREATE OR REPLACE TRIGGER Person_Add
60 BEFORE INSERT
61 ON Person
62 FOR EACH ROW
63 BEGIN
64 SELECT
65 PersonSeq.NEXTVAL
66 INTO
67 :NEW.PersonID
68 FROM
69 dual;
70 END;
71 /
72
73 -- Doctor Table Extension
74
75 CREATE TABLE Doctor
76 ( PersonID NUMBER NOT NULL PRIMARY KEY
77 , Taxonomy NVARCHAR2(50) NOT NULL
78
79 , CONSTRAINT Fk_Doctor_Person FOREIGN KEY (PersonID)
80 REFERENCES Person (PersonID) ON DELETE CASCADE
81 )
82 /
83
84 -- Patient Table Extension
85
86 CREATE TABLE Patient
87 ( PersonID NUMBER NOT NULL PRIMARY KEY
88 , Diagnosis NVARCHAR2(256) NOT NULL
89
90 , CONSTRAINT Fk_Patient_Person FOREIGN KEY (PersonID)
91 REFERENCES Person (PersonID) ON DELETE CASCADE
92 )
93 /
94
95 -- Sample data for Person/Doctor/Patient
96
97 INSERT INTO Person (FirstName, LastName, Gender) VALUES ('John', 'Pupkin', 'M')
98 /
99 INSERT INTO Person (FirstName, LastName, Gender) VALUES ('Tester', 'Testerson', 'M')
100 /
101 INSERT INTO Doctor (PersonID, Taxonomy) VALUES (PersonSeq.CURRVAL, 'Psychiatry')
102 /
103 INSERT INTO Patient (PersonID, Diagnosis) VALUES (PersonSeq.CURRVAL, 'Hallucination with Paranoid Bugs'' Delirium of Persecution')
104 /
105
106 -- Person_Delete
107
108 CREATE OR REPLACE
109 PROCEDURE Person_Delete(pPersonID IN NUMBER) IS
110 BEGIN
111 DELETE FROM
112 Person
113 WHERE
114 PersonID = pPersonID;
115 END;
116 /
117
118 -- Person_Insert
119
120 CREATE OR REPLACE
121 PROCEDURE Person_Insert_OutputParameter
122 ( pFirstName IN NVARCHAR2
123 , pLastName IN NVARCHAR2
124 , pMiddleName IN NVARCHAR2
125 , pGender IN CHAR
126 , pPersonID OUT NUMBER
127 ) IS
128 BEGIN
129 INSERT INTO Person
130 ( LastName, FirstName, MiddleName, Gender)
131 VALUES
132 (pLastName, pFirstName, pMiddleName, pGender)
133 RETURNING
134 PersonID
135 INTO
136 pPersonID;
137 END;
138 /
139
140 CREATE OR REPLACE
141 FUNCTION Person_Insert
142 ( pFirstName IN NVARCHAR2
143 , pLastName IN NVARCHAR2
144 , pMiddleName IN NVARCHAR2
145 , pGender IN CHAR
146 )
147 RETURN SYS_REFCURSOR IS
148 retCursor SYS_REFCURSOR;
149 lPersonID NUMBER;
150 BEGIN
151 INSERT INTO Person
152 ( LastName, FirstName, MiddleName, Gender)
153 VALUES
154 (pLastName, pFirstName, pMiddleName, pGender)
155 RETURNING
156 PersonID
157 INTO
158 lPersonID;
159
160 OPEN retCursor FOR
161 SELECT
162 PersonID, Firstname, Lastname, Middlename, Gender
163 FROM
164 Person
165 WHERE
166 PersonID = lPersonID;
167 RETURN
168 retCursor;
169 END;
170 /
171
172 -- Person_SelectAll
173
174 CREATE OR REPLACE
175 FUNCTION Person_SelectAll
176 RETURN SYS_REFCURSOR IS
177 retCursor SYS_REFCURSOR;
178 BEGIN
179 OPEN retCursor FOR
180 SELECT
181 PersonID, Firstname, Lastname, Middlename, Gender
182 FROM
183 Person;
184 RETURN
185 retCursor;
186 END;
187 /
188
189 -- Person_SelectAllByGender
190
191 CREATE OR REPLACE
192 FUNCTION Person_SelectAllByGender(pGender IN CHAR)
193 RETURN SYS_REFCURSOR IS
194 retCursor SYS_REFCURSOR;
195 BEGIN
196 OPEN retCursor FOR
197 SELECT
198 PersonID, Firstname, Lastname, Middlename, Gender
199 FROM
200 Person
201 WHERE
202 Gender = pGender;
203 RETURN
204 retCursor;
205 END;
206 /
207
208 -- Person_SelectByKey
209
210 CREATE OR REPLACE
211 FUNCTION Person_SelectByKey(pID IN NUMBER)
212 RETURN SYS_REFCURSOR IS
213 retCursor SYS_REFCURSOR;
214 BEGIN
215 OPEN retCursor FOR
216 SELECT
217 PersonID, Firstname, Lastname, Middlename, Gender
218 FROM
219 Person
220 WHERE
221 PersonID = pID;
222 RETURN
223 retCursor;
224 END;
225 /
226
227 -- Person_SelectByName
228
229 CREATE OR REPLACE
230 FUNCTION Person_SelectByName
231 ( pFirstName IN NVARCHAR2
232 , pLastName IN NVARCHAR2
233 )
234 RETURN SYS_REFCURSOR IS
235 retCursor SYS_REFCURSOR;
236 BEGIN
237 OPEN retCursor FOR
238 SELECT
239 PersonID, Firstname, Lastname, Middlename, Gender
240 FROM
241 Person
242 WHERE
243 FirstName = pFirstName AND LastName = pLastName;
244 RETURN
245 retCursor;
246 END;
247 /
248
249 -- Person_SelectListByName
250
251 CREATE OR REPLACE
252 FUNCTION Person_SelectListByName
253 ( pFirstName IN NVARCHAR2
254 , pLastName IN NVARCHAR2
255 )
256 RETURN SYS_REFCURSOR IS
257 retCursor SYS_REFCURSOR;
258 BEGIN
259 OPEN retCursor FOR
260 SELECT
261 PersonID, Firstname, Lastname, Middlename, Gender
262 FROM
263 Person
264 WHERE
265 FirstName LIKE pFirstName AND LastName LIKE pLastName;
266 RETURN
267 retCursor;
268 END;
269 /
270
271 CREATE OR REPLACE
272 PROCEDURE Person_Update
273 ( pPersonID IN NUMBER
274 , pFirstName IN NVARCHAR2
275 , pLastName IN NVARCHAR2
276 , pMiddleName IN NVARCHAR2
277 , pGender IN CHAR
278 ) IS
279 BEGIN
280 UPDATE
281 Person
282 SET
283 LastName = pLastName,
284 FirstName = pFirstName,
285 MiddleName = pMiddleName,
286 Gender = pGender
287 WHERE
288 PersonID = pPersonID;
289 END;
290 /
291
292 -- Patient_SelectAll
293
294 CREATE OR REPLACE
295 FUNCTION Patient_SelectAll
296 RETURN SYS_REFCURSOR IS
297 retCursor SYS_REFCURSOR;
298 BEGIN
299 OPEN retCursor FOR
300 SELECT
301 Person.*, Patient.Diagnosis
302 FROM
303 Patient, Person
304 WHERE
305 Patient.PersonID = Person.PersonID;
306 RETURN
307 retCursor;
308 END;
309 /
310
311
312 -- Patient_SelectByName
313
314 CREATE OR REPLACE
315 FUNCTION Patient_SelectByName
316 ( pFirstName IN NVARCHAR2
317 , pLastName IN NVARCHAR2
318 )
319 RETURN SYS_REFCURSOR IS
320 retCursor SYS_REFCURSOR;
321 BEGIN
322 OPEN retCursor FOR
323 SELECT
324 Person.*, Patient.Diagnosis
325 FROM
326 Patient, Person
327 WHERE
328 Patient.PersonID = Person.PersonID
329 AND FirstName = pFirstName AND LastName = pLastName;
330 RETURN
331 retCursor;
332 END;
333 /
334
335 -- BinaryData Table
336
337 CREATE SEQUENCE BinaryDataSeq
338 /
339
340 CREATE TABLE BinaryData
341 ( BinaryDataID NUMBER NOT NULL PRIMARY KEY
342 , Stamp TIMESTAMP DEFAULT SYSDATE NOT NULL
343 , Data BLOB NOT NULL
344 )
345 /
346
347 -- Insert Trigger for Binarydata
348
349 CREATE OR REPLACE TRIGGER BinaryData_Add
350 BEFORE INSERT
351 ON BinaryData
352 FOR EACH ROW
353 BEGIN
354 SELECT
355 BinaryDataSeq.NEXTVAL
356 INTO
357 :NEW.BinaryDataID
358 FROM
359 dual;
360 END;
361 /
362
363 -- OutRefTest
364
365 CREATE OR REPLACE
366 PROCEDURE OutRefTest
367 ( pID IN NUMBER
368 , pOutputID OUT NUMBER
369 , pInputOutputID IN OUT NUMBER
370 , pStr IN NVARCHAR2
371 , pOutputStr OUT NVARCHAR2
372 , pInputOutputStr IN OUT NVARCHAR2
373 ) IS
374 BEGIN
375 pOutputID := pID;
376 pInputOutputID := pID + pInputOutputID;
377 pOutputStr := pStr;
378 pInputOutputStr := pStr || pInputOutputStr;
379 END;
380 /
381
382 CREATE OR REPLACE
383 PROCEDURE OutRefEnumTest
384 ( pStr IN NVARCHAR2
385 , pOutputStr OUT NVARCHAR2
386 , pInputOutputStr IN OUT NVARCHAR2
387 ) IS
388 BEGIN
389 pOutputStr := pStr;
390 pInputOutputStr := pStr || pInputOutputStr;
391 END;
392 /
393
394 -- ArrayTest
395
396 CREATE OR REPLACE
397 PROCEDURE ArrayTest
398 ( pIntArray IN DBMS_UTILITY.NUMBER_ARRAY
399 , pOutputIntArray OUT DBMS_UTILITY.NUMBER_ARRAY
400 , pInputOutputIntArray IN OUT DBMS_UTILITY.NUMBER_ARRAY
401 , pStrArray IN DBMS_UTILITY.NAME_ARRAY
402 , pOutputStrArray OUT DBMS_UTILITY.NAME_ARRAY
403 , pInputOutputStrArray IN OUT DBMS_UTILITY.NAME_ARRAY
404 ) IS
405 BEGIN
406 pOutputIntArray := pIntArray;
407
408 FOR i IN pIntArray.FIRST..pIntArray.LAST LOOP
409 pInputOutputIntArray(i) := pInputOutputIntArray(i) + pIntArray(i);
410 END LOOP;
411
412 pOutputStrArray := pStrArray;
413
414 FOR i IN pStrArray.FIRST..pStrArray.LAST LOOP
415 pInputOutputStrArray(i) := pInputOutputStrArray(i) || pStrArray(i);
416 END LOOP;
417 END;
418 /
419
420 CREATE OR REPLACE
421 PROCEDURE ScalarArray
422 ( pOutputIntArray OUT DBMS_UTILITY.NUMBER_ARRAY
423 ) IS
424 BEGIN
425 FOR i IN 1..5 LOOP
426 pOutputIntArray(i) := i;
427 END LOOP;
428 END;
429 /
430
431 -- ResultSetTest
432
433 CREATE OR REPLACE
434 PROCEDURE RESULTSETTEST
435 ( mr OUT SYS_REFCURSOR
436 , sr OUT SYS_REFCURSOR
437 ) IS
438 BEGIN
439 OPEN mr FOR
440 SELECT 1 as MasterID FROM dual
441 UNION SELECT 2 as MasterID FROM dual;
442 OPEN sr FOR
443 SELECT 4 SlaveID, 1 as MasterID FROM dual
444 UNION SELECT 5 SlaveID, 2 as MasterID FROM dual
445 UNION SELECT 6 SlaveID, 2 as MasterID FROM dual
446 UNION SELECT 7 SlaveID, 1 as MasterID FROM dual;
447 END;
448 /
449
450 -- ExecuteScalarTest
451
452 CREATE OR REPLACE
453 FUNCTION Scalar_DataReader
454 RETURN SYS_REFCURSOR
455 IS
456 retCursor SYS_REFCURSOR;
457 BEGIN
458 OPEN retCursor FOR
459 SELECT
460 12345 intField, '54321' stringField
461 FROM
462 DUAL;
463 RETURN
464 retCursor;
465 END;
466 /
467
468 CREATE OR REPLACE
469 PROCEDURE Scalar_OutputParameter
470 ( pOutputInt OUT BINARY_INTEGER
471 , pOutputString OUT NVARCHAR2
472 ) IS
473 BEGIN
474 pOutputInt := 12345;
475 pOutputString := '54321';
476 END;
477 /
478
479 CREATE OR REPLACE
480 FUNCTION Scalar_ReturnParameter
481 RETURN BINARY_INTEGER IS
482 BEGIN
483 RETURN
484 12345;
485 END;
486 /
487
488 -- Data Types test
489
490 CREATE SEQUENCE DataTypeTestSeq
491 /
492
493 CREATE TABLE DataTypeTest
494 (
495 DataTypeID INTEGER NOT NULL PRIMARY KEY,
496 Binary_ RAW(50) NULL,
497 Boolean_ NUMBER(1,0) NULL,
498 Byte_ NUMBER(3,0) NULL,
499 Bytes_ BLOB NULL,
500 Char_ NCHAR NULL,
501 DateTime_ DATE NULL,
502 Decimal_ NUMBER(19,5) NULL,
503 Double_ DOUBLE PRECISION NULL,
504 Guid_ RAW(16) NULL,
505 Int16_ NUMBER(5,0) NULL,
506 Int32_ NUMBER(10,0) NULL,
507 Int64_ NUMBER(20,0) NULL,
508 Money_ NUMBER NULL,
509 SByte_ NUMBER(3,0) NULL,
510 Single_ FLOAT NULL,
511 Stream_ BLOB NULL,
512 String_ NVARCHAR2(50) NULL,
513 UInt16_ NUMBER(5,0) NULL,
514 UInt32_ NUMBER(10,0) NULL,
515 UInt64_ NUMBER(20,0) NULL,
516 Xml_ XMLTYPE NULL
517 )
518 /
519
520 -- Insert Trigger for DataTypeTest
521
522 CREATE OR REPLACE TRIGGER DataTypeTest_Add
523 BEFORE INSERT
524 ON DataTypeTest
525 FOR EACH ROW
526 BEGIN
527 SELECT
528 DataTypeTestSeq.NEXTVAL
529 INTO
530 :NEW.DataTypeID
531 FROM
532 dual;
533 END;
534 /
535
536 INSERT INTO DataTypeTest
537 (Binary_, Boolean_, Byte_, Bytes_, Char_, DateTime_, Decimal_,
538 Double_, Guid_, Int16_, Int32_, Int64_, Money_, SByte_,
539 Single_, Stream_, String_, UInt16_, UInt32_, UInt64_, Xml_)
540 VALUES
541 ( NULL, NULL, NULL, NULL, NULL, NULL, NULL,
542 NULL, NULL, NULL, NULL, NULL, NULL, NULL,
543 NULL, NULL, NULL, NULL, NULL, NULL, NULL)
544 /
545
546 INSERT INTO DataTypeTest
547 (Binary_, Boolean_, Byte_, Bytes_, Char_, DateTime_, Decimal_,
548 Double_, Guid_, Int16_, Int32_, Int64_, Money_, SByte_,
549 Single_, Stream_, String_, UInt16_, UInt32_, UInt64_,
550 Xml_)
551 VALUES
552 (SYS_GUID(), 1, 255, SYS_GUID(), 'B', SYSDATE, 12345.67,
553 1234.567, SYS_GUID(), 32767, 32768, 1000000, 12.3456, 127,
554 1234.123, SYS_GUID(), 'string', 32767, 32768, 200000000,
555 XMLTYPE('<root><element strattr="strvalue" intattr="12345"/></root>'))
556 /
557
558
559
560 CREATE TABLE Parent (ParentID int, Value1 int)
561 /
562 CREATE TABLE Child (ParentID int, ChildID int)
563 /
564 CREATE TABLE GrandChild (ParentID int, ChildID int, GrandChildID int)
565 /
566
567
568 CREATE TABLE LinqDataTypes
569 (
570 ID int,
571 MoneyValue decimal(10,4),
572 DateTimeValue timestamp,
573 DateTimeValue2 timestamp,
574 BoolValue smallint,
575 GuidValue raw(16),
576 BinaryValue blob NULL,
577 SmallIntValue smallint,
578 IntValue int NULL,
579 BigIntValue number(20,0) NULL
580 )
581 /
582
583 CREATE SEQUENCE SequenceTestSeq
584 MINVALUE 1
585 START WITH 1
586 INCREMENT BY 1
587 CACHE 10
588 /
589
590 CREATE TABLE SequenceTest
591 (
592 ID int NOT NULL PRIMARY KEY,
593 Value VARCHAR2(50) NOT NULL
594 )
595 /
596
597 CREATE TABLE "STG_TRADE_INFORMATION"
598 (
599 "STG_TRADE_ID" NUMBER NOT NULL ENABLE,
600 "STG_TRADE_VERSION" NUMBER NOT NULL ENABLE,
601 "INFORMATION_TYPE_ID" NUMBER NOT NULL ENABLE,
602 "INFORMATION_TYPE_NAME" VARCHAR2(50 BYTE),
603 "VALUE" VARCHAR2(4000 BYTE),
604 "VALUE_AS_INTEGER" NUMBER,
605 "VALUE_AS_DATE" DATE
606 )
607 /
608
609
610 create table t_test_user
611 (
612 user_id number primary key,
613 name varchar2(255) not null unique
614 )
615 /
616
617 create table t_test_user_contract
618 (
619 user_contract_id number primary key,
620 user_id number not null references t_test_user on delete cascade,
621 contract_no number not null,
622 name varchar2(255) not null,
623 unique (user_id, contract_no)
624 )
625 /
626
627 create sequence sq_test_user
628 /
629 create sequence sq_test_user_contract
630 /
631
632
633 DROP SEQUENCE TestIdentitySeq
634 /
635 DROP TABLE TestIdentity
636 /
637
638 CREATE TABLE TestIdentity (
639 ID NUMBER NOT NULL PRIMARY KEY
640 )
641 /
642
643 CREATE SEQUENCE TestIdentitySeq
644 /
645
646 CREATE OR REPLACE TRIGGER TestIdentity_Add
647 BEFORE INSERT
648 ON TestIdentity
649 FOR EACH ROW
650 BEGIN
651 SELECT
652 TestIdentitySeq.NEXTVAL
653 INTO
654 :NEW.ID
655 FROM
656 dual;
657 END;
658 /