diff --git a/schema/Price_Sherwin_DDL.sql b/schema/Price_Sherwin_DDL.sql deleted file mode 100755 index 1aa97ee..0000000 --- a/schema/Price_Sherwin_DDL.sql +++ /dev/null @@ -1,565 +0,0 @@ --- CREATE SCHEMA -/* -DROP USER "C##ART" CASCADE; - -CREATE USER "C##ART" IDENTIFIED BY Welcome123; - -GRANT connect, resource, DBA to "C##ART"; -*/ - --- ORACLE SQL SCHEMA DDL: - --- DROP TABLES FIRST; IF EXIST -SET ECHO ON; -SET SERVEROUTPUT ON; - -DECLARE - l_tab DBMS_UTILITY.uncl_array; - l_tablen number; - BEGIN - dbms_utility.comma_to_table('CONTACT,PROFILE,ROLE,USERROLE,STAFF,ZIP,ADDRESS,DOCUMENT,PLAN,EXHIBIT,SUBSCRIPTION,AUTHORIZATION,INVENTORY,ORDER_ITEMS,INVOICE,TASK_HISTORY' - , l_tablen, l_tab); - for i in 1..l_tablen - LOOP - BEGIN - EXECUTE IMMEDIATE 'DROP TABLE ' || l_tab(i) || ' CASCADE CONSTRAINTS'; - DBMS_OUTPUT.put_line('DROPPED ' || l_tab(i) ); - EXCEPTION - WHEN OTHERS THEN NULL; - END; - END LOOP; - - DBMS_UTILITY.comma_to_table('ISEQ_CONTACT,ISEQ_ROLE,ISEQ_PROFILE,ISEQ_DOCUMENT', l_tablen, l_tab); - for i in 1..l_tablen - LOOP - BEGIN - EXECUTE IMMEDIATE 'DROP SEQUENCE '|| l_tab(i); - DBMS_OUTPUT.put_line('DROPPED ' || l_tab(i) ); - EXCEPTION - WHEN OTHERS THEN NULL; - END; - END LOOP; - - COMMIT; - END; -/ - -CREATE SEQUENCE ISEQ_CONTACT START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE; - -CREATE TABLE CONTACT ( - CONTACT_ID NUMBER DEFAULT ISEQ_CONTACT.nextval NOT NULL, - FIRST_NAME VARCHAR2(16) NOT NULL, - LAST_NAME VARCHAR2(16) NOT NULL, - PHONE_NO VARCHAR2(12), - EMAIL VARCHAR2(64) NOT NULL, - MODIFIED_BY NUMBER, - CREATED_DT TIMESTAMP DEFAULT SYSDATE, - MODIFIED_DT TIMESTAMP DEFAULT SYSDATE, - CONSTRAINT PK_CONTACT_ID PRIMARY KEY (CONTACT_ID), - FOREIGN KEY (MODIFIED_BY) REFERENCES CONTACT(CONTACT_ID) -); - -CREATE TABLE ZIP ( - ZIP VARCHAR2(5), - CITY VARCHAR2(16), - STATE VARCHAR2(2), - CONSTRAINT PK_ZIP PRIMARY KEY (ZIP), - CONSTRAINT ZIP_CHECK CHECK ( REGEXP_LIKE(ZIP, '\d{5}') ) -); - -CREATE TABLE ADDRESS ( - ZIP VARCHAR2(5) NOT NULL, - FK_CONTACT_ID NUMBER NOT NULL, - STREET VARCHAR2(32) NOT NULL, - CONSTRAINT PK_ADDRESS PRIMARY KEY (ZIP, FK_CONTACT_ID), - FOREIGN KEY (FK_CONTACT_ID) REFERENCES CONTACT(CONTACT_ID) ON DELETE CASCADE, - FOREIGN KEY (ZIP) REFERENCES ZIP(ZIP) -); - -CREATE SEQUENCE "ISEQ_ROLE" START WITH 100 INCREMENT BY 100 NOCACHE NOCYCLE; - -CREATE TABLE ROLE ( - ROLE_ID NUMBER DEFAULT ISEQ_ROLE.nextval NOT NULL, - ROLENAME VARCHAR2(16), - CONSTRAINT PK_ROLE_ID PRIMARY KEY (ROLE_ID), - CONSTRAINT check_role CHECK (ROLENAME IN ('SYSTEM', 'CONTACT', 'CUSTOMER', 'STAFF', 'SUPPLIER')) -); - -CREATE SEQUENCE "ISEQ_PROFILE" START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE; - -CREATE TABLE PROFILE ( - PROFILE_ID NUMBER DEFAULT ISEQ_PROFILE.nextval NOT NULL, - FK_CONTACT_ID NUMBER NOT NULL, - ACTIVE BOOLEAN DEFAULT FALSE, - MODIFIED_BY NUMBER NOT NULL, - CREATED_DT TIMESTAMP DEFAULT SYSDATE, - MODIFIED_DT TIMESTAMP DEFAULT SYSDATE, - CONSTRAINT PK_PROFILE_ID PRIMARY KEY(PROFILE_ID), - FOREIGN KEY (FK_CONTACT_ID) REFERENCES CONTACT(CONTACT_ID) ON DELETE CASCADE, - FOREIGN KEY(MODIFIED_BY) REFERENCES PROFILE(PROFILE_ID) -); - -CREATE TABLE USERROLE ( - FK_PROFILE_ID NUMBER NOT NULL, - FK_ROLE_ID NUMBER NOT NULL, - PASSWORDHASH RAW(256) DEFAULT NULL, - CONSTRAINT PK_USERROLE PRIMARY KEY (FK_ROLE_ID,FK_PROFILE_ID), - FOREIGN KEY(FK_PROFILE_ID) REFERENCES PROFILE(PROFILE_ID) ON DELETE CASCADE, - FOREIGN KEY(FK_ROLE_ID) REFERENCES ROLE(ROLE_ID) ON DELETE CASCADE -); - -CREATE TABLE STAFF( - FK_PROFILE_ID NUMBER NOT NULL, - POSITION VARCHAR2(14) NOT NULL, - CONSTRAINT check_position CHECK (POSITION IN ('Director', 'Curator', - 'Art Handler', 'Registrar', 'Associate')), - CONSTRAINT PK_STAFF PRIMARY KEY (FK_PROFILE_ID), - FOREIGN KEY(FK_PROFILE_ID) REFERENCES PROFILE(PROFILE_ID) -); - -CREATE SEQUENCE ISEQ_DOCUMENT START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE; -CREATE TABLE DOCUMENT ( - DOCUMENT_ID NUMBER DEFAULT ISEQ_DOCUMENT.nextval NOT NULL, - DOCUMENT_URL VARCHAR2(254) NOT NULL, - CONSTRAINT PK_DOCUMENT PRIMARY KEY (DOCUMENT_ID) -); - -CREATE TABLE PLAN ( - PLAN_ID NUMBER GENERATED ALWAYS AS IDENTITY, - DESCRIPTION VARCHAR2(32), - FK_DOCUMENT_ID NUMBER NOT NULL, - Duration NUMBER, --in hours - price NUMBER, - MODIFIED_BY NUMBER, - CREATED_DT TIMESTAMP DEFAULT SYSDATE, - MODIFIED_DT TIMESTAMP DEFAULT SYSDATE, - CONSTRAINT PK_PLAN PRIMARY KEY(PLAN_ID), - FOREIGN KEY(FK_DOCUMENT_ID) REFERENCES DOCUMENT(DOCUMENT_ID) -); - -CREATE TABLE SUBSCRIPTION ( - FK_PLAN_ID NUMBER, - FK_CONTACT_ID NUMBER, - MODIFIED_BY NUMBER, - CREATED_DT TIMESTAMP DEFAULT SYSDATE, - MODIFIED_DT TIMESTAMP DEFAULT SYSDATE, - CONSTRAINT PK_SUBSCRIPTION PRIMARY KEY (FK_PLAN_ID, FK_CONTACT_ID), - FOREIGN KEY(FK_CONTACT_ID) REFERENCES CONTACT(CONTACT_ID), - FOREIGN KEY(FK_PLAN_ID) REFERENCES PLAN(PLAN_ID) -); - -/* Once invoice is paid, external system inserts invoice uid. Insert/Update.*/ -CREATE TABLE INVOICE ( - INVOICE_ID RAW(16) DEFAULT SYS_GUID() NOT NULL PRIMARY KEY, - FK_PLAN_ID NUMBER, - FK_CONTACT_ID NUMBER, - InvoiceDate DATE, - AmountPaid DECIMAL(10, 2) DEFAULT 0, - FOREIGN KEY(FK_CONTACT_ID) REFERENCES CONTACT(CONTACT_ID), - FOREIGN KEY(FK_PLAN_ID) REFERENCES PLAN(PLAN_ID) -); - -CREATE TABLE AUTHORIZATION ( - AUTHORIZATION_ID NUMBER GENERATED ALWAYS AS IDENTITY PRIMARY KEY, - FK_CONTACT_ID NUMBER, - AUTHORIZATION_STATUS VARCHAR2(16) NOT NULL, - AUTHORIZATION_DATE TIMESTAMP DEFAULT SYSDATE, - EXPIRATION_DATE TIMESTAMP DEFAULT SYSDATE, - FK_DOCUMENT_ID NUMBER, - MODIFIED_BY NUMBER, - CREATED_DT TIMESTAMP DEFAULT SYSDATE, - MODIFIED_DT TIMESTAMP DEFAULT SYSDATE, - FOREIGN KEY(FK_CONTACT_ID) REFERENCES CONTACT(CONTACT_ID), - FOREIGN KEY(FK_DOCUMENT_ID) REFERENCES DOCUMENT(DOCUMENT_ID), - CONSTRAINT check_authorization_status CHECK (AUTHORIZATION_STATUS IN ('pending', 'approved', 'rejected', 'expired')) -); - -CREATE TABLE INVENTORY ( - INVENTORY_ID NUMBER GENERATED ALWAYS AS IDENTITY PRIMARY KEY, - FK_CONTACT_ID NUMBER NOT NULL, - AUTHORIZATION_ID NUMBER, - SKU VARCHAR2(100) NOT NULL, - PRODUCT_DESCRIPTION VARCHAR2(100) NOT NULL, - UNIT_COST DECIMAL(10,2) NOT NULL, - LEAD_TIME_DAYS INTEGER NOT NULL, - PRODUCT_NAME VARCHAR2(100) NOT NULL, - UNIT_OF_MEASURE VARCHAR2(50) NOT NULL, - BASE_PRICE DECIMAL(10,2) NOT NULL, - QUANTITY_AVAILABLE INTEGER DEFAULT 0 NOT NULL, - CREATED_AT TIMESTAMP DEFAULT SYSDATE, - UPDATED_AT TIMESTAMP DEFAULT SYSDATE, - FK_DOCUMENT_ID NUMBER, - FOREIGN KEY(FK_CONTACT_ID) REFERENCES CONTACT(CONTACT_ID), - FOREIGN KEY(FK_DOCUMENT_ID) REFERENCES DOCUMENT(DOCUMENT_ID), - FOREIGN KEY(AUTHORIZATION_ID) REFERENCES AUTHORIZATION(AUTHORIZATION_ID), - CONSTRAINT SUPPLIER_UNIQUE_SKU UNIQUE(FK_CONTACT_ID, SKU) -); - -CREATE TABLE EXHIBIT ( - EXHIBIT_ID NUMBER GENERATED ALWAYS AS IDENTITY PRIMARY KEY, - FK_INVENTORY_ID NUMBER NOT NULL, - FK_PLAN_ID NUMBER, - FOREIGN KEY(FK_PLAN_ID) REFERENCES PLAN(PLAN_ID), - FOREIGN KEY(FK_INVENTORY_ID) REFERENCES INVENTORY(INVENTORY_ID) -); - -CREATE TABLE ORDER_ITEMS ( -- 'product line items customers placed in their carts.' - ORDER_ITEM_ID NUMBER GENERATED ALWAYS AS IDENTITY PRIMARY KEY, - FK_PROFILE_ID NUMBER NOT NULL, - TRANSACTION_ID VARCHAR2(32) NULL, - CREATED_AT TIMESTAMP NOT NULL, - QUANTITY NUMBER DEFAULT(1) NOT NULL, - UNIT_PRICE DECIMAL(10,2) NOT NULL, - LINE_TOTAL DECIMAL(10,2) NOT NULL, - FK_INVENTORY_ID NUMBER NOT NULL, - FOREIGN KEY(FK_PROFILE_ID) REFERENCES PROFILE(PROFILE_ID), - FOREIGN KEY(FK_INVENTORY_ID) REFERENCES INVENTORY(INVENTORY_ID) -); - -CREATE TABLE TASK_HISTORY( - TASK_ID NUMBER GENERATED ALWAYS AS IDENTITY PRIMARY KEY, - ASSIGNED_TO_PROFILE_ID NUMBER NOT NULL, - CREATED_BY_PROFILE_ID NUMBER NOT NULL, - RELATED_ENTITY_TYPE VARCHAR2(32), -- 'order', 'supplier', etc. - RELATED_ENTITY_ID NUMBER, - TASK_TYPE VARCHAR2(32) NOT NULL, - TASK_TITLE VARCHAR2(64) NOT NULL, - DESCRIPTION VARCHAR2(128), - FK_DOCUMENT_ID NUMBER, - STATUS VARCHAR2(16) DEFAULT 'pending', - DUE_DATE TIMESTAMP, - COMPLETED_AT TIMESTAMP, - CREATED_AT TIMESTAMP DEFAULT SYSDATE, - UPDATED_AT TIMESTAMP DEFAULT SYSDATE, - FOREIGN KEY(FK_DOCUMENT_ID) REFERENCES DOCUMENT(DOCUMENT_ID), - CONSTRAINT chk_status CHECK (STATUS IN ('pending', 'in_progress', 'completed', 'cancelled')) -); - -/* VIEW of available exhibit inventory */ -CREATE OR REPLACE VIEW VIEW_AVAILABLE_INVENTORY AS - SELECT - INVENTORY_ID,FK_CONTACT_ID,AUTHORIZATION_ID,SKU,PRODUCT_DESCRIPTION,UNIT_COST,LEAD_TIME_DAYS, - PRODUCT_NAME,UNIT_OF_MEASURE,BASE_PRICE,QUANTITY_AVAILABLE,CREATED_AT,UPDATED_AT,FK_DOCUMENT_ID - FROM - INVENTORY WHERE QUANTITY_AVAILABLE > 0 -INTERSECT - SELECT - FK_INVENTORY_ID, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL - FROM - EXHIBIT; - -CREATE OR REPLACE VIEW VIEW_SYSTEMROLE AS - SELECT u.FK_PROFILE_ID, p.FK_CONTACT_ID, r.ROLENAME, p.ACTIVE FROM - USERROLE u - JOIN PROFILE p ON p.PROFILE_ID=u.FK_PROFILE_ID - JOIN ROLE r ON r.ROLE_ID = u.FK_ROLE_ID AND r.ROLE_ID = 100; - -CREATE OR REPLACE VIEW VIEW_STAFF AS - SELECT u.FK_PROFILE_ID, p.FK_CONTACT_ID, r.ROLENAME, p.ACTIVE, c.FIRST_NAME, c.LAST_NAME, s.POSITION FROM - USERROLE u - JOIN PROFILE p ON p.PROFILE_ID=u.FK_PROFILE_ID - JOIN CONTACT c ON c.CONTACT_ID = p.FK_CONTACT_ID - JOIN ROLE r ON r.ROLE_ID = u.FK_ROLE_ID AND r.ROLE_ID = 300 - JOIN STAFF s on s.FK_PROFILE_ID = p.PROFILE_ID; - -CREATE OR REPLACE VIEW VIEW_SUPPLIER AS - SELECT u.FK_PROFILE_ID, p.FK_CONTACT_ID, r.ROLENAME, p.ACTIVE, c.FIRST_NAME, c.LAST_NAME FROM - USERROLE u - JOIN PROFILE p ON p.PROFILE_ID=u.FK_PROFILE_ID - JOIN CONTACT c ON c.CONTACT_ID = p.FK_CONTACT_ID - JOIN ROLE r ON r.ROLE_ID = u.FK_ROLE_ID AND r.ROLE_ID = 200; - -CREATE OR REPLACE VIEW VIEW_CUSTOMER AS - SELECT u.FK_PROFILE_ID, p.FK_CONTACT_ID, r.ROLENAME, p.ACTIVE, c.FIRST_NAME, c.LAST_NAME FROM - USERROLE u - JOIN PROFILE p ON p.PROFILE_ID=u.FK_PROFILE_ID - JOIN CONTACT c ON c.CONTACT_ID = p.FK_CONTACT_ID - JOIN ROLE r ON r.ROLE_ID = u.FK_ROLE_ID AND r.ROLE_ID = 400; - --- Trigger customer ordered items reservation -CREATE OR REPLACE TRIGGER ORDER_ITEMS_reserved - AFTER INSERT ON ORDER_ITEMS FOR EACH ROW - BEGIN - UPDATE INVENTORY SET QUANTITY_AVAILABLE = QUANTITY_AVAILABLE - :NEW.QUANTITY WHERE INVENTORY_ID= :NEW.FK_INVENTORY_ID; - DBMS_OUTPUT.put_line(' ORDER transaction. ' ); - END; -/ - --- Trigger Paid Invoice, generates subscription -CREATE OR REPLACE TRIGGER INVOICE_paid_subscription - AFTER INSERT OR UPDATE ON INVOICE FOR EACH ROW - BEGIN - DBMS_OUTPUT.put_line(' SUBSCRIPTION transaction. ' ); - INSERT INTO SUBSCRIPTION (FK_PLAN_ID, FK_CONTACT_ID) VALUES (:NEW.FK_PLAN_ID, :NEW.FK_CONTACT_ID); - EXCEPTION - WHEN DUP_VAL_ON_INDEX THEN - DBMS_OUTPUT.put_line('Subscription exists for plan and contact. No new subscription created.'); - UPDATE SUBSCRIPTION SET FK_PLAN_ID = :NEW.FK_PLAN_ID, FK_CONTACT_ID = :NEW.FK_CONTACT_ID, MODIFIED_BY = 1, MODIFIED_DT = SYSDATE - WHERE FK_PLAN_ID = :NEW.FK_PLAN_ID AND FK_CONTACT_ID = :NEW.FK_CONTACT_ID; - WHEN OTHERS THEN - DBMS_OUTPUT.put_line('Error in INVOICE_paid_subscription creating/updating subscription: ' || SQLERRM); - END; -/ - -CREATE OR REPLACE PROCEDURE sp_auth_supplier( - p_status IN VARCHAR, - p_supplier IN NUMBER, - p_document_url IN VARCHAR -) IS - l_id NUMBER; -BEGIN - BEGIN - INSERT INTO DOCUMENT(DOCUMENT_ID, DOCUMENT_URL) VALUES (ISEQ_DOCUMENT.nextval, p_document_url) - RETURNING DOCUMENT_ID INTO l_id; -- Captures the generated ID - END; - BEGIN - INSERT INTO AUTHORIZATION (AUTHORIZATION_STATUS, FK_CONTACT_ID, MODIFIED_BY, FK_DOCUMENT_ID) VALUES(p_status, p_supplier, 1, l_id); - DBMS_OUTPUT.put_line('Reviewed Document ' || p_status ); - EXCEPTION - WHEN OTHERS - THEN - DBMS_OUTPUT.put_line (SQLERRM); - raise_application_error (-20500, 'failed while setting auth_supplier_status. '); - END; -END; - -/ - -INSERT INTO ROLE (ROLE_ID, ROLENAME) VALUES (100, 'SYSTEM'); -INSERT INTO ROLE (ROLE_ID, ROLENAME) VALUES (200, 'SUPPLIER'); -INSERT INTO ROLE (ROLE_ID, ROLENAME) VALUES (300, 'STAFF'); -INSERT INTO ROLE (ROLE_ID, ROLENAME) VALUES (400, 'CUSTOMER'); - --- SYSTEM ROLE -INSERT INTO CONTACT ( FIRST_NAME, LAST_NAME, PHONE_NO, EMAIL, MODIFIED_BY) VALUES ('ART', 'SYSTEM', '000-1234', 'arts@art.com', 1); --- STAFF ROLE -INSERT INTO CONTACT ( FIRST_NAME, LAST_NAME, PHONE_NO, EMAIL, MODIFIED_BY) VALUES ('Alice', 'Johnson', '650-555-9012', 'alice.johnson@art.com', 1); -INSERT INTO CONTACT ( FIRST_NAME, LAST_NAME, PHONE_NO, EMAIL, MODIFIED_BY) VALUES ( 'Karen', 'Park', '206-555-0110', 'karen.park@art.com', 1); -INSERT INTO CONTACT ( FIRST_NAME, LAST_NAME, PHONE_NO, EMAIL, MODIFIED_BY) VALUES ( 'Jeese', 'Taylor', '713-555-0106', 'grace.taylor@art.com', 1); -INSERT INTO CONTACT ( FIRST_NAME, LAST_NAME, PHONE_NO, EMAIL, MODIFIED_BY) VALUES ( 'James', 'Lee', '206-555-0109', 'james.lee@art.com', 1); --- SUPPLIER ROLE -INSERT INTO CONTACT ( FIRST_NAME, LAST_NAME, PHONE_NO, EMAIL, MODIFIED_BY) VALUES ('Stephen', 'Alec', '424-546-9312', 'salec@eizel.com', 1); -INSERT INTO CONTACT ( FIRST_NAME, LAST_NAME, PHONE_NO, EMAIL, MODIFIED_BY) VALUES ('Henry', 'Martinez', '602-555-0107', 'henry@artsupply.com', 1); --- CUSTOMER ROLE -INSERT INTO CONTACT ( FIRST_NAME, LAST_NAME, PHONE_NO, EMAIL, MODIFIED_BY) VALUES ('Carol', 'White', '212-555-0102', 'carol.white@mail.com', 1); -INSERT INTO CONTACT ( FIRST_NAME, LAST_NAME, PHONE_NO, EMAIL, MODIFIED_BY) VALUES ('Bob', 'Smith', '212-555-0101', 'bob.smith@mail.com', 1); -INSERT INTO CONTACT ( FIRST_NAME, LAST_NAME, PHONE_NO, EMAIL, MODIFIED_BY) VALUES ('David', 'Brown', '312-555-0103', 'david.brown@mail.com', 1); -INSERT INTO CONTACT ( FIRST_NAME, LAST_NAME, PHONE_NO, EMAIL, MODIFIED_BY) VALUES ('Emma', 'Davis', '312-555-0104', 'emma.davis@mail.com', 1); -INSERT INTO CONTACT ( FIRST_NAME, LAST_NAME, PHONE_NO, EMAIL, MODIFIED_BY) VALUES ('Frank', 'Wilson', '713-555-0105', 'frank.wilson@mail.com', 1); - -INSERT INTO ZIP (ZIP, CITY, STATE) VALUES ('10001', 'New York', 'NY'); -INSERT INTO ZIP (ZIP, CITY, STATE) VALUES ('90210', 'Beverly Hills', 'CA'); -INSERT INTO ZIP (ZIP, CITY, STATE) VALUES ('94027', 'Atherton', 'CA'); -INSERT INTO ZIP (ZIP, CITY, STATE) VALUES ('90211', 'Los Angeles', 'CA'); -INSERT INTO ZIP (ZIP, CITY, STATE) VALUES ('60601', 'Chicago', 'IL'); -INSERT INTO ZIP (ZIP, CITY, STATE) VALUES ('77001', 'Houston', 'TX'); -INSERT INTO ZIP (ZIP, CITY, STATE) VALUES ('85001', 'Phoenix', 'AZ'); -INSERT INTO ZIP (ZIP, CITY, STATE) VALUES ('98101', 'Seattle', 'WA'); -INSERT INTO ZIP (ZIP, CITY, STATE) VALUES ('02101', 'Boston', 'MA'); -INSERT INTO ZIP (ZIP, CITY, STATE) VALUES ('33101', 'Miami', 'FL'); - -INSERT INTO ADDRESS (FK_CONTACT_ID, STREET, ZIP) VALUES (1, '789 Oak St, suite 10', '94027'); -INSERT INTO ADDRESS (FK_CONTACT_ID, STREET, ZIP) VALUES (2, '789 Oak St, suite 15', '94027'); -INSERT INTO ADDRESS (FK_CONTACT_ID, STREET, ZIP) VALUES (3, '789 Oak St, suite 1', '94027'); -INSERT INTO ADDRESS (FK_CONTACT_ID, STREET, ZIP) VALUES (4, '789 Oak St, suite 5', '94027'); -INSERT INTO ADDRESS (FK_CONTACT_ID, STREET, ZIP) VALUES (5, '789 Oak St, suite 15', '94027'); -INSERT INTO ADDRESS (FK_CONTACT_ID, STREET, ZIP) VALUES (6, '890 Venue Rd', '90210'); -INSERT INTO ADDRESS (FK_CONTACT_ID, STREET, ZIP) VALUES (7, '200 Sunset Blvd', '90210'); -INSERT INTO ADDRESS (FK_CONTACT_ID, STREET, ZIP) VALUES (8, '100 Broadway', '10001'); -INSERT INTO ADDRESS (FK_CONTACT_ID, STREET, ZIP) VALUES (9, '300 Michigan Ave', '60601'); -INSERT INTO ADDRESS (FK_CONTACT_ID, STREET, ZIP) VALUES (10, '400 Main St', '77001'); -INSERT INTO ADDRESS (FK_CONTACT_ID, STREET, ZIP ) VALUES (11, '500 Central Ave', '85001'); -INSERT INTO ADDRESS (FK_CONTACT_ID, STREET, ZIP ) VALUES (12, '600 Pike St', '98101'); - --- SYSTEMPROFILE -INSERT INTO PROFILE (FK_CONTACT_ID, ACTIVE, MODIFIED_BY) VALUES (1, TRUE, 1); --- STAFF PROFILE -INSERT INTO PROFILE (FK_CONTACT_ID, ACTIVE, MODIFIED_BY) VALUES (2, TRUE, 2); --- SUPPLIER -INSERT INTO PROFILE (FK_CONTACT_ID, ACTIVE, MODIFIED_BY) VALUES (3, TRUE, 3); - -INSERT INTO PROFILE (PROFILE_ID, FK_CONTACT_ID, ACTIVE, MODIFIED_BY) VALUES (4, 4, TRUE, 1); -INSERT INTO PROFILE (PROFILE_ID, FK_CONTACT_ID, ACTIVE, MODIFIED_BY) VALUES (5, 5, TRUE, 1); -INSERT INTO PROFILE (PROFILE_ID, FK_CONTACT_ID, ACTIVE, MODIFIED_BY) VALUES (6, 6, TRUE, 1); -INSERT INTO PROFILE (PROFILE_ID, FK_CONTACT_ID, ACTIVE, MODIFIED_BY) VALUES (7, 7, TRUE, 1); -INSERT INTO PROFILE (PROFILE_ID, FK_CONTACT_ID, ACTIVE, MODIFIED_BY) VALUES (8, 8, FALSE, 1); -- inactive -INSERT INTO PROFILE (PROFILE_ID, FK_CONTACT_ID, ACTIVE, MODIFIED_BY) VALUES (9, 9, TRUE, 1); -INSERT INTO PROFILE (PROFILE_ID, FK_CONTACT_ID, ACTIVE, MODIFIED_BY) VALUES (10, 10, TRUE, 1); -INSERT INTO PROFILE (PROFILE_ID, FK_CONTACT_ID, ACTIVE, MODIFIED_BY) VALUES (11, 11, TRUE, 1); -INSERT INTO PROFILE (PROFILE_ID, FK_CONTACT_ID, ACTIVE, MODIFIED_BY) VALUES (12, 12, TRUE, 1); - - -INSERT INTO USERROLE (FK_PROFILE_ID, FK_ROLE_ID, PASSWORDHASH) VALUES (1, 100, NULL); -INSERT INTO USERROLE (FK_PROFILE_ID, FK_ROLE_ID) VALUES (2, 300); -INSERT INTO USERROLE (FK_PROFILE_ID, FK_ROLE_ID) VALUES (3, 300); -INSERT INTO USERROLE (FK_PROFILE_ID, FK_ROLE_ID) VALUES (4, 300); -INSERT INTO USERROLE (FK_PROFILE_ID, FK_ROLE_ID) VALUES (5, 300); -INSERT INTO USERROLE (FK_PROFILE_ID, FK_ROLE_ID) VALUES (6, 200); -INSERT INTO USERROLE (FK_PROFILE_ID, FK_ROLE_ID) VALUES (7, 200); -INSERT INTO USERROLE (FK_PROFILE_ID, FK_ROLE_ID) VALUES (8, 400); -- inactive customer -INSERT INTO USERROLE (FK_PROFILE_ID, FK_ROLE_ID) VALUES (9, 400); -INSERT INTO USERROLE (FK_PROFILE_ID, FK_ROLE_ID) VALUES (10, 400); -INSERT INTO USERROLE (FK_PROFILE_ID, FK_ROLE_ID) VALUES (11, 400); -INSERT INTO USERROLE (FK_PROFILE_ID, FK_ROLE_ID) VALUES (12, 400); - -INSERT INTO STAFF (FK_PROFILE_ID, POSITION) VALUES (2, 'Director'); -INSERT INTO STAFF (FK_PROFILE_ID, POSITION) VALUES (3, 'Registrar'); -INSERT INTO STAFF (FK_PROFILE_ID, POSITION) VALUES (4, 'Curator'); -INSERT INTO STAFF (FK_PROFILE_ID, POSITION) VALUES (5, 'Art Handler'); - -INSERT INTO DOCUMENT (DOCUMENT_ID, DOCUMENT_URL) VALUES (2, 'https://art.com/docs/consignment-stephen-crimson-horizon.pdf'); -INSERT INTO DOCUMENT (DOCUMENT_ID, DOCUMENT_URL) VALUES (3, 'https://art.com/docs/consignment-stephen-misty-valley.pdf'); -INSERT INTO DOCUMENT (DOCUMENT_ID, DOCUMENT_URL) VALUES (4, 'https://art.com/docs/consignment-stephen-twisted-form.pdf'); -INSERT INTO DOCUMENT (DOCUMENT_ID, DOCUMENT_URL) VALUES (5, 'https://art.com/docs/consignment-stephen-blue-symmetry.pdf'); -INSERT INTO DOCUMENT (DOCUMENT_ID, DOCUMENT_URL) VALUES (6, 'https://art.com/docs/consignment-henry-urban-solitude.pdf'); -INSERT INTO DOCUMENT (DOCUMENT_ID, DOCUMENT_URL) VALUES (7, 'https://art.com/docs/consignment-henry-earth-vessel.pdf'); -INSERT INTO DOCUMENT (DOCUMENT_ID, DOCUMENT_URL) VALUES (8, 'https://art.com/docs/consignment-henry-quiet-reflection.pdf'); - --- Stephen — approved -INSERT INTO AUTHORIZATION (AUTHORIZATION_STATUS, FK_CONTACT_ID, FK_DOCUMENT_ID, MODIFIED_BY, AUTHORIZATION_DATE, EXPIRATION_DATE) -VALUES ('approved', 6, 2, 1, SYSDATE, SYSDATE + 365); --- Stephen — approved -INSERT INTO AUTHORIZATION (AUTHORIZATION_STATUS, FK_CONTACT_ID, FK_DOCUMENT_ID, MODIFIED_BY, AUTHORIZATION_DATE, EXPIRATION_DATE) -VALUES ('approved', 6, 3, 1, SYSDATE, SYSDATE + 365); --- Stephen — pending ('pending' status path) -INSERT INTO AUTHORIZATION (AUTHORIZATION_STATUS, FK_CONTACT_ID, FK_DOCUMENT_ID, MODIFIED_BY, AUTHORIZATION_DATE, EXPIRATION_DATE) -VALUES ('pending', 6, 4, 1, SYSDATE, SYSDATE + 365); --- Stephen — rejected ('rejected' status path) -INSERT INTO AUTHORIZATION (AUTHORIZATION_STATUS, FK_CONTACT_ID, FK_DOCUMENT_ID, MODIFIED_BY, AUTHORIZATION_DATE, EXPIRATION_DATE) -VALUES ('rejected', 6, 5, 1, SYSDATE, SYSDATE + 30); --- Henry — approved -INSERT INTO AUTHORIZATION (AUTHORIZATION_STATUS, FK_CONTACT_ID, FK_DOCUMENT_ID, MODIFIED_BY, AUTHORIZATION_DATE, EXPIRATION_DATE) -VALUES ('approved', 7, 6, 1, SYSDATE, SYSDATE + 365); --- Henry — approved -INSERT INTO AUTHORIZATION (AUTHORIZATION_STATUS, FK_CONTACT_ID, FK_DOCUMENT_ID, MODIFIED_BY, AUTHORIZATION_DATE, EXPIRATION_DATE) -VALUES ('approved', 7, 7, 1, SYSDATE, SYSDATE + 365); --- Henry — approved -INSERT INTO AUTHORIZATION (AUTHORIZATION_STATUS, FK_CONTACT_ID, FK_DOCUMENT_ID, MODIFIED_BY, AUTHORIZATION_DATE, EXPIRATION_DATE) -VALUES ('approved', 7, 8, 1, SYSDATE, SYSDATE + 365); --- Henry — pending -INSERT INTO AUTHORIZATION (AUTHORIZATION_STATUS, FK_CONTACT_ID, FK_DOCUMENT_ID, MODIFIED_BY, AUTHORIZATION_DATE, EXPIRATION_DATE) -VALUES ('pending', 7, 7, 1, SYSDATE, SYSDATE + 180); --- Henry — expired (EXPIRATION_DATE in the past) -INSERT INTO AUTHORIZATION (AUTHORIZATION_STATUS, FK_CONTACT_ID, FK_DOCUMENT_ID, MODIFIED_BY, AUTHORIZATION_DATE, EXPIRATION_DATE) -VALUES ('expired', 7, 8, 1, SYSDATE - 365, SYSDATE - 30); - --- PLAN Documents for exhibition -INSERT INTO DOCUMENT (DOCUMENT_ID, DOCUMENT_URL) VALUES (9, 'https://art.com/docs/plan-spring-gala-2025.pdf'); -INSERT INTO DOCUMENT (DOCUMENT_ID, DOCUMENT_URL) VALUES (10, 'https://art.com/docs/plan-summer-exhibit-2025.pdf'); -INSERT INTO DOCUMENT (DOCUMENT_ID, DOCUMENT_URL) VALUES (11, 'https://art.com/docs/plan-fall-exhibition-2025.pdf'); - --- PLANS -INSERT INTO PLAN (DESCRIPTION, FK_DOCUMENT_ID, DURATION, PRICE, MODIFIED_BY) VALUES ('Spring Gala Preview', 9, 4, 75.00, 1); -- PLAN_ID 1 -INSERT INTO PLAN (DESCRIPTION, FK_DOCUMENT_ID, DURATION, PRICE, MODIFIED_BY) VALUES ('Spring Gala Standard', 9, 8, 120.00, 1); -- PLAN_ID 2 -INSERT INTO PLAN (DESCRIPTION, FK_DOCUMENT_ID, DURATION, PRICE, MODIFIED_BY) VALUES ('Spring Gala VIP', 9, 12, 250.00, 1); -- PLAN_ID 3 -INSERT INTO PLAN (DESCRIPTION, FK_DOCUMENT_ID, DURATION, PRICE, MODIFIED_BY) VALUES ('Summer Exhibit Basic', 10, 4, 50.00, 1); -- PLAN_ID 4 -INSERT INTO PLAN (DESCRIPTION, FK_DOCUMENT_ID, DURATION, PRICE, MODIFIED_BY) VALUES ('Summer Exhibit Plus', 10, 8, 100.00, 1); -- PLAN_ID 5 -INSERT INTO PLAN (DESCRIPTION, FK_DOCUMENT_ID, DURATION, PRICE, MODIFIED_BY) VALUES ('Summer Exhibit Premium', 10, 16, 200.00, 1); -- PLAN_ID 6 -INSERT INTO PLAN (DESCRIPTION, FK_DOCUMENT_ID, DURATION, PRICE, MODIFIED_BY) VALUES ('Fall Exhibition Access', 11, 4, 60.00, 1); -- PLAN_ID 7 -INSERT INTO PLAN (DESCRIPTION, FK_DOCUMENT_ID, DURATION, PRICE, MODIFIED_BY) VALUES ('Fall Exhibition Full Day',11, 8, 110.00, 1); -- PLAN_ID 8 -INSERT INTO PLAN (DESCRIPTION, FK_DOCUMENT_ID, DURATION, PRICE, MODIFIED_BY) VALUES ('Fall Exhibition Weekend', 11, 24, 180.00, 1); -- PLAN_ID 9 -INSERT INTO PLAN (DESCRIPTION, FK_DOCUMENT_ID, DURATION, PRICE, MODIFIED_BY) VALUES ('Annual Patron Pass', 11, 200, 500.00, 1); -- PLAN_ID 10 - --- IV 1 — Crimson Horizon -INSERT INTO INVENTORY (FK_CONTACT_ID, AUTHORIZATION_ID, SKU, PRODUCT_DESCRIPTION, UNIT_COST, LEAD_TIME_DAYS, - PRODUCT_NAME, UNIT_OF_MEASURE, BASE_PRICE, QUANTITY_AVAILABLE, FK_DOCUMENT_ID) -VALUES (6, 1, 'ART-S-001', - 'Oil on canvas, abstract expressionism, 24x36', 800.00, 7, - 'Crimson Horizon', 'piece', 1200.00, 5, 2); - --- IV 2 — Misty Valley -INSERT INTO INVENTORY (FK_CONTACT_ID, AUTHORIZATION_ID, SKU, - PRODUCT_DESCRIPTION, UNIT_COST, LEAD_TIME_DAYS, - PRODUCT_NAME, UNIT_OF_MEASURE, BASE_PRICE, QUANTITY_AVAILABLE, FK_DOCUMENT_ID) -VALUES (6, 2, 'ART-S-002', - 'Watercolor on paper, landscape, 18x24', 450.00, 5, - 'Misty Valley', 'piece', 700.00, 5, 3); - --- IV 3 — Twisted Form -INSERT INTO INVENTORY (FK_CONTACT_ID, AUTHORIZATION_ID, SKU, - PRODUCT_DESCRIPTION, UNIT_COST, LEAD_TIME_DAYS, - PRODUCT_NAME, UNIT_OF_MEASURE, BASE_PRICE, QUANTITY_AVAILABLE, FK_DOCUMENT_ID) -VALUES (6, 3, 'ART-S-003', - 'Bronze sculpture, abstract, 12 in height', 1500.00, 14, - 'Twisted Form', 'piece', 2200.00, 5, 4); - --- IV 4 — Blue Symmetry -INSERT INTO INVENTORY (FK_CONTACT_ID, AUTHORIZATION_ID, SKU, - PRODUCT_DESCRIPTION, UNIT_COST, LEAD_TIME_DAYS, - PRODUCT_NAME, UNIT_OF_MEASURE, BASE_PRICE, QUANTITY_AVAILABLE, FK_DOCUMENT_ID) -VALUES (7, 1, 'ART-S-004', - 'Acrylic on canvas, geometric, 30x30', 600.00, 7, - 'Blue Symmetry', 'piece', 950.00, 5, 2); - --- IV 5 — Urban Collage -INSERT INTO INVENTORY (FK_CONTACT_ID, AUTHORIZATION_ID, SKU, - PRODUCT_DESCRIPTION, UNIT_COST, LEAD_TIME_DAYS, - PRODUCT_NAME, UNIT_OF_MEASURE, BASE_PRICE, QUANTITY_AVAILABLE, FK_DOCUMENT_ID) -VALUES (7, 2, 'ART-S-005', - 'Mixed media on board, 20x20', 350.00, 5, - 'Urban Collage', 'piece', 550.00, 6, 3); - --- IV 6 — Urban Solitude -INSERT INTO INVENTORY (FK_CONTACT_ID, AUTHORIZATION_ID, SKU, - PRODUCT_DESCRIPTION, UNIT_COST, LEAD_TIME_DAYS, - PRODUCT_NAME, UNIT_OF_MEASURE, BASE_PRICE, QUANTITY_AVAILABLE, FK_DOCUMENT_ID) -VALUES (6, 6, 'ART-H-001', - 'Photography print, archival, limited ed 1/10', 900.00, 3, - 'Urban Solitude', 'piece', 1500.00, 10, 6); - --- IV 7 — Earth Vessel -INSERT INTO INVENTORY (FK_CONTACT_ID, AUTHORIZATION_ID, SKU, - PRODUCT_DESCRIPTION, UNIT_COST, LEAD_TIME_DAYS, - PRODUCT_NAME, UNIT_OF_MEASURE, BASE_PRICE, QUANTITY_AVAILABLE, FK_DOCUMENT_ID) -VALUES (7, 7, 'ART-H-002', - 'Ceramic vessel, hand-thrown and glazed', 250.00, 10, - 'Earth Vessel', 'piece', 420.00, 8, 7); - --- IV 8 — Quiet Reflection -INSERT INTO INVENTORY (FK_CONTACT_ID, AUTHORIZATION_ID, SKU, - PRODUCT_DESCRIPTION, UNIT_COST, LEAD_TIME_DAYS, - PRODUCT_NAME, UNIT_OF_MEASURE, BASE_PRICE, QUANTITY_AVAILABLE, FK_DOCUMENT_ID) -VALUES (7, 8, 'ART-H-003', - 'Pastel drawing, portrait, 16x20', 300.00, 7, - 'Quiet Reflection','piece', 500.00, 4, 8); - --- IV 9 — Neon Dreams -INSERT INTO INVENTORY (FK_CONTACT_ID, AUTHORIZATION_ID, SKU, - PRODUCT_DESCRIPTION, UNIT_COST, LEAD_TIME_DAYS, - PRODUCT_NAME, UNIT_OF_MEASURE, BASE_PRICE, QUANTITY_AVAILABLE, FK_DOCUMENT_ID) -VALUES (6, 6, 'ART-H-004', - 'Digital print on aluminum, 24x36', 700.00, 5, - 'Neon Dreams', 'piece', 1100.00, 6, 6); - --- IV 10 — Woven Stories -INSERT INTO INVENTORY (FK_CONTACT_ID, AUTHORIZATION_ID, SKU, - PRODUCT_DESCRIPTION, UNIT_COST, LEAD_TIME_DAYS, - PRODUCT_NAME, UNIT_OF_MEASURE, BASE_PRICE, QUANTITY_AVAILABLE, FK_DOCUMENT_ID) -VALUES (6, 7, 'ART-H-005', - 'Textile wall hanging, woven, 36x48', 550.00, 14, - 'Woven Stories', 'piece', 850.00, 5, 7); - -INSERT INTO EXHIBIT (FK_INVENTORY_ID, FK_PLAN_ID) VALUES (1, 1); -- Crimson Horizon → Spring Preview -INSERT INTO EXHIBIT (FK_INVENTORY_ID, FK_PLAN_ID) VALUES (2, 2); -- Misty Valley → Spring Standard -INSERT INTO EXHIBIT (FK_INVENTORY_ID, FK_PLAN_ID) VALUES (3, 3); -- Twisted Form → Spring VIP -INSERT INTO EXHIBIT (FK_INVENTORY_ID, FK_PLAN_ID) VALUES (4, 4); -- Blue Symmetry → Summer Basic -INSERT INTO EXHIBIT (FK_INVENTORY_ID, FK_PLAN_ID) VALUES (5, 5); -- Urban Collage → Summer Plus -INSERT INTO EXHIBIT (FK_INVENTORY_ID, FK_PLAN_ID) VALUES (6, 6); -- Urban Solitude → Summer Premium -INSERT INTO EXHIBIT (FK_INVENTORY_ID, FK_PLAN_ID) VALUES (7, 7); -- Earth Vessel → Fall Access -INSERT INTO EXHIBIT (FK_INVENTORY_ID, FK_PLAN_ID) VALUES (8, 8); -- Quiet Reflection → Fall Full Day -INSERT INTO EXHIBIT (FK_INVENTORY_ID, FK_PLAN_ID) VALUES (9, 9); -- Neon Dreams → Fall Weekend -INSERT INTO EXHIBIT (FK_INVENTORY_ID, FK_PLAN_ID) VALUES (10, 10); -- Woven Stories → Annual Pass - - -INSERT INTO INVOICE (FK_CONTACT_ID, FK_PLAN_ID, InvoiceDate, AmountPaid) VALUES (9, 1, DATE'2025-01-01', 75.00); -- Bob — Spring Preview -INSERT INTO INVOICE (FK_CONTACT_ID, FK_PLAN_ID, InvoiceDate, AmountPaid) VALUES (10, 2, DATE'2025-01-02', 120.00); -- Carol — Spring Standard -INSERT INTO INVOICE (FK_CONTACT_ID, FK_PLAN_ID, InvoiceDate, AmountPaid) VALUES (11, 3, DATE'2025-01-03', 250.00); -- David — Spring VIP -INSERT INTO INVOICE (FK_CONTACT_ID, FK_PLAN_ID, InvoiceDate, AmountPaid) VALUES (12, 4, DATE'2025-01-04', 50.00); -- Emma — Summer Basic -INSERT INTO INVOICE (FK_CONTACT_ID, FK_PLAN_ID, InvoiceDate, AmountPaid) VALUES (9, 5, DATE'2025-01-05', 100.00); -- Bob — Summer Plus -INSERT INTO INVOICE (FK_CONTACT_ID, FK_PLAN_ID, InvoiceDate, AmountPaid) VALUES (10, 6, DATE'2025-01-06', 150.00); -- Carol — Summer Premium -INSERT INTO INVOICE (FK_CONTACT_ID, FK_PLAN_ID, InvoiceDate, AmountPaid) VALUES (11, 7, DATE'2025-01-07', 60.00); -- David — Fall Access -INSERT INTO INVOICE (FK_CONTACT_ID, FK_PLAN_ID, InvoiceDate, AmountPaid) VALUES (12, 8, DATE'2025-01-08', 110.00); -- Emma — Fall Full Day -INSERT INTO INVOICE (FK_CONTACT_ID, FK_PLAN_ID, InvoiceDate, AmountPaid) VALUES (9, 9, DATE'2025-01-09', 180.00); -- Bob — Fall Weekend -INSERT INTO INVOICE (FK_CONTACT_ID, FK_PLAN_ID, InvoiceDate, AmountPaid) VALUES (10, 10, DATE'2025-01-10', 500.00); -- Carol — Annual Pass - -/ diff --git a/schema/Price_Sherwin_DDL_output.txt b/schema/Price_Sherwin_DDL_output.txt deleted file mode 100755 index d7d85b5..0000000 --- a/schema/Price_Sherwin_DDL_output.txt +++ /dev/null @@ -1,1087 +0,0 @@ -SQL> SET SERVEROUTPUT ON; -SQL> -SQL> DECLARE - 2 l_tab DBMS_UTILITY.uncl_array; - 3 l_tablen number; - 4 BEGIN - 5 dbms_utility.comma_to_table('CONTACT,PROFILE,ROLE,USERROLE,STAFF,ZIP,ADDRESS,DOCUMENT,PLAN,EXHIBIT,SUBSCRIPTION,AUTHORIZATION,INVENTORY,ORDER_ITEMS,INVOICE,TASK_HISTORY' - 6 , l_tablen, l_tab); - 7 for i in 1..l_tablen - 8 LOOP - 9 BEGIN - 10 EXECUTE IMMEDIATE 'DROP TABLE ' || l_tab(i) || ' CASCADE CONSTRAINTS'; - 11 DBMS_OUTPUT.put_line('DROPPED ' || l_tab(i) ); - 12 EXCEPTION - 13 WHEN OTHERS THEN NULL; - 14 END; - 15 END LOOP; - 16 - 17 DBMS_UTILITY.comma_to_table('ISEQ_CONTACT,ISEQ_ROLE,ISEQ_PROFILE,ISEQ_DOCUMENT', l_tablen, l_tab); - 18 for i in 1..l_tablen - 19 LOOP - 20 BEGIN - 21 EXECUTE IMMEDIATE 'DROP SEQUENCE '|| l_tab(i); - 22 DBMS_OUTPUT.put_line('DROPPED ' || l_tab(i) ); - 23 EXCEPTION - 24 WHEN OTHERS THEN NULL; - 25 END; - 26 END LOOP; - 27 - 28 COMMIT; - 29 END; - 30 / -DROPPED CONTACT -DROPPED PROFILE -DROPPED ROLE -DROPPED USERROLE -DROPPED STAFF -DROPPED ZIP -DROPPED ADDRESS -DROPPED DOCUMENT -DROPPED PLAN -DROPPED EXHIBIT -DROPPED SUBSCRIPTION -DROPPED AUTHORIZATION -DROPPED INVENTORY -DROPPED ORDER_ITEMS -DROPPED INVOICE -DROPPED TASK_HISTORY -DROPPED ISEQ_CONTACT -DROPPED ISEQ_ROLE -DROPPED ISEQ_PROFILE -DROPPED ISEQ_DOCUMENT - - -PL/SQL procedure successfully completed. - -SQL> -SQL> CREATE SEQUENCE ISEQ_CONTACT START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE; - -Sequence ISEQ_CONTACT created. - -SQL> -SQL> CREATE TABLE CONTACT ( - 2 CONTACT_ID NUMBER DEFAULT ISEQ_CONTACT.nextval NOT NULL, - 3 FIRST_NAME VARCHAR2(16) NOT NULL, - 4 LAST_NAME VARCHAR2(16) NOT NULL, - 5 PHONE_NO VARCHAR2(12), - 6 EMAIL VARCHAR2(64) NOT NULL, - 7 MODIFIED_BY NUMBER, - 8 CREATED_DT TIMESTAMP DEFAULT SYSDATE, - 9 MODIFIED_DT TIMESTAMP DEFAULT SYSDATE, - 10 CONSTRAINT PK_CONTACT_ID PRIMARY KEY (CONTACT_ID), - 11 FOREIGN KEY (MODIFIED_BY) REFERENCES CONTACT(CONTACT_ID) - 12 ); - -Table CONTACT created. - -SQL> -SQL> CREATE TABLE ZIP ( - 2 ZIP VARCHAR2(5), - 3 CITY VARCHAR2(16), - 4 STATE VARCHAR2(2), - 5 CONSTRAINT PK_ZIP PRIMARY KEY (ZIP), - 6 CONSTRAINT ZIP_CHECK CHECK ( REGEXP_LIKE(ZIP, '\d{5}') ) - 7 ); - -Table ZIP created. - -SQL> -SQL> CREATE TABLE ADDRESS ( - 2 ZIP VARCHAR2(5) NOT NULL, - 3 FK_CONTACT_ID NUMBER NOT NULL, - 4 STREET VARCHAR2(32) NOT NULL, - 5 CONSTRAINT PK_ADDRESS PRIMARY KEY (ZIP, FK_CONTACT_ID), - 6 FOREIGN KEY (FK_CONTACT_ID) REFERENCES CONTACT(CONTACT_ID) ON DELETE CASCADE, - 7 FOREIGN KEY (ZIP) REFERENCES ZIP(ZIP) - 8 ); - -Table ADDRESS created. - -SQL> -SQL> CREATE SEQUENCE "ISEQ_ROLE" START WITH 100 INCREMENT BY 100 NOCACHE NOCYCLE; - -Sequence "ISEQ_ROLE" created. - -SQL> -SQL> CREATE TABLE ROLE ( - 2 ROLE_ID NUMBER DEFAULT ISEQ_ROLE.nextval NOT NULL, - 3 ROLENAME VARCHAR2(16), - 4 CONSTRAINT PK_ROLE_ID PRIMARY KEY (ROLE_ID), - 5 CONSTRAINT check_role CHECK (ROLENAME IN ('SYSTEM', 'CONTACT', 'CUSTOMER', 'STAFF', 'SUPPLIER')) - 6 ); - -Table ROLE created. - -SQL> -SQL> CREATE SEQUENCE "ISEQ_PROFILE" START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE; - -Sequence "ISEQ_PROFILE" created. - -SQL> -SQL> CREATE TABLE PROFILE ( - 2 PROFILE_ID NUMBER DEFAULT ISEQ_PROFILE.nextval NOT NULL, - 3 FK_CONTACT_ID NUMBER NOT NULL, - 4 ACTIVE BOOLEAN DEFAULT FALSE, - 5 MODIFIED_BY NUMBER NOT NULL, - 6 CREATED_DT TIMESTAMP DEFAULT SYSDATE, - 7 MODIFIED_DT TIMESTAMP DEFAULT SYSDATE, - 8 CONSTRAINT PK_PROFILE_ID PRIMARY KEY(PROFILE_ID), - 9 FOREIGN KEY (FK_CONTACT_ID) REFERENCES CONTACT(CONTACT_ID) ON DELETE CASCADE, - 10 FOREIGN KEY(MODIFIED_BY) REFERENCES PROFILE(PROFILE_ID) - 11 ); - -Table PROFILE created. - -SQL> -SQL> CREATE TABLE USERROLE ( - 2 FK_PROFILE_ID NUMBER NOT NULL, - 3 FK_ROLE_ID NUMBER NOT NULL, - 4 PASSWORDHASH RAW(256) DEFAULT NULL, - 5 CONSTRAINT PK_USERROLE PRIMARY KEY (FK_ROLE_ID,FK_PROFILE_ID), - 6 FOREIGN KEY(FK_PROFILE_ID) REFERENCES PROFILE(PROFILE_ID) ON DELETE CASCADE, - 7 FOREIGN KEY(FK_ROLE_ID) REFERENCES ROLE(ROLE_ID) ON DELETE CASCADE - 8 ); - -Table USERROLE created. - -SQL> -SQL> CREATE TABLE STAFF( - 2 FK_PROFILE_ID NUMBER NOT NULL, - 3 POSITION VARCHAR2(14) NOT NULL, - 4 CONSTRAINT check_position CHECK (POSITION IN ('Director', 'Curator', - 5 'Art Handler', 'Registrar', 'Associate')), - 6 CONSTRAINT PK_STAFF PRIMARY KEY (FK_PROFILE_ID), - 7 FOREIGN KEY(FK_PROFILE_ID) REFERENCES PROFILE(PROFILE_ID) - 8 ); - -Table STAFF created. - -SQL> -SQL> CREATE SEQUENCE ISEQ_DOCUMENT START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE; - -Sequence ISEQ_DOCUMENT created. - -SQL> CREATE TABLE DOCUMENT ( - 2 DOCUMENT_ID NUMBER DEFAULT ISEQ_DOCUMENT.nextval NOT NULL, - 3 DOCUMENT_URL VARCHAR2(254) NOT NULL, - 4 CONSTRAINT PK_DOCUMENT PRIMARY KEY (DOCUMENT_ID) - 5 ); - -Table DOCUMENT created. - -SQL> -SQL> CREATE TABLE PLAN ( - 2 PLAN_ID NUMBER GENERATED ALWAYS AS IDENTITY, - 3 DESCRIPTION VARCHAR2(32), - 4 FK_DOCUMENT_ID NUMBER NOT NULL, - 5 Duration NUMBER, --in hours - 6 price NUMBER, - 7 MODIFIED_BY NUMBER, - 8 CREATED_DT TIMESTAMP DEFAULT SYSDATE, - 9 MODIFIED_DT TIMESTAMP DEFAULT SYSDATE, - 10 CONSTRAINT PK_PLAN PRIMARY KEY(PLAN_ID), - 11 FOREIGN KEY(FK_DOCUMENT_ID) REFERENCES DOCUMENT(DOCUMENT_ID) - 12 ); - -Table PLAN created. - -SQL> -SQL> CREATE TABLE SUBSCRIPTION ( - 2 FK_PLAN_ID NUMBER, - 3 FK_CONTACT_ID NUMBER, - 4 MODIFIED_BY NUMBER, - 5 CREATED_DT TIMESTAMP DEFAULT SYSDATE, - 6 MODIFIED_DT TIMESTAMP DEFAULT SYSDATE, - 7 CONSTRAINT PK_SUBSCRIPTION PRIMARY KEY (FK_PLAN_ID, FK_CONTACT_ID), - 8 FOREIGN KEY(FK_CONTACT_ID) REFERENCES CONTACT(CONTACT_ID), - 9 FOREIGN KEY(FK_PLAN_ID) REFERENCES PLAN(PLAN_ID) - 10 ); - -Table SUBSCRIPTION created. - -SQL> -SQL> /* Once invoice is paid, external system inserts invoice uid. Insert/Update.*/ -SQL> CREATE TABLE INVOICE ( - 2 INVOICE_ID RAW(16) DEFAULT SYS_GUID() NOT NULL PRIMARY KEY, - 3 FK_PLAN_ID NUMBER, - 4 FK_CONTACT_ID NUMBER, - 5 InvoiceDate DATE, - 6 AmountPaid DECIMAL(10, 2) DEFAULT 0, - 7 FOREIGN KEY(FK_CONTACT_ID) REFERENCES CONTACT(CONTACT_ID), - 8 FOREIGN KEY(FK_PLAN_ID) REFERENCES PLAN(PLAN_ID) - 9 ); - -Table INVOICE created. - -SQL> -SQL> CREATE TABLE AUTHORIZATION ( - 2 AUTHORIZATION_ID NUMBER GENERATED ALWAYS AS IDENTITY PRIMARY KEY, - 3 FK_CONTACT_ID NUMBER, - 4 AUTHORIZATION_STATUS VARCHAR2(16) NOT NULL, - 5 AUTHORIZATION_DATE TIMESTAMP DEFAULT SYSDATE, - 6 EXPIRATION_DATE TIMESTAMP DEFAULT SYSDATE, - 7 FK_DOCUMENT_ID NUMBER, - 8 MODIFIED_BY NUMBER, - 9 CREATED_DT TIMESTAMP DEFAULT SYSDATE, - 10 MODIFIED_DT TIMESTAMP DEFAULT SYSDATE, - 11 FOREIGN KEY(FK_CONTACT_ID) REFERENCES CONTACT(CONTACT_ID), - 12 FOREIGN KEY(FK_DOCUMENT_ID) REFERENCES DOCUMENT(DOCUMENT_ID), - 13 CONSTRAINT check_authorization_status CHECK (AUTHORIZATION_STATUS IN ('pending', 'approved', 'rejected', 'expired')) - 14 ); - -Table AUTHORIZATION created. - -SQL> -SQL> CREATE TABLE INVENTORY ( - 2 INVENTORY_ID NUMBER GENERATED ALWAYS AS IDENTITY PRIMARY KEY, - 3 FK_CONTACT_ID NUMBER NOT NULL, - 4 AUTHORIZATION_ID NUMBER, - 5 SKU VARCHAR2(100) NOT NULL, - 6 PRODUCT_DESCRIPTION VARCHAR2(100) NOT NULL, - 7 UNIT_COST DECIMAL(10,2) NOT NULL, - 8 LEAD_TIME_DAYS INTEGER NOT NULL, - 9 PRODUCT_NAME VARCHAR2(100) NOT NULL, - 10 UNIT_OF_MEASURE VARCHAR2(50) NOT NULL, - 11 BASE_PRICE DECIMAL(10,2) NOT NULL, - 12 QUANTITY_AVAILABLE INTEGER DEFAULT 0 NOT NULL, - 13 CREATED_AT TIMESTAMP DEFAULT SYSDATE, - 14 UPDATED_AT TIMESTAMP DEFAULT SYSDATE, - 15 FK_DOCUMENT_ID NUMBER, - 16 FOREIGN KEY(FK_CONTACT_ID) REFERENCES CONTACT(CONTACT_ID), - 17 FOREIGN KEY(FK_DOCUMENT_ID) REFERENCES DOCUMENT(DOCUMENT_ID), - 18 FOREIGN KEY(AUTHORIZATION_ID) REFERENCES AUTHORIZATION(AUTHORIZATION_ID), - 19 CONSTRAINT SUPPLIER_UNIQUE_SKU UNIQUE(FK_CONTACT_ID, SKU) - 20 ); - -Table INVENTORY created. - -SQL> -SQL> CREATE TABLE EXHIBIT ( - 2 EXHIBIT_ID NUMBER GENERATED ALWAYS AS IDENTITY PRIMARY KEY, - 3 FK_INVENTORY_ID NUMBER NOT NULL, - 4 FK_PLAN_ID NUMBER, - 5 FOREIGN KEY(FK_PLAN_ID) REFERENCES PLAN(PLAN_ID), - 6 FOREIGN KEY(FK_INVENTORY_ID) REFERENCES INVENTORY(INVENTORY_ID) - 7 ); - -Table EXHIBIT created. - -SQL> -SQL> CREATE TABLE ORDER_ITEMS ( -- 'product line items customers placed in their carts.' - 2 ORDER_ITEM_ID NUMBER GENERATED ALWAYS AS IDENTITY PRIMARY KEY, - 3 FK_PROFILE_ID NUMBER NOT NULL, - 4 TRANSACTION_ID VARCHAR2(32) NULL, - 5 CREATED_AT TIMESTAMP NOT NULL, - 6 QUANTITY NUMBER DEFAULT(1) NOT NULL, - 7 UNIT_PRICE DECIMAL(10,2) NOT NULL, - 8 LINE_TOTAL DECIMAL(10,2) NOT NULL, - 9 FK_INVENTORY_ID NUMBER NOT NULL, - 10 FOREIGN KEY(FK_PROFILE_ID) REFERENCES PROFILE(PROFILE_ID), - 11 FOREIGN KEY(FK_INVENTORY_ID) REFERENCES INVENTORY(INVENTORY_ID) - 12 ); - -Table ORDER_ITEMS created. - -SQL> -SQL> CREATE TABLE TASK_HISTORY( - 2 TASK_ID NUMBER GENERATED ALWAYS AS IDENTITY PRIMARY KEY, - 3 ASSIGNED_TO_PROFILE_ID NUMBER NOT NULL, - 4 CREATED_BY_PROFILE_ID NUMBER NOT NULL, - 5 RELATED_ENTITY_TYPE VARCHAR2(32), -- 'order', 'supplier', etc. - 6 RELATED_ENTITY_ID NUMBER, - 7 TASK_TYPE VARCHAR2(32) NOT NULL, - 8 TASK_TITLE VARCHAR2(64) NOT NULL, - 9 DESCRIPTION VARCHAR2(128), - 10 FK_DOCUMENT_ID NUMBER, - 11 STATUS VARCHAR2(16) DEFAULT 'pending', - 12 DUE_DATE TIMESTAMP, - 13 COMPLETED_AT TIMESTAMP, - 14 CREATED_AT TIMESTAMP DEFAULT SYSDATE, - 15 UPDATED_AT TIMESTAMP DEFAULT SYSDATE, - 16 FOREIGN KEY(FK_DOCUMENT_ID) REFERENCES DOCUMENT(DOCUMENT_ID), - 17 CONSTRAINT chk_status CHECK (STATUS IN ('pending', 'in_progress', 'completed', 'cancelled')) - 18 ); - -Table TASK_HISTORY created. - -SQL> -SQL> /* VIEW of available exhibit inventory */ -SQL> CREATE OR REPLACE VIEW VIEW_AVAILABLE_INVENTORY AS - 2 SELECT - 3 INVENTORY_ID,FK_CONTACT_ID,AUTHORIZATION_ID,SKU,PRODUCT_DESCRIPTION,UNIT_COST,LEAD_TIME_DAYS, - 4 PRODUCT_NAME,UNIT_OF_MEASURE,BASE_PRICE,QUANTITY_AVAILABLE,CREATED_AT,UPDATED_AT,FK_DOCUMENT_ID - 5 FROM - 6 INVENTORY WHERE QUANTITY_AVAILABLE > 0 - 7 INTERSECT - 8 SELECT - 9 FK_INVENTORY_ID, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL - 10 FROM - 11 EXHIBIT; - -View VIEW_AVAILABLE_INVENTORY created. - -SQL> -SQL> CREATE OR REPLACE VIEW VIEW_SYSTEMROLE AS - 2 SELECT u.FK_PROFILE_ID, p.FK_CONTACT_ID, r.ROLENAME, p.ACTIVE FROM - 3 USERROLE u - 4 JOIN PROFILE p ON p.PROFILE_ID=u.FK_PROFILE_ID - 5 JOIN ROLE r ON r.ROLE_ID = u.FK_ROLE_ID AND r.ROLE_ID = 100; - -View VIEW_SYSTEMROLE created. - -SQL> -SQL> CREATE OR REPLACE VIEW VIEW_STAFF AS - 2 SELECT u.FK_PROFILE_ID, p.FK_CONTACT_ID, r.ROLENAME, p.ACTIVE, c.FIRST_NAME, c.LAST_NAME, s.POSITION FROM - 3 USERROLE u - 4 JOIN PROFILE p ON p.PROFILE_ID=u.FK_PROFILE_ID - 5 JOIN CONTACT c ON c.CONTACT_ID = p.FK_CONTACT_ID - 6 JOIN ROLE r ON r.ROLE_ID = u.FK_ROLE_ID AND r.ROLE_ID = 300 - 7 JOIN STAFF s on s.FK_PROFILE_ID = p.PROFILE_ID; - -View VIEW_STAFF created. - -SQL> -SQL> CREATE OR REPLACE VIEW VIEW_SUPPLIER AS - 2 SELECT u.FK_PROFILE_ID, p.FK_CONTACT_ID, r.ROLENAME, p.ACTIVE, c.FIRST_NAME, c.LAST_NAME FROM - 3 USERROLE u - 4 JOIN PROFILE p ON p.PROFILE_ID=u.FK_PROFILE_ID - 5 JOIN CONTACT c ON c.CONTACT_ID = p.FK_CONTACT_ID - 6 JOIN ROLE r ON r.ROLE_ID = u.FK_ROLE_ID AND r.ROLE_ID = 200; - -View VIEW_SUPPLIER created. - -SQL> -SQL> CREATE OR REPLACE VIEW VIEW_CUSTOMER AS - 2 SELECT u.FK_PROFILE_ID, p.FK_CONTACT_ID, r.ROLENAME, p.ACTIVE, c.FIRST_NAME, c.LAST_NAME FROM - 3 USERROLE u - 4 JOIN PROFILE p ON p.PROFILE_ID=u.FK_PROFILE_ID - 5 JOIN CONTACT c ON c.CONTACT_ID = p.FK_CONTACT_ID - 6 JOIN ROLE r ON r.ROLE_ID = u.FK_ROLE_ID AND r.ROLE_ID = 400; - -View VIEW_CUSTOMER created. - -SQL> -SQL> -- Trigger customer ordered items reservation -SQL> CREATE OR REPLACE TRIGGER ORDER_ITEMS_reserved - 2 AFTER INSERT ON ORDER_ITEMS FOR EACH ROW - 3 BEGIN - 4 UPDATE INVENTORY SET QUANTITY_AVAILABLE = QUANTITY_AVAILABLE - :NEW.QUANTITY WHERE INVENTORY_ID= :NEW.FK_INVENTORY_ID; - 5 DBMS_OUTPUT.put_line(' ORDER transaction. ' ); - 6 END; - 7 / - -Trigger ORDER_ITEMS_RESERVED compiled - -SQL> -SQL> -- Trigger Paid Invoice, generates subscription -SQL> CREATE OR REPLACE TRIGGER INVOICE_paid_subscription - 2 AFTER INSERT OR UPDATE ON INVOICE FOR EACH ROW - 3 BEGIN - 4 DBMS_OUTPUT.put_line(' SUBSCRIPTION transaction. ' ); - 5 INSERT INTO SUBSCRIPTION (FK_PLAN_ID, FK_CONTACT_ID) VALUES (:NEW.FK_PLAN_ID, :NEW.FK_CONTACT_ID); - 6 EXCEPTION - 7 WHEN DUP_VAL_ON_INDEX THEN - 8 DBMS_OUTPUT.put_line('Subscription exists for plan and contact. No new subscription created.'); - 9 UPDATE SUBSCRIPTION SET FK_PLAN_ID = :NEW.FK_PLAN_ID, FK_CONTACT_ID = :NEW.FK_CONTACT_ID, MODIFIED_BY = 1, MODIFIED_DT = SYSDATE - 10 WHERE FK_PLAN_ID = :NEW.FK_PLAN_ID AND FK_CONTACT_ID = :NEW.FK_CONTACT_ID; - 11 WHEN OTHERS THEN - 12 DBMS_OUTPUT.put_line('Error in INVOICE_paid_subscription creating/updating subscription: ' || SQLERRM); - 13 END; - 14 / - -Trigger INVOICE_PAID_SUBSCRIPTION compiled - -SQL> -SQL> CREATE OR REPLACE PROCEDURE sp_auth_supplier( - 2 p_status IN VARCHAR, - 3 p_supplier IN NUMBER, - 4 p_document_url IN VARCHAR - 5 ) IS - 6 l_id NUMBER; - 7 BEGIN - 8 BEGIN - 9 INSERT INTO DOCUMENT(DOCUMENT_ID, DOCUMENT_URL) VALUES (ISEQ_DOCUMENT.nextval, p_document_url) - 10 RETURNING DOCUMENT_ID INTO l_id; -- Captures the generated ID - 11 END; - 12 BEGIN - 13 INSERT INTO AUTHORIZATION (AUTHORIZATION_STATUS, FK_CONTACT_ID, MODIFIED_BY, FK_DOCUMENT_ID) VALUES(p_status, p_supplier, 1, l_id); - 14 DBMS_OUTPUT.put_line('Reviewed Document ' || p_status ); - 15 EXCEPTION - 16 WHEN OTHERS - 17 THEN - 18 DBMS_OUTPUT.put_line (SQLERRM); - 19 raise_application_error (-20500, 'failed while setting auth_supplier_status. '); - 20 END; - 21 END; - 22 - 23 / - -Procedure SP_AUTH_SUPPLIER compiled - -SQL> -SQL> INSERT INTO ROLE (ROLE_ID, ROLENAME) VALUES (100, 'SYSTEM'); - -1 row inserted. - -SQL> INSERT INTO ROLE (ROLE_ID, ROLENAME) VALUES (200, 'SUPPLIER'); - -1 row inserted. - -SQL> INSERT INTO ROLE (ROLE_ID, ROLENAME) VALUES (300, 'STAFF'); - -1 row inserted. - -SQL> INSERT INTO ROLE (ROLE_ID, ROLENAME) VALUES (400, 'CUSTOMER'); - -1 row inserted. - -SQL> -SQL> -- SYSTEM ROLE -SQL> INSERT INTO CONTACT ( FIRST_NAME, LAST_NAME, PHONE_NO, EMAIL, MODIFIED_BY) VALUES ('ART', 'SYSTEM', '000-1234', 'arts@art.com', 1); - -1 row inserted. - -SQL> -- STAFF ROLE -SQL> INSERT INTO CONTACT ( FIRST_NAME, LAST_NAME, PHONE_NO, EMAIL, MODIFIED_BY) VALUES ('Alice', 'Johnson', '650-555-9012', 'alice.johnson@art.com', 1); - -1 row inserted. - -SQL> INSERT INTO CONTACT ( FIRST_NAME, LAST_NAME, PHONE_NO, EMAIL, MODIFIED_BY) VALUES ( 'Karen', 'Park', '206-555-0110', 'karen.park@art.com', 1); - -1 row inserted. - -SQL> INSERT INTO CONTACT ( FIRST_NAME, LAST_NAME, PHONE_NO, EMAIL, MODIFIED_BY) VALUES ( 'Jeese', 'Taylor', '713-555-0106', 'grace.taylor@art.com', 1); - -1 row inserted. - -SQL> INSERT INTO CONTACT ( FIRST_NAME, LAST_NAME, PHONE_NO, EMAIL, MODIFIED_BY) VALUES ( 'James', 'Lee', '206-555-0109', 'james.lee@art.com', 1); - -1 row inserted. - -SQL> -- SUPPLIER ROLE -SQL> INSERT INTO CONTACT ( FIRST_NAME, LAST_NAME, PHONE_NO, EMAIL, MODIFIED_BY) VALUES ('Stephen', 'Alec', '424-546-9312', 'salec@eizel.com', 1); - -1 row inserted. - -SQL> INSERT INTO CONTACT ( FIRST_NAME, LAST_NAME, PHONE_NO, EMAIL, MODIFIED_BY) VALUES ('Henry', 'Martinez', '602-555-0107', 'henry@artsupply.com', 1); - -1 row inserted. - -SQL> -- CUSTOMER ROLE -SQL> INSERT INTO CONTACT ( FIRST_NAME, LAST_NAME, PHONE_NO, EMAIL, MODIFIED_BY) VALUES ('Carol', 'White', '212-555-0102', 'carol.white@mail.com', 1); - -1 row inserted. - -SQL> INSERT INTO CONTACT ( FIRST_NAME, LAST_NAME, PHONE_NO, EMAIL, MODIFIED_BY) VALUES ('Bob', 'Smith', '212-555-0101', 'bob.smith@mail.com', 1); - -1 row inserted. - -SQL> INSERT INTO CONTACT ( FIRST_NAME, LAST_NAME, PHONE_NO, EMAIL, MODIFIED_BY) VALUES ('David', 'Brown', '312-555-0103', 'david.brown@mail.com', 1); - -1 row inserted. - -SQL> INSERT INTO CONTACT ( FIRST_NAME, LAST_NAME, PHONE_NO, EMAIL, MODIFIED_BY) VALUES ('Emma', 'Davis', '312-555-0104', 'emma.davis@mail.com', 1); - -1 row inserted. - -SQL> INSERT INTO CONTACT ( FIRST_NAME, LAST_NAME, PHONE_NO, EMAIL, MODIFIED_BY) VALUES ('Frank', 'Wilson', '713-555-0105', 'frank.wilson@mail.com', 1); - -1 row inserted. - -SQL> -SQL> INSERT INTO ZIP (ZIP, CITY, STATE) VALUES ('10001', 'New York', 'NY'); - -1 row inserted. - -SQL> INSERT INTO ZIP (ZIP, CITY, STATE) VALUES ('90210', 'Beverly Hills', 'CA'); - -1 row inserted. - -SQL> INSERT INTO ZIP (ZIP, CITY, STATE) VALUES ('94027', 'Atherton', 'CA'); - -1 row inserted. - -SQL> INSERT INTO ZIP (ZIP, CITY, STATE) VALUES ('90211', 'Los Angeles', 'CA'); - -1 row inserted. - -SQL> INSERT INTO ZIP (ZIP, CITY, STATE) VALUES ('60601', 'Chicago', 'IL'); - -1 row inserted. - -SQL> INSERT INTO ZIP (ZIP, CITY, STATE) VALUES ('77001', 'Houston', 'TX'); - -1 row inserted. - -SQL> INSERT INTO ZIP (ZIP, CITY, STATE) VALUES ('85001', 'Phoenix', 'AZ'); - -1 row inserted. - -SQL> INSERT INTO ZIP (ZIP, CITY, STATE) VALUES ('98101', 'Seattle', 'WA'); - -1 row inserted. - -SQL> INSERT INTO ZIP (ZIP, CITY, STATE) VALUES ('02101', 'Boston', 'MA'); - -1 row inserted. - -SQL> INSERT INTO ZIP (ZIP, CITY, STATE) VALUES ('33101', 'Miami', 'FL'); - -1 row inserted. - -SQL> -SQL> INSERT INTO ADDRESS (FK_CONTACT_ID, STREET, ZIP) VALUES (1, '789 Oak St, suite 10', '94027'); - -1 row inserted. - -SQL> INSERT INTO ADDRESS (FK_CONTACT_ID, STREET, ZIP) VALUES (2, '789 Oak St, suite 15', '94027'); - -1 row inserted. - -SQL> INSERT INTO ADDRESS (FK_CONTACT_ID, STREET, ZIP) VALUES (3, '789 Oak St, suite 1', '94027'); - -1 row inserted. - -SQL> INSERT INTO ADDRESS (FK_CONTACT_ID, STREET, ZIP) VALUES (4, '789 Oak St, suite 5', '94027'); - -1 row inserted. - -SQL> INSERT INTO ADDRESS (FK_CONTACT_ID, STREET, ZIP) VALUES (5, '789 Oak St, suite 15', '94027'); - -1 row inserted. - -SQL> INSERT INTO ADDRESS (FK_CONTACT_ID, STREET, ZIP) VALUES (6, '890 Venue Rd', '90210'); - -1 row inserted. - -SQL> INSERT INTO ADDRESS (FK_CONTACT_ID, STREET, ZIP) VALUES (7, '200 Sunset Blvd', '90210'); - -1 row inserted. - -SQL> INSERT INTO ADDRESS (FK_CONTACT_ID, STREET, ZIP) VALUES (8, '100 Broadway', '10001'); - -1 row inserted. - -SQL> INSERT INTO ADDRESS (FK_CONTACT_ID, STREET, ZIP) VALUES (9, '300 Michigan Ave', '60601'); - -1 row inserted. - -SQL> INSERT INTO ADDRESS (FK_CONTACT_ID, STREET, ZIP) VALUES (10, '400 Main St', '77001'); - -1 row inserted. - -SQL> INSERT INTO ADDRESS (FK_CONTACT_ID, STREET, ZIP ) VALUES (11, '500 Central Ave', '85001'); - -1 row inserted. - -SQL> INSERT INTO ADDRESS (FK_CONTACT_ID, STREET, ZIP ) VALUES (12, '600 Pike St', '98101'); - -1 row inserted. - -SQL> -SQL> -- SYSTEMPROFILE -SQL> INSERT INTO PROFILE (FK_CONTACT_ID, ACTIVE, MODIFIED_BY) VALUES (1, TRUE, 1); - -1 row inserted. - -SQL> -- STAFF PROFILE -SQL> INSERT INTO PROFILE (FK_CONTACT_ID, ACTIVE, MODIFIED_BY) VALUES (2, TRUE, 2); - -1 row inserted. - -SQL> -- SUPPLIER -SQL> INSERT INTO PROFILE (FK_CONTACT_ID, ACTIVE, MODIFIED_BY) VALUES (3, TRUE, 3); - -1 row inserted. - -SQL> -SQL> INSERT INTO PROFILE (PROFILE_ID, FK_CONTACT_ID, ACTIVE, MODIFIED_BY) VALUES (4, 4, TRUE, 1); - -1 row inserted. - -SQL> INSERT INTO PROFILE (PROFILE_ID, FK_CONTACT_ID, ACTIVE, MODIFIED_BY) VALUES (5, 5, TRUE, 1); - -1 row inserted. - -SQL> INSERT INTO PROFILE (PROFILE_ID, FK_CONTACT_ID, ACTIVE, MODIFIED_BY) VALUES (6, 6, TRUE, 1); - -1 row inserted. - -SQL> INSERT INTO PROFILE (PROFILE_ID, FK_CONTACT_ID, ACTIVE, MODIFIED_BY) VALUES (7, 7, TRUE, 1); - -1 row inserted. - -SQL> INSERT INTO PROFILE (PROFILE_ID, FK_CONTACT_ID, ACTIVE, MODIFIED_BY) VALUES (8, 8, FALSE, 1); - -1 row inserted. - -SQL> -- inactive -SQL> INSERT INTO PROFILE (PROFILE_ID, FK_CONTACT_ID, ACTIVE, MODIFIED_BY) VALUES (9, 9, TRUE, 1); - -1 row inserted. - -SQL> INSERT INTO PROFILE (PROFILE_ID, FK_CONTACT_ID, ACTIVE, MODIFIED_BY) VALUES (10, 10, TRUE, 1); - -1 row inserted. - -SQL> INSERT INTO PROFILE (PROFILE_ID, FK_CONTACT_ID, ACTIVE, MODIFIED_BY) VALUES (11, 11, TRUE, 1); - -1 row inserted. - -SQL> INSERT INTO PROFILE (PROFILE_ID, FK_CONTACT_ID, ACTIVE, MODIFIED_BY) VALUES (12, 12, TRUE, 1); - -1 row inserted. - -SQL> -SQL> -SQL> INSERT INTO USERROLE (FK_PROFILE_ID, FK_ROLE_ID, PASSWORDHASH) VALUES (1, 100, NULL); - -1 row inserted. - -SQL> INSERT INTO USERROLE (FK_PROFILE_ID, FK_ROLE_ID) VALUES (2, 300); - -1 row inserted. - -SQL> INSERT INTO USERROLE (FK_PROFILE_ID, FK_ROLE_ID) VALUES (3, 300); - -1 row inserted. - -SQL> INSERT INTO USERROLE (FK_PROFILE_ID, FK_ROLE_ID) VALUES (4, 300); - -1 row inserted. - -SQL> INSERT INTO USERROLE (FK_PROFILE_ID, FK_ROLE_ID) VALUES (5, 300); - -1 row inserted. - -SQL> INSERT INTO USERROLE (FK_PROFILE_ID, FK_ROLE_ID) VALUES (6, 200); - -1 row inserted. - -SQL> INSERT INTO USERROLE (FK_PROFILE_ID, FK_ROLE_ID) VALUES (7, 200); - -1 row inserted. - -SQL> INSERT INTO USERROLE (FK_PROFILE_ID, FK_ROLE_ID) VALUES (8, 400); - -1 row inserted. - -SQL> -- inactive customer -SQL> INSERT INTO USERROLE (FK_PROFILE_ID, FK_ROLE_ID) VALUES (9, 400); - -1 row inserted. - -SQL> INSERT INTO USERROLE (FK_PROFILE_ID, FK_ROLE_ID) VALUES (10, 400); - -1 row inserted. - -SQL> INSERT INTO USERROLE (FK_PROFILE_ID, FK_ROLE_ID) VALUES (11, 400); - -1 row inserted. - -SQL> INSERT INTO USERROLE (FK_PROFILE_ID, FK_ROLE_ID) VALUES (12, 400); - -1 row inserted. - -SQL> -SQL> INSERT INTO STAFF (FK_PROFILE_ID, POSITION) VALUES (2, 'Director'); - -1 row inserted. - -SQL> INSERT INTO STAFF (FK_PROFILE_ID, POSITION) VALUES (3, 'Registrar'); - -1 row inserted. - -SQL> INSERT INTO STAFF (FK_PROFILE_ID, POSITION) VALUES (4, 'Curator'); - -1 row inserted. - -SQL> INSERT INTO STAFF (FK_PROFILE_ID, POSITION) VALUES (5, 'Art Handler'); - -1 row inserted. - -SQL> -SQL> INSERT INTO DOCUMENT (DOCUMENT_ID, DOCUMENT_URL) VALUES (2, 'https://art.com/docs/consignment-stephen-crimson-horizon.pdf'); - -1 row inserted. - -SQL> INSERT INTO DOCUMENT (DOCUMENT_ID, DOCUMENT_URL) VALUES (3, 'https://art.com/docs/consignment-stephen-misty-valley.pdf'); - -1 row inserted. - -SQL> INSERT INTO DOCUMENT (DOCUMENT_ID, DOCUMENT_URL) VALUES (4, 'https://art.com/docs/consignment-stephen-twisted-form.pdf'); - -1 row inserted. - -SQL> INSERT INTO DOCUMENT (DOCUMENT_ID, DOCUMENT_URL) VALUES (5, 'https://art.com/docs/consignment-stephen-blue-symmetry.pdf'); - -1 row inserted. - -SQL> INSERT INTO DOCUMENT (DOCUMENT_ID, DOCUMENT_URL) VALUES (6, 'https://art.com/docs/consignment-henry-urban-solitude.pdf'); - -1 row inserted. - -SQL> INSERT INTO DOCUMENT (DOCUMENT_ID, DOCUMENT_URL) VALUES (7, 'https://art.com/docs/consignment-henry-earth-vessel.pdf'); - -1 row inserted. - -SQL> INSERT INTO DOCUMENT (DOCUMENT_ID, DOCUMENT_URL) VALUES (8, 'https://art.com/docs/consignment-henry-quiet-reflection.pdf'); - -1 row inserted. - -SQL> -SQL> -- Stephen — approved -SQL> INSERT INTO AUTHORIZATION (AUTHORIZATION_STATUS, FK_CONTACT_ID, FK_DOCUMENT_ID, MODIFIED_BY, AUTHORIZATION_DATE, EXPIRATION_DATE) - 2 VALUES ('approved', 6, 2, 1, SYSDATE, SYSDATE + 365); - -1 row inserted. - -SQL> -- Stephen — approved -SQL> INSERT INTO AUTHORIZATION (AUTHORIZATION_STATUS, FK_CONTACT_ID, FK_DOCUMENT_ID, MODIFIED_BY, AUTHORIZATION_DATE, EXPIRATION_DATE) - 2 VALUES ('approved', 6, 3, 1, SYSDATE, SYSDATE + 365); - -1 row inserted. - -SQL> -- Stephen — pending ('pending' status path) -SQL> INSERT INTO AUTHORIZATION (AUTHORIZATION_STATUS, FK_CONTACT_ID, FK_DOCUMENT_ID, MODIFIED_BY, AUTHORIZATION_DATE, EXPIRATION_DATE) - 2 VALUES ('pending', 6, 4, 1, SYSDATE, SYSDATE + 365); - -1 row inserted. - -SQL> -- Stephen — rejected ('rejected' status path) -SQL> INSERT INTO AUTHORIZATION (AUTHORIZATION_STATUS, FK_CONTACT_ID, FK_DOCUMENT_ID, MODIFIED_BY, AUTHORIZATION_DATE, EXPIRATION_DATE) - 2 VALUES ('rejected', 6, 5, 1, SYSDATE, SYSDATE + 30); - -1 row inserted. - -SQL> -- Henry — approved -SQL> INSERT INTO AUTHORIZATION (AUTHORIZATION_STATUS, FK_CONTACT_ID, FK_DOCUMENT_ID, MODIFIED_BY, AUTHORIZATION_DATE, EXPIRATION_DATE) - 2 VALUES ('approved', 7, 6, 1, SYSDATE, SYSDATE + 365); - -1 row inserted. - -SQL> -- Henry — approved -SQL> INSERT INTO AUTHORIZATION (AUTHORIZATION_STATUS, FK_CONTACT_ID, FK_DOCUMENT_ID, MODIFIED_BY, AUTHORIZATION_DATE, EXPIRATION_DATE) - 2 VALUES ('approved', 7, 7, 1, SYSDATE, SYSDATE + 365); - -1 row inserted. - -SQL> -- Henry — approved -SQL> INSERT INTO AUTHORIZATION (AUTHORIZATION_STATUS, FK_CONTACT_ID, FK_DOCUMENT_ID, MODIFIED_BY, AUTHORIZATION_DATE, EXPIRATION_DATE) - 2 VALUES ('approved', 7, 8, 1, SYSDATE, SYSDATE + 365); - -1 row inserted. - -SQL> -- Henry — pending -SQL> INSERT INTO AUTHORIZATION (AUTHORIZATION_STATUS, FK_CONTACT_ID, FK_DOCUMENT_ID, MODIFIED_BY, AUTHORIZATION_DATE, EXPIRATION_DATE) - 2 VALUES ('pending', 7, 7, 1, SYSDATE, SYSDATE + 180); - -1 row inserted. - -SQL> -- Henry — expired (EXPIRATION_DATE in the past) -SQL> INSERT INTO AUTHORIZATION (AUTHORIZATION_STATUS, FK_CONTACT_ID, FK_DOCUMENT_ID, MODIFIED_BY, AUTHORIZATION_DATE, EXPIRATION_DATE) - 2 VALUES ('expired', 7, 8, 1, SYSDATE - 365, SYSDATE - 30); - -1 row inserted. - -SQL> -SQL> -- PLAN Documents for exhibition -SQL> INSERT INTO DOCUMENT (DOCUMENT_ID, DOCUMENT_URL) VALUES (9, 'https://art.com/docs/plan-spring-gala-2025.pdf'); - -1 row inserted. - -SQL> INSERT INTO DOCUMENT (DOCUMENT_ID, DOCUMENT_URL) VALUES (10, 'https://art.com/docs/plan-summer-exhibit-2025.pdf'); - -1 row inserted. - -SQL> INSERT INTO DOCUMENT (DOCUMENT_ID, DOCUMENT_URL) VALUES (11, 'https://art.com/docs/plan-fall-exhibition-2025.pdf'); - -1 row inserted. - -SQL> -SQL> -- PLANS -SQL> INSERT INTO PLAN (DESCRIPTION, FK_DOCUMENT_ID, DURATION, PRICE, MODIFIED_BY) VALUES ('Spring Gala Preview', 9, 4, 75.00, 1); - -1 row inserted. - -SQL> -- PLAN_ID 1 -SQL> INSERT INTO PLAN (DESCRIPTION, FK_DOCUMENT_ID, DURATION, PRICE, MODIFIED_BY) VALUES ('Spring Gala Standard', 9, 8, 120.00, 1); - -1 row inserted. - -SQL> -- PLAN_ID 2 -SQL> INSERT INTO PLAN (DESCRIPTION, FK_DOCUMENT_ID, DURATION, PRICE, MODIFIED_BY) VALUES ('Spring Gala VIP', 9, 12, 250.00, 1); - -1 row inserted. - -SQL> -- PLAN_ID 3 -SQL> INSERT INTO PLAN (DESCRIPTION, FK_DOCUMENT_ID, DURATION, PRICE, MODIFIED_BY) VALUES ('Summer Exhibit Basic', 10, 4, 50.00, 1); - -1 row inserted. - -SQL> -- PLAN_ID 4 -SQL> INSERT INTO PLAN (DESCRIPTION, FK_DOCUMENT_ID, DURATION, PRICE, MODIFIED_BY) VALUES ('Summer Exhibit Plus', 10, 8, 100.00, 1); - -1 row inserted. - -SQL> -- PLAN_ID 5 -SQL> INSERT INTO PLAN (DESCRIPTION, FK_DOCUMENT_ID, DURATION, PRICE, MODIFIED_BY) VALUES ('Summer Exhibit Premium', 10, 16, 200.00, 1); - -1 row inserted. - -SQL> -- PLAN_ID 6 -SQL> INSERT INTO PLAN (DESCRIPTION, FK_DOCUMENT_ID, DURATION, PRICE, MODIFIED_BY) VALUES ('Fall Exhibition Access', 11, 4, 60.00, 1); - -1 row inserted. - -SQL> -- PLAN_ID 7 -SQL> INSERT INTO PLAN (DESCRIPTION, FK_DOCUMENT_ID, DURATION, PRICE, MODIFIED_BY) VALUES ('Fall Exhibition Full Day',11, 8, 110.00, 1); - -1 row inserted. - -SQL> -- PLAN_ID 8 -SQL> INSERT INTO PLAN (DESCRIPTION, FK_DOCUMENT_ID, DURATION, PRICE, MODIFIED_BY) VALUES ('Fall Exhibition Weekend', 11, 24, 180.00, 1); - -1 row inserted. - -SQL> -- PLAN_ID 9 -SQL> INSERT INTO PLAN (DESCRIPTION, FK_DOCUMENT_ID, DURATION, PRICE, MODIFIED_BY) VALUES ('Annual Patron Pass', 11, 200, 500.00, 1); - -1 row inserted. - -SQL> -- PLAN_ID 10 -SQL> -SQL> -- IV 1 — Crimson Horizon -SQL> INSERT INTO INVENTORY (FK_CONTACT_ID, AUTHORIZATION_ID, SKU, PRODUCT_DESCRIPTION, UNIT_COST, LEAD_TIME_DAYS, - 2 PRODUCT_NAME, UNIT_OF_MEASURE, BASE_PRICE, QUANTITY_AVAILABLE, FK_DOCUMENT_ID) - 3 VALUES (6, 1, 'ART-S-001', - 4 'Oil on canvas, abstract expressionism, 24x36', 800.00, 7, - 5 'Crimson Horizon', 'piece', 1200.00, 5, 2); - -1 row inserted. - -SQL> -SQL> -- IV 2 — Misty Valley -SQL> INSERT INTO INVENTORY (FK_CONTACT_ID, AUTHORIZATION_ID, SKU, - 2 PRODUCT_DESCRIPTION, UNIT_COST, LEAD_TIME_DAYS, - 3 PRODUCT_NAME, UNIT_OF_MEASURE, BASE_PRICE, QUANTITY_AVAILABLE, FK_DOCUMENT_ID) - 4 VALUES (6, 2, 'ART-S-002', - 5 'Watercolor on paper, landscape, 18x24', 450.00, 5, - 6 'Misty Valley', 'piece', 700.00, 5, 3); - -1 row inserted. - -SQL> -SQL> -- IV 3 — Twisted Form -SQL> INSERT INTO INVENTORY (FK_CONTACT_ID, AUTHORIZATION_ID, SKU, - 2 PRODUCT_DESCRIPTION, UNIT_COST, LEAD_TIME_DAYS, - 3 PRODUCT_NAME, UNIT_OF_MEASURE, BASE_PRICE, QUANTITY_AVAILABLE, FK_DOCUMENT_ID) - 4 VALUES (6, 3, 'ART-S-003', - 5 'Bronze sculpture, abstract, 12 in height', 1500.00, 14, - 6 'Twisted Form', 'piece', 2200.00, 5, 4); - -1 row inserted. - -SQL> -SQL> -- IV 4 — Blue Symmetry -SQL> INSERT INTO INVENTORY (FK_CONTACT_ID, AUTHORIZATION_ID, SKU, - 2 PRODUCT_DESCRIPTION, UNIT_COST, LEAD_TIME_DAYS, - 3 PRODUCT_NAME, UNIT_OF_MEASURE, BASE_PRICE, QUANTITY_AVAILABLE, FK_DOCUMENT_ID) - 4 VALUES (7, 1, 'ART-S-004', - 5 'Acrylic on canvas, geometric, 30x30', 600.00, 7, - 6 'Blue Symmetry', 'piece', 950.00, 5, 2); - -1 row inserted. - -SQL> -SQL> -- IV 5 — Urban Collage -SQL> INSERT INTO INVENTORY (FK_CONTACT_ID, AUTHORIZATION_ID, SKU, - 2 PRODUCT_DESCRIPTION, UNIT_COST, LEAD_TIME_DAYS, - 3 PRODUCT_NAME, UNIT_OF_MEASURE, BASE_PRICE, QUANTITY_AVAILABLE, FK_DOCUMENT_ID) - 4 VALUES (7, 2, 'ART-S-005', - 5 'Mixed media on board, 20x20', 350.00, 5, - 6 'Urban Collage', 'piece', 550.00, 6, 3); - -1 row inserted. - -SQL> -SQL> -- IV 6 — Urban Solitude -SQL> INSERT INTO INVENTORY (FK_CONTACT_ID, AUTHORIZATION_ID, SKU, - 2 PRODUCT_DESCRIPTION, UNIT_COST, LEAD_TIME_DAYS, - 3 PRODUCT_NAME, UNIT_OF_MEASURE, BASE_PRICE, QUANTITY_AVAILABLE, FK_DOCUMENT_ID) - 4 VALUES (6, 6, 'ART-H-001', - 5 'Photography print, archival, limited ed 1/10', 900.00, 3, - 6 'Urban Solitude', 'piece', 1500.00, 10, 6); - -1 row inserted. - -SQL> -SQL> -- IV 7 — Earth Vessel -SQL> INSERT INTO INVENTORY (FK_CONTACT_ID, AUTHORIZATION_ID, SKU, - 2 PRODUCT_DESCRIPTION, UNIT_COST, LEAD_TIME_DAYS, - 3 PRODUCT_NAME, UNIT_OF_MEASURE, BASE_PRICE, QUANTITY_AVAILABLE, FK_DOCUMENT_ID) - 4 VALUES (7, 7, 'ART-H-002', - 5 'Ceramic vessel, hand-thrown and glazed', 250.00, 10, - 6 'Earth Vessel', 'piece', 420.00, 8, 7); - -1 row inserted. - -SQL> -SQL> -- IV 8 — Quiet Reflection -SQL> INSERT INTO INVENTORY (FK_CONTACT_ID, AUTHORIZATION_ID, SKU, - 2 PRODUCT_DESCRIPTION, UNIT_COST, LEAD_TIME_DAYS, - 3 PRODUCT_NAME, UNIT_OF_MEASURE, BASE_PRICE, QUANTITY_AVAILABLE, FK_DOCUMENT_ID) - 4 VALUES (7, 8, 'ART-H-003', - 5 'Pastel drawing, portrait, 16x20', 300.00, 7, - 6 'Quiet Reflection','piece', 500.00, 4, 8); - -1 row inserted. - -SQL> -SQL> -- IV 9 — Neon Dreams -SQL> INSERT INTO INVENTORY (FK_CONTACT_ID, AUTHORIZATION_ID, SKU, - 2 PRODUCT_DESCRIPTION, UNIT_COST, LEAD_TIME_DAYS, - 3 PRODUCT_NAME, UNIT_OF_MEASURE, BASE_PRICE, QUANTITY_AVAILABLE, FK_DOCUMENT_ID) - 4 VALUES (6, 6, 'ART-H-004', - 5 'Digital print on aluminum, 24x36', 700.00, 5, - 6 'Neon Dreams', 'piece', 1100.00, 6, 6); - -1 row inserted. - -SQL> -SQL> -- IV 10 — Woven Stories -SQL> INSERT INTO INVENTORY (FK_CONTACT_ID, AUTHORIZATION_ID, SKU, - 2 PRODUCT_DESCRIPTION, UNIT_COST, LEAD_TIME_DAYS, - 3 PRODUCT_NAME, UNIT_OF_MEASURE, BASE_PRICE, QUANTITY_AVAILABLE, FK_DOCUMENT_ID) - 4 VALUES (6, 7, 'ART-H-005', - 5 'Textile wall hanging, woven, 36x48', 550.00, 14, - 6 'Woven Stories', 'piece', 850.00, 5, 7); - -1 row inserted. - -SQL> -SQL> INSERT INTO EXHIBIT (FK_INVENTORY_ID, FK_PLAN_ID) VALUES (1, 1); - -1 row inserted. - -SQL> -- Crimson Horizon → Spring Preview -SQL> INSERT INTO EXHIBIT (FK_INVENTORY_ID, FK_PLAN_ID) VALUES (2, 2); - -1 row inserted. - -SQL> -- Misty Valley → Spring Standard -SQL> INSERT INTO EXHIBIT (FK_INVENTORY_ID, FK_PLAN_ID) VALUES (3, 3); - -1 row inserted. - -SQL> -- Twisted Form → Spring VIP -SQL> INSERT INTO EXHIBIT (FK_INVENTORY_ID, FK_PLAN_ID) VALUES (4, 4); - -1 row inserted. - -SQL> -- Blue Symmetry → Summer Basic -SQL> INSERT INTO EXHIBIT (FK_INVENTORY_ID, FK_PLAN_ID) VALUES (5, 5); - -1 row inserted. - -SQL> -- Urban Collage → Summer Plus -SQL> INSERT INTO EXHIBIT (FK_INVENTORY_ID, FK_PLAN_ID) VALUES (6, 6); - -1 row inserted. - -SQL> -- Urban Solitude → Summer Premium -SQL> INSERT INTO EXHIBIT (FK_INVENTORY_ID, FK_PLAN_ID) VALUES (7, 7); - -1 row inserted. - -SQL> -- Earth Vessel → Fall Access -SQL> INSERT INTO EXHIBIT (FK_INVENTORY_ID, FK_PLAN_ID) VALUES (8, 8); - -1 row inserted. - -SQL> -- Quiet Reflection → Fall Full Day -SQL> INSERT INTO EXHIBIT (FK_INVENTORY_ID, FK_PLAN_ID) VALUES (9, 9); - -1 row inserted. - -SQL> -- Neon Dreams → Fall Weekend -SQL> INSERT INTO EXHIBIT (FK_INVENTORY_ID, FK_PLAN_ID) VALUES (10, 10); - -1 row inserted. - -SQL> -- Woven Stories → Annual Pass -SQL> -SQL> -SQL> INSERT INTO INVOICE (FK_CONTACT_ID, FK_PLAN_ID, InvoiceDate, AmountPaid) VALUES (9, 1, DATE'2025-01-01', 75.00); -SUBSCRIPTION transaction. - - -1 row inserted. - -SQL> -- Bob — Spring Preview -SQL> INSERT INTO INVOICE (FK_CONTACT_ID, FK_PLAN_ID, InvoiceDate, AmountPaid) VALUES (10, 2, DATE'2025-01-02', 120.00); -SUBSCRIPTION transaction. - - -1 row inserted. - -SQL> -- Carol — Spring Standard -SQL> INSERT INTO INVOICE (FK_CONTACT_ID, FK_PLAN_ID, InvoiceDate, AmountPaid) VALUES (11, 3, DATE'2025-01-03', 250.00); -SUBSCRIPTION transaction. - - -1 row inserted. - -SQL> -- David — Spring VIP -SQL> INSERT INTO INVOICE (FK_CONTACT_ID, FK_PLAN_ID, InvoiceDate, AmountPaid) VALUES (12, 4, DATE'2025-01-04', 50.00); -SUBSCRIPTION transaction. - - -1 row inserted. - -SQL> -- Emma — Summer Basic -SQL> INSERT INTO INVOICE (FK_CONTACT_ID, FK_PLAN_ID, InvoiceDate, AmountPaid) VALUES (9, 5, DATE'2025-01-05', 100.00); -SUBSCRIPTION transaction. - - -1 row inserted. - -SQL> -- Bob — Summer Plus -SQL> INSERT INTO INVOICE (FK_CONTACT_ID, FK_PLAN_ID, InvoiceDate, AmountPaid) VALUES (10, 6, DATE'2025-01-06', 150.00); -SUBSCRIPTION transaction. - - -1 row inserted. - -SQL> -- Carol — Summer Premium -SQL> INSERT INTO INVOICE (FK_CONTACT_ID, FK_PLAN_ID, InvoiceDate, AmountPaid) VALUES (11, 7, DATE'2025-01-07', 60.00); -SUBSCRIPTION transaction. - - -1 row inserted. - -SQL> -- David — Fall Access -SQL> INSERT INTO INVOICE (FK_CONTACT_ID, FK_PLAN_ID, InvoiceDate, AmountPaid) VALUES (12, 8, DATE'2025-01-08', 110.00); -SUBSCRIPTION transaction. - - -1 row inserted. - -SQL> -- Emma — Fall Full Day -SQL> INSERT INTO INVOICE (FK_CONTACT_ID, FK_PLAN_ID, InvoiceDate, AmountPaid) VALUES (9, 9, DATE'2025-01-09', 180.00); -SUBSCRIPTION transaction. - - -1 row inserted. - -SQL> -- Bob — Fall Weekend -SQL> INSERT INTO INVOICE (FK_CONTACT_ID, FK_PLAN_ID, InvoiceDate, AmountPaid) VALUES (10, 10, DATE'2025-01-10', 500.00); -SUBSCRIPTION transaction. - - -1 row inserted. - -SQL> -- Carol — Annual Pass -SQL> -SQL> / diff --git a/schema/Price_Sherwin_DML_output.txt b/schema/Price_Sherwin_DML_output.txt deleted file mode 100755 index 7b70073..0000000 --- a/schema/Price_Sherwin_DML_output.txt +++ /dev/null @@ -1,435 +0,0 @@ -SQL> -- ORACLE SQL DML: SCHEMA C##ART -SQL> SET ECHO ON; -SQL> SET SERVEROUTPUT ON; -SQL> SET PAGESIZE 30; -SQL> SET HEADING ON; -SQL> -SQL> -- 20 Queries -SQL> -- Q1: Select all columns and all rows from one table -SQL> SELECT * FROM ROLE; - - ROLE_ID ROLENAME ----------- ---------------- - 100 SYSTEM - 200 SUPPLIER - 300 STAFF - 400 CUSTOMER - -SQL> -SQL> -- Q2: Select five columns and all rows from one table -SQL> SELECT CONTACT_ID, FIRST_NAME, LAST_NAME, PHONE_NO, EMAIL FROM CONTACT; - -CONTACT_ID FIRST_NAME LAST_NAME PHONE_NO EMAIL ----------- ---------------- ---------------- ------------ ---------------------------------------------------------------- - 1 ART SYSTEM 000-1234 arts@art.com - 2 Alice Johnson 650-555-9012 alice.johnson@art.com - 3 Karen Park 206-555-0110 karen.park@art.com - 4 Jeese Taylor 713-555-0106 grace.taylor@art.com - 5 James Lee 206-555-0109 james.lee@art.com - 6 Stephen Alec 424-546-9312 salec@eizel.com - 7 Henry Martinez 602-555-0107 henry@artsupply.com - 8 Carol White 212-555-0102 carol.white@mail.com - 9 Bob Smith 212-555-0101 bob.smith@mail.com - 10 David Brown 312-555-0103 david.brown@mail.com - 11 Emma Davis 312-555-0104 emma.davis@mail.com - 12 Frank Wilson 713-555-0105 frank.wilson@mail.com - -12 rows selected. - -SQL> -SQL> -- Q3: Select all columns from all rows from one view -SQL> SELECT * FROM VIEW_AVAILABLE_INVENTORY; -no rows selected -SQL> -SQL> -- Q4: Using a join on 2 tables, select all columns and all rows from the tables without the use of a Cartesian product -SQL> SELECT * FROM CONTACT ct - 2 JOIN ADDRESS ad ON ad.FK_CONTACT_ID=ct.CONTACT_ID; - -CONTACT_ID FIRST_NAME LAST_NAME PHONE_NO EMAIL MODIFIED_BY CREATED_DT MODIFIED_DT ZIP FK_CONTACT_ID STREET ----------- ---------------- ---------------- ------------ ---------------------------------------------------------------- ----------- ------------------------------- ------------------------------- ----- ------------- -------------------------------- - 1 ART SYSTEM 000-1234 arts@art.com 1 28-MAR-26 02.36.34.000000000 AM 28-MAR-26 02.36.34.000000000 AM 94027 1 789 Oak St, suite 10 - 2 Alice Johnson 650-555-9012 alice.johnson@art.com 1 28-MAR-26 02.36.34.000000000 AM 28-MAR-26 02.36.34.000000000 AM 94027 2 789 Oak St, suite 15 - 3 Karen Park 206-555-0110 karen.park@art.com 1 28-MAR-26 02.36.34.000000000 AM 28-MAR-26 02.36.34.000000000 AM 94027 3 789 Oak St, suite 1 - 4 Jeese Taylor 713-555-0106 grace.taylor@art.com 1 28-MAR-26 02.36.34.000000000 AM 28-MAR-26 02.36.34.000000000 AM 94027 4 789 Oak St, suite 5 - 5 James Lee 206-555-0109 james.lee@art.com 1 28-MAR-26 02.36.34.000000000 AM 28-MAR-26 02.36.34.000000000 AM 94027 5 789 Oak St, suite 15 - 6 Stephen Alec 424-546-9312 salec@eizel.com 1 28-MAR-26 02.36.34.000000000 AM 28-MAR-26 02.36.34.000000000 AM 90210 6 890 Venue Rd - 7 Henry Martinez 602-555-0107 henry@artsupply.com 1 28-MAR-26 02.36.34.000000000 AM 28-MAR-26 02.36.34.000000000 AM 90210 7 200 Sunset Blvd - 8 Carol White 212-555-0102 carol.white@mail.com 1 28-MAR-26 02.36.34.000000000 AM 28-MAR-26 02.36.34.000000000 AM 10001 8 100 Broadway - 9 Bob Smith 212-555-0101 bob.smith@mail.com 1 28-MAR-26 02.36.34.000000000 AM 28-MAR-26 02.36.34.000000000 AM 60601 9 300 Michigan Ave - 10 David Brown 312-555-0103 david.brown@mail.com 1 28-MAR-26 02.36.34.000000000 AM 28-MAR-26 02.36.34.000000000 AM 77001 10 400 Main St - 11 Emma Davis 312-555-0104 emma.davis@mail.com 1 28-MAR-26 02.36.34.000000000 AM 28-MAR-26 02.36.34.000000000 AM 85001 11 500 Central Ave - 12 Frank Wilson 713-555-0105 frank.wilson@mail.com 1 28-MAR-26 02.36.34.000000000 AM 28-MAR-26 02.36.34.000000000 AM 98101 12 600 Pike St - -12 rows selected. - -SQL> -SQL> -- Q5: 5: Select and order data retrieved from one table -SQL> SELECT * FROM ZIP ORDER BY 1; - -ZIP CITY ST ------ ---------------- -- -02101 Boston MA -10001 New York NY -33101 Miami FL -60601 Chicago IL -77001 Houston TX -85001 Phoenix AZ -90210 Beverly Hills CA -90211 Los Angeles CA -94027 Atherton CA -98101 Seattle WA - -10 rows selected. - -SQL> -SQL> -- Q6: Using a join on 3 tables, select 5 columns from the 3 tables. Use syntax that would limit the output to 10 rows -SQL> SELECT iv.SKU, iv.PRODUCT_NAME,iv.BASE_PRICE,iv.LEAD_TIME_DAYS, iv.QUANTITY_AVAILABLE, - 2 au.AUTHORIZATION_STATUS, au.EXPIRATION_DATE, au.AUTHORIZATION_DATE, c.*, au.FK_DOCUMENT_ID - 3 FROM INVENTORY iv - 4 JOIN "AUTHORIZATION" au ON au.AUTHORIZATION_ID = iv.AUTHORIZATION_ID - 5 join CONTACT c ON c.CONTACT_ID= iv.FK_CONTACT_ID - 6 FETCH FIRST 10 ROWS ONLY; - -SKU PRODUCT_NAME BASE_PRICE LEAD_TIME_DAYS QUANTITY_AVAILABLE AUTHORIZATION_ST EXPIRATION_DATE AUTHORIZATION_DATE CONTACT_ID FIRST_NAME LAST_NAME PHONE_NO EMAIL MODIFIED_BY CREATED_DT MODIFIED_DT FK_DOCUMENT_ID ----------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------- ---------- -------------- ------------------ ---------------- ------------------------------- ------------------------------- ---------- ---------------- ---------------- ------------ ---------------------------------------------------------------- ----------- ------------------------------- ------------------------------- -------------- -ART-S-001 Crimson Horizon 1200 7 5 approved 28-MAR-27 02.36.34.000000000 AM 28-MAR-26 02.36.34.000000000 AM 6 Stephen Alec 424-546-9312 salec@eizel.com 1 28-MAR-26 02.36.34.000000000 AM 28-MAR-26 02.36.34.000000000 AM 2 -ART-S-002 Misty Valley 700 5 5 approved 28-MAR-27 02.36.34.000000000 AM 28-MAR-26 02.36.34.000000000 AM 6 Stephen Alec 424-546-9312 salec@eizel.com 1 28-MAR-26 02.36.34.000000000 AM 28-MAR-26 02.36.34.000000000 AM 3 -ART-S-003 Twisted Form 2200 14 5 pending 28-MAR-27 02.36.34.000000000 AM 28-MAR-26 02.36.34.000000000 AM 6 Stephen Alec 424-546-9312 salec@eizel.com 1 28-MAR-26 02.36.34.000000000 AM 28-MAR-26 02.36.34.000000000 AM 4 -ART-H-001 Urban Solitude 1500 3 10 approved 28-MAR-27 02.36.34.000000000 AM 28-MAR-26 02.36.34.000000000 AM 6 Stephen Alec 424-546-9312 salec@eizel.com 1 28-MAR-26 02.36.34.000000000 AM 28-MAR-26 02.36.34.000000000 AM 7 -ART-H-004 Neon Dreams 1100 5 6 approved 28-MAR-27 02.36.34.000000000 AM 28-MAR-26 02.36.34.000000000 AM 6 Stephen Alec 424-546-9312 salec@eizel.com 1 28-MAR-26 02.36.34.000000000 AM 28-MAR-26 02.36.34.000000000 AM 7 -ART-H-005 Woven Stories 850 14 5 approved 28-MAR-27 02.36.34.000000000 AM 28-MAR-26 02.36.34.000000000 AM 6 Stephen Alec 424-546-9312 salec@eizel.com 1 28-MAR-26 02.36.34.000000000 AM 28-MAR-26 02.36.34.000000000 AM 8 -ART-S-004 Blue Symmetry 950 7 5 approved 28-MAR-27 02.36.34.000000000 AM 28-MAR-26 02.36.34.000000000 AM 7 Henry Martinez 602-555-0107 henry@artsupply.com 1 28-MAR-26 02.36.34.000000000 AM 28-MAR-26 02.36.34.000000000 AM 2 -ART-S-005 Urban Collage 550 5 6 approved 28-MAR-27 02.36.34.000000000 AM 28-MAR-26 02.36.34.000000000 AM 7 Henry Martinez 602-555-0107 henry@artsupply.com 1 28-MAR-26 02.36.34.000000000 AM 28-MAR-26 02.36.34.000000000 AM 3 -ART-H-002 Earth Vessel 420 10 8 approved 28-MAR-27 02.36.34.000000000 AM 28-MAR-26 02.36.34.000000000 AM 7 Henry Martinez 602-555-0107 henry@artsupply.com 1 28-MAR-26 02.36.34.000000000 AM 28-MAR-26 02.36.34.000000000 AM 8 -ART-H-003 Quiet Reflection 500 7 4 pending 24-SEP-26 02.36.34.000000000 AM 28-MAR-26 02.36.34.000000000 AM 7 Henry Martinez 602-555-0107 henry@artsupply.com 1 28-MAR-26 02.36.34.000000000 AM 28-MAR-26 02.36.34.000000000 AM 7 - -10 rows selected. - -SQL> -SQL> --Q7: Select distinct rows using joins on 3 tables -SQL> SELECT DISTINCT iv.SKU, iv.PRODUCT_NAME,iv.BASE_PRICE,iv.LEAD_TIME_DAYS, iv.QUANTITY_AVAILABLE, - 2 au.AUTHORIZATION_STATUS, au.EXPIRATION_DATE, au.AUTHORIZATION_DATE, au.FK_CONTACT_ID, au.FK_DOCUMENT_ID, - 3 oi.ORDER_ITEM_ID, oi.QUANTITY, oi.UNIT_PRICE, oi.TRANSACTION_ID, oi.LINE_TOTAL - 4 FROM INVENTORY iv - 5 JOIN "AUTHORIZATION" au ON au.AUTHORIZATION_ID = iv.AUTHORIZATION_ID - 6 JOIN ORDER_ITEMS oi ON oi.FK_INVENTORY_ID = iv.INVENTORY_ID; -no rows selected -SQL> -SQL> -- Q8: Use GROUP BY and HAVING in a select statement using one or more tables -SQL> SELECT iv.SKU - 2 FROM INVENTORY iv - 3 JOIN "AUTHORIZATION" au ON au.AUTHORIZATION_ID = iv.AUTHORIZATION_ID - 4 JOIN ORDER_ITEMS oi ON oi.FK_INVENTORY_ID = iv.INVENTORY_ID - 5 GROUP BY iv.SKU, iv.QUANTITY_AVAILABLE HAVING iv.QUANTITY_AVAILABLE > 0; -no rows selected -SQL> -SQL> -- Q9: Use IN clause to select data from one or more tables -SQL> SELECT * FROM PROFILE pf JOIN USERROLE ur ON pf.PROFILE_ID = ur.FK_PROFILE_ID WHERE ur.FK_ROLE_ID IN (100, 200, 300); - -PROFILE_ID FK_CONTACT_ID ACTIV MODIFIED_BY CREATED_DT MODIFIED_DT FK_PROFILE_ID FK_ROLE_ID PASSWORDHASH ----------- ------------- ----- ----------- ------------------------------- ------------------------------- ------------- ---------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - 1 1 true 1 28-MAR-26 02.36.34.000000000 AM 28-MAR-26 02.36.34.000000000 AM 1 100 - 2 2 true 2 28-MAR-26 02.36.34.000000000 AM 28-MAR-26 02.36.34.000000000 AM 2 300 - 3 3 true 3 28-MAR-26 02.36.34.000000000 AM 28-MAR-26 02.36.34.000000000 AM 3 300 - 4 4 true 1 28-MAR-26 02.36.34.000000000 AM 28-MAR-26 02.36.34.000000000 AM 4 300 - 5 5 true 1 28-MAR-26 02.36.34.000000000 AM 28-MAR-26 02.36.34.000000000 AM 5 300 - 6 6 true 1 28-MAR-26 02.36.34.000000000 AM 28-MAR-26 02.36.34.000000000 AM 6 200 - 7 7 true 1 28-MAR-26 02.36.34.000000000 AM 28-MAR-26 02.36.34.000000000 AM 7 200 - -7 rows selected. - -SQL> -SQL> -- Q10: Select length of one column from one table (use LENGTH function) -SQL> SELECT LENGTH(ROLENAME) FROM ROLE; - -LENGTH(ROLENAME) ----------------- - 6 - 8 - 5 - 8 - -SQL> -SQL> -- Q11: Delete one record from one table. ROLLBACK afterwards so that the data will not be physically removed. -SQL> SAVEPOINT sp1; - -Savepoint created. - -SQL> -SQL> SELECT * FROM PROFILE pf JOIN USERROLE ur ON pf.PROFILE_ID = ur.FK_PROFILE_ID WHERE ur.FK_ROLE_ID IN (100, 200, 300); - -PROFILE_ID FK_CONTACT_ID ACTIV MODIFIED_BY CREATED_DT MODIFIED_DT FK_PROFILE_ID FK_ROLE_ID PASSWORDHASH ----------- ------------- ----- ----------- ------------------------------- ------------------------------- ------------- ---------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - 1 1 true 1 28-MAR-26 02.36.34.000000000 AM 28-MAR-26 02.36.34.000000000 AM 1 100 - 2 2 true 2 28-MAR-26 02.36.34.000000000 AM 28-MAR-26 02.36.34.000000000 AM 2 300 - 3 3 true 3 28-MAR-26 02.36.34.000000000 AM 28-MAR-26 02.36.34.000000000 AM 3 300 - 4 4 true 1 28-MAR-26 02.36.34.000000000 AM 28-MAR-26 02.36.34.000000000 AM 4 300 - 5 5 true 1 28-MAR-26 02.36.34.000000000 AM 28-MAR-26 02.36.34.000000000 AM 5 300 - 6 6 true 1 28-MAR-26 02.36.34.000000000 AM 28-MAR-26 02.36.34.000000000 AM 6 200 - 7 7 true 1 28-MAR-26 02.36.34.000000000 AM 28-MAR-26 02.36.34.000000000 AM 7 200 - -7 rows selected. - -SQL> DELETE USERROLE WHERE FK_PROFILE_ID=3 AND FK_ROLE_ID=300; - -1 row deleted. - -SQL> SELECT * FROM PROFILE pf JOIN USERROLE ur ON pf.PROFILE_ID = ur.FK_PROFILE_ID WHERE ur.FK_ROLE_ID IN (100, 200, 300); - -PROFILE_ID FK_CONTACT_ID ACTIV MODIFIED_BY CREATED_DT MODIFIED_DT FK_PROFILE_ID FK_ROLE_ID PASSWORDHASH ----------- ------------- ----- ----------- ------------------------------- ------------------------------- ------------- ---------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - 1 1 true 1 28-MAR-26 02.36.34.000000000 AM 28-MAR-26 02.36.34.000000000 AM 1 100 - 2 2 true 2 28-MAR-26 02.36.34.000000000 AM 28-MAR-26 02.36.34.000000000 AM 2 300 - 4 4 true 1 28-MAR-26 02.36.34.000000000 AM 28-MAR-26 02.36.34.000000000 AM 4 300 - 5 5 true 1 28-MAR-26 02.36.34.000000000 AM 28-MAR-26 02.36.34.000000000 AM 5 300 - 6 6 true 1 28-MAR-26 02.36.34.000000000 AM 28-MAR-26 02.36.34.000000000 AM 6 200 - 7 7 true 1 28-MAR-26 02.36.34.000000000 AM 28-MAR-26 02.36.34.000000000 AM 7 200 - -6 rows selected. - -SQL> -SQL> ROLLBACK TO SAVEPOINT sp1; - -Rollback complete. - -SQL> -SQL> -- Q12: Update one record from one table. demonstrate table contents before and after the UPDATE. -SQL> SELECT * FROM PROFILE WHERE PROFILE_ID=3; - -PROFILE_ID FK_CONTACT_ID ACTIV MODIFIED_BY CREATED_DT MODIFIED_DT ----------- ------------- ----- ----------- ------------------------------- ------------------------------- - 3 3 true 3 28-MAR-26 02.36.34.000000000 AM 28-MAR-26 02.36.34.000000000 AM - -SQL> UPDATE PROFILE SET ACTIVE = FALSE WHERE PROFILE_ID=3; - -1 row updated. - -SQL> SELECT * FROM PROFILE WHERE PROFILE_ID=3; - -PROFILE_ID FK_CONTACT_ID ACTIV MODIFIED_BY CREATED_DT MODIFIED_DT ----------- ------------- ----- ----------- ------------------------------- ------------------------------- - 3 3 false 3 28-MAR-26 02.36.34.000000000 AM 28-MAR-26 02.36.34.000000000 AM - -SQL> -SQL> ROLLBACK TO SAVEPOINT sp1; - -Rollback complete. - -SQL> COMMIT; - -Commit complete. - -SQL> -SQL> -- Q13: Plans show -SQL> SELECT * FROM PLAN pl - 2 LEFT OUTER JOIN DOCUMENT doc ON pl.FK_DOCUMENT_ID = doc.DOCUMENT_ID; - - PLAN_ID DESCRIPTION FK_DOCUMENT_ID DURATION PRICE MODIFIED_BY CREATED_DT MODIFIED_DT DOCUMENT_ID DOCUMENT_URL ----------- -------------------------------- -------------- ---------- ---------- ----------- ------------------------------- ------------------------------- ----------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - 1 Spring Gala Preview 9 4 75 1 28-MAR-26 02.36.34.000000000 AM 28-MAR-26 02.36.34.000000000 AM 9 https://art.com/docs/plan-spring-gala-2025.pdf - 2 Spring Gala Standard 9 8 120 1 28-MAR-26 02.36.34.000000000 AM 28-MAR-26 02.36.34.000000000 AM 9 https://art.com/docs/plan-spring-gala-2025.pdf - 3 Spring Gala VIP 9 12 250 1 28-MAR-26 02.36.34.000000000 AM 28-MAR-26 02.36.34.000000000 AM 9 https://art.com/docs/plan-spring-gala-2025.pdf - 4 Summer Exhibit Basic 10 4 50 1 28-MAR-26 02.36.34.000000000 AM 28-MAR-26 02.36.34.000000000 AM 10 https://art.com/docs/plan-summer-exhibit-2025.pdf - 5 Summer Exhibit Plus 10 8 100 1 28-MAR-26 02.36.34.000000000 AM 28-MAR-26 02.36.34.000000000 AM 10 https://art.com/docs/plan-summer-exhibit-2025.pdf - 6 Summer Exhibit Premium 10 16 200 1 28-MAR-26 02.36.34.000000000 AM 28-MAR-26 02.36.34.000000000 AM 10 https://art.com/docs/plan-summer-exhibit-2025.pdf - 7 Fall Exhibition Access 11 4 60 1 28-MAR-26 02.36.34.000000000 AM 28-MAR-26 02.36.34.000000000 AM 11 https://art.com/docs/plan-fall-exhibition-2025.pdf - 8 Fall Exhibition Full Day 11 8 110 1 28-MAR-26 02.36.34.000000000 AM 28-MAR-26 02.36.34.000000000 AM 11 https://art.com/docs/plan-fall-exhibition-2025.pdf - 9 Fall Exhibition Weekend 11 24 180 1 28-MAR-26 02.36.34.000000000 AM 28-MAR-26 02.36.34.000000000 AM 11 https://art.com/docs/plan-fall-exhibition-2025.pdf - 10 Annual Patron Pass 11 200 500 1 28-MAR-26 02.36.34.000000000 AM 28-MAR-26 02.36.34.000000000 AM 11 https://art.com/docs/plan-fall-exhibition-2025.pdf - -10 rows selected. - -SQL> -SQL> -- Q14: show authorized suppliers whose expiration date is greater than 30 days from now. -SQL> SELECT * FROM VIEW_SUPPLIER vsu - 2 LEFT OUTER JOIN AUTHORIZATION aut ON aut.FK_CONTACT_ID = vsu.FK_CONTACT_ID - 3 WHERE aut.AUTHORIZATION_STATUS='approved' AND aut.EXPIRATION_DATE > SYSDATE+30; - -FK_PROFILE_ID FK_CONTACT_ID ROLENAME ACTIV FIRST_NAME LAST_NAME AUTHORIZATION_ID FK_CONTACT_ID AUTHORIZATION_ST AUTHORIZATION_DATE EXPIRATION_DATE FK_DOCUMENT_ID MODIFIED_BY CREATED_DT MODIFIED_DT -------------- ------------- ---------------- ----- ---------------- ---------------- ---------------- ------------- ---------------- ------------------------------- ------------------------------- -------------- ----------- ------------------------------- ------------------------------- - 6 6 SUPPLIER true Stephen Alec 1 6 approved 28-MAR-26 02.36.34.000000000 AM 28-MAR-27 02.36.34.000000000 AM 2 1 28-MAR-26 02.36.34.000000000 AM 28-MAR-26 02.36.34.000000000 AM - 6 6 SUPPLIER true Stephen Alec 2 6 approved 28-MAR-26 02.36.34.000000000 AM 28-MAR-27 02.36.34.000000000 AM 3 1 28-MAR-26 02.36.34.000000000 AM 28-MAR-26 02.36.34.000000000 AM - 7 7 SUPPLIER true Henry Martinez 5 7 approved 28-MAR-26 02.36.34.000000000 AM 28-MAR-27 02.36.34.000000000 AM 6 1 28-MAR-26 02.36.34.000000000 AM 28-MAR-26 02.36.34.000000000 AM - 7 7 SUPPLIER true Henry Martinez 6 7 approved 28-MAR-26 02.36.34.000000000 AM 28-MAR-27 02.36.34.000000000 AM 7 1 28-MAR-26 02.36.34.000000000 AM 28-MAR-26 02.36.34.000000000 AM - 7 7 SUPPLIER true Henry Martinez 7 7 approved 28-MAR-26 02.36.34.000000000 AM 28-MAR-27 02.36.34.000000000 AM 8 1 28-MAR-26 02.36.34.000000000 AM 28-MAR-26 02.36.34.000000000 AM - -SQL> -SQL> -- Q15: -SQL> SELECT r.ROLENAME, ct.FIRST_NAME, ct.LAST_NAME, pl.DESCRIPTION FROM SUBSCRIPTION srp - 2 LEFT OUTER JOIN CONTACT ct ON srp.FK_CONTACT_ID = ct.CONTACT_ID - 3 LEFT OUTER JOIN PROFILE pf ON pf.FK_CONTACT_ID = ct.CONTACT_ID - 4 LEFT OUTER JOIN USERROLE ur ON ur.FK_PROFILE_ID = pf.PROFILE_ID - 5 LEFT OUTER JOIN ROLE r ON r.ROLE_ID = ur.FK_ROLE_ID - 6 LEFT OUTER JOIN PLAN pl ON srp.FK_PLAN_ID = pl.PLAN_ID; - -ROLENAME FIRST_NAME LAST_NAME DESCRIPTION ----------------- ---------------- ---------------- -------------------------------- -CUSTOMER Bob Smith Spring Gala Preview -CUSTOMER Bob Smith Summer Exhibit Plus -CUSTOMER Bob Smith Fall Exhibition Weekend -CUSTOMER David Brown Spring Gala Standard -CUSTOMER David Brown Summer Exhibit Premium -CUSTOMER David Brown Annual Patron Pass -CUSTOMER Emma Davis Spring Gala VIP -CUSTOMER Emma Davis Fall Exhibition Access -CUSTOMER Frank Wilson Summer Exhibit Basic -CUSTOMER Frank Wilson Fall Exhibition Full Day - -10 rows selected. - -SQL> -SQL> -- Q16: -SQL> SELECT ct.FIRST_NAME, ct.LAST_NAME, adr.STREET, z.CITY, z.STATE, z.ZIP - 2 FROM ADDRESS adr - 3 LEFT OUTER JOIN CONTACT ct ON adr.FK_CONTACT_ID = ct.CONTACT_ID - 4 LEFT OUTER JOIN ZIP z ON adr.ZIP = z.ZIP; - -FIRST_NAME LAST_NAME STREET CITY ST ZIP ----------------- ---------------- -------------------------------- ---------------- -- ----- -ART SYSTEM 789 Oak St, suite 10 Atherton CA 94027 -Alice Johnson 789 Oak St, suite 15 Atherton CA 94027 -Karen Park 789 Oak St, suite 1 Atherton CA 94027 -Jeese Taylor 789 Oak St, suite 5 Atherton CA 94027 -James Lee 789 Oak St, suite 15 Atherton CA 94027 -Stephen Alec 890 Venue Rd Beverly Hills CA 90210 -Henry Martinez 200 Sunset Blvd Beverly Hills CA 90210 -Carol White 100 Broadway New York NY 10001 -Bob Smith 300 Michigan Ave Chicago IL 60601 -David Brown 400 Main St Houston TX 77001 -Emma Davis 500 Central Ave Phoenix AZ 85001 -Frank Wilson 600 Pike St Seattle WA 98101 - -12 rows selected. - -SQL> -SQL> -- Q17: -SQL> SELECT COALESCE(vws.ROLENAME, vwsp.ROLENAME, vwc.ROLENAME, vwsys.ROLENAME) AS ROLENAME, - 2 COALESCE(vws.ACTIVE, vwsp.ACTIVE, vwc.ACTIVE, vwsys.ACTIVE) AS ACTIVE, - 3 ct.FIRST_NAME, ct.LAST_NAME, adr.STREET, z.CITY, z.STATE, z.ZIP - 4 FROM ADDRESS adr - 5 LEFT OUTER JOIN CONTACT ct ON adr.FK_CONTACT_ID = ct.CONTACT_ID - 6 LEFT OUTER JOIN ZIP z ON adr.ZIP = z.ZIP - 7 LEFT OUTER JOIN VIEW_STAFF vws ON vws.FK_CONTACT_ID = ct.CONTACT_ID - 8 LEFT OUTER JOIN VIEW_SUPPLIER vwsp ON vwsp.FK_CONTACT_ID = ct.CONTACT_ID - 9 LEFT OUTER JOIN VIEW_CUSTOMER vwc ON vwc.FK_CONTACT_ID = ct.CONTACT_ID - 10 LEFT OUTER JOIN VIEW_SYSTEMROLE vwsys ON vwsys.FK_CONTACT_ID = ct.CONTACT_ID; - -ROLENAME ACTIV FIRST_NAME LAST_NAME STREET CITY ST ZIP ----------------- ----- ---------------- ---------------- -------------------------------- ---------------- -- ----- -CUSTOMER false Carol White 100 Broadway New York NY 10001 -CUSTOMER true Bob Smith 300 Michigan Ave Chicago IL 60601 -CUSTOMER true David Brown 400 Main St Houston TX 77001 -CUSTOMER true Emma Davis 500 Central Ave Phoenix AZ 85001 -CUSTOMER true Frank Wilson 600 Pike St Seattle WA 98101 -SUPPLIER true Stephen Alec 890 Venue Rd Beverly Hills CA 90210 -SUPPLIER true Henry Martinez 200 Sunset Blvd Beverly Hills CA 90210 -SYSTEM true ART SYSTEM 789 Oak St, suite 10 Atherton CA 94027 -STAFF true Alice Johnson 789 Oak St, suite 15 Atherton CA 94027 -STAFF true Jeese Taylor 789 Oak St, suite 5 Atherton CA 94027 -STAFF true James Lee 789 Oak St, suite 15 Atherton CA 94027 -STAFF true Karen Park 789 Oak St, suite 1 Atherton CA 94027 - -12 rows selected. - -SQL> -SQL> -- Q18: Verify rows in tables -SQL> SELECT 'CONTACT' AS TABLE_NAME, COUNT(*) AS ROW_COUNT FROM CONTACT UNION ALL - 2 SELECT 'ZIP', COUNT(*) FROM ZIP UNION ALL - 3 SELECT 'ADDRESS', COUNT(*) FROM ADDRESS UNION ALL - 4 SELECT 'ROLE', COUNT(*) FROM ROLE UNION ALL - 5 SELECT 'PROFILE', COUNT(*) FROM PROFILE UNION ALL - 6 SELECT 'USERROLE', COUNT(*) FROM USERROLE UNION ALL - 7 SELECT 'STAFF', COUNT(*) FROM STAFF UNION ALL - 8 SELECT 'DOCUMENT', COUNT(*) FROM DOCUMENT UNION ALL - 9 SELECT 'AUTHORIZATION', COUNT(*) FROM AUTHORIZATION UNION ALL - 10 SELECT 'PLAN', COUNT(*) FROM PLAN UNION ALL - 11 SELECT 'INVENTORY', COUNT(*) FROM INVENTORY UNION ALL - 12 SELECT 'EXHIBIT', COUNT(*) FROM EXHIBIT UNION ALL - 13 SELECT 'ORDER_ITEMS', COUNT(*) FROM ORDER_ITEMS UNION ALL - 14 SELECT 'INVOICE', COUNT(*) FROM INVOICE UNION ALL - 15 SELECT 'SUBSCRIPTION', COUNT(*) FROM SUBSCRIPTION UNION ALL - 16 SELECT 'TASK_HISTORY', COUNT(*) FROM TASK_HISTORY - 17 ORDER BY TABLE_NAME; - -TABLE_NAME ROW_COUNT -------------- ---------- -ADDRESS 12 -AUTHORIZATION 9 -CONTACT 12 -DOCUMENT 10 -EXHIBIT 10 -INVENTORY 10 -INVOICE 10 -ORDER_ITEMS 0 -PLAN 10 -PROFILE 12 -ROLE 4 -STAFF 4 -SUBSCRIPTION 10 -TASK_HISTORY 0 -USERROLE 12 -ZIP 10 - -16 rows selected. - -SQL> -SQL> -- Q19: rough check uniqueness: across tables columns -SQL> SELECT RPAD(idx.TABLE_NAME,15,' '), COUNT( col.column_name ), COUNT( col.TABLE_NAME ) - 2 FROM user_indexes idx - 3 JOIN user_ind_columns col ON ( col.index_name = idx.index_name ) - 4 WHERE idx.uniqueness = 'UNIQUE' - 5 GROUP BY idx.TABLE_NAME; - -RPAD(IDX.TABLE_ COUNT(COL.COLUMN_NAME) COUNT(COL.TABLE_NAME) ---------------- ---------------------- --------------------- -CONTACT 1 1 -ZIP 1 1 -ADDRESS 2 2 -ROLE 1 1 -PROFILE 1 1 -USERROLE 2 2 -STAFF 1 1 -DOCUMENT 1 1 -PLAN 1 1 -SUBSCRIPTION 2 2 -INVOICE 1 1 -AUTHORIZATION 1 1 -INVENTORY 3 3 -EXHIBIT 1 1 -ORDER_ITEMS 1 1 -TASK_HISTORY 1 1 - -16 rows selected. - -SQL> -SQL> -- Q20: Likely weak entity tables; -SQL> SELECT pk.table_name - 2 -- LISTAGG(pk.column_name, ', ') WITHIN GROUP (ORDER BY pk.position) AS primary_key_columns, - 3 -- LISTAGG(fk.column_name, ', ') WITHIN GROUP (ORDER BY fk.position) AS foreign_key_columns - 4 FROM all_cons_columns pk - 5 JOIN all_constraints pkc - 6 ON pk.constraint_name = pkc.constraint_name - 7 AND pk.owner = pkc.owner - 8 JOIN all_cons_columns fk - 9 ON pk.table_name = fk.table_name - 10 AND pk.owner = fk.owner - 11 JOIN all_constraints fkc - 12 ON fk.constraint_name = fkc.constraint_name - 13 AND fk.owner = fkc.owner - 14 WHERE pkc.constraint_type = 'P' -- Primary key - 15 AND fkc.constraint_type = 'R' -- Foreign key - 16 AND pk.column_name = fk.column_name -- PK column is also FK column - 17 AND pk.owner = USER - 18 GROUP BY pk.table_name - 19 ORDER BY pk.table_name; - -TABLE_NAME --------------------------------------------------------------------------------------------------------------------------------- -ADDRESS -STAFF -SUBSCRIPTION -USERROLE - -SQL> -- CREATE SCHEMA -SQL> -SQL> / diff --git a/schema/schema_art_DDL.sql b/schema/schema_art_DDL.sql new file mode 100755 index 0000000..330f429 --- /dev/null +++ b/schema/schema_art_DDL.sql @@ -0,0 +1,388 @@ +-- CREATE SCHEMA +/* +-- DROP SCHEMA art CASCADE; + +CREATE SCHEMA art AUTHORIZATION sherwinp; + +*/ + +-- POSTGRESQL SQL SCHEMA DDL: art +SET search_path TO art; + +-- art."document" definition + +-- Drop table + +-- DROP TABLE "document"; + +CREATE TABLE "document" ( + document_id int4 GENERATED ALWAYS AS IDENTITY NOT NULL, + document_url varchar(254) NOT NULL, + CONSTRAINT pk_document PRIMARY KEY (document_id) +); + + +-- art.zip definition + +-- Drop table + +-- DROP TABLE zip; + +CREATE TABLE zip ( + zip varchar(5) NOT NULL, + city varchar(16) NULL, + state varchar(2) NULL, + CONSTRAINT pk_zip PRIMARY KEY (zip), + CONSTRAINT zip_check CHECK (regexp_like((zip)::text, '\d{5}'::text)) +); + + +-- art.contact definition + +-- Drop table + +-- DROP TABLE contact; + +CREATE TABLE contact ( + contact_id int4 GENERATED ALWAYS AS IDENTITY NOT NULL, + first_name varchar(16) NOT NULL, + last_name varchar(16) NOT NULL, + phone_no varchar(12) NULL, + email varchar(64) NOT NULL, + modified_by int4 NULL, + created_dt timestamp DEFAULT CURRENT_TIMESTAMP NOT NULL, + modified_dt timestamp DEFAULT CURRENT_TIMESTAMP NOT NULL, + CONSTRAINT pk_contact_id PRIMARY KEY (contact_id), + CONSTRAINT contact_modified_by_fkey FOREIGN KEY (modified_by) REFERENCES contact(contact_id) +); + + +-- art."plan" definition + +-- Drop table + +-- DROP TABLE "plan"; + +CREATE TABLE "plan" ( + plan_id int4 GENERATED ALWAYS AS IDENTITY NOT NULL, + description varchar(32) NULL, + fk_document_id int4 NOT NULL, + duration int4 NULL, + price int4 NULL, + modified_by int4 NULL, + created_dt timestamp DEFAULT CURRENT_TIMESTAMP NULL, + modified_dt timestamp DEFAULT CURRENT_TIMESTAMP NULL, + CONSTRAINT pk_plan PRIMARY KEY (plan_id), + CONSTRAINT plan_fk_document_id_fkey FOREIGN KEY (fk_document_id) REFERENCES "document"(document_id) +); + + +-- art.profile definition + +-- Drop table + +-- DROP TABLE profile; + +CREATE TABLE profile ( + profile_id int4 GENERATED ALWAYS AS IDENTITY NOT NULL, + fk_contact_id int4 NOT NULL, + active bool DEFAULT false NULL, + modified_by int4 NOT NULL, + created_dt timestamp DEFAULT CURRENT_TIMESTAMP NULL, + modified_dt timestamp DEFAULT CURRENT_TIMESTAMP NULL, + CONSTRAINT pk_profile_id PRIMARY KEY (profile_id), + CONSTRAINT profile_fk_contact_id_fkey FOREIGN KEY (fk_contact_id) REFERENCES contact(contact_id) ON DELETE CASCADE, + CONSTRAINT profile_modified_by_fkey FOREIGN KEY (modified_by) REFERENCES profile(profile_id) +); + + +-- art.staff definition + +-- Drop table + +-- DROP TABLE staff; + +CREATE TABLE staff ( + fk_profile_id int4 NOT NULL, + "position" varchar(14) NOT NULL, + CONSTRAINT check_position CHECK ((("position")::text = ANY ((ARRAY['Director'::character varying, 'Curator'::character varying, 'Art Handler'::character varying, 'Registrar'::character varying, 'Associate'::character varying])::text[]))), + CONSTRAINT pk_staff PRIMARY KEY (fk_profile_id), + CONSTRAINT staff_fk_profile_id_fkey FOREIGN KEY (fk_profile_id) REFERENCES profile(profile_id) +); + + +-- art."subscription" definition + +-- Drop table + +-- DROP TABLE "subscription"; + +CREATE TABLE "subscription" ( + fk_plan_id int4 NOT NULL, + fk_contact_id int4 NOT NULL, + modified_by int4 NULL, + created_dt timestamp DEFAULT CURRENT_TIMESTAMP NULL, + modified_dt timestamp DEFAULT CURRENT_TIMESTAMP NULL, + CONSTRAINT pk_subscription PRIMARY KEY (fk_plan_id, fk_contact_id), + CONSTRAINT subscription_fk_contact_id_fkey FOREIGN KEY (fk_contact_id) REFERENCES contact(contact_id), + CONSTRAINT subscription_fk_plan_id_fkey FOREIGN KEY (fk_plan_id) REFERENCES "plan"(plan_id) +); + + +-- art.task_history definition + +-- Drop table + +-- DROP TABLE task_history; + +CREATE TABLE task_history ( + task_id int4 GENERATED ALWAYS AS IDENTITY NOT NULL, + assigned_to_profile_id int4 NOT NULL, + created_by_profile_id int4 NOT NULL, + related_entity_type varchar(32) NULL, + related_entity_id int4 NULL, + task_type varchar(32) NOT NULL, + task_title varchar(64) NOT NULL, + description varchar(128) NULL, + fk_document_id int4 NULL, + status varchar(16) DEFAULT 'pending'::character varying NULL, + due_date timestamp NULL, + completed_at timestamp NULL, + created_at timestamp DEFAULT CURRENT_TIMESTAMP NULL, + updated_at timestamp DEFAULT CURRENT_TIMESTAMP NULL, + CONSTRAINT chk_status CHECK (((status)::text = ANY ((ARRAY['pending'::character varying, 'in_progress'::character varying, 'completed'::character varying, 'cancelled'::character varying])::text[]))), + CONSTRAINT task_history_pkey PRIMARY KEY (task_id), + CONSTRAINT task_history_fk_document_id_fkey FOREIGN KEY (fk_document_id) REFERENCES "document"(document_id) +); + + +-- art.userrole definition + +-- Drop table + +-- DROP TABLE userrole; + +CREATE TABLE userrole ( + fk_profile_id int4 NOT NULL, + rolename varchar(16) NULL, + passwordhash varchar(256) DEFAULT NULL::character varying NULL, + CONSTRAINT check_role CHECK (((rolename)::text = ANY ((ARRAY['SYSTEM'::character varying, 'CONTACT'::character varying, 'CUSTOMER'::character varying, 'STAFF'::character varying, 'SUPPLIER'::character varying])::text[]))), + CONSTRAINT pk_userrole PRIMARY KEY (fk_profile_id), + CONSTRAINT userrole_fk_profile_id_fkey FOREIGN KEY (fk_profile_id) REFERENCES profile(profile_id) ON DELETE CASCADE +); + + +-- art.address definition + +-- Drop table + +-- DROP TABLE address; + +CREATE TABLE address ( + zip varchar(5) NOT NULL, + fk_contact_id int4 NOT NULL, + street varchar(32) NOT NULL, + CONSTRAINT pk_address PRIMARY KEY (zip, fk_contact_id), + CONSTRAINT address_fk_contact_id_fkey FOREIGN KEY (fk_contact_id) REFERENCES contact(contact_id) ON DELETE CASCADE, + CONSTRAINT address_zip_fkey FOREIGN KEY (zip) REFERENCES zip(zip) +); + + +-- art.authorize definition + +-- Drop table + +-- DROP TABLE authorize; + +CREATE TABLE authorize ( + authorization_id int4 GENERATED ALWAYS AS IDENTITY NOT NULL, + fk_contact_id int4 NULL, + authorization_status varchar(16) NOT NULL, + authorization_date timestamp DEFAULT CURRENT_TIMESTAMP NULL, + expiration_date timestamp DEFAULT CURRENT_TIMESTAMP NULL, + fk_document_id int4 NULL, + modified_by int4 NULL, + created_dt timestamp DEFAULT CURRENT_TIMESTAMP NULL, + modified_dt timestamp DEFAULT CURRENT_TIMESTAMP NULL, + CONSTRAINT authorize_pkey PRIMARY KEY (authorization_id), + CONSTRAINT check_authorization_status CHECK (((authorization_status)::text = ANY ((ARRAY['pending'::character varying, 'approved'::character varying, 'rejected'::character varying, 'expired'::character varying])::text[]))), + CONSTRAINT authorize_fk_contact_id_fkey FOREIGN KEY (fk_contact_id) REFERENCES contact(contact_id), + CONSTRAINT authorize_fk_document_id_fkey FOREIGN KEY (fk_document_id) REFERENCES "document"(document_id) +); + + +-- art.inventory definition + +-- Drop table + +-- DROP TABLE inventory; + +CREATE TABLE inventory ( + inventory_id int4 GENERATED ALWAYS AS IDENTITY NOT NULL, + fk_contact_id int4 NOT NULL, + fk_authorization_id int4 NULL, + sku varchar(100) NOT NULL, + product_description varchar(100) NOT NULL, + unit_cost numeric(10, 2) NOT NULL, + lead_time_days int4 NOT NULL, + product_name varchar(100) NOT NULL, + unit_of_measure varchar(50) NOT NULL, + base_price numeric(10, 2) NOT NULL, + quantity_available int4 DEFAULT 0 NOT NULL, + created_at timestamp DEFAULT CURRENT_TIMESTAMP NULL, + updated_at timestamp DEFAULT CURRENT_TIMESTAMP NULL, + fk_document_id int4 NULL, + CONSTRAINT inventory_pkey PRIMARY KEY (inventory_id), + CONSTRAINT supplier_unique_sku UNIQUE (fk_contact_id, sku), + CONSTRAINT inventory_fk_authorization_id_fkey FOREIGN KEY (fk_authorization_id) REFERENCES authorize(authorization_id), + CONSTRAINT inventory_fk_contact_id_fkey FOREIGN KEY (fk_contact_id) REFERENCES contact(contact_id), + CONSTRAINT inventory_fk_document_id_fkey FOREIGN KEY (fk_document_id) REFERENCES "document"(document_id) +); + + +-- art.invoice definition + +-- Drop table + +-- DROP TABLE invoice; + +CREATE TABLE invoice ( + invoice_id uuid DEFAULT gen_random_uuid() NOT NULL, + fk_plan_id int4 NULL, + fk_contact_id int4 NULL, + invoicedate date NULL, + amountpaid numeric(10, 2) DEFAULT 0 NULL, + CONSTRAINT invoice_pkey PRIMARY KEY (invoice_id), + CONSTRAINT invoice_fk_contact_id_fkey FOREIGN KEY (fk_contact_id) REFERENCES contact(contact_id), + CONSTRAINT invoice_fk_plan_id_fkey FOREIGN KEY (fk_plan_id) REFERENCES "plan"(plan_id) +); + + +-- art.order_items definition + +-- Drop table + +-- DROP TABLE order_items; + +CREATE TABLE order_items ( + order_item_id int4 GENERATED ALWAYS AS IDENTITY NOT NULL, + fk_profile_id int4 NOT NULL, + transaction_id varchar(32) NULL, + created_at timestamp NOT NULL, + quantity int4 DEFAULT 1 NOT NULL, + unit_price numeric(10, 2) NOT NULL, + line_total numeric(10, 2) NOT NULL, + fk_inventory_id int4 NOT NULL, + CONSTRAINT order_items_pkey PRIMARY KEY (order_item_id), + CONSTRAINT order_items_fk_inventory_id_fkey FOREIGN KEY (fk_inventory_id) REFERENCES inventory(inventory_id), + CONSTRAINT order_items_fk_profile_id_fkey FOREIGN KEY (fk_profile_id) REFERENCES profile(profile_id) +); + + +-- art.exhibit definition + +-- Drop table + +-- DROP TABLE exhibit; + +CREATE TABLE exhibit ( + exhibit_id int4 GENERATED ALWAYS AS IDENTITY NOT NULL, + fk_inventory_id int4 NOT NULL, + fk_plan_id int4 NULL, + CONSTRAINT exhibit_pkey PRIMARY KEY (exhibit_id), + CONSTRAINT exhibit_fk_inventory_id_fkey FOREIGN KEY (fk_inventory_id) REFERENCES inventory(inventory_id), + CONSTRAINT exhibit_fk_plan_id_fkey FOREIGN KEY (fk_plan_id) REFERENCES "plan"(plan_id) +); + + +/* VIEW of available exhibit inventory */ +CREATE OR REPLACE VIEW view_available_inventory +AS SELECT inventory.inventory_id, + inventory.fk_contact_id, + inventory.fk_authorization_id, + inventory.sku, + inventory.product_description, + inventory.unit_cost, + inventory.lead_time_days, + inventory.product_name, + inventory.unit_of_measure, + inventory.base_price, + inventory.quantity_available, + inventory.created_at, + inventory.updated_at, + inventory.fk_document_id + FROM art.inventory + WHERE inventory.quantity_available > 0 +INTERSECT + SELECT exhibit.fk_inventory_id AS inventory_id, + NULL::integer AS fk_contact_id, + NULL::integer AS fk_authorization_id, + NULL::character varying AS sku, + NULL::character varying AS product_description, + NULL::numeric AS unit_cost, + NULL::integer AS lead_time_days, + NULL::character varying AS product_name, + NULL::character varying AS unit_of_measure, + NULL::numeric AS base_price, + NULL::integer AS quantity_available, + NULL::timestamp without time zone AS created_at, + NULL::timestamp without time zone AS updated_at, + NULL::integer AS fk_document_id + FROM art.exhibit; + +CREATE OR REPLACE VIEW VIEW_SYSTEMROLE AS + SELECT u.FK_PROFILE_ID, p.FK_CONTACT_ID, u.ROLENAME, p.ACTIVE FROM + USERROLE u + JOIN PROFILE p ON p.PROFILE_ID=u.FK_PROFILE_ID AND u.ROLENAME = 'SYSTEM'; + +CREATE OR REPLACE VIEW VIEW_STAFF AS + SELECT u.FK_PROFILE_ID, p.FK_CONTACT_ID, u.ROLENAME, p.ACTIVE, c.FIRST_NAME, c.LAST_NAME, s.POSITION FROM + USERROLE u + JOIN PROFILE p ON p.PROFILE_ID=u.FK_PROFILE_ID AND u.ROLENAME = 'STAFF' + JOIN CONTACT c ON c.CONTACT_ID = p.FK_CONTACT_ID + JOIN STAFF s on s.FK_PROFILE_ID = p.PROFILE_ID; + +CREATE OR REPLACE VIEW VIEW_SUPPLIER AS + SELECT u.FK_PROFILE_ID, p.FK_CONTACT_ID, u.ROLENAME, p.ACTIVE, c.FIRST_NAME, c.LAST_NAME FROM + USERROLE u + JOIN PROFILE p ON p.PROFILE_ID=u.FK_PROFILE_ID AND u.ROLENAME = 'SUPPLIER' + JOIN CONTACT c ON c.CONTACT_ID = p.FK_CONTACT_ID; + +CREATE OR REPLACE VIEW VIEW_CUSTOMER AS + SELECT u.FK_PROFILE_ID, p.FK_CONTACT_ID, u.ROLENAME, p.ACTIVE, c.FIRST_NAME, c.LAST_NAME FROM + USERROLE u + JOIN PROFILE p ON p.PROFILE_ID=u.FK_PROFILE_ID AND u.ROLENAME = 'CUSTOMER' + JOIN CONTACT c ON c.CONTACT_ID = p.FK_CONTACT_ID; + +-- Trigger Function Paid Invoice, generates subscription +CREATE OR REPLACE FUNCTION invoice_paid_subscription() + RETURNS trigger + LANGUAGE plpgsql +AS $function$ +BEGIN + INSERT INTO SUBSCRIPTION (FK_PLAN_ID, FK_CONTACT_ID) VALUES (NEW.FK_PLAN_ID, NEW.FK_CONTACT_ID); + RETURN NEW; +END; +$function$ +; +-- Trigger on invoice +create trigger paid_subscription after +insert + on invoice for each row + execute function invoice_paid_subscription(); + +CREATE OR REPLACE FUNCTION ORDER_ITEMS_reserved() + RETURNS trigger + LANGUAGE plpgsql +AS $function$ +BEGIN + UPDATE INVENTORY SET QUANTITY_AVAILABLE = QUANTITY_AVAILABLE - NEW.QUANTITY WHERE INVENTORY_ID= NEW.FK_INVENTORY_ID; + RETURN NEW; +END; +$function$ +; +-- Trigger on ORDER_ITEMS customer ordered items reservation +CREATE TRIGGER ORDER_ITEMS_reserved AFTER +INSERT + ON ORDER_ITEMS FOR EACH ROW + execute function ORDER_ITEMS_reserved(); diff --git a/schema/Price_Sherwin_DML.sql b/schema/schema_art_DML.sql similarity index 66% rename from schema/Price_Sherwin_DML.sql rename to schema/schema_art_DML.sql index effa919..36fda99 100755 --- a/schema/Price_Sherwin_DML.sql +++ b/schema/schema_art_DML.sql @@ -1,12 +1,10 @@ --- ORACLE SQL DML: SCHEMA C##ART -SET ECHO ON; -SET SERVEROUTPUT ON; -SET PAGESIZE 30; -SET HEADING ON; +-- SQL DML: SCHEMA C##ART +SET search_path TO art; +BEGIN; -- 20 Queries -- Q1: Select all columns and all rows from one table -SELECT * FROM ROLE; +SELECT * FROM USERROLE; -- Q2: Select five columns and all rows from one table SELECT CONTACT_ID, FIRST_NAME, LAST_NAME, PHONE_NO, EMAIL FROM CONTACT; @@ -25,8 +23,8 @@ SELECT * FROM ZIP ORDER BY 1; SELECT iv.SKU, iv.PRODUCT_NAME,iv.BASE_PRICE,iv.LEAD_TIME_DAYS, iv.QUANTITY_AVAILABLE, au.AUTHORIZATION_STATUS, au.EXPIRATION_DATE, au.AUTHORIZATION_DATE, c.*, au.FK_DOCUMENT_ID FROM INVENTORY iv -JOIN "AUTHORIZATION" au ON au.AUTHORIZATION_ID = iv.AUTHORIZATION_ID -join CONTACT c ON c.CONTACT_ID= iv.FK_CONTACT_ID +JOIN authorize au ON au.AUTHORIZATION_ID = iv.FK_AUTHORIZATION_ID +JOIN CONTACT c ON c.CONTACT_ID= iv.FK_CONTACT_ID FETCH FIRST 10 ROWS ONLY; --Q7: Select distinct rows using joins on 3 tables @@ -34,28 +32,28 @@ SELECT DISTINCT iv.SKU, iv.PRODUCT_NAME,iv.BASE_PRICE,iv.LEAD_TIME_DAYS, iv.QUAN au.AUTHORIZATION_STATUS, au.EXPIRATION_DATE, au.AUTHORIZATION_DATE, au.FK_CONTACT_ID, au.FK_DOCUMENT_ID, oi.ORDER_ITEM_ID, oi.QUANTITY, oi.UNIT_PRICE, oi.TRANSACTION_ID, oi.LINE_TOTAL FROM INVENTORY iv -JOIN "AUTHORIZATION" au ON au.AUTHORIZATION_ID = iv.AUTHORIZATION_ID +JOIN AUTHORIZE au ON au.AUTHORIZATION_ID = iv.FK_AUTHORIZATION_ID JOIN ORDER_ITEMS oi ON oi.FK_INVENTORY_ID = iv.INVENTORY_ID; -- Q8: Use GROUP BY and HAVING in a select statement using one or more tables SELECT iv.SKU FROM INVENTORY iv -JOIN "AUTHORIZATION" au ON au.AUTHORIZATION_ID = iv.AUTHORIZATION_ID +JOIN AUTHORIZE au ON au.AUTHORIZATION_ID = iv.FK_AUTHORIZATION_ID JOIN ORDER_ITEMS oi ON oi.FK_INVENTORY_ID = iv.INVENTORY_ID GROUP BY iv.SKU, iv.QUANTITY_AVAILABLE HAVING iv.QUANTITY_AVAILABLE > 0; -- Q9: Use IN clause to select data from one or more tables -SELECT * FROM PROFILE pf JOIN USERROLE ur ON pf.PROFILE_ID = ur.FK_PROFILE_ID WHERE ur.FK_ROLE_ID IN (100, 200, 300); +SELECT * FROM PROFILE pf JOIN USERROLE ur ON pf.PROFILE_ID = ur.FK_PROFILE_ID; -- Q10: Select length of one column from one table (use LENGTH function) -SELECT LENGTH(ROLENAME) FROM ROLE; +SELECT LENGTH(ROLENAME) FROM USERROLE; -- Q11: Delete one record from one table. ROLLBACK afterwards so that the data will not be physically removed. SAVEPOINT sp1; -SELECT * FROM PROFILE pf JOIN USERROLE ur ON pf.PROFILE_ID = ur.FK_PROFILE_ID WHERE ur.FK_ROLE_ID IN (100, 200, 300); -DELETE USERROLE WHERE FK_PROFILE_ID=3 AND FK_ROLE_ID=300; -SELECT * FROM PROFILE pf JOIN USERROLE ur ON pf.PROFILE_ID = ur.FK_PROFILE_ID WHERE ur.FK_ROLE_ID IN (100, 200, 300); +SELECT * FROM PROFILE pf JOIN USERROLE ur ON pf.PROFILE_ID = ur.FK_PROFILE_ID; +DELETE FROM USERROLE WHERE FK_PROFILE_ID=3; +SELECT * FROM PROFILE pf JOIN USERROLE ur ON pf.PROFILE_ID = ur.FK_PROFILE_ID; ROLLBACK TO SAVEPOINT sp1; @@ -73,15 +71,14 @@ LEFT OUTER JOIN DOCUMENT doc ON pl.FK_DOCUMENT_ID = doc.DOCUMENT_ID; -- Q14: show authorized suppliers whose expiration date is greater than 30 days from now. SELECT * FROM VIEW_SUPPLIER vsu -LEFT OUTER JOIN AUTHORIZATION aut ON aut.FK_CONTACT_ID = vsu.FK_CONTACT_ID -WHERE aut.AUTHORIZATION_STATUS='approved' AND aut.EXPIRATION_DATE > SYSDATE+30; +LEFT OUTER JOIN AUTHORIZE aut ON aut.FK_CONTACT_ID = vsu.FK_CONTACT_ID +WHERE aut.AUTHORIZATION_STATUS='approved' AND aut.EXPIRATION_DATE > CURRENT_TIMESTAMP + INTERVAL '30 days'; -- Q15: -SELECT r.ROLENAME, ct.FIRST_NAME, ct.LAST_NAME, pl.DESCRIPTION FROM SUBSCRIPTION srp +SELECT ur.ROLENAME, ct.FIRST_NAME, ct.LAST_NAME, pl.DESCRIPTION FROM SUBSCRIPTION srp LEFT OUTER JOIN CONTACT ct ON srp.FK_CONTACT_ID = ct.CONTACT_ID LEFT OUTER JOIN PROFILE pf ON pf.FK_CONTACT_ID = ct.CONTACT_ID LEFT OUTER JOIN USERROLE ur ON ur.FK_PROFILE_ID = pf.PROFILE_ID -LEFT OUTER JOIN ROLE r ON r.ROLE_ID = ur.FK_ROLE_ID LEFT OUTER JOIN PLAN pl ON srp.FK_PLAN_ID = pl.PLAN_ID; -- Q16: @@ -106,12 +103,11 @@ LEFT OUTER JOIN VIEW_SYSTEMROLE vwsys ON vwsys.FK_CONTACT_ID = ct.CONTACT_ID; SELECT 'CONTACT' AS TABLE_NAME, COUNT(*) AS ROW_COUNT FROM CONTACT UNION ALL SELECT 'ZIP', COUNT(*) FROM ZIP UNION ALL SELECT 'ADDRESS', COUNT(*) FROM ADDRESS UNION ALL -SELECT 'ROLE', COUNT(*) FROM ROLE UNION ALL SELECT 'PROFILE', COUNT(*) FROM PROFILE UNION ALL SELECT 'USERROLE', COUNT(*) FROM USERROLE UNION ALL SELECT 'STAFF', COUNT(*) FROM STAFF UNION ALL SELECT 'DOCUMENT', COUNT(*) FROM DOCUMENT UNION ALL -SELECT 'AUTHORIZATION', COUNT(*) FROM AUTHORIZATION UNION ALL +SELECT 'AUTHORIZE', COUNT(*) FROM AUTHORIZE UNION ALL SELECT 'PLAN', COUNT(*) FROM PLAN UNION ALL SELECT 'INVENTORY', COUNT(*) FROM INVENTORY UNION ALL SELECT 'EXHIBIT', COUNT(*) FROM EXHIBIT UNION ALL @@ -122,31 +118,43 @@ SELECT 'TASK_HISTORY', COUNT(*) FROM TASK_HISTORY ORDER BY TABLE_NAME; -- Q19: rough check uniqueness: across tables columns -SELECT RPAD(idx.TABLE_NAME,15,' '), COUNT( col.column_name ), COUNT( col.TABLE_NAME ) -FROM user_indexes idx -JOIN user_ind_columns col ON ( col.index_name = idx.index_name ) -WHERE idx.uniqueness = 'UNIQUE' -GROUP BY idx.TABLE_NAME; +-- Q19: Unique index column counts per table +-- Oracle: user_indexes + user_ind_columns +-- PG equivalent: pg_indexes (basic) or pg_index + pg_class + pg_attribute +SELECT + t.relname AS table_name, + COUNT(DISTINCT i.indexrelid) AS unique_index_count, + COUNT(a.attname) AS unique_column_count +FROM pg_index i +JOIN pg_class t ON t.oid = i.indrelid +JOIN pg_class ix ON ix.oid = i.indexrelid +JOIN pg_attribute a ON a.attrelid = t.oid + AND a.attnum = ANY(i.indkey) +WHERE i.indisunique = TRUE + AND t.relnamespace = (SELECT oid FROM pg_namespace WHERE nspname = current_schema()) +GROUP BY t.relname +ORDER BY t.relname; --- Q20: Likely weak entity tables; -SELECT pk.table_name - -- LISTAGG(pk.column_name, ', ') WITHIN GROUP (ORDER BY pk.position) AS primary_key_columns, - -- LISTAGG(fk.column_name, ', ') WITHIN GROUP (ORDER BY fk.position) AS foreign_key_columns -FROM all_cons_columns pk -JOIN all_constraints pkc - ON pk.constraint_name = pkc.constraint_name - AND pk.owner = pkc.owner -JOIN all_cons_columns fk - ON pk.table_name = fk.table_name - AND pk.owner = fk.owner -JOIN all_constraints fkc - ON fk.constraint_name = fkc.constraint_name - AND fk.owner = fkc.owner -WHERE pkc.constraint_type = 'P' -- Primary key - AND fkc.constraint_type = 'R' -- Foreign key - AND pk.column_name = fk.column_name -- PK column is also FK column - AND pk.owner = USER -GROUP BY pk.table_name -ORDER BY pk.table_name;-- CREATE SCHEMA +-- Q20: Likely weak entity tables — tables where a PK column is also an FK column +-- Oracle: all_cons_columns + all_constraints filtered to USER +-- PG equivalent: information_schema tables +SELECT tc.table_name +FROM information_schema.table_constraints tc +JOIN information_schema.key_column_usage kcu_pk + ON kcu_pk.constraint_name = tc.constraint_name + AND kcu_pk.table_schema = tc.table_schema +JOIN information_schema.key_column_usage kcu_fk + ON kcu_fk.table_name = tc.table_name + AND kcu_fk.column_name = kcu_pk.column_name + AND kcu_fk.table_schema= tc.table_schema +JOIN information_schema.table_constraints fkc + ON fkc.constraint_name = kcu_fk.constraint_name + AND fkc.table_schema = kcu_fk.table_schema +WHERE tc.constraint_type = 'PRIMARY KEY' + AND fkc.constraint_type = 'FOREIGN KEY' + AND tc.table_schema = current_schema() +GROUP BY tc.table_name +ORDER BY tc.table_name; + +COMMIT; -/ diff --git a/schema/schema_art_DML_inserts.sql b/schema/schema_art_DML_inserts.sql new file mode 100644 index 0000000..e988b18 --- /dev/null +++ b/schema/schema_art_DML_inserts.sql @@ -0,0 +1,263 @@ +SET search_path TO art; + +-- SYSTEM ROLE +INSERT INTO CONTACT ( FIRST_NAME, LAST_NAME, PHONE_NO, EMAIL, MODIFIED_BY) VALUES ('ART', 'SYSTEM', '000-1234', 'arts@art.com', 1); +-- STAFF ROLE +INSERT INTO CONTACT ( FIRST_NAME, LAST_NAME, PHONE_NO, EMAIL, MODIFIED_BY) VALUES ('Alice', 'Johnson', '650-555-9012', 'alice.johnson@art.com', 1); +INSERT INTO CONTACT ( FIRST_NAME, LAST_NAME, PHONE_NO, EMAIL, MODIFIED_BY) VALUES ( 'Karen', 'Park', '206-555-0110', 'karen.park@art.com', 1); +INSERT INTO CONTACT ( FIRST_NAME, LAST_NAME, PHONE_NO, EMAIL, MODIFIED_BY) VALUES ( 'Jeese', 'Taylor', '713-555-0106', 'grace.taylor@art.com', 1); +INSERT INTO CONTACT ( FIRST_NAME, LAST_NAME, PHONE_NO, EMAIL, MODIFIED_BY) VALUES ( 'James', 'Lee', '206-555-0109', 'james.lee@art.com', 1); +-- SUPPLIER ROLE +INSERT INTO CONTACT ( FIRST_NAME, LAST_NAME, PHONE_NO, EMAIL, MODIFIED_BY) VALUES ('Stephen', 'Alec', '424-546-9312', 'salec@eizel.com', 1); +INSERT INTO CONTACT ( FIRST_NAME, LAST_NAME, PHONE_NO, EMAIL, MODIFIED_BY) VALUES ('Henry', 'Martinez', '602-555-0107', 'henry@artsupply.com', 1); +-- CUSTOMER ROLE +INSERT INTO CONTACT ( FIRST_NAME, LAST_NAME, PHONE_NO, EMAIL, MODIFIED_BY) VALUES ('Carol', 'White', '212-555-0102', 'carol.white@mail.com', 1); +INSERT INTO CONTACT ( FIRST_NAME, LAST_NAME, PHONE_NO, EMAIL, MODIFIED_BY) VALUES ('Bob', 'Smith', '212-555-0101', 'bob.smith@mail.com', 1); +INSERT INTO CONTACT ( FIRST_NAME, LAST_NAME, PHONE_NO, EMAIL, MODIFIED_BY) VALUES ('David', 'Brown', '312-555-0103', 'david.brown@mail.com', 1); +INSERT INTO CONTACT ( FIRST_NAME, LAST_NAME, PHONE_NO, EMAIL, MODIFIED_BY) VALUES ('Emma', 'Davis', '312-555-0104', 'emma.davis@mail.com', 1); +INSERT INTO CONTACT ( FIRST_NAME, LAST_NAME, PHONE_NO, EMAIL, MODIFIED_BY) VALUES ('Frank', 'Wilson', '713-555-0105', 'frank.wilson@mail.com', 1); + +INSERT INTO ZIP (ZIP, CITY, STATE) VALUES ('10001', 'New York', 'NY'); +INSERT INTO ZIP (ZIP, CITY, STATE) VALUES ('90210', 'Beverly Hills', 'CA'); +INSERT INTO ZIP (ZIP, CITY, STATE) VALUES ('94027', 'Atherton', 'CA'); +INSERT INTO ZIP (ZIP, CITY, STATE) VALUES ('90211', 'Los Angeles', 'CA'); +INSERT INTO ZIP (ZIP, CITY, STATE) VALUES ('60601', 'Chicago', 'IL'); +INSERT INTO ZIP (ZIP, CITY, STATE) VALUES ('77001', 'Houston', 'TX'); +INSERT INTO ZIP (ZIP, CITY, STATE) VALUES ('85001', 'Phoenix', 'AZ'); +INSERT INTO ZIP (ZIP, CITY, STATE) VALUES ('98101', 'Seattle', 'WA'); +INSERT INTO ZIP (ZIP, CITY, STATE) VALUES ('02101', 'Boston', 'MA'); +INSERT INTO ZIP (ZIP, CITY, STATE) VALUES ('33101', 'Miami', 'FL'); + +INSERT INTO ADDRESS (FK_CONTACT_ID, STREET, ZIP) VALUES (1, '789 Oak St, suite 10', '94027'); +INSERT INTO ADDRESS (FK_CONTACT_ID, STREET, ZIP) VALUES (2, '789 Oak St, suite 15', '94027'); +INSERT INTO ADDRESS (FK_CONTACT_ID, STREET, ZIP) VALUES (3, '789 Oak St, suite 1', '94027'); +INSERT INTO ADDRESS (FK_CONTACT_ID, STREET, ZIP) VALUES (4, '789 Oak St, suite 5', '94027'); +INSERT INTO ADDRESS (FK_CONTACT_ID, STREET, ZIP) VALUES (5, '789 Oak St, suite 15', '94027'); +INSERT INTO ADDRESS (FK_CONTACT_ID, STREET, ZIP) VALUES (6, '890 Venue Rd', '90210'); +INSERT INTO ADDRESS (FK_CONTACT_ID, STREET, ZIP) VALUES (7, '200 Sunset Blvd', '90210'); +INSERT INTO ADDRESS (FK_CONTACT_ID, STREET, ZIP) VALUES (8, '100 Broadway', '10001'); +INSERT INTO ADDRESS (FK_CONTACT_ID, STREET, ZIP) VALUES (9, '300 Michigan Ave', '60601'); +INSERT INTO ADDRESS (FK_CONTACT_ID, STREET, ZIP) VALUES (10, '400 Main St', '77001'); +INSERT INTO ADDRESS (FK_CONTACT_ID, STREET, ZIP ) VALUES (11, '500 Central Ave', '85001'); +INSERT INTO ADDRESS (FK_CONTACT_ID, STREET, ZIP ) VALUES (12, '600 Pike St', '98101'); + +-- SYSTEMPROFILE +INSERT INTO PROFILE (FK_CONTACT_ID, ACTIVE, MODIFIED_BY) VALUES (1, TRUE, 1); +-- STAFF PROFILE +INSERT INTO PROFILE (FK_CONTACT_ID, ACTIVE, MODIFIED_BY) VALUES (2, TRUE, 2); +-- SUPPLIER +INSERT INTO PROFILE (FK_CONTACT_ID, ACTIVE, MODIFIED_BY) VALUES (3, TRUE, 3); + +INSERT INTO PROFILE (FK_CONTACT_ID, ACTIVE, MODIFIED_BY) VALUES (4, TRUE, 1); +INSERT INTO PROFILE (FK_CONTACT_ID, ACTIVE, MODIFIED_BY) VALUES (5, TRUE, 1); +INSERT INTO PROFILE (FK_CONTACT_ID, ACTIVE, MODIFIED_BY) VALUES (6, TRUE, 1); +INSERT INTO PROFILE (FK_CONTACT_ID, ACTIVE, MODIFIED_BY) VALUES (7, TRUE, 1); +INSERT INTO PROFILE (FK_CONTACT_ID, ACTIVE, MODIFIED_BY) VALUES (8, FALSE, 1); -- inactive +INSERT INTO PROFILE (FK_CONTACT_ID, ACTIVE, MODIFIED_BY) VALUES (9, TRUE, 1); +INSERT INTO PROFILE (FK_CONTACT_ID, ACTIVE, MODIFIED_BY) VALUES (10, TRUE, 1); +INSERT INTO PROFILE (FK_CONTACT_ID, ACTIVE, MODIFIED_BY) VALUES (11, TRUE, 1); +INSERT INTO PROFILE (FK_CONTACT_ID, ACTIVE, MODIFIED_BY) VALUES (12, TRUE, 1); + + +INSERT INTO USERROLE (FK_PROFILE_ID, ROLENAME, PASSWORDHASH) VALUES (1, 'SYSTEM', NULL); +INSERT INTO USERROLE (FK_PROFILE_ID, ROLENAME) VALUES (2, 'STAFF'); +INSERT INTO USERROLE (FK_PROFILE_ID, ROLENAME) VALUES (3, 'STAFF'); +INSERT INTO USERROLE (FK_PROFILE_ID, ROLENAME) VALUES (4, 'STAFF'); +INSERT INTO USERROLE (FK_PROFILE_ID, ROLENAME) VALUES (5, 'STAFF'); +INSERT INTO USERROLE (FK_PROFILE_ID, ROLENAME) VALUES (6, 'SUPPLIER'); +INSERT INTO USERROLE (FK_PROFILE_ID, ROLENAME) VALUES (7, 'SUPPLIER'); +INSERT INTO USERROLE (FK_PROFILE_ID, ROLENAME) VALUES (8, 'CUSTOMER'); -- inactive customer +INSERT INTO USERROLE (FK_PROFILE_ID, ROLENAME) VALUES (9, 'CUSTOMER'); +INSERT INTO USERROLE (FK_PROFILE_ID, ROLENAME) VALUES (10, 'CUSTOMER'); +INSERT INTO USERROLE (FK_PROFILE_ID, ROLENAME) VALUES (11, 'CUSTOMER'); +INSERT INTO USERROLE (FK_PROFILE_ID, ROLENAME) VALUES (12, 'CUSTOMER'); + +INSERT INTO STAFF (FK_PROFILE_ID, POSITION) VALUES (2, 'Director'); +INSERT INTO STAFF (FK_PROFILE_ID, POSITION) VALUES (3, 'Registrar'); +INSERT INTO STAFF (FK_PROFILE_ID, POSITION) VALUES (4, 'Curator'); +INSERT INTO STAFF (FK_PROFILE_ID, POSITION) VALUES (5, 'Art Handler'); + +INSERT INTO DOCUMENT (DOCUMENT_URL) VALUES ('https://art.com/docs/helpdoc.pdf'); --DOC ID 1 +INSERT INTO DOCUMENT (DOCUMENT_URL) VALUES ('https://art.com/docs/consignment-stephen-crimson-horizon.pdf'); --DOC ID 2 +INSERT INTO DOCUMENT (DOCUMENT_URL) VALUES ('https://art.com/docs/consignment-stephen-misty-valley.pdf'); --DOC ID 3 +INSERT INTO DOCUMENT (DOCUMENT_URL) VALUES ('https://art.com/docs/consignment-stephen-twisted-form.pdf'); --DOC ID 4 +INSERT INTO DOCUMENT (DOCUMENT_URL) VALUES ('https://art.com/docs/consignment-stephen-blue-symmetry.pdf'); --DOC ID 5 +INSERT INTO DOCUMENT (DOCUMENT_URL) VALUES ('https://art.com/docs/consignment-henry-urban-solitude.pdf'); --DOC ID 6 +INSERT INTO DOCUMENT (DOCUMENT_URL) VALUES ('https://art.com/docs/consignment-henry-earth-vessel.pdf'); --DOC ID 7 +INSERT INTO DOCUMENT (DOCUMENT_URL) VALUES ('https://art.com/docs/consignment-henry-quiet-reflection.pdf'); --DOC ID 8 + +-- Stephen — approved +INSERT INTO AUTHORIZE (AUTHORIZATION_STATUS, FK_CONTACT_ID, FK_DOCUMENT_ID, MODIFIED_BY, AUTHORIZATION_DATE, EXPIRATION_DATE) +VALUES ('approved', 6, 2, 1, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP + INTERVAL '1 year'); +-- Stephen — approved +INSERT INTO AUTHORIZE (AUTHORIZATION_STATUS, FK_CONTACT_ID, FK_DOCUMENT_ID, MODIFIED_BY, AUTHORIZATION_DATE, EXPIRATION_DATE) +VALUES ('approved', 6, 3, 1, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP + INTERVAL '1 year'); +-- Stephen — pending ('pending' status path) +INSERT INTO AUTHORIZE (AUTHORIZATION_STATUS, FK_CONTACT_ID, FK_DOCUMENT_ID, MODIFIED_BY, AUTHORIZATION_DATE, EXPIRATION_DATE) +VALUES ('pending', 6, 4, 1, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP + INTERVAL '1 year'); +-- Stephen — rejected ('rejected' status path) +INSERT INTO AUTHORIZE (AUTHORIZATION_STATUS, FK_CONTACT_ID, FK_DOCUMENT_ID, MODIFIED_BY, AUTHORIZATION_DATE, EXPIRATION_DATE) +VALUES ('rejected', 6, 5, 1, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP + INTERVAL '30 days'); +-- Henry — approved +INSERT INTO AUTHORIZE (AUTHORIZATION_STATUS, FK_CONTACT_ID, FK_DOCUMENT_ID, MODIFIED_BY, AUTHORIZATION_DATE, EXPIRATION_DATE) +VALUES ('approved', 7, 6, 1, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP + INTERVAL '1 year'); +-- Henry — approved +INSERT INTO AUTHORIZE (AUTHORIZATION_STATUS, FK_CONTACT_ID, FK_DOCUMENT_ID, MODIFIED_BY, AUTHORIZATION_DATE, EXPIRATION_DATE) +VALUES ('approved', 7, 7, 1, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP + INTERVAL '1 year'); +-- Henry — approved +INSERT INTO AUTHORIZE (AUTHORIZATION_STATUS, FK_CONTACT_ID, FK_DOCUMENT_ID, MODIFIED_BY, AUTHORIZATION_DATE, EXPIRATION_DATE) +VALUES ('approved', 7, 8, 1, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP + INTERVAL '1 year'); +-- Henry — pending +INSERT INTO AUTHORIZE (AUTHORIZATION_STATUS, FK_CONTACT_ID, FK_DOCUMENT_ID, MODIFIED_BY, AUTHORIZATION_DATE, EXPIRATION_DATE) +VALUES ('pending', 7, 7, 1, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP + INTERVAL '180 days'); +-- Henry — expired (EXPIRATION_DATE in the past) +INSERT INTO AUTHORIZE (AUTHORIZATION_STATUS, FK_CONTACT_ID, FK_DOCUMENT_ID, MODIFIED_BY, AUTHORIZATION_DATE, EXPIRATION_DATE) +VALUES ('expired', 7, 8, 1, CURRENT_TIMESTAMP - INTERVAL '365 days', CURRENT_TIMESTAMP - INTERVAL '30 days'); + +-- PLAN Documents for exhibition +INSERT INTO DOCUMENT (DOCUMENT_URL) VALUES ('https://art.com/docs/plan-spring-gala-2025.pdf'); -- DOC ID 9 +INSERT INTO DOCUMENT (DOCUMENT_URL) VALUES ('https://art.com/docs/plan-summer-exhibit-2025.pdf'); -- DOC ID 10 +INSERT INTO DOCUMENT (DOCUMENT_URL) VALUES ('https://art.com/docs/plan-fall-exhibition-2025.pdf'); -- DOC ID 11 + +-- PLANS +INSERT INTO PLAN (DESCRIPTION, FK_DOCUMENT_ID, DURATION, PRICE, MODIFIED_BY) VALUES ('Spring Gala Preview', 9, 4, 75.00, 1); -- PLAN_ID 1 +INSERT INTO PLAN (DESCRIPTION, FK_DOCUMENT_ID, DURATION, PRICE, MODIFIED_BY) VALUES ('Spring Gala Standard', 9, 8, 120.00, 1); -- PLAN_ID 2 +INSERT INTO PLAN (DESCRIPTION, FK_DOCUMENT_ID, DURATION, PRICE, MODIFIED_BY) VALUES ('Spring Gala VIP', 9, 12, 250.00, 1); -- PLAN_ID 3 +INSERT INTO PLAN (DESCRIPTION, FK_DOCUMENT_ID, DURATION, PRICE, MODIFIED_BY) VALUES ('Summer Exhibit Basic', 10, 4, 50.00, 1); -- PLAN_ID 4 +INSERT INTO PLAN (DESCRIPTION, FK_DOCUMENT_ID, DURATION, PRICE, MODIFIED_BY) VALUES ('Summer Exhibit Plus', 10, 8, 100.00, 1); -- PLAN_ID 5 +INSERT INTO PLAN (DESCRIPTION, FK_DOCUMENT_ID, DURATION, PRICE, MODIFIED_BY) VALUES ('Summer Exhibit Premium', 10, 16, 200.00, 1); -- PLAN_ID 6 +INSERT INTO PLAN (DESCRIPTION, FK_DOCUMENT_ID, DURATION, PRICE, MODIFIED_BY) VALUES ('Fall Exhibition Access', 11, 4, 60.00, 1); -- PLAN_ID 7 +INSERT INTO PLAN (DESCRIPTION, FK_DOCUMENT_ID, DURATION, PRICE, MODIFIED_BY) VALUES ('Fall Exhibition Full Day',11, 8, 110.00, 1); -- PLAN_ID 8 +INSERT INTO PLAN (DESCRIPTION, FK_DOCUMENT_ID, DURATION, PRICE, MODIFIED_BY) VALUES ('Fall Exhibition Weekend', 11, 24, 180.00, 1); -- PLAN_ID 9 +INSERT INTO PLAN (DESCRIPTION, FK_DOCUMENT_ID, DURATION, PRICE, MODIFIED_BY) VALUES ('Annual Patron Pass', 11, 200, 500.00, 1); -- PLAN_ID 10 + +-- IV 1 — Crimson Horizon +INSERT INTO INVENTORY (FK_CONTACT_ID, FK_AUTHORIZATION_ID, SKU, PRODUCT_DESCRIPTION, UNIT_COST, LEAD_TIME_DAYS, + PRODUCT_NAME, UNIT_OF_MEASURE, BASE_PRICE, QUANTITY_AVAILABLE, FK_DOCUMENT_ID) +VALUES (6, 1, 'ART-S-001', + 'Oil on canvas, abstract expressionism, 24x36', 800.00, 7, + 'Crimson Horizon', 'piece', 1200.00, 5, 2); + +-- IV 2 — Misty Valley +INSERT INTO INVENTORY (FK_CONTACT_ID, FK_AUTHORIZATION_ID, SKU, + PRODUCT_DESCRIPTION, UNIT_COST, LEAD_TIME_DAYS, + PRODUCT_NAME, UNIT_OF_MEASURE, BASE_PRICE, QUANTITY_AVAILABLE, FK_DOCUMENT_ID) +VALUES (6, 2, 'ART-S-002', + 'Watercolor on paper, landscape, 18x24', 450.00, 5, + 'Misty Valley', 'piece', 700.00, 5, 3); + +-- IV 3 — Twisted Form +INSERT INTO INVENTORY (FK_CONTACT_ID, FK_AUTHORIZATION_ID, SKU, + PRODUCT_DESCRIPTION, UNIT_COST, LEAD_TIME_DAYS, + PRODUCT_NAME, UNIT_OF_MEASURE, BASE_PRICE, QUANTITY_AVAILABLE, FK_DOCUMENT_ID) +VALUES (6, 3, 'ART-S-003', + 'Bronze sculpture, abstract, 12 in height', 1500.00, 14, + 'Twisted Form', 'piece', 2200.00, 5, 4); + +-- IV 4 — Blue Symmetry +INSERT INTO INVENTORY (FK_CONTACT_ID, FK_AUTHORIZATION_ID, SKU, + PRODUCT_DESCRIPTION, UNIT_COST, LEAD_TIME_DAYS, + PRODUCT_NAME, UNIT_OF_MEASURE, BASE_PRICE, QUANTITY_AVAILABLE, FK_DOCUMENT_ID) +VALUES (7, 1, 'ART-S-004', + 'Acrylic on canvas, geometric, 30x30', 600.00, 7, + 'Blue Symmetry', 'piece', 950.00, 5, 2); + +-- IV 5 — Urban Collage +INSERT INTO INVENTORY (FK_CONTACT_ID, FK_AUTHORIZATION_ID, SKU, + PRODUCT_DESCRIPTION, UNIT_COST, LEAD_TIME_DAYS, + PRODUCT_NAME, UNIT_OF_MEASURE, BASE_PRICE, QUANTITY_AVAILABLE, FK_DOCUMENT_ID) +VALUES (7, 2, 'ART-S-005', + 'Mixed media on board, 20x20', 350.00, 5, + 'Urban Collage', 'piece', 550.00, 6, 3); + +-- IV 6 — Urban Solitude +INSERT INTO INVENTORY (FK_CONTACT_ID, FK_AUTHORIZATION_ID, SKU, + PRODUCT_DESCRIPTION, UNIT_COST, LEAD_TIME_DAYS, + PRODUCT_NAME, UNIT_OF_MEASURE, BASE_PRICE, QUANTITY_AVAILABLE, FK_DOCUMENT_ID) +VALUES (6, 6, 'ART-H-001', + 'Photography print, archival, limited ed 1/10', 900.00, 3, + 'Urban Solitude', 'piece', 1500.00, 10, 6); + +-- IV 7 — Earth Vessel +INSERT INTO INVENTORY (FK_CONTACT_ID, FK_AUTHORIZATION_ID, SKU, + PRODUCT_DESCRIPTION, UNIT_COST, LEAD_TIME_DAYS, + PRODUCT_NAME, UNIT_OF_MEASURE, BASE_PRICE, QUANTITY_AVAILABLE, FK_DOCUMENT_ID) +VALUES (7, 7, 'ART-H-002', + 'Ceramic vessel, hand-thrown and glazed', 250.00, 10, + 'Earth Vessel', 'piece', 420.00, 8, 7); + +-- IV 8 — Quiet Reflection +INSERT INTO INVENTORY (FK_CONTACT_ID, FK_AUTHORIZATION_ID, SKU, + PRODUCT_DESCRIPTION, UNIT_COST, LEAD_TIME_DAYS, + PRODUCT_NAME, UNIT_OF_MEASURE, BASE_PRICE, QUANTITY_AVAILABLE, FK_DOCUMENT_ID) +VALUES (7, 8, 'ART-H-003', + 'Pastel drawing, portrait, 16x20', 300.00, 7, + 'Quiet Reflection','piece', 500.00, 4, 8); + +-- IV 9 — Neon Dreams +INSERT INTO INVENTORY (FK_CONTACT_ID, FK_AUTHORIZATION_ID, SKU, + PRODUCT_DESCRIPTION, UNIT_COST, LEAD_TIME_DAYS, + PRODUCT_NAME, UNIT_OF_MEASURE, BASE_PRICE, QUANTITY_AVAILABLE, FK_DOCUMENT_ID) +VALUES (6, 6, 'ART-H-004', + 'Digital print on aluminum, 24x36', 700.00, 5, + 'Neon Dreams', 'piece', 1100.00, 6, 6); + +-- IV 10 — Woven Stories +INSERT INTO INVENTORY (FK_CONTACT_ID, FK_AUTHORIZATION_ID, SKU, + PRODUCT_DESCRIPTION, UNIT_COST, LEAD_TIME_DAYS, + PRODUCT_NAME, UNIT_OF_MEASURE, BASE_PRICE, QUANTITY_AVAILABLE, FK_DOCUMENT_ID) +VALUES (6, 7, 'ART-H-005', + 'Textile wall hanging, woven, 36x48', 550.00, 14, + 'Woven Stories', 'piece', 850.00, 5, 7); + +INSERT INTO EXHIBIT (FK_INVENTORY_ID, FK_PLAN_ID) VALUES (1, 1); -- Crimson Horizon → Spring Preview +INSERT INTO EXHIBIT (FK_INVENTORY_ID, FK_PLAN_ID) VALUES (2, 2); -- Misty Valley → Spring Standard +INSERT INTO EXHIBIT (FK_INVENTORY_ID, FK_PLAN_ID) VALUES (3, 3); -- Twisted Form → Spring VIP +INSERT INTO EXHIBIT (FK_INVENTORY_ID, FK_PLAN_ID) VALUES (4, 4); -- Blue Symmetry → Summer Basic +INSERT INTO EXHIBIT (FK_INVENTORY_ID, FK_PLAN_ID) VALUES (5, 5); -- Urban Collage → Summer Plus +INSERT INTO EXHIBIT (FK_INVENTORY_ID, FK_PLAN_ID) VALUES (6, 6); -- Urban Solitude → Summer Premium +INSERT INTO EXHIBIT (FK_INVENTORY_ID, FK_PLAN_ID) VALUES (7, 7); -- Earth Vessel → Fall Access +INSERT INTO EXHIBIT (FK_INVENTORY_ID, FK_PLAN_ID) VALUES (8, 8); -- Quiet Reflection → Fall Full Day +INSERT INTO EXHIBIT (FK_INVENTORY_ID, FK_PLAN_ID) VALUES (9, 9); -- Neon Dreams → Fall Weekend +INSERT INTO EXHIBIT (FK_INVENTORY_ID, FK_PLAN_ID) VALUES (10, 10); -- Woven Stories → Annual Pass + + +INSERT INTO INVOICE (FK_CONTACT_ID, FK_PLAN_ID, InvoiceDate, AmountPaid) VALUES (9, 1, DATE'2025-01-01', 75.00); -- Bob — Spring Preview +INSERT INTO INVOICE (FK_CONTACT_ID, FK_PLAN_ID, InvoiceDate, AmountPaid) VALUES (10, 2, DATE'2025-01-02', 120.00); -- Carol — Spring Standard +INSERT INTO INVOICE (FK_CONTACT_ID, FK_PLAN_ID, InvoiceDate, AmountPaid) VALUES (11, 3, DATE'2025-01-03', 250.00); -- David — Spring VIP +INSERT INTO INVOICE (FK_CONTACT_ID, FK_PLAN_ID, InvoiceDate, AmountPaid) VALUES (12, 4, DATE'2025-01-04', 50.00); -- Emma — Summer Basic +INSERT INTO INVOICE (FK_CONTACT_ID, FK_PLAN_ID, InvoiceDate, AmountPaid) VALUES (9, 5, DATE'2025-01-05', 100.00); -- Bob — Summer Plus +INSERT INTO INVOICE (FK_CONTACT_ID, FK_PLAN_ID, InvoiceDate, AmountPaid) VALUES (10, 6, DATE'2025-01-06', 150.00); -- Carol — Summer Premium +INSERT INTO INVOICE (FK_CONTACT_ID, FK_PLAN_ID, InvoiceDate, AmountPaid) VALUES (11, 7, DATE'2025-01-07', 60.00); -- David — Fall Access +INSERT INTO INVOICE (FK_CONTACT_ID, FK_PLAN_ID, InvoiceDate, AmountPaid) VALUES (12, 8, DATE'2025-01-08', 110.00); -- Emma — Fall Full Day +INSERT INTO INVOICE (FK_CONTACT_ID, FK_PLAN_ID, InvoiceDate, AmountPaid) VALUES (9, 9, DATE'2025-01-09', 180.00); -- Bob — Fall Weekend +INSERT INTO INVOICE (FK_CONTACT_ID, FK_PLAN_ID, InvoiceDate, AmountPaid) VALUES (10, 10, DATE'2025-01-10', 500.00); -- Carol — Annual Pass + +INSERT INTO ORDER_ITEMS (FK_PROFILE_ID, TRANSACTION_ID, CREATED_AT, QUANTITY, UNIT_PRICE, LINE_TOTAL, FK_INVENTORY_ID) +VALUES (9, 'TXN-2025-0001', TIMESTAMP'2025-02-01 10:00:00', 2, 1200.00, 1200.00, 1); -- Bob → Crimson Horizon +INSERT INTO ORDER_ITEMS (FK_PROFILE_ID, TRANSACTION_ID, CREATED_AT, QUANTITY, UNIT_PRICE, LINE_TOTAL, FK_INVENTORY_ID) +VALUES (11, 'TXN-2025-0002', TIMESTAMP'2025-02-03 11:30:00', 1, 700.00, 700.00, 2); -- David → Misty Valley + +INSERT INTO TASK_HISTORY (ASSIGNED_TO_PROFILE_ID, CREATED_BY_PROFILE_ID, RELATED_ENTITY_TYPE, RELATED_ENTITY_ID, + TASK_TYPE, TASK_TITLE, DESCRIPTION, FK_DOCUMENT_ID, STATUS, DUE_DATE) +VALUES (5, 2, 'order', 2, 'logistics', 'Ship Misty Valley', 'Coordinate pickup from Stephen', 19, 'completed', TIMESTAMP'2025-02-15 17:00:00'); + +INSERT INTO TASK_HISTORY (ASSIGNED_TO_PROFILE_ID, CREATED_BY_PROFILE_ID, RELATED_ENTITY_TYPE, RELATED_ENTITY_ID, + TASK_TYPE, TASK_TITLE, DESCRIPTION, FK_DOCUMENT_ID, STATUS, DUE_DATE) +VALUES (4, 2, 'supplier', 18, 'review', 'Review Yuki consignment docs', 'Check Shibori Veil paperwork', 20, 'completed', TIMESTAMP'2025-03-01 12:00:00'); + +INSERT INTO TASK_HISTORY (ASSIGNED_TO_PROFILE_ID, CREATED_BY_PROFILE_ID, RELATED_ENTITY_TYPE, RELATED_ENTITY_ID, + TASK_TYPE, TASK_TITLE, DESCRIPTION, FK_DOCUMENT_ID, STATUS, DUE_DATE) +VALUES (4, 2, 'supplier', 19, 'review', 'Review Diego consignment', 'Evaluate Golden Mesa submission', 20, 'in_progress', TIMESTAMP'2025-04-01 12:00:00'); + +INSERT INTO TASK_HISTORY (ASSIGNED_TO_PROFILE_ID, CREATED_BY_PROFILE_ID, RELATED_ENTITY_TYPE, RELATED_ENTITY_ID, + TASK_TYPE, TASK_TITLE, DESCRIPTION, FK_DOCUMENT_ID, STATUS, DUE_DATE) +VALUES (21, 3, 'order', 5, 'display', 'Install Fall exhibit displays', 'Set up Neon Dreams and Kente Weave', 21, 'in_progress', TIMESTAMP'2025-09-15 09:00:00'); + +INSERT INTO TASK_HISTORY (ASSIGNED_TO_PROFILE_ID, CREATED_BY_PROFILE_ID, RELATED_ENTITY_TYPE, RELATED_ENTITY_ID, + TASK_TYPE, TASK_TITLE, DESCRIPTION, FK_DOCUMENT_ID, STATUS, DUE_DATE) +VALUES (22, 2, 'supplier', 20, 'review', 'Review Amara rhythm prints', 'Confirm limited edition certificates', 20, 'pending', TIMESTAMP'2025-04-10 17:00:00'); + + +COMMIT; +