SQL creation script
Published 26 July 2017
To copy the SQL below, click anywhere in the box, then Ctrl+A followed by Ctrl+C.
---- WIDGET DEV ----
DROP USER WidgetDev CASCADE;
CREATE USER WidgetDev IDENTIFIED BY password;
GRANT UNLIMITED TABLESPACE TO WidgetDev;
GRANT CONNECT TO WidgetDev;
GRANT CREATE SESSION TO WidgetDev;
GRANT ALTER ANY TABLE TO WidgetDev;
GRANT CREATE ANY INDEX TO WidgetDev;
GRANT CREATE ANY PROCEDURE TO WidgetDev;
GRANT CREATE ANY VIEW TO WidgetDev;
/
CREATE TABLE WidgetDev.WidgetPrices (
RecordID INTEGER NOT NULL ,
WidgetID INTEGER NULL ,
Price INTEGER NULL ,
DateValidFrom DATE NULL ,
DateValidTo DATE NULL ,
Active CHAR(1) NULL
);
ALTER TABLE WidgetDev.WidgetPrices MODIFY DateValidFrom DATE DEFAULT sysdate ;
ALTER TABLE WidgetDev.WidgetPrices MODIFY Active CHAR DEFAULT ('N');
ALTER TABLE WidgetDev.WidgetPrices ADD CONSTRAINT PK_WidgetPrices PRIMARY KEY (RecordID);
CREATE INDEX WidgetDev.IX_WidgetPrices_1 ON WidgetDev.WidgetPrices(WidgetID);
CREATE INDEX WidgetDev.IX_WidgetPrices_2 ON WidgetDev.WidgetPrices(DateValidFrom);
CREATE INDEX WidgetDev.IX_WidgetPrices_3 ON WidgetDev.WidgetPrices(DateValidTo);
GRANT SELECT ON WidgetDev.WidgetPrices TO public;
CREATE TABLE WidgetDev.Widgets (
RecordID INTEGER NOT NULL ,
Description VARCHAR2 (50) NULL ,
SKU VARCHAR2 (20) NULL
);
CREATE TABLE WidgetDev.WidgetReferences (
WidgetID INTEGER NOT NULL,
Reference VARCHAR2(25) NULL
);
ALTER TABLE WidgetDev.WidgetReferences ADD CONSTRAINT PK_WidgetReferences PRIMARY KEY (WidgetID);
ALTER TABLE WidgetDev.Widgets ADD CONSTRAINT PK_Widgets PRIMARY KEY (RecordID);
GRANT SELECT ON WidgetDev.Widgets TO PUBLIC;
ALTER TABLE WidgetDev.WidgetPrices ADD CONSTRAINT FK_WidgetPrices_Widgets FOREIGN KEY (WidgetID) REFERENCES WidgetDev.Widgets(RecordID);
CREATE OR REPLACE VIEW WidgetDev.CurrentPrices AS
SELECT
WidgetID,
Price,
Description
FROM WidgetDev.Widgets INNER JOIN
WidgetDev.WidgetPrices ON Widgets.RecordID = WidgetPrices.WidgetID
WHERE WidgetPrices.Active = 'Y';
GRANT SELECT ON WidgetDev.CurrentPrices TO PUBLIC;
CREATE OR REPLACE PROCEDURE WidgetDev.prcActivatePrices
IS
BEGIN
UPDATE WidgetDev.WidgetPrices SET Active='N' WHERE sysdate<DateValidTo OR sysdate>DateValidFrom;
UPDATE WidgetDev.WidgetPrices SET Active='Y' WHERE sysdate>=DateValidFrom OR sysdate<=DateValidFrom;
END;
/
CREATE OR REPLACE PACKAGE WidgetDev.WidgetPackage AS
PROCEDURE addWidget(widgetID INTEGER, widgetDesc VARCHAR2, widgetSKU VARCHAR2);
PROCEDURE remWidget(widgetID INTEGER);
END WidgetPackage;
/
CREATE OR REPLACE PACKAGE BODY WidgetDev.WidgetPackage AS
PROCEDURE addWidget(widgetID INTEGER, widgetDesc VARCHAR2, widgetSKU VARCHAR2) IS
BEGIN
INSERT INTO WidgetDev.Widgets(RecordID, Description, SKU) VALUES(widgetID, widgetDesc, widgetSKU);
END addWidget;
PROCEDURE remWidget(widgetID INTEGER) IS
BEGIN
DELETE FROM WidgetDev.Widgets
WHERE WidgetDev.Widgets.RECORDID = remWidget.widgetID;
END remWidget;
END WidgetPackage;
/
---- WIDGET TEST ----
DROP USER WidgetTest CASCADE;
CREATE USER WidgetTest IDENTIFIED BY password;
GRANT UNLIMITED TABLESPACE TO WidgetTest;
GRANT CONNECT TO WidgetTest;
GRANT CREATE SESSION TO WidgetTest;
GRANT ALTER ANY TABLE TO WidgetTest;
GRANT CREATE ANY INDEX TO WidgetTest;
GRANT CREATE ANY PROCEDURE TO WidgetTest;
GRANT CREATE ANY VIEW TO WidgetTest;
CREATE TABLE WidgetTest.WidgetPrices (
RecordID INTEGER NOT NULL ,
WidgetID INTEGER NULL ,
Price INTEGER NULL
);
ALTER TABLE WidgetTest.WidgetPrices ADD CONSTRAINT PK_WidgetPrices PRIMARY KEY (RecordID);
CREATE TABLE WidgetTest.Widgets (
RecordID INTEGER NOT NULL ,
Description VARCHAR2(50) NULL
);
CREATE TABLE WidgetTest.WidgetReferences (
WidgetID int NOT NULL ,
Reference VARCHAR2(50) NULL
);
ALTER TABLE WidgetTest.WidgetReferences ADD CONSTRAINT PK_WidgetReferences PRIMARY KEY (WidgetID);
ALTER TABLE WidgetTest.Widgets ADD CONSTRAINT PK_Widgets PRIMARY KEY (RecordID);
CREATE OR REPLACE VIEW WidgetTest.CurrentPrices AS
SELECT
WidgetID,
Price,
Description
FROM WidgetTest.Widgets INNER JOIN
WidgetTest.WidgetPrices ON WidgetTest.Widgets.RecordID = WidgetTest.WidgetPrices.WidgetID
;
CREATE OR REPLACE PACKAGE WidgetTest.WidgetPackage AS
PROCEDURE addWidget(widgetID INTEGER, widgetDesc VARCHAR2);
PROCEDURE remWidget(widgetID INTEGER);
END WidgetPackage;
/
CREATE OR REPLACE PACKAGE BODY WidgetTest.WidgetPackage AS
PROCEDURE addWidget(widgetID INTEGER, widgetDesc VARCHAR2) IS
BEGIN
INSERT INTO WidgetTest.Widgets(RecordID, Description) VALUES(widgetID, widgetDesc);
END addWidget;
PROCEDURE remWidget(widgetID INTEGER) IS
BEGIN
DELETE FROM WidgetTest.Widgets
WHERE WidgetTest.Widgets.RECORDID = remWidget.widgetID;
END remWidget;
END WidgetPackage;
/