@Sarah
2015-11-01T17:34:21.000000Z
字数 9246
阅读 1160
This Data Control Lanaguage command is given at begin of class to show students
ALTER USER "userid" IDENTIFIED BY "abc";
ORACLE will not accept UNIQUE and PRIMARY KEY in the same command sequence.
CREATE TABLE VENDOR (
V_CODE INTEGER NOT NULL UNIQUE,
V_NAME VARCHAR(35) NOT NULL,
V_CONTACT VARCHAR(15) NOT NULL,
V_AREACODE CHAR(3) NOT NULL,
V_PHONE CHAR(8) NOT NULL,
V_STATE CHAR(2) NOT NULL,
V_ORDER CHAR(1) NOT NULL,
PRIMARY KEY (V_CODE));
CREATE TABLE PRODUCT (
P_CODE VARCHAR(10) NOT NULL UNIQUE,
P_DESCRIPT VARCHAR(35) NOT NULL,
P_INDATE DATE NOT NULL,
P_QOH SMALLINT NOT NULL,
P_MIN SMALLINT NOT NULL,
P_PRICE NUMBER(8,2) NOT NULL,
P_DISCOUNT NUMBER(5,2) NOT NULL,
V_CODE INTEGER,
PRIMARY KEY (P_CODE),
FOREIGN KEY (V_CODE) REFERENCES VENDOR);
CREATE TABLE PRODUCT (
P_CODE VARCHAR2(10)
CONSTRAINT PRODUCT_P_CODE_PK PRIMARY KEY,
P_DESCRIPT VARCHAR2(35) NOT NULL,
P_INDATE DATE NOT NULL,
P_QOH NUMBER NOT NULL,
P_MIN NUMBER NOT NULL,
P_PRICE NUMBER(8,2) NOT NULL,
P_DISCOUNT NUMBER(5,2) NOT NULL,
V_CODE NUMBER,
CONSTRAINT PRODUCT_V_CODE_FK
FOREIGN KEY (V_CODE) REFERENCES VENDOR);
DESCRIBE VENDOR
DESCRIBE PRODUCT
CREATE TABLE CUSTOMER (
CUS_CODE NUMBER PRIMARY KEY,
CUS_LNAME VARCHAR(15) NOT NULL,
CUS_FNAME VARCHAR(15) NOT NULL,
CUS_INITIAL CHAR(1),
CUS_AREACODE CHAR(3) DEFAULT '615' NOT NULL CHECK(CUS_AREACODE IN ('615','713','931')),
CUS_PHONE CHAR(8) NOT NULL,
CUS_BALANCE NUMBER(9,2) DEFAULT 0.00,
CONSTRAINT CUS_UI1 UNIQUE(CUS_LNAME,CUS_FNAME));
CREATE TABLE INVOICE (
INV_NUMBER NUMBER PRIMARY KEY,
CUS_CODE NUMBER NOT NULL REFERENCES CUSTOMER(CUS_CODE),
INV_DATE DATE DEFAULT SYSDATE NOT NULL,
CONSTRAINT INV_CK1 CHECK (INV_DATE > TO_DATE('01-JAN-2012','DD-MON-YYYY')));
CREATE TABLE LINE (
INV_NUMBER NUMBER NOT NULL,
LINE_NUMBER NUMBER(2,0) NOT NULL,
P_CODE VARCHAR(10) NOT NULL,
LINE_UNITS NUMBER(9,2) DEFAULT 0.00 NOT NULL,
LINE_PRICE NUMBER(9,2) DEFAULT 0.00 NOT NULL,
PRIMARY KEY (INV_NUMBER,LINE_NUMBER),
FOREIGN KEY (INV_NUMBER) REFERENCES INVOICE ON DELETE CASCADE,
FOREIGN KEY (P_CODE) REFERENCES PRODUCT(P_CODE),
CONSTRAINT LINE_UI1 UNIQUE(INV_NUMBER, P_CODE));
CREATE INDEX P_INDATEX ON PRODUCT(P_INDATE);
CREATE INDEX VENPRODX ON PRODUCT(V_CODE,P_CODE);
CREATE INDEX PROD_PRICEX ON PRODUCT(P_PRICE DESC);
DROP INDEX PROD_PRICEX;
INSERT INTO VENDOR
VALUES (21225,'Bryson, Inc.','Smithson','615','223-3234','TN','Y');
SELECT * FROM VENDOR;
INSERT INTO VENDOR
VALUES (21226,'Superloo, Inc.','Flushing','904','215-8995','FL','N');
SELECT * FROM VENDOR;
INSERT INTO PRODUCT
VALUES ('11QER/31','Power painter, 15 psi., 3-nozzle','03-NOV-11',8,5,109.99,0.00,21225);
INSERT INTO PRODUCT
VALUES ('13-Q2/P2','7.25-in. pwr. saw blade','13-DEC-11',32,15,14.99, 0.05,21225);
SELECT * FROM VENDOR;
INSERT INTO PRODUCT
VALUES ('BRT-345','Titanium drill bit', '18-OCT-11', 75, 10, 4.50, 0.06, NULL);
INSERT INTO PRODUCT(P_CODE, P_DESCRIPT)
VALUES ('BRT-345','Titanium drill bit');
COMMIT;
SET PAGESIZE 60
SET LINESIZE 132
COLUMN P_PRICE FORMAT $99,999.99
COLUMN V_NAME FORMAT A12 TRUNCATE
SELECT * FROM PRODUCT;
SELECT P_CODE, P_DESCRIPT, P_INDATE, P_QOH, P_MIN, P_PRICE, P_DISCOUNT, V_CODE
FROM PRODUCT;
UPDATE PRODUCT
SET P_INDATE = '18-JAN-2012'
WHERE P_CODE = '13-Q2/P2';
SELECT * FROM PRODUCT;
UPDATE PRODUCT
SET P_INDATE = '18-JAN-2012',
P_PRICE = 17.99,
P_MIN = 10
WHERE P_CODE = '13-Q2/P2';
SELECT * FROM PRODUCT;
ROLLBACK;
SELECT * FROM PRODUCT;
DELETE FROM PRODUCT
WHERE P_CODE = 'BRT-345';
DELETE FROM PRODUCT
WHERE P_MIN = 5;
-- NOTE: use rollback to restore table rows
ROLLBACK;
--: Run script to create P and V tables (CREATE_P_V.SQL)
--: Use: @drive:\path\create_p_v.sql
DELETE FROM PRODUCT;
DELETE FROM VENDOR;
INSERT INTO VENDOR SELECT * FROM V;
INSERT INTO PRODUCT SELECT * FROM P;
SELECT * FROM VENDOR;
SELECT * FROM PRODUCT;
-- Use: @drive:\path\sqlintrodbinit.sql
SELECT P_DESCRIPT, P_INDATE, P_PRICE, V_CODE
FROM PRODUCT
WHERE V_CODE = 21344;
SELECT P_DESCRIPT, P_INDATE, P_PRICE, V_CODE
FROM PRODUCT
WHERE V_CODE < > 21344;
SELECT P_DESCRIPT, P_QOH, P_MIN, P_PRICE
FROM PRODUCT
WHERE P_PRICE <= 10;
SELECT P_CODE, P_DESCRIPT, P_QOH, P_MIN, P_PRICE
FROM PRODUCT
WHERE P_CODE < '1558-QW1';
SELECT P_DESCRIPT, P_QOH, P_MIN, P_PRICE, P_INDATE
FROM PRODUCT
WHERE P_INDATE >= '20-JAN-2012';
SELECT P_DESCRIPT, P_QOH, P_PRICE, P_QOH*P_PRICE
FROM PRODUCT;
SELECT P_DESCRIPT, P_QOH, P_PRICE, P_QOH*P_PRICE AS TOTVALUE
FROM PRODUCT;
SELECT P_CODE, P_INDATE, SYSDATE - 90 AS CUTDATE
FROM PRODUCT
WHERE P_INDATE <= SYSDATE - 90;
SELECT P_CODE, P_INDATE, P_INDATE + 90 AS EXPDATE
FROM PRODUCT;
SELECT P_DESCRIPT, P_INDATE, P_PRICE, V_CODE
FROM PRODUCT
WHERE V_CODE = 21344
OR V_CODE = 24288;
SELECT P_DESCRIPT, P_INDATE, P_PRICE, V_CODE
FROM PRODUCT
WHERE P_PRICE < 50
AND P_INDATE > '15-JAN-2012';
SELECT P_DESCRIPT, P_INDATE, P_PRICE, V_CODE
FROM PRODUCT
WHERE (P_PRICE < 50 AND P_INDATE > '15-JAN-2012')
OR V_CODE = 24288;
SELECT *
FROM PRODUCT
WHERE NOT (V_CODE = 21344);
SELECT *
FROM PRODUCT
WHERE P_PRICE BETWEEN 50.00 AND 100.00;
SELECT *
FROM PRODUCT
WHERE P_PRICE > 50.00 AND P_PRICE < 100.00;
SELECT P_CODE, P_DESCRIPT, V_COCE
FROM PRODUCT
WHERE V_CODE IS NULL;
SELECT P_CODE, P_DESCRIPT, P_INDATE
FROM PRODUCT
WHERE P_INDATE IS NULL;
SELECT V_NAME, V_CONTACT, V_AREACODE, V_PHONE
FROM VENDOR
WHERE V_CONTACT LIKE 'Smith%';
SELECT V_NAME, V_CONTACT, V_AREACODE, V_PHONE
FROM VENDOR
WHERE UPPER(V_CONTACT) LIKE 'SMITH%';
SELECT V_NAME, V_CONTACT, V_AREACODE, V_PHONE
FROM VENDOR
WHERE V_CONTACT NOT LIKE 'Smith%';
SELECT *
FROM VENDOR
WHERE V_CONTACT LIKE 'Johns_n';
SELECT *
FROM PRODUCT
WHERE V_CODE IN (21344, 24288);
SELECT *
FROM PRODUCT
WHERE V_CODE = 21344
OR V_CODE = 24288;
SELECT V_CODE FROM PRODUCT; -- includes duplicates and Nulls
SELECT DISTINCT V_CODE FROM PRODUCT; -- includes Nulls
SELECT V_CODE, V_NAME
FROM VENDOR
WHERE V_CODE IN (SELECT DISTINCT V_CODE FROM PRODUCT);
SELECT V_CODE, V_NAME
FROM VENDOR
WHERE V_CODE NOT IN (SELECT DISTINCT V_CODE FROM PRODUCT); - will list no rows!
SELECT V_CODE, V_NAME
FROM VENDOR
WHERE V_CODE NOT IN (SELECT DISTINCT V_CODE FROM PRODUCT WHERE V_CODE IS NOT NULL);
SELECT *
FROM VENDOR
WHERE EXISTS (SELECT * FROM PRODUCT WHERE P_QOH <= P_MIN);
SELECT * FROM VENDOR
WHERE EXISTS (SELECT * FROM PRODUCT WHERE P_QOH < P_MIN*2);
SELECT *
FROM PRODUCT
WHERE V_CODE IS NOT NULL;
-- Will not run unless column is empty - only increasing size will work
ALTER TABLE PRODUCT
MODIFY (V_CODE CHAR(5));
ALTER TABLE PRODUCT
MODIFY (P_PRICE DECIMAL(9,2));
ALTER TABLE PRODUCT
ADD (P_SALECODE CHAR(1));
ALTER TABLE VENDOR
DROP COLUMN V_ORDER;
UPDATE PRODUCT
SET P_SALECODE = '2'
WHERE P_CODE = '1546-QQ2';
UPDATE PRODUCT
SET P_SALECODE = '1'
WHERE P_CODE IN ('2232/QWE', '2232/QTY');
UPDATE PRODUCT
SET P_SALECODE = '2'
WHERE P_INDATE < '25-DEC-2011';
UPDATE PRODUCT
SET P_SALECODE = '1'
WHERE P_INDATE >= '16-JAN-2012'
AND P_INDATE < '10-FEB-2012';
COMMIT;
UPDATE PRODUCT
SET P_QOH = P_QOH + 20
WHERE P_CODE = '2232/QWE';
UPDATE PRODUCT
SET P_PRICE = P_PRICE*1.10
WHERE P_PRICE < 50.00;
ROLLBACK;
CREATE TABLE PART (
PART_CODE CHAR(8) NOT NULL UNIQUE,
PART_DESCRIPT CHAR(35),
PART_PRICE DECIMAL(8,2),
V_CODE INTEGER,
PRIMARY KEY (PART_CODE));
INSERT INTO PART (PART_CODE, PART_DESCRIPT, PART_PRICE, V_CODE)
SELECT P_CODE, P_DESCRIPT, P_PRICE, V_CODE FROM PRODUCT;
-- OR USE THIS
CREATE TABLE PART AS
SELECT P_CODE AS PART_CODE,
P_DESCRIPT AS PART_DESCRIPT,
P_PRICE AS PART_PRICE,
V_CODE
FROM PRODUCT;
-- OR MS ACCESS VERSION
SELECT P_CODE AS PART_CODE,
P_DESCRIPT AS PART_DESCRIPT,
P_PRICE AS PART_PRICE,
V_CODE
INTO PART
FROM PRODUCT;
ALTER TABLE PART
ADD PRIMARY KEY(PART_CODE);
ALTER TABLE PART
ADD PRIMARY KEY(P_CODE);
ALTER TABLE PART
ADD FOREIGN KEY(V_CODE) REFERENCES VENDOR;
ALTER TABLE PART
ADD PRIMARY KEY(P_CODE)
ADD FOREIGN KEY (V_CODE) REFERENCES VENDOR;
DROP TABLE PART;
======== END PART I