Mercurial > pub > bltoolkit
diff Data/Create Scripts/Oracle.sql @ 0:f990fcb411a9
Копия текущей версии из github
author | cin |
---|---|
date | Thu, 27 Mar 2014 21:46:09 +0400 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Data/Create Scripts/Oracle.sql Thu Mar 27 21:46:09 2014 +0400 @@ -0,0 +1,658 @@ +-- Person Table + +DROP SEQUENCE PersonSeq +/ +DROP TABLE Doctor +/ +DROP TABLE Patient +/ +DROP TABLE Person +/ +DROP SEQUENCE BinaryDataSeq +/ +DROP TABLE BinaryData +/ +DROP SEQUENCE DataTypeTestSeq +/ +DROP TABLE DataTypeTest +/ +DROP TABLE GrandChild +/ +DROP TABLE Child +/ +DROP TABLE Parent +/ +DROP TABLE LinqDataTypes +/ +DROP SEQUENCE SequenceTestSeq +/ +DROP TABLE SequenceTest +/ +DROP TABLE "STG_TRADE_INFORMATION" +/ +DROP table t_test_user_contract +/ +DROP table t_test_user +/ +DROP sequence sq_test_user +/ +DROP sequence sq_test_user_contract +/ + + +CREATE SEQUENCE PersonSeq +/ + +CREATE TABLE Person + ( PersonID NUMBER NOT NULL PRIMARY KEY + , Firstname VARCHAR2(50) NOT NULL + , Lastname VARCHAR2(50) NOT NULL + , Middlename VARCHAR2(50) + , Gender CHAR(1) NOT NULL + + , CONSTRAINT Ck_Person_Gender CHECK (Gender IN ('M', 'F', 'U', 'O')) + ) +/ + +-- Insert Trigger for Person + +CREATE OR REPLACE TRIGGER Person_Add +BEFORE INSERT +ON Person +FOR EACH ROW +BEGIN +SELECT + PersonSeq.NEXTVAL +INTO + :NEW.PersonID +FROM + dual; +END; +/ + +-- Doctor Table Extension + +CREATE TABLE Doctor + ( PersonID NUMBER NOT NULL PRIMARY KEY + , Taxonomy NVARCHAR2(50) NOT NULL + + , CONSTRAINT Fk_Doctor_Person FOREIGN KEY (PersonID) + REFERENCES Person (PersonID) ON DELETE CASCADE + ) +/ + +-- Patient Table Extension + +CREATE TABLE Patient + ( PersonID NUMBER NOT NULL PRIMARY KEY + , Diagnosis NVARCHAR2(256) NOT NULL + + , CONSTRAINT Fk_Patient_Person FOREIGN KEY (PersonID) + REFERENCES Person (PersonID) ON DELETE CASCADE + ) +/ + +-- Sample data for Person/Doctor/Patient + +INSERT INTO Person (FirstName, LastName, Gender) VALUES ('John', 'Pupkin', 'M') +/ +INSERT INTO Person (FirstName, LastName, Gender) VALUES ('Tester', 'Testerson', 'M') +/ +INSERT INTO Doctor (PersonID, Taxonomy) VALUES (PersonSeq.CURRVAL, 'Psychiatry') +/ +INSERT INTO Patient (PersonID, Diagnosis) VALUES (PersonSeq.CURRVAL, 'Hallucination with Paranoid Bugs'' Delirium of Persecution') +/ + +-- Person_Delete + +CREATE OR REPLACE +PROCEDURE Person_Delete(pPersonID IN NUMBER) IS +BEGIN +DELETE FROM + Person +WHERE + PersonID = pPersonID; +END; +/ + +-- Person_Insert + +CREATE OR REPLACE +PROCEDURE Person_Insert_OutputParameter + ( pFirstName IN NVARCHAR2 + , pLastName IN NVARCHAR2 + , pMiddleName IN NVARCHAR2 + , pGender IN CHAR + , pPersonID OUT NUMBER + ) IS +BEGIN +INSERT INTO Person + ( LastName, FirstName, MiddleName, Gender) +VALUES + (pLastName, pFirstName, pMiddleName, pGender) +RETURNING + PersonID +INTO + pPersonID; +END; +/ + +CREATE OR REPLACE +FUNCTION Person_Insert + ( pFirstName IN NVARCHAR2 + , pLastName IN NVARCHAR2 + , pMiddleName IN NVARCHAR2 + , pGender IN CHAR + ) +RETURN SYS_REFCURSOR IS + retCursor SYS_REFCURSOR; + lPersonID NUMBER; +BEGIN +INSERT INTO Person + ( LastName, FirstName, MiddleName, Gender) +VALUES + (pLastName, pFirstName, pMiddleName, pGender) +RETURNING + PersonID +INTO + lPersonID; + +OPEN retCursor FOR + SELECT + PersonID, Firstname, Lastname, Middlename, Gender + FROM + Person + WHERE + PersonID = lPersonID; +RETURN + retCursor; +END; +/ + +-- Person_SelectAll + +CREATE OR REPLACE +FUNCTION Person_SelectAll +RETURN SYS_REFCURSOR IS + retCursor SYS_REFCURSOR; +BEGIN +OPEN retCursor FOR + SELECT + PersonID, Firstname, Lastname, Middlename, Gender + FROM + Person; +RETURN + retCursor; +END; +/ + +-- Person_SelectAllByGender + +CREATE OR REPLACE +FUNCTION Person_SelectAllByGender(pGender IN CHAR) +RETURN SYS_REFCURSOR IS + retCursor SYS_REFCURSOR; +BEGIN +OPEN retCursor FOR + SELECT + PersonID, Firstname, Lastname, Middlename, Gender + FROM + Person + WHERE + Gender = pGender; +RETURN + retCursor; +END; +/ + +-- Person_SelectByKey + +CREATE OR REPLACE +FUNCTION Person_SelectByKey(pID IN NUMBER) +RETURN SYS_REFCURSOR IS + retCursor SYS_REFCURSOR; +BEGIN +OPEN retCursor FOR + SELECT + PersonID, Firstname, Lastname, Middlename, Gender + FROM + Person + WHERE + PersonID = pID; +RETURN + retCursor; +END; +/ + +-- Person_SelectByName + +CREATE OR REPLACE +FUNCTION Person_SelectByName + ( pFirstName IN NVARCHAR2 + , pLastName IN NVARCHAR2 + ) +RETURN SYS_REFCURSOR IS + retCursor SYS_REFCURSOR; +BEGIN +OPEN retCursor FOR + SELECT + PersonID, Firstname, Lastname, Middlename, Gender + FROM + Person + WHERE + FirstName = pFirstName AND LastName = pLastName; +RETURN + retCursor; +END; +/ + +-- Person_SelectListByName + +CREATE OR REPLACE +FUNCTION Person_SelectListByName + ( pFirstName IN NVARCHAR2 + , pLastName IN NVARCHAR2 + ) +RETURN SYS_REFCURSOR IS + retCursor SYS_REFCURSOR; +BEGIN +OPEN retCursor FOR + SELECT + PersonID, Firstname, Lastname, Middlename, Gender + FROM + Person + WHERE + FirstName LIKE pFirstName AND LastName LIKE pLastName; +RETURN + retCursor; +END; +/ + +CREATE OR REPLACE +PROCEDURE Person_Update + ( pPersonID IN NUMBER + , pFirstName IN NVARCHAR2 + , pLastName IN NVARCHAR2 + , pMiddleName IN NVARCHAR2 + , pGender IN CHAR + ) IS +BEGIN +UPDATE + Person +SET + LastName = pLastName, + FirstName = pFirstName, + MiddleName = pMiddleName, + Gender = pGender +WHERE + PersonID = pPersonID; +END; +/ + +-- Patient_SelectAll + +CREATE OR REPLACE +FUNCTION Patient_SelectAll +RETURN SYS_REFCURSOR IS + retCursor SYS_REFCURSOR; +BEGIN +OPEN retCursor FOR +SELECT + Person.*, Patient.Diagnosis +FROM + Patient, Person +WHERE + Patient.PersonID = Person.PersonID; +RETURN + retCursor; +END; +/ + + +-- Patient_SelectByName + +CREATE OR REPLACE +FUNCTION Patient_SelectByName + ( pFirstName IN NVARCHAR2 + , pLastName IN NVARCHAR2 + ) +RETURN SYS_REFCURSOR IS + retCursor SYS_REFCURSOR; +BEGIN +OPEN retCursor FOR +SELECT + Person.*, Patient.Diagnosis +FROM + Patient, Person +WHERE + Patient.PersonID = Person.PersonID + AND FirstName = pFirstName AND LastName = pLastName; +RETURN + retCursor; +END; +/ + +-- BinaryData Table + +CREATE SEQUENCE BinaryDataSeq +/ + +CREATE TABLE BinaryData + ( BinaryDataID NUMBER NOT NULL PRIMARY KEY + , Stamp TIMESTAMP DEFAULT SYSDATE NOT NULL + , Data BLOB NOT NULL + ) +/ + +-- Insert Trigger for Binarydata + +CREATE OR REPLACE TRIGGER BinaryData_Add +BEFORE INSERT +ON BinaryData +FOR EACH ROW +BEGIN +SELECT + BinaryDataSeq.NEXTVAL +INTO + :NEW.BinaryDataID +FROM + dual; +END; +/ + +-- OutRefTest + +CREATE OR REPLACE +PROCEDURE OutRefTest + ( pID IN NUMBER + , pOutputID OUT NUMBER + , pInputOutputID IN OUT NUMBER + , pStr IN NVARCHAR2 + , pOutputStr OUT NVARCHAR2 + , pInputOutputStr IN OUT NVARCHAR2 + ) IS +BEGIN + pOutputID := pID; + pInputOutputID := pID + pInputOutputID; + pOutputStr := pStr; + pInputOutputStr := pStr || pInputOutputStr; +END; +/ + +CREATE OR REPLACE +PROCEDURE OutRefEnumTest + ( pStr IN NVARCHAR2 + , pOutputStr OUT NVARCHAR2 + , pInputOutputStr IN OUT NVARCHAR2 + ) IS +BEGIN + pOutputStr := pStr; + pInputOutputStr := pStr || pInputOutputStr; +END; +/ + +-- ArrayTest + +CREATE OR REPLACE +PROCEDURE ArrayTest + ( pIntArray IN DBMS_UTILITY.NUMBER_ARRAY + , pOutputIntArray OUT DBMS_UTILITY.NUMBER_ARRAY + , pInputOutputIntArray IN OUT DBMS_UTILITY.NUMBER_ARRAY + , pStrArray IN DBMS_UTILITY.NAME_ARRAY + , pOutputStrArray OUT DBMS_UTILITY.NAME_ARRAY + , pInputOutputStrArray IN OUT DBMS_UTILITY.NAME_ARRAY + ) IS +BEGIN +pOutputIntArray := pIntArray; + +FOR i IN pIntArray.FIRST..pIntArray.LAST LOOP + pInputOutputIntArray(i) := pInputOutputIntArray(i) + pIntArray(i); +END LOOP; + +pOutputStrArray := pStrArray; + +FOR i IN pStrArray.FIRST..pStrArray.LAST LOOP + pInputOutputStrArray(i) := pInputOutputStrArray(i) || pStrArray(i); +END LOOP; +END; +/ + +CREATE OR REPLACE +PROCEDURE ScalarArray + ( pOutputIntArray OUT DBMS_UTILITY.NUMBER_ARRAY + ) IS +BEGIN +FOR i IN 1..5 LOOP + pOutputIntArray(i) := i; +END LOOP; +END; +/ + +-- ResultSetTest + +CREATE OR REPLACE +PROCEDURE RESULTSETTEST + ( mr OUT SYS_REFCURSOR + , sr OUT SYS_REFCURSOR + ) IS +BEGIN +OPEN mr FOR + SELECT 1 as MasterID FROM dual + UNION SELECT 2 as MasterID FROM dual; +OPEN sr FOR + SELECT 4 SlaveID, 1 as MasterID FROM dual + UNION SELECT 5 SlaveID, 2 as MasterID FROM dual + UNION SELECT 6 SlaveID, 2 as MasterID FROM dual + UNION SELECT 7 SlaveID, 1 as MasterID FROM dual; +END; +/ + +-- ExecuteScalarTest + +CREATE OR REPLACE +FUNCTION Scalar_DataReader +RETURN SYS_REFCURSOR +IS + retCursor SYS_REFCURSOR; +BEGIN +OPEN retCursor FOR + SELECT + 12345 intField, '54321' stringField + FROM + DUAL; +RETURN + retCursor; +END; +/ + +CREATE OR REPLACE +PROCEDURE Scalar_OutputParameter + ( pOutputInt OUT BINARY_INTEGER + , pOutputString OUT NVARCHAR2 + ) IS +BEGIN + pOutputInt := 12345; + pOutputString := '54321'; +END; +/ + +CREATE OR REPLACE +FUNCTION Scalar_ReturnParameter +RETURN BINARY_INTEGER IS +BEGIN +RETURN + 12345; +END; +/ + +-- Data Types test + +CREATE SEQUENCE DataTypeTestSeq +/ + +CREATE TABLE DataTypeTest +( + DataTypeID INTEGER NOT NULL PRIMARY KEY, + Binary_ RAW(50) NULL, + Boolean_ NUMBER(1,0) NULL, + Byte_ NUMBER(3,0) NULL, + Bytes_ BLOB NULL, + Char_ NCHAR NULL, + DateTime_ DATE NULL, + Decimal_ NUMBER(19,5) NULL, + Double_ DOUBLE PRECISION NULL, + Guid_ RAW(16) NULL, + Int16_ NUMBER(5,0) NULL, + Int32_ NUMBER(10,0) NULL, + Int64_ NUMBER(20,0) NULL, + Money_ NUMBER NULL, + SByte_ NUMBER(3,0) NULL, + Single_ FLOAT NULL, + Stream_ BLOB NULL, + String_ NVARCHAR2(50) NULL, + UInt16_ NUMBER(5,0) NULL, + UInt32_ NUMBER(10,0) NULL, + UInt64_ NUMBER(20,0) NULL, + Xml_ XMLTYPE NULL +) +/ + +-- Insert Trigger for DataTypeTest + +CREATE OR REPLACE TRIGGER DataTypeTest_Add +BEFORE INSERT +ON DataTypeTest +FOR EACH ROW +BEGIN +SELECT + DataTypeTestSeq.NEXTVAL +INTO + :NEW.DataTypeID +FROM + dual; +END; +/ + +INSERT INTO DataTypeTest + (Binary_, Boolean_, Byte_, Bytes_, Char_, DateTime_, Decimal_, + Double_, Guid_, Int16_, Int32_, Int64_, Money_, SByte_, + Single_, Stream_, String_, UInt16_, UInt32_, UInt64_, Xml_) +VALUES + ( NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL) +/ + +INSERT INTO DataTypeTest + (Binary_, Boolean_, Byte_, Bytes_, Char_, DateTime_, Decimal_, + Double_, Guid_, Int16_, Int32_, Int64_, Money_, SByte_, + Single_, Stream_, String_, UInt16_, UInt32_, UInt64_, + Xml_) +VALUES + (SYS_GUID(), 1, 255, SYS_GUID(), 'B', SYSDATE, 12345.67, + 1234.567, SYS_GUID(), 32767, 32768, 1000000, 12.3456, 127, + 1234.123, SYS_GUID(), 'string', 32767, 32768, 200000000, + XMLTYPE('<root><element strattr="strvalue" intattr="12345"/></root>')) +/ + + + +CREATE TABLE Parent (ParentID int, Value1 int) +/ +CREATE TABLE Child (ParentID int, ChildID int) +/ +CREATE TABLE GrandChild (ParentID int, ChildID int, GrandChildID int) +/ + + +CREATE TABLE LinqDataTypes +( + ID int, + MoneyValue decimal(10,4), + DateTimeValue timestamp, + DateTimeValue2 timestamp, + BoolValue smallint, + GuidValue raw(16), + BinaryValue blob NULL, + SmallIntValue smallint, + IntValue int NULL, + BigIntValue number(20,0) NULL +) +/ + +CREATE SEQUENCE SequenceTestSeq + MINVALUE 1 + START WITH 1 + INCREMENT BY 1 + CACHE 10 +/ + +CREATE TABLE SequenceTest +( + ID int NOT NULL PRIMARY KEY, + Value VARCHAR2(50) NOT NULL +) +/ + +CREATE TABLE "STG_TRADE_INFORMATION" +( + "STG_TRADE_ID" NUMBER NOT NULL ENABLE, + "STG_TRADE_VERSION" NUMBER NOT NULL ENABLE, + "INFORMATION_TYPE_ID" NUMBER NOT NULL ENABLE, + "INFORMATION_TYPE_NAME" VARCHAR2(50 BYTE), + "VALUE" VARCHAR2(4000 BYTE), + "VALUE_AS_INTEGER" NUMBER, + "VALUE_AS_DATE" DATE +) +/ + + +create table t_test_user +( + user_id number primary key, + name varchar2(255) not null unique +) +/ + +create table t_test_user_contract +( + user_contract_id number primary key, + user_id number not null references t_test_user on delete cascade, + contract_no number not null, + name varchar2(255) not null, + unique (user_id, contract_no) +) +/ + +create sequence sq_test_user +/ +create sequence sq_test_user_contract +/ + + +DROP SEQUENCE TestIdentitySeq +/ +DROP TABLE TestIdentity +/ + +CREATE TABLE TestIdentity ( + ID NUMBER NOT NULL PRIMARY KEY +) +/ + +CREATE SEQUENCE TestIdentitySeq +/ + +CREATE OR REPLACE TRIGGER TestIdentity_Add +BEFORE INSERT +ON TestIdentity +FOR EACH ROW +BEGIN +SELECT + TestIdentitySeq.NEXTVAL +INTO + :NEW.ID +FROM + dual; +END; +/