Sei sulla pagina 1di 19

-- creates some test-tables and data

-- DROP TABLE EMPLOYEE;


-- DROP TABLE DEPARTMENT;
-- DROP TABLE SALARYGRADE;
-- DROP TABLE BONUS;
-- DROP TABLE PROJECT;
-- DROP TABLE PROJECT_PARTICIPATION;
-- DROP TABLE ROLE;

CREATE TABLE EMPLOYEE(


empno INTEGER NOT NULL,
name VARCHAR(10),
job VARCHAR(9),
boss INTEGER,
hiredate VARCHAR(12),
salary DECIMAL(7, 2),
comm DECIMAL(7, 2),
deptno INTEGER
);

CREATE TABLE DEPARTMENT(


deptno INTEGER NOT NULL,
name VARCHAR(14),
location VARCHAR(13)
);

CREATE TABLE SALARYGRADE(


grade INTEGER NOT NULL,
losal INTEGER NOT NULL,
hisal INTEGER NOT NULL
);

CREATE TABLE BONUS (


ename VARCHAR(10) NOT NULL,
job VARCHAR(9) NOT NULL,
sal DECIMAL(7, 2),
comm DECIMAL(7, 2)
);

CREATE TABLE PROJECT(


projectno INTEGER NOT NULL,
description VARCHAR(100),
start_date VARCHAR(12),
end_date VARCHAR(12)
);

CREATE TABLE PROJECT_PARTICIPATION(


projectno INTEGER NOT NULL,
empno INTEGER NOT NULL,
start_date VARCHAR(12) NOT NULL,
end_date VARCHAR(12),
role_id INTEGER
);

CREATE TABLE ROLE(


role_id INTEGER NOT NULL,
description VARCHAR(100)
);
=============================================================================
-- Primary Keys
ALTER TABLE EMPLOYEE
ADD CONSTRAINT emp_pk
PRIMARY KEY (empno);

ALTER TABLE DEPARTMENT


ADD CONSTRAINT dept_pk
PRIMARY KEY (deptno);

ALTER TABLE SALARYGRADE


ADD CONSTRAINT salgrade_pk
PRIMARY KEY (grade);

ALTER TABLE BONUS


ADD CONSTRAINT bonus_pk
PRIMARY KEY (ename, job);

ALTER TABLE PROJECT


ADD CONSTRAINT project_pk
PRIMARY KEY (projectno);

ALTER TABLE PROJECT_PARTICIPATION


ADD CONSTRAINT participation_pk
PRIMARY KEY (projectno, empno, start_date);

ALTER TABLE ROLE


ADD CONSTRAINT role_pk
PRIMARY KEY (role_id);

-- EMPLOYEE to DEPARTMENT
ALTER TABLE EMPLOYEE
ADD CONSTRAINT department
FOREIGN KEY (deptno)
REFERENCES DEPARTMENT (deptno);

-- EMPLOYEE to EMPLOYEE
ALTER TABLE EMPLOYEE
ADD CONSTRAINT boss
FOREIGN KEY (boss)
REFERENCES EMPLOYEE (empno);

-- EMPLOYEE to PROJECT_PARTICIPATION
ALTER TABLE PROJECT_PARTICIPATION
ADD CONSTRAINT employee
FOREIGN KEY (empno)
REFERENCES EMPLOYEE (empno);

-- PROJECT to PROJECT_PARTICIPATION
ALTER TABLE PROJECT_PARTICIPATION
ADD CONSTRAINT project
FOREIGN KEY (projectno)
REFERENCES PROJECT (projectno);

-- ROLE to PROJECT_PARTICIPATION
ALTER TABLE PROJECT_PARTICIPATION
ADD CONSTRAINT role
FOREIGN KEY (role_id)
REFERENCES ROLE (role_id);

======================================================================
-- data
INSERT INTO DEPARTMENT VALUES (10, 'ACCOUNTING', 'NEW YORK');
INSERT INTO DEPARTMENT VALUES (20, 'RESEARCH', 'DALLAS');
INSERT INTO DEPARTMENT VALUES (30, 'SALES', 'CHICAGO');
INSERT INTO DEPARTMENT VALUES (40, 'OPERATIONS', 'BOSTON');

INSERT INTO EMPLOYEE VALUES (7839, 'KING', 'PRESIDENT', NULL, '1981-11-17',


5000, NULL, 10);
INSERT INTO EMPLOYEE VALUES (7566, 'JONES', 'MANAGER', 7839, '1981-04-02',
2975, NULL, 20);
INSERT INTO EMPLOYEE VALUES(7788, 'SCOTT', 'ANALYST', 7566, '1982-12-
09', 3000, NULL, 20);
INSERT INTO EMPLOYEE VALUES(7876, 'ADAMS', 'CLERK', 7788, '1983-
01-12', 1100, NULL, 20);
INSERT INTO EMPLOYEE VALUES(7902, 'FORD', 'ANALYST', 7566, '1981-12-
03', 3000, NULL, 20);
INSERT INTO EMPLOYEE VALUES(7369, 'SMITH', 'CLERK', 7902, '1980-
12-17', 800, NULL, 20);
INSERT INTO EMPLOYEE VALUES (7698, 'BLAKE', 'MANAGER', 7839, '1981-05-01',
2850, NULL, 30);
INSERT INTO EMPLOYEE VALUES(7499, 'ALLEN', 'SALESMAN', 7698, '1981-02-
20', 1600, 300, 30);
INSERT INTO EMPLOYEE VALUES(7521, 'WARD', 'SALESMAN', 7698, '1981-02-
22', 1250, 500, 30);
INSERT INTO EMPLOYEE VALUES(7654, 'MARTIN', 'SALESMAN', 7698, '1981-09-
28', 1250, 1400, 30);
INSERT INTO EMPLOYEE VALUES(7844, 'TURNER', 'SALESMAN', 7698, '1981-09-
08', 1500, 0, 30);
INSERT INTO EMPLOYEE VALUES(7900, 'JAMES', 'CLERK', 7698, '1981-12-
03', 950, NULL, 30);
INSERT INTO EMPLOYEE VALUES(7782, 'CLARK', 'MANAGER', 7839, '1981-06-09',
2450, NULL, 10);
INSERT INTO EMPLOYEE VALUES(7934, 'MILLER', 'CLERK', 7782, '1982-01-
23', 1300, NULL, 10);

INSERT INTO SALARYGRADE VALUES (1, 700, 1200);


INSERT INTO SALARYGRADE VALUES (2, 1201, 1400);
INSERT INTO SALARYGRADE VALUES (3, 1401, 2000);
INSERT INTO SALARYGRADE VALUES (4, 2001, 3000);
INSERT INTO SALARYGRADE VALUES (5, 3001, 9999);

INSERT INTO ROLE VALUES (100, 'Developer');


INSERT INTO ROLE VALUES (101, 'Researcher');
INSERT INTO ROLE VALUES (102, 'Project manager');

INSERT INTO PROJECT VALUES (1001, 'Development of Novel Magnetic Suspension


System', '2006-01-01', '2007-08-13');
INSERT INTO PROJECT VALUES (1002, 'Research on thermofluid dynamics in
Microdroplets', '2006-08-22', '2007-03-20');
INSERT INTO PROJECT VALUES (1003, 'Foundation of Quantum Technology', '2007-02-24',
'2008-07-31');
INSERT INTO PROJECT VALUES (1004, 'High capacity optical network', '2008-01-01', null);

INSERT INTO PROJECT_PARTICIPATION VALUES (1001, 7902, '2006-01-01', '2006-12-


30', 102);
INSERT INTO PROJECT_PARTICIPATION VALUES (1001, 7369, '2006-01-01', '2007-08-
13', 100);
INSERT INTO PROJECT_PARTICIPATION VALUES (1001, 7788, '2006-05-15', '2006-11-
01', 100);
INSERT INTO PROJECT_PARTICIPATION VALUES (1002, 7876, '2006-08-22', '2007-03-
20', 102);
INSERT INTO PROJECT_PARTICIPATION VALUES (1002, 7782, '2006-08-22', '2007-03-
20', 101);
INSERT INTO PROJECT_PARTICIPATION VALUES (1002, 7934, '2007-01-01', '2007-03-
20', 101);

INSERT INTO PROJECT_PARTICIPATION VALUES (1003, 7566, '2007-02-24', '2008-07-


31', 102);
INSERT INTO PROJECT_PARTICIPATION VALUES (1003, 7900, '2007-02-24', '2007-01-
31', 101);

INSERT INTO PROJECT_PARTICIPATION VALUES (1004, 7499, '2008-01-01', null, 102);


INSERT INTO PROJECT_PARTICIPATION VALUES (1004, 7521, '2008-05-01', null, 101);
INSERT INTO PROJECT_PARTICIPATION VALUES (1004, 7654, '2008-04-15', null, 101);
INSERT INTO PROJECT_PARTICIPATION VALUES (1004, 7844, '2008-02-01', null, 101);
INSERT INTO PROJECT_PARTICIPATION VALUES (1004, 7900, '2008-03-01', '2008-04-
01', 101);
INSERT INTO PROJECT_PARTICIPATION VALUES (1004, 7900, '2008-05-20', null, 101);

====================================================================

-------------------------------------------------

For help use

HELP index
? function
Show user

https://www.youtube.com/watch?v=0AHGgfYuFi8#t=614.751325
You may use this link

http://www.java2s.com/Code/Oracle/Stored-Procedure-Function/CatalogStored-
Procedure-Function.htm

subject: procedures

Example -1

SQL>
set serverout on;
SQL>
SQL> -- Displaying "Hello World!" to the screen.

CREATE OR REPLACE PROCEDURE HELLO AS


BEGIN
DBMS_OUTPUT.PUT_LINE('Hello World! ' ||
TO_CHAR(SYSDATE,'MM-DD-YY HH:MI:SS AM'));
END;
/
SQL>
SQL> exec HELLO();
Hello World! 09-09-06 07:23:06 PM
SQL>
Example 2:

Default values

create or replace
procedure default_values(
p_parm1 varchar2,
p_parm2 varchar2 default 'AAA',
p_parm3 varchar2 default 'BBB' ) as
begin
dbms_output.put_line( p_parm1 );
dbms_output.put_line( p_parm2 );
dbms_output.put_line( p_parm3 );
end default_values;
/

Procedure created.

SQL>
SQL> set serverout on
SQL>
SQL> exec default_values( 'Tom', p_parm3 => 'Joe' );
Tom
AAA
Joe
Example 3:

SQL>
SQL>

CREATE TABLE EMP(


EMPNO NUMBER(4) NOT NULL,
ENAME VARCHAR2(10),
JOB VARCHAR2(9),
MGR NUMBER(4),
HIREDATE DATE,
SAL NUMBER(7, 2),
COMM NUMBER(7, 2),
DEPTNO NUMBER(2)
);

Table created.
Note:check to_date function in your system
SQL>
SQL> INSERT INTO EMP VALUES (7369, 'SMITH', 'CLERK', 7902,TO_DATE('17-01-
2017'), 800, NULL, 20);

1 row created.

SQL> INSERT INTO EMP VALUES(7521, 'WARD', 'SALESMAN', 7698,TO_DATE('22-


FEB-1981', 'DD-MON-YYYY'), 1250, 500, 30);
????????? may be ERROR!!!!!

SQL> INSERT INTO EMP VALUES(7499, 'ALLEN', 'SALESMAN', 7698,TO_DATE('20-


02-1981'), 1600, 300, 30);
1 row created.

1 row created.

SQL> INSERT INTO EMP VALUES(7566, 'JONES', 'MANAGER', 7839,TO_DATE('2-APR-


1981', 'DD-MON-YYYY'), 2975, NULL, 20);

1 row created.

SQL> INSERT INTO EMP VALUES(7654, 'MARTIN', 'SALESMAN', 7698,TO_DATE('28-


SEP-1981', 'DD-MON-YYYY'), 1250, 1400, 30);

1 row created.

SQL> INSERT INTO EMP VALUES(7698, 'BLAKE', 'MANAGER', 7839,TO_DATE('1-MAY-


1981', 'DD-MON-YYYY'), 2850, NULL, 30);

1 row created.

SQL> INSERT INTO EMP VALUES(7782, 'CLARK', 'MANAGER', 7839,TO_DATE('9-JUN-


1981', 'DD-MON-YYYY'), 2450, NULL, 10);

1 row created.

SQL> INSERT INTO EMP VALUES(7788, 'SCOTT', 'ANALYST', 7566,TO_DATE('09-


DEC-1982', 'DD-MON-YYYY'), 3000, NULL, 20);

1 row created.

SQL> INSERT INTO EMP VALUES(7839, 'KING', 'PRESIDENT', NULL,TO_DATE('17-


NOV-1981', 'DD-MON-YYYY'), 5000, NULL, 10);
1 row created.

SQL> INSERT INTO EMP VALUES(7844, 'TURNER', 'SALESMAN', 7698,TO_DATE('8-


SEP-1981', 'DD-MON-YYYY'), 1500, 0, 30);

1 row created.

SQL> INSERT INTO EMP VALUES(7876, 'ADAMS', 'CLERK', 7788,TO_DATE('12-JAN-


1983', 'DD-MON-YYYY'), 1100, NULL, 20);

1 row created.

SQL> INSERT INTO EMP VALUES(7900, 'JAMES', 'CLERK', 7698,TO_DATE('3-DEC-


1981', 'DD-MON-YYYY'), 950, NULL, 30);

1 row created.

SQL> INSERT INTO EMP VALUES(7902, 'FORD', 'ANALYST', 7566,TO_DATE('3-DEC-


1981', 'DD-MON-YYYY'), 3000, NULL, 20);

1 row created.

SQL> INSERT INTO EMP VALUES(7934, 'MILLER', 'CLERK', 7782,TO_DATE('23-JAN-


1982', 'DD-MON-YYYY'), 1300, NULL, 10);

1 row created.

SQL>
Example 4:

Procedural insert in table.!

CREATE TABLE book (


isbn CHAR(10) PRIMARY KEY,
category VARCHAR2(20),
title VARCHAR2(100),
num_pages NUMBER,
price NUMBER,
copyright NUMBER(4),
emp1 NUMBER,
emp2 NUMBER,
emp3 NUMBER
);

Table created.

SQL>
CREATE OR REPLACE PROCEDURE AddNewBook(
p_ISBN IN book.ISBN%TYPE,
p_Category IN book.category%TYPE := 'Oracle Server',
p_Title IN book.title%TYPE,
p_NumPages IN book.num_pages%TYPE,
p_Price IN book.price%TYPE,
p_Copyright IN book.copyright%TYPE DEFAULT TO_NUMBER(TO_CHAR(SYSDATE,
'YYYY')),
p_emp1 IN book.emp1%TYPE,
p_emp2 IN book.emp2%TYPE := NULL,
p_emp3 IN book.emp3%TYPE := NULL) AS

BEGIN
INSERT INTO book (isbn, category, title, num_pages, price,copyright,
emp1, emp2, emp3)
VALUES (p_ISBN, p_Category, p_Title, p_NumPages, p_Price,p_Copyright,
p_emp1, p_emp2, p_emp3);
END AddNewBook;
/

P BEGIN
AddNewBook('0', 'Database', 'A Book',5, 34.99, 2004, 1);
END;
rocedure created.

SQL>
BEGIN
AddNewBook('4', 'Database', 'A Book',5, 34.99, 2004, 1);
END;
/

PL/SQL procedure successfully completed.

SQL>
SQL> drop table book;

Table dropped.

Please check these examples and writ YOUR notes!!!!!


-- create demo table
create table Employee(
ID VARCHAR2(4 BYTE) NOT NULL,
First_Name VARCHAR2(10 BYTE),
Last_Name VARCHAR2(10 BYTE),
Start_Date DATE,
End_Date DATE,
Salary Number(8,2),
City VARCHAR2(10 BYTE),
Description VARCHAR2(15 BYTE)
)
create table employee_audit (
id VARCHAR2(4 BYTE),
salary Number(8,2),
delete_date Date,
deleted_by VARCHAR2(15 BYTE)
)
/

insert into Employee (ID, First_Name, Last_Name, Start_Date,


End_Date, Salary, City, Description)
values ('01','Jason', 'Martin', to_date('19960725','YYYYMMDD'),
to_date('20060725','YYYYMMDD'), 1234.56, 'Toronto', 'Programmer')
/
insert into Employee(ID, First_Name, Last_Name, Start_Date,
End_Date, Salary, City, Description)
values('02','Alison', 'Mathews', to_date('19760321','YYYYMMDD'),
to_date('19860221','YYYYMMDD'), 6661.78, 'Vancouver','Tester')
/
insert into Employee(ID, First_Name, Last_Name, Start_Date,
End_Date, Salary, City, Description)
values('03','James', 'Smith', to_date('19781212','YYYYMMDD'),
to_date('19900315','YYYYMMDD'), 6544.78, 'Vancouver','Tester')
/
insert into Employee(ID, First_Name, Last_Name, Start_Date,
End_Date, Salary, City, Description)
values('04','Celia', 'Rice', to_date('19821024','YYYYMMDD'),
to_date('19990421','YYYYMMDD'), 2344.78, 'Vancouver','Manager')
/
insert into Employee(ID, First_Name, Last_Name, Start_Date,
End_Date, Salary, City, Description)
values('05','Robert', 'Black', to_date('19840115','YYYYMMDD'),
to_date('19980808','YYYYMMDD'), 2334.78, 'Vancouver','Tester')
/
insert into Employee(ID, First_Name, Last_Name, Start_Date,
End_Date, Salary, City, Description)
values('06','Linda', 'Green', to_date('19870730','YYYYMMDD'),
to_date('19960104','YYYYMMDD'), 4322.78,'New York', 'Tester')
/
insert into Employee(ID, First_Name, Last_Name, Start_Date,
End_Date, Salary, City, Description)
values('07','David', 'Larry', to_date('19901231','YYYYMMDD'),
to_date('19980212','YYYYMMDD'), 7897.78,'New York', 'Manager')
/
insert into Employee(ID, First_Name, Last_Name, Start_Date,
End_Date, Salary, City, Description)
values('08','James', 'Cat', to_date('19960917','YYYYMMDD'),
to_date('20020415','YYYYMMDD'), 1232.78,'Vancouver', 'Tester')
/

SQL> select * from Employee


ID FIRST_NAME LAST_NAME START_DAT END_DATE SALARY CITY
DESCRIPTION
---- ---------- ---------- --------- --------- ---------- ---------- -----
----------
01 Jason Martin 25-JUL-96 25-JUL-06 1234.56 Toronto
Programmer
02 Alison Mathews 21-MAR-76 21-FEB-86 6661.78 Vancouver
Tester
03 James Smith 12-DEC-78 15-MAR-90 6544.78 Vancouver
Tester
04 Celia Rice 24-OCT-82 21-APR-99 2344.78 Vancouver
Manager
05 Robert Black 15-JAN-84 08-AUG-98 2334.78 Vancouver
Tester
06 Linda Green 30-JUL-87 04-JAN-96 4322.78 New York
Tester
07 David Larry 31-DEC-90 12-FEB-98 7897.78 New York
Manager
08 James Cat 17-SEP-96 15-APR-02 1232.78 Vancouver
Tester

8 rows selected.

Trigger= save deleted rows of employee in employee_audit +date+deleted by( User)

CREATE OR REPLACE TRIGGER employee_after_delete


AFTER DELETE
ON employee
FOR EACH ROW

DECLARE
v_username varchar2(10);

BEGIN

-- Find username of person performing the DELETE on the table


SELECT user INTO v_username
FROM dual;

-- Insert record into audit table


INSERT INTO employee_audit (id, salary, delete_date,
deleted_by)
VALUES ( :old.id, :old.salary, sysdate,
v_username );

END;
/
SQL>
SQL> delete from employee;

8 rows deleted.

SQL>
SQL> select * from employee_audit;

ID SALARY DELETE_DA DELETED_BY


---- ---------- --------- ---------------
01 1234.56 09-SEP-06 JAVA2S
02 6661.78 09-SEP-06 JAVA2S
03 6544.78 09-SEP-06 JAVA2S
04 2344.78 09-SEP-06 JAVA2S
05 2334.78 09-SEP-06 JAVA2S
06 4322.78 09-SEP-06 JAVA2S
07 7897.78 09-SEP-06 JAVA2S
08 1232.78 09-SEP-06 JAVA2S

8 rows selected.

SQL>
SQL> drop table employee_audit;

Table dropped.

SQL> select* from employee where FIRST_NAME like 'A%';

IDFIRST_NAME LAST_NAME START_DA END_DATE SALARY


CITY DESCRIPTION
---- ---------- ---------- -------- -------- ---------- --
------- ---------------
02 Alison Mathews 21/03/76 21/02/86 6661.78
Vancouver Tester
02 Alison Mathews 21/03/76 21/02/86 6661.78
Vancouver Tester

SQL> delete from employee where FIRST_NAME like 'A%';

SQL> select * from employee_audit;

ID SALARY DELETE_D DELETED_BY


---- ---------- -------- --------------
02 6661.78 26/04/17 SCOTT
02 6661.78 26/04/17 SCOTT
CREATE OR REPLACE TRIGGER employee_after_insert
AFTER INSERT
ON employee
FOR EACH ROW

DECLARE
v_username varchar2(10);

BEGIN
-- Find username of person performing the INSERT into the table
SELECT user INTO v_username
FROM dual;

dbms_output.put_line('By: '||v_username);
dbms_output.put_line(':new.id: '||:new.id);
dbms_output.put_line(':new.first_name: '||:new.first_name);
dbms_output.put_line(':new.last_name: '||:new.last_name);
dbms_output.put_line(':old.id: '||:old.id);
dbms_output.put_line(':old.first_name: '||:old.first_name);
dbms_output.put_line(':old.last_name: '||:old.last_name);
END;
/
insert into Employee(ID, First_Name, Last_Name, Start_Date,
End_Date, Salary, City, Description)
values ('01','Jason', 'Martin', to_date('19960725','YYYYMMDD'),
to_date('20060725','YYYYMMDD'), 1234.56, 'Toronto', 'Programmer')
insert into Employee(ID, First_Name, Last_Name, Start_Date,
End_Date, Salary, City, Description)
values('02','Alison', 'Mathews', to_date('19760321','YYYYMMDD'),
to_date('19860221','YYYYMMDD'), 6661.78, 'Vancouver','Tester')

insert into Employee(ID, First_Name, Last_Name, Start_Date,


End_Date, Salary, City, Description)
values('04','Celia', 'Rice',
to_date('19821024','YYYYMMDD'), to_date('19990421','YYYYMMDD'), 2344.78,
'Vancouver','Manager')
----YOU may check more than one trigger

create or replace trigger employee_ar after insert or update or delete


on employee for each row
begin
dbms_output.put_line('...after row (emp)');
end;
/

SQL> select sname, cname, gpa from students, courses, enroll

2 where students.gpa>4 and courses.cid=123;

select sname from students where sid= ALL (select sid from enroll
where cid=252 and gpa>3);

Potrebbero piacerti anche