SlideShare ist ein Scribd-Unternehmen logo
1 von 63
ORACLLE PLSQL
PROGRAMMING
By
Sunny Okoro
1
Contents
Introduction ..................................................................................................................................................2
School Database Diagram.............................................................................................................................4
Triggers..........................................................................................................................................................6
Stored Procedures ......................................................................................................................................15
Packages......................................................................................................................................................31
Functions.....................................................................................................................................................33
Cursors ........................................................................................................................................................37
Records .......................................................................................................................................................50
Oracle Label Security ..................................................................................................................................53
2
Introduction
Database Platform
ORACLE 11G
Applications
Oracle JDeveloper 11g
Oracle SQL Plus
3
Microsoft Power Pivot
Oracle SQL Developer Data Modeler
4
School Database Diagram
5
6
Triggers
Connected to:
Personal Oracle Database 11g Release 11.1.0.6.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> create table student_aduit
2 (student_id Number(8,0),
3 salutation varchar2(5),
4 first_name varchar2(25),
5 last_name varchar2(25),
6 street_address varchar2(50),
7 zip varchar2(5),
8 phone varchar2(15),
9 record_id number,
10 modified_by varchar2(30)
11 );
Table created.
SQL> create sequence studentrecord_aduit_seq
2 start with 09081
3 increment by 45
4 nocycle
5 nocache;
Sequence created.
7
SQL> create or replace trigger student_aduit_RD
2 before insert on student_aduit
3 for each row
4 begin
5 /* fill in the record_id with the primary key values created by sequence*/
6 select studentrecord_aduit_seq.nextval
7 into :NEW.record_id
8 from dual;
9 end student_aduit_RD;
10 /
Trigger created.
SQL> Alter table student_aduit
2 add modified_date date;
Table altered.
SQL> Alter table student_aduit
2 add EMPLOYER varchar2(50);
Table altered.
SQL> Alter table student_aduit
2 add REGISTRATION_DATE date;
Table altered.
SQL> Alter table student_aduit
2 add created_by varchar2(50);
Table altered.
SQL>
SQL> Alter table student_aduit
2 add CREATED_DATE date;
Table altered.
8
SQL>descstudent_aduit;
Name Null? Type
----------------------------------------- -------- ----------------------------
STUDENT_ID NUMBER(8)
SALUTATION VARCHAR2(5)
FIRST_NAME VARCHAR2(25)
LAST_NAME VARCHAR2(25)
STREET_ADDRESS VARCHAR2(50)
ZIP VARCHAR2(5)
PHONE VARCHAR2(15)
RECORD_ID NUMBER
MODIFIED_BY VARCHAR2(30)
MODIFIED_DATE DATE
EMPLOYER VARCHAR2(50)
REGISTRATION_DATE DATE
CREATED_BY VARCHAR2(50)
CREATED_DATE DATE
SQL> Alter table student_aduit
2 add action_typechar(12);
Table altered.
SQL> Create or replace trigger studentrecd_inst_trgg
2 after insert on student
3 for each row
4 begin
5 insert into student_aduit(student_id,salutation,first_name, last_name,
6 street_address, zip, phone, employer, registration_date, created_by, created_date)
7 select :New.student_id,:New.salutation, :New.first_name. :New.last_name,
8 :NEW.street_address, :New.zip, :New.phone, :New.employer, :New.registration_date,
9 :NEW.created_by, :NEW.created_date FROM DUAL;
10 ENDstudentrecd_inst_trgg;
11 /
9
Warning: Trigger created with compilation errors.
SQL> SHOW ERRORS;
Errors for TRIGGER STUDENTRECD_INST_TRGG:
LINE/COL ERROR
-------- -----------------------------------------------------------------
2/4 PL/SQL: SQL Statement ignored
4/60 PL/SQL: ORA-00919: invalid function
SQL> Create or replace trigger studentrecd_4
2 after insert on STUDENT
3 for each row
4 begin
5 insert into student_aduit(student_id,salutation,first_name, last_name, street_address, zip, phone, employer, registration_date, created_by, created_date)
6 select :New.student_id,:New.salutation, :New.first_name, :New.last_name,
7 :NEW.street_address, :New.zip, :New.phone, :New.employer, :New.registration_date,
8 :NEW.created_by, :NEW.created_date FROM DUAL;
9 END studentrecd_4;
10 /
Trigger created.
SQL> Create or replace trigger studentrecd_updt_trg
2 after update on student
3 for each row
10
4 begin
5 insert into student_aduit(student_id,salutation,first_name, last_name, street_address, zip, phone, employer, registration_date, modified_by,
modified_date)
6 select :New.student_id,:New.salutation, :New.first_name, :New.last_name,
7 :NEW.street_address, :New.zip, :New.phone, :New.employer, :New.registration_date,
8 :NEW.modified_by, :NEW.modified_date FROM DUAL;
9 ENDstudentrecd_updt_trg;
10 /
Trigger created.
Create or replace trigger studentrecd_delt_trg
after delete on student
for each row
begin
insert into student_aduit(student_id,salutation,first_name, last_name, street_address, zip, phone, employer, registration_date, modified_by, modified_date)
select :old.student_id,:old.salutation, :old.first_name, :old.last_name,
:old.street_address, :old.zip, :old.phone, :old.employer, :old.registration_date,
:old.modified_by, :old.modified_date FROM DUAL;
END studentrecd_delt_trg;
/
Trigger created.
insert into student(salutation, first_name, last_name, street_address,
zip,phone,employer,registration_date, created_by, created_date, student_id, modified_by ,MODIFIED_DATE)
values('Mr', 'Jackson','Philp','1900 E Bellview Apt 341D','07055',
'7089809812','County Foods',(select sysdate from dual),'Jackson',(select sysdate from dual), 805678, 'NA',
(selectsysdate from dual));
1 row created.
select * from student where student_id = 805678
11
STUDENT_ID SALUTATION FIRST_NAME LAST_NAME STREET_ADDRESS ZIP PHONE EMPLOYER
REGISTRATION_DATE CREATED_BY CREATED_DATE MODIFIED_BY MODIFIED_DATE
---------------------- ---------- ------------------------- ------------------------- -------------------------------------------------- ----- --------------- -------------------------------------------------- -----
-------------------- ------------------------------ ------------------------- ------------------------------ -------------------------
805678 Mr Jackson Philp 1900 E Bellview Apt 341D 07055 7089809812 County Foods
15-MAR-13 Jackson 15-MAR-13 NA 15-MAR-13
update student
set last_name ='Mark',
modified_by='Jackson',
Modified_date = (select sysdate from dual)
wherestudent_id = 805678;
select * from student_aduit;
STUDE
NT_ID
SALUT
ATION
FIRST_
NAME
LAST_
NAME
STREET_ADD
RESS
ZIP PHON
E
RECO
RD_I
D
MODIF
IED_BY
MODIFIE
D_DATE
EMPL
OYER
REGISTRATIO
N_DATE
CREAT
ED_BY
CREATED_D
ATE
ACTION_T
YPE
80567
8
Mr Jackso
n
Philp 1900 E
Bellview Apt
341D
705
5
70898
09812
9171 Coun
ty
Foods
3/15/2013 Jackso
n
3/15/2013
80567
8
Mr Jackso
n
Philp 1900 E
Bellview Apt
341D
705
5
70898
09812
9216 Coun
ty
Foods
3/15/2013 Jackso
n
3/15/2013
80567
8
Mr Jackso
n
Mark 1900 E
Bellview Apt
341D
705
5
70898
09812
9261 Jackso
n
3/15/201
3
Coun
ty
Foods
3/15/2013
12
SQL> delete student where student_id = 805678;
1 row deleted.
SQL> commit;
select * from student_aduit;
STUDE
NT_ID
SALUT
ATION
FIRST_
NAME
LAST_
NAME
STREET_ADDR
ESS
ZI
P
PHON
E
RECOR
D_ID
MODIFI
ED_BY
MODIFIE
D_DATE
EMPLO
YER
REGISTRATI
ON_DATE
CREAT
ED_BY
CREATED
_DATE
ACTION
_TYPE
805678 Mr Jackson Philp 1900 E
Bellview Apt
341D
70
55
70898
09812
9171 County
Foods
3/15/2013 Jackson 3/15/20
13
805678 Mr Jackson Philp 1900 E
Bellview Apt
341D
70
55
70898
09812
9216 County
Foods
3/15/2013 Jackson 3/15/20
13
805678 Mr Jackson Mark 1900 E
Bellview Apt
341D
70
55
70898
09812
9261 Jackson 3/15/201
3
County
Foods
3/15/2013
805678 Mr Jackson Mark 1900 E
Bellview Apt
341D
70
55
70898
09812
9306 Jackson 3/15/201
3
County
Foods
3/15/2013
13
selecttrigger_name, trigger_type, triggering_event, table_name,
column_name, action_type, trigger_body,REFERENCING_NAMES ,CROSSEDITION
fromuser_triggers
TRIGGER_NAM
E
TRIGGE
R_TYPE
TRIGGERIN
G_EVENT
TABLE_
NAME
COLUMN
_NAME
ACTION
_TYPE
TRIGGER_BODY REFERENCI
NG_NAMES
CROSSE
DITION
STUDENTRECD
_INST_TRGG
AFTER
EACH
ROW
INSERT STUDENT PL/SQL begin
insert into
student_aduit(student_id,s
alutation,first_name,
last_name,
street_address,
REFERENCIN
G NEW AS
NEW OLD AS
OLD
NO
STUDENTRECD
_UPDT_TRG
AFTER
EACH
ROW
UPDATE STUDENT PL/SQL begin
insert into
student_aduit(student_id,s
alutation,first_name,
last_name, street_address,
zip,
REFERENCIN
G NEW AS
NEW OLD AS
OLD
NO
STUDENT_ADUI
T_RD
BEFORE
EACH
ROW
INSERT STUDENT
_ADUIT
PL/SQL begin
/* fill in the record_id
with the primary key
values created by
sequence*/
select studentrec
REFERENCIN
G NEW AS
NEW OLD AS
OLD
NO
STUDENTRECD
_4
AFTER
EACH
ROW
INSERT STUDENT PL/SQL begin
insert into
student_aduit(student_id,s
alutation,first_name,
last_name, street_address,
zip,
REFERENCIN
G NEW AS
NEW OLD AS
OLD
NO
STUDENTRECD
_DELT_TRG
AFTER
EACH
ROW
DELETE STUDENT PL/SQL begin
insert into
student_aduit(student_id,s
alutation,first_name,
REFERENCIN
G NEW AS
NEW OLD AS
OLD
NO
14
last_name, street_address,
zip,
15
Stored Procedures
SQL> Create table cities
2 (city_namechar(45),
3 Location_Statechar(45),
4 country char(45)
5 );
Table created.
SQL>
SQL> create or replace procedure city
2 (city_namecity.city_name%TYPE,
3 Location_statecity.Location_State%TYPE,
4 country city.country%TYPE
5 )
6 AS BEGIN
7 INSERT INTO city(city_name, location_state, country)
8 values(city_name, location_state, country);
9 End city;
10 /
Warning: Procedure created with compilation errors.
SQL> show errors;
Errors for PROCEDURE CITY:
LINE/COL ERROR
-------- -----------------------------------------------------------------
0/0 PL/SQL: Compilation unit analysis terminated
2/13 PLS-00225: subprogram or cursor 'CITY' reference is out of scope
SQL> create or replace procedure city
2 (city_namecities.city_name%TYPE,
3 Location_statecities.Location_State%TYPE,
16
4 country cities.country%TYPE
5 )
6 AS BEGIN
7 INSERT INTO city(city_name, location_state, country)
8 values(city_name, location_state, country);
9 End city;
10 /
Warning: Procedure created with compilation errors.
SQL> show errors;
Errors for PROCEDURE CITY:
LINE/COL ERROR
-------- -----------------------------------------------------------------
7/7 PL/SQL: SQL Statement ignored
7/19 PL/SQL: ORA-04044: procedure, function, package, or type is not
allowed here
create or replace procedure city_insert
(city_namecities.city_name%TYPE,
Location_statecities.Location_State%TYPE,
countrycities.country%TYPE
)
AS BEGIN
INSERT INTO cities(city_name, location_state, country)
values(city_name, location_state, country);
End city_insert;
/
Procedure created.
SQL> Begin
2 city_insert('Washington','DC','USA');
17
3 city_insert('Chicago','IL','USA');
4 End;
5 /
PL/SQL procedure successfully completed.
Select * from cities;
CITY_NAME LOCATION_STATE COUNTRY
Washington DC USA
Chicago IL USA
/
Begin
city_insert('Portland','Or','USA');
city_insert('Portland','ME','USA');
city_insert('New York','NY', 'USA');
End;
/
Select * from cities;
CITY_NAME LOCATION_STATE COUNTRY
Washington DC USA
Chicago IL USA
Portland Or USA
Portland ME USA
New York NY USA
18
create or replace procedure city_update
(L_statecities.location_state%TYPE,
c_idcities.city_id%TYPE
)AS Begin
update cities
setlocation_state = L_state
wherecity_id = c_id;
endcity_update;
/
Procedure created.
SQL> begin
2 city_update('New York','PA');
3 end;
4 /
PL/SQL procedure successfully completed.
SQL> ALTER TABLE CITIES ADD CITY_ID NUMBER;
Table altered.
SQL> DELETE CITIES;
5 rows deleted.
create or replace procedure city_insert
(city_namecities.city_name%TYPE,
city_idcities.city_id%TYPE,
Location_statecities.Location_State%TYPE,
countrycities.country%TYPE
)
19
AS BEGIN
INSERT INTO cities(city_name,city_id, location_state, country)
values(city_name, city_id, location_state, country);
End city_insert;
/
SQL> Begin
2 city_insert('Portland',909,'Or','USA');
3 city_insert('Portland',890,'ME','USA');
4 city_insert('New York',788,'NY', 'USA');
5 city_insert('chicago',789,'IL', 'USA');
6 city_insert('Washington',787,'DC', 'USA');
7 End;
8 /
PL/SQL procedure successfully completed.
Select * from cities
CITY_NAME LOCATION_STATE COUNTRY CITY_ID
Portland Or USA 909
Portland ME USA 890
New York NY USA 788
chicago IL USA 789
Washington DC USA 787
20
SQL> begin
2 city_update('IL','787');
3 end;
4 /
Select * from cities
CITY_NAME LOCATION_STATE COUNTRY CITY_ID
Portland Or USA 909
Portland ME USA 890
New York NY USA 788
chicago IL USA 789
Washington IL USA 787
SQL> create or replace procedure city_delete
2 (
3 c_idcities.city_id%TYPE
4 )AS Begin
5 delete cities
6 where city_id = c_id;
7 endcity_delete;
8 /
Procedure created.
21
Select * from cities
CITY_NAME LOCATION_STATE COUNTRY CITY_ID
Portland Or USA 909
Portland ME USA 890
New York NY USA 788
chicago IL USA 789
SQL>
SQL> create or replace procedure studentselect
2 (stud_id in student.student_id%TYPE,
3 salut OUT student.salutation%TYPE,
4 F_name OUT student.first_name%TYPE,
5 L_Name OUT student.Last_name%TYPE,
6 S_Add OUTstudent.Street_Address%TYPE,
7 ZIP OUTstudent.ZIP%TYPE,
8 Phone OUT student.phone%TYPE,
9 EMP OUT student.Employer%Type,
10 RegdateOUT student.Registration_Date%TYPE,
11 Crdate OUT student.Created_date%TYPE,
12 CBY OUT student.created_by%TYPE,
13 MBY OUTstudent.Modified_by%TYPE,
14 MdateOUT student.Modified_date%Type)
15 IS
16 BEGIN
17 SELECT
18 initcap( SALUTATION)as SALUTATION, initcap (FIRST_NAME)as First_Name
nitcap (LAST_NAME)as Last_Name,
19 initcap(STREET_ADDRESS)as Street_Address,
22
20 ZIP, PHONE, initcap (EMPLOYER)as Employer, REGISTRATION_DATE,
21 CREATED_BY, CREATED_DATE,
22 MODIFIED_BY, MODIFIED_DATE
23 INTO
24 salut,F_name,L_Name,S_Add,ZIP,Phone,EMP,Regdate,CBY,Crdate,MBY,Mdate
25 FROM STUDENT
26 WHERE STUDENT_ID = stud_id;
27 ENDstudentselect;
28 /
Procedure created.
SQL>
SQL> DECLARE
2 salutstudent.salutation%TYPE;
3 F_namestudent.first_name%TYPE;
4 L_Namestudent.Last_name%TYPE;
5 S_Addstudent.Street_Address%TYPE;
6 ZIP student.ZIP%TYPE;
7 Phone student.phone%TYPE;
8 EMP student.Employer%Type;
9 Regdatestudent.Registration_Date%TYPE;
10 Crdatestudent.Created_date%TYPE;
11 CBY student.created_by%TYPE;
12 MBY student.Modified_by%TYPE;
13 Mdatestudent.Modified_date%Type;
14 BEGIN
15 studentselect(384,salut,F_name,L_Name,S_Add,ZIP,
16 Phone,EMP,Regdate,Crdate,CBY,MBY,Mdate);
17
18
19 DBMS_OUTPUT.PUT('SALUTATION : ' || salut);
20 DBMS_OUTPUT.PUT('FIRST_NAME: ' || F_name);
21 DBMS_OUTPUT.PUT('LAST_NAME : ' || L_Name);
23
22 DBMS_OUTPUT.PUT('STUDENT_ADDRESS : ' || S_Add);
23 DBMS_OUTPUT.PUT('ZIP: ' || ZIP);
24 DBMS_OUTPUT.PUT('PHONE: ' || Phone);
25 DBMS_OUTPUT.PUT('EMPLOYER : ' || EMP);
26 DBMS_OUTPUT.PUT('REGISTRATION_DATE : ' || Regdate);
27 DBMS_OUTPUT.PUT('CREATED_DATE: ' || Crdate);
28 DBMS_OUTPUT.PUT('CREATED_BY: ' || CBY);
29 DBMS_OUTPUT.PUT('MODIFIED_BY: ' || MBY);
30 DBMS_OUTPUT.PUT('MODIFIED_DATE: ' || Mdate);
31
32 end;
33 /
PL/SQL procedure successfully completed.
SQL>
SQL> DECLARE
2 salutstudent.salutation%TYPE;
3 F_namestudent.first_name%TYPE;
4 L_Namestudent.Last_name%TYPE;
5 S_Addstudent.Street_Address%TYPE;
6 ZIP student.ZIP%TYPE;
7 Phone student.phone%TYPE;
8 EMP student.Employer%Type;
9 Regdatestudent.Registration_Date%TYPE;
10 Crdatestudent.Created_date%TYPE;
11 CBY student.created_by%TYPE;
12 MBY student.Modified_by%TYPE;
13 Mdatestudent.Modified_date%Type;
14 BEGIN
15 studentselect(384,salut,F_name,L_Name,S_Add,ZIP,
16 Phone,EMP,Regdate,Crdate,CBY,MBY,Mdate);
17
18
24
19 DBMS_OUTPUT.PUT_LINE('SALUTATION : ' || salut);
20 DBMS_OUTPUT.PUT_LINE('FIRST_NAME: ' || F_name);
21 DBMS_OUTPUT.PUT_LINE('LAST_NAME : ' || L_Name);
22 DBMS_OUTPUT.PUT_LINE('STUDENT_ADDRESS : ' || S_Add);
23 DBMS_OUTPUT.PUT_LINE('ZIP: ' || ZIP);
24 DBMS_OUTPUT.PUT_LINE('PHONE: ' || Phone);
25 DBMS_OUTPUT.PUT_LINE('EMPLOYER : ' || EMP);
26 DBMS_OUTPUT.PUT_LINE('REGISTRATION_DATE : ' || Regdate);
27 DBMS_OUTPUT.PUT_LINE('CREATED_DATE: ' || Crdate);
28 DBMS_OUTPUT.PUT_LINE('CREATED_BY: ' || CBY);
29 DBMS_OUTPUT.PUT_LINE('MODIFIED_BY: ' || MBY);
30 DBMS_OUTPUT.PUT_lINE('MODIFIED_DATE: ' || Mdate);
31
32 end;
33 /
SALUTATION : Mr.
FIRST_NAME: Asian
LAST_NAME :Chirichella
STUDENT_ADDRESS : 134-25 Franklin Ave. #512
ZIP: 11355
PHONE: 718-555-5555
EMPLOYER :Peo Capital Corp.
REGISTRATION_DATE : 23-FEB-07
CREATED_DATE: 23-FEB-07
CREATED_BY: BROSENZWEIG
MODIFIED_BY: BROSENZW
MODIFIED_DATE: 26-FEB-07
PL/SQL procedure successfully completed.
25
SQL> DECLARE
2 salutstudent.salutation%TYPE;
3 F_namestudent.first_name%TYPE;
4 L_Namestudent.Last_name%TYPE;
5 S_Addstudent.Street_Address%TYPE;
6 ZIP student.ZIP%TYPE;
7 Phone student.phone%TYPE;
8 EMP student.Employer%Type;
9 Regdatestudent.Registration_Date%TYPE;
10 Crdatestudent.Created_date%TYPE;
11 CBY student.created_by%TYPE;
12 MBY student.Modified_by%TYPE;
13 Mdatestudent.Modified_date%Type;
14 BEGIN
15 studentselect(384,salut,F_name,L_Name,S_Add,ZIP,
16 Phone,EMP,Regdate,Crdate,CBY,MBY,Mdate);
17
18
19 DBMS_OUTPUT.PUT_LINE('Name : ' || salut ||F_name||','||L_Name);
20 DBMS_OUTPUT.PUT_LINE('STUDENT_ADDRESS : ' || S_Add);
21 DBMS_OUTPUT.PUT_LINE('ZIP: ' || ZIP);
22 DBMS_OUTPUT.PUT_LINE('PHONE: ' || Phone);
23 DBMS_OUTPUT.PUT_LINE('EMPLOYER : ' || EMP);
24 DBMS_OUTPUT.PUT_LINE('REGISTRATION_DATE : ' || TO_CHAR(Regdate,'Month-d
d-YYYY'));
25 DBMS_OUTPUT.PUT_LINE('CREATED_DATE: ' || TO_CHAR( Crdate,'Month-dd-YYYY
'));
26 DBMS_OUTPUT.PUT_LINE('CREATED_BY: ' || CBY);
27 DBMS_OUTPUT.PUT_LINE('MODIFIED_BY: ' || MBY);
28 DBMS_OUTPUT.PUT_lINE('MODIFIED_DATE: ' || TO_CHAR(Mdate, 'Month-dd-YYYY
'));
29
26
30 end;
31 /
Name :Mr.Asian,Chirichella
STUDENT_ADDRESS : 134-25 Franklin Ave. #512
ZIP: 11355
PHONE: 718-555-5555
EMPLOYER :Peo Capital Corp.
REGISTRATION_DATE : February -23-2007
CREATED_DATE: February -23-2007
CREATED_BY: BROSENZWEIG
MODIFIED_BY: BROSENZW
MODIFIED_DATE: February -26-2007
PL/SQL procedure successfully completed.
SQL>
SQL> create or replace procedure studentselect3
2 (stud_id in student.student_id%TYPE,
3 salut OUT student.salutation%TYPE,
4 F_name OUT student.first_name%TYPE,
5 L_Name OUT student.Last_name%TYPE,
6 S_Add OUTstudent.Street_Address%TYPE,
7 Phone OUT student.phone%TYPE,
8 EMP OUT student.Employer%Type,
9 RegdateOUT student.Registration_Date%TYPE,
10 Crdate OUT student.Created_date%TYPE,
11 CBY OUT student.created_by%TYPE,
12 MBY OUTstudent.Modified_by%TYPE,
13 MdateOUT student.Modified_date%Type,
14 CTY OUT ZIPCODE.CITY%TYPE,
15 STA OUT ZIPCODE.STATE%TYPE,
27
16 ZIP OUTstudent.ZIP%TYPE
17 )
18 IS
19 BEGIN
20
21 SELECT
22 initcap(S.SALUTATION)as SALUTATION, initcap (S.FIRST_NAME)as First_Name
, Initcap (S.LAST_NAME)asLast_Name,
23 initcap(S.STREET_ADDRESS)as Street_Address,
24 PHONE, initcap (S.EMPLOYER)as Employer, S.REGISTRATION_DATE,
25 S.CREATED_BY,S.CREATED_DATE,
26 S.MODIFIED_BY, S.MODIFIED_DATE, Z.CITY, Z.STATE, Z.ZIP
27 INTO
28 salut,F_name,L_Name,S_Add,Phone,EMP,Regdate,CBY,Crdate,MBY,Mdate, CTY,
STA,ZIP
29 FROM STUDENT S
30 INNER JOIN
31 ZIPCODE Z
32 ON
33 S.ZIP = Z.ZIP
34 WHERE STUDENT_ID = stud_id;
35 END studentselect3;
36 /
Procedure created.
SQL>
SQL> DECLARE
2 salutstudent.salutation%TYPE;
3 F_namestudent.first_name%TYPE;
28
4 L_Namestudent.Last_name%TYPE;
5 S_Addstudent.Street_Address%TYPE;
6 Phone student.phone%TYPE;
7 EMP student.Employer%Type;
8 Regdatestudent.Registration_Date%TYPE;
9 Crdatestudent.Created_date%TYPE;
10 CBY student.created_by%TYPE;
11 MBY student.Modified_by%TYPE;
12 Mdatestudent.Modified_date%Type;
13 CTY ZIPCODE.CITY%TYPE;
14 STA ZIPCODE.STATE%TYPE;
15 ZIP student.ZIP%TYPE;
16 BEGIN
17 studentselect3(384,salut,F_name,L_Name,S_Add,
18 Phone,EMP,Regdate,Crdate,CBY,MBY,Mdate, CTY,STA,ZIP);
19
20
21 DBMS_OUTPUT.PUT_LINE('Name : ' || salut ||F_name||','||L_Name);
22 DBMS_OUTPUT.PUT_LINE('STUDENT_ADDRESS : ' || S_Add);
23 DBMS_OUTPUT.PUT_LINE('CITY : ' || CTY);
24 DBMS_OUTPUT.PUT_LINE('R_STATE : ' || STA);
25 DBMS_OUTPUT.PUT_LINE('ZIP: ' || ZIP);
26 DBMS_OUTPUT.PUT_LINE('PHONE: ' || Phone);
27 DBMS_OUTPUT.PUT_LINE('EMPLOYER : ' || EMP);
28 DBMS_OUTPUT.PUT_LINE('REGISTRATION_DATE : ' || TO_CHAR(Regdate,'Month-d
d-YYYY'));
29 DBMS_OUTPUT.PUT_LINE('CREATED_DATE: ' || TO_CHAR( Crdate,'Month-dd-YYYY
'));
30 DBMS_OUTPUT.PUT_LINE('CREATED_BY: ' || CBY);
31 DBMS_OUTPUT.PUT_LINE('MODIFIED_BY: ' || MBY);
32 DBMS_OUTPUT.PUT_lINE('MODIFIED_DATE: ' || TO_CHAR(Mdate, 'Month-dd-YYYY
'));
33
34 end;
29
35 /
Name :Mr.Asian,Chirichella
STUDENT_ADDRESS : 134-25 Franklin Ave. #512
CITY : Flushing
R_STATE : NY
ZIP: 11355
PHONE: 718-555-5555
EMPLOYER :Peo Capital Corp.
REGISTRATION_DATE : February -23-2007
CREATED_DATE: February -23-2007
CREATED_BY: BROSENZWEIG
MODIFIED_BY: BROSENZW
MODIFIED_DATE: February -26-2007
PL/SQL procedure successfully completed.
SQL>
SELECT * FROM USER_PROCEDURES WHERE OBJECT_TYPE = 'PROCEDURE' ;
30
SELECT * FROM USER_PROCEDURES WHERE OBJECT_TYPE ='PACKAGE';
OBJECT_NAME PROCEDURE_NAME OBJECT_ID SUBPROGRAM_ID OBJECT_TYPE AGGREGATE PIPELINED PARALLEL INTERFACE DETERMINISTIC AUTHID
STUDENTSELECT 72969 1 PROCEDURE NO NO NO NO NO DEFINER
CITY_DELETE 72966 1 PROCEDURE NO NO NO NO NO DEFINER
CITY_INSERT 72964 1 PROCEDURE NO NO NO NO NO DEFINER
CITY_UPDATE 72965 1 PROCEDURE NO NO NO NO NO DEFINER
CITY 72963 1 PROCEDURE NO NO NO NO NO DEFINER
STUDENT_SELECT 72968 1 PROCEDURE NO NO NO NO NO DEFINER
OBJECT_NAME PROCEDURE_NAME OBJECT_ID SUBPROGRAM_ID OBJECT_TYPE AGGREGATE PIPELINED PARALLEL INTERFACE DETERMINISTIC AUTHID
CITIESDB UPDATECITY 73066 1 PACKAGE NO NO NO NO NO DEFINER
CITIESDB DELETECITY 73066 2 PACKAGE NO NO NO NO NO DEFINER
CITIESDB 73066 0 PACKAGE NO NO NO NO NO DEFINER
31
Packages
SQL> CREATE OR REPLACE PACKAGE CitiesDB as
2 PROCEDURE updatecity(CID IN CITIES.CITY_ID%TYPE,
3 CSTATE IN CITIES.LOCATION_STATE%TYPE,
4 CCITY IN CITIES.CITY_NAME%TYPE );
5 PROCEDURE DELETECITY(CID IN CITIES.CITY_ID%TYPE);
6
7 END CitiesDB;
8 /
Package created.
SQL> CREATE OR REPLACE PACKAGE BODY CitiesDB as
2 PROCEDURE updatecity(CID IN CITIES.CITY_ID%TYPE,
3 CSTATE IN CITIES.LOCATION_STATE%TYPE,
4 CCITY IN CITIES.CITY_NAME%TYPE ) IS
5 BEGIN
6 UPDATE CITIES
7 SET CITY_NAME = CCITY, LOCATION_STATE = CSTATE
8 WHERE CITY_ID = CID;
9 END updatecity;
10
11 PROCEDURE DELETECITY(CID IN CITIES.CITY_ID%TYPE) IS
12 BEGIN
13 DELETE FROM CITIES
14 WHERE CITY_ID = CID;
15 END DELETECITY;
16
17 END CitiesDB;
18 /
Package body created.
32
SQL> BEGIN
2 CitiesDB.updatecity(789,'PA', 'CHICAGO');
3 END;
4 /
PL/SQL procedure successfully completed.
SELECT * FROM CITIES;
CITY_NAME LOCATION_STATE COUNTRY CITY_ID
Portland Or USA 909
Portland ME USA 890
New York NY USA 788
CHICAGO PA USA 789
SQL>
SQL> BEGIN
2 CitiesDB.updatecity(909, 'WA','PORTLAND' );
3 CitiesDB.DELETECITY(890);
4 END;
5 /
PL/SQL procedure successfully completed.
CITY_NAME LOCATION_STATE COUNTRY CITY_ID
PORTLAND WA USA 909
New York NY USA 788
CHICAGO PA USA 789
33
Functions
SQL> CREATE OR REPLACE FUNCTION STUDENTNAME
2 (studid in student.student_id%TYPE
3 )
4 RETURN
5 VARCHAR2 IS
6
7 STUDENT_NAME VARCHAR2(50);
8 BEGIN
9
10 SELECT INITCAP (S.FIRST_NAME||','||S.LAST_NAME)AS NAME
11 INTO
12 STUDENT_NAME
13 FROM STUDENT S
14 WHERE S.STUDENT_ID = studid;
15
16 RETURN STUDENT_NAME;
17
18 END STUDENTNAME;
19 /
Function created.
SQL> COMMIT;
Commit complete.
34
SQL>
SQL> SELECT STUDENTNAME(STUDENT_ID)STUDENT_NAME
2 FROM STUDENT
3 WHERE STUDENT_ID =120;
STUDENT_NAME
---------------------------------------------------
Ralph,Alexander
SQL>
SQL> SELECT STUDENTNAME(S.STUDENT_ID)STUDENT_NAME
2 ,S.STUDENT_ID, SUM(G.NUMERIC_GRADE)AS GRADE,
3 G.SECTION_ID
4 FROM STUDENT S
5 INNER JOIN GRADE G
6 ON
7 S.STUDENT_ID = G.STUDENT_ID
8 WHERE S.STUDENT_ID = 120
9 AND
10 G.SECTION_ID = 103
11 GROUP BY STUDENTNAME(S.STUDENT_ID), S.STUDENT_ID, G.SECTION_ID;
STUDENT_NAME
--------------------------------------------------------------------------
STUDENT_ID GRADE SECTION_ID
---------- ---------- ----------
Ralph,Alexander
120 751 103
35
SQL> GROUP BY STUDENTNAME(S.STUDENT_ID), S.STUDENT_ID, G.SECTION_ID;
SP2-0734: unknown command beginning "GROUP BY S..." - rest of line ignored.
SQL>SELECT STUDENTNAME(S.STUDENT_ID)STUDENT_NAME
2 ,S.STUDENT_ID, SUM(G.NUMERIC_GRADE)AS GRADE,
3 G.SECTION_ID
4 FROM STUDENT S
5 INNER JOIN GRADE G
6 ON
7 S.STUDENT_ID = G.STUDENT_ID
8 WHERE S.STUDENT_ID IN( 120,211)
9 GROUP BY STUDENTNAME(S.STUDENT_ID), S.STUDENT_ID, G.SECTION_ID;
STUDENT_NAME
--------------------------------------------------------------------------------
STUDENT_ID GRADE SECTION_ID
---------- ---------- ----------
Jenny,Goldsmith
211 798 141
Jenny,Goldsmith
211 943 86
Ralph,Alexander
120 751 103
create OR REPLACE view S_GRADES
(STUDENT_NAME, STUDENT_ID, GRADE, INSTRUCTOR_NAME, SECTION_ID, DESCRIPTION)
as
SELECT S.salutation||''||S.first_name ||','||S.last_name as Student_Name
,S.STUDENT_ID, SUM(G.NUMERIC_GRADE)AS GRADE, I.salutation||''||I.first_name ||','||I.last_name as Instructor_Name,
G.SECTION_ID, C.DESCRIPTION as DESCRIPTION
36
FROM STUDENT S
INNER JOIN GRADE G
ON
S.STUDENT_ID = G.STUDENT_ID
INNER JOIN SECTION T
ON
G.SECTION_ID = T.SECTION_ID
INNER JOIN COURSE C
ON
C.COURSE_NO = T.COURSE_NO
INNER JOIN INSTRUCTOR I
ON
T.INSTRUCTOR_ID = I.INSTRUCTOR_ID
group by S.salutation||''||S.first_name ||','||S.last_name, S.STUDENT_ID, I.salutation||''||I.first_name ||','||I.last_name,
G.SECTION_ID, C.DESCRIPTION;
37
Cursors
Explicit Cursors
SQL> show user;
USER is "SUNNY"
SQL>
SQL> set serveroutput on
SQL> declare
2 salustudent.salutation%type;
3 fnamestudent.first_name%type;
4 lnamestudent.last_name%type;
5 saddressstudent.street_address%TyPE;
6 scityzipcode.city%Type;
7 sstatezipcode.state%Type;
8 szipzipcode.zip%type;
9 sphonestudent.phone%type;
10 sregdatevarchar2(80) :=0;
11 rowcount PLS_INTEGER :=0;
12
13 cursorstudrec
14 is
15 SELECT S.SALUTATION ,S.FIRST_NAME, S.LAST_NAME,
16 S.STREET_ADDRESS,Z.CITY,Z.STATE,Z.ZIP,S.PHONE, TO_CHAR(S.REGISTRATION_DATE,'MON-DD-RRRR') AS REGISTRATION_DATE
17 FROM STUDENT S INNER JOIN ZIPCODE Z
18 ON
19 S.ZIP = Z.ZIP;
20
21 begin
22
23 openstudrec;
24 loop
25 fetchstudrec into salu,fname, lname, saddress,scity,sstate,szip, sphone,sregdate;
26 EXIT when studrec%NOTFOUND;
27 rowcount :=studrec%ROWCOUNT;
28
29 DBMS_OUTPUT.PUT_LINE(rowcount ||' ' ||'is the number of rows processed ');
30 DBMS_OUTPUT.PUT_LINE('Student Name:'||' '||salu||' '||fname||' '||lname);
31 DBMS_OUTPUT.PUT_LINE('Address:'||saddress);
32 DBMS_OUTPUT.PUT_LINE('City:'||scity);
38
33 DBMS_OUTPUT.PUT_LINE('State:'||sstate);
34 DBMS_OUTPUT.PUT_LINE('Phone:'||sphone);
35 DBMS_OUTPUT.PUT_LINE('REGISTRATION DATE:'||sregdate);
36 END LOOP;
37 CLOSEstudrec;
38
39 IFstudrec%ISOPEN = FALSE
40 THEN
41 DBMS_OUTPUT.PUT_LINE('Cursor is closed');
42 ELSE
43 DBMS_OUTPUT.PUT_LINE('Cursor is open');
44 END IF;
45 EXCEPTION
46 WHEN OTHERS
47 THEN
48 DBMS_OUTPUT.PUT_LINE(SQLERRM);
49 END;
50 /
1 is the number of rows processed
Student Name: Mr. Jim Joas
Address:53-33 192nd St.
City:Fresh Meadows
State:NY
Phone:718-555-5555
REGISTRATION DATE:FEB-02-2007
2 is the number of rows processed
Student Name: Ms. Sally Naso
Address:812 79th St.
City:North Bergen
State:NJ
Phone:201-555-5555
REGISTRATION DATE:FEB-02-2007
3 is the number of rows processed
Student Name: Mr. Frantz McLean
Address:23-08 Newtown Ave.
City:Astoria
State:NY
Phone:718-555-5555
REGISTRATION DATE:FEB-02-2007
39
4 is the number of rows processed
Student Name: Ms. P. Balterzar
Address:30 Carriage Rd.
City:Roslyn
State:NY
Phone:718-555-5555
REGISTRATION DATE:FEB-02-2007
Results Abridged
SQL> set serveroutput on
SQL> declare
2 studidstudent.student_id%type;
3 salustudent.salutation%type;
4 fnamestudent.first_name%type;
5 lnamestudent.last_name%type;
6 saddressstudent.street_address%TyPE;
7 scityzipcode.city%Type;
8 sstatezipcode.state%Type;
9 szipzipcode.zip%type;
10 sphonestudent.phone%type;
11 sregdatevarchar2(80) :=0;
12 rowcount PLS_INTEGER :=0;
13
14 cursorstudrec(studidint)
15 is
16 SELECT S.SALUTATION ,S.FIRST_NAME, S.LAST_NAME,
17 S.STREET_ADDRESS,Z.CITY,Z.STATE,Z.ZIP,S.PHONE, TO_CHAR(S.REGISTRATION_DATE,'MON-DD-RRRR') AS REGISTRATION_DATE,
18 S.STUDENT_ID
19 FROM STUDENT S INNER JOIN ZIPCODE Z
20 ON
21 S.ZIP = Z.ZIP
22 wherestudent_id<studid ;
23
24 begin
25
26 openstudrec(375);
27 loop
28 fetch studrec into salu,fname, lname, saddress,scity,sstate,szip, sphone,sregdate,studid ;
29 EXIT when studrec%NOTFOUND;
40
30 rowcount :=studrec%ROWCOUNT;
31
32 DBMS_OUTPUT.PUT_LINE(rowcount ||' ' ||'is the number of rows processed ');
33 DBMS_OUTPUT.PUT_LINE('Student ID:'||' '||studid);
34 DBMS_OUTPUT.PUT_LINE('Student Name:'||' '||salu||' '||fname||' '||lname);
35 DBMS_OUTPUT.PUT_LINE('Address:'||saddress);
36 DBMS_OUTPUT.PUT_LINE('City:'||scity);
37 DBMS_OUTPUT.PUT_LINE('State:'||sstate);
38 DBMS_OUTPUT.PUT_LINE('Phone:'||sphone);
39 DBMS_OUTPUT.PUT_LINE('REGISTRATION DATE:'||sregdate);
40 END LOOP;
41 CLOSEstudrec;
42
43 IFstudrec%ISOPEN = FALSE
44 THEN
45 DBMS_OUTPUT.PUT_LINE('Cursor is closed');
46 ELSE
47 DBMS_OUTPUT.PUT_LINE('Cursor is open');
48 END IF;
49 EXCEPTION
50 WHEN OTHERS
51 THEN
52 DBMS_OUTPUT.PUT_LINE(SQLERRM);
53 END;
54 /
1 is the number of rows processed
Student ID: 167
Student Name: Mr. Jim Joas
Address:53-33 192nd St.
City:Fresh Meadows
State:NY
Phone:718-555-5555
REGISTRATION DATE:FEB-02-2007
2 is the number of rows processed
Student ID: 168
Student Name: Ms. Sally Naso
Address:812 79th St.
City:North Bergen
State:NJ
41
Phone:201-555-5555
REGISTRATION DATE:FEB-02-2007
3 is the number of rows processed
Student ID: 169
Student Name: Mr. Frantz McLean
Address:23-08 Newtown Ave.
City:Astoria
State:NY
Phone:718-555-5555
REGISTRATION DATE:FEB-02-2007
4 is the number of rows processed
Student ID: 170
Student Name: Ms. P. Balterzar
Address:30 Carriage Rd.
City:Roslyn
State:NY
Phone:718-555-5555
REGISTRATION DATE:FEB-02-2007
Results Abridged
SQL> set serveroutput on
SQL> declare
2 studidstudent.student_id%type;
3 salustudent.salutation%type;
4 fnamestudent.first_name%type;
5 lnamestudent.last_name%type;
6 saddressstudent.street_address%TyPE;
7 scityzipcode.city%Type;
8 sstatezipcode.state%Type;
9 szipzipcode.zip%type;
10 sphonestudent.phone%type;
11 sregdatevarchar2(80) :=0;
12 rowcount PLS_INTEGER :=0;
13
14 cursorstudrec(studidint)
15 is
16 SELECT S.SALUTATION ,S.FIRST_NAME, S.LAST_NAME,
17 S.STREET_ADDRESS,Z.CITY,Z.STATE,Z.ZIP,S.PHONE, TO_CHAR(S.REGISTRATION_DATE,'MON-DD-RRRR') AS REGISTRATION_DATE,
18 S.STUDENT_ID
42
19 FROM STUDENT S INNER JOIN ZIPCODE Z
20 ON
21 S.ZIP = Z.ZIP
22 wherestudent_id != studid;
23
24 begin
25
26 openstudrec(375);
27 loop
28 fetch studrec into salu,fname, lname, saddress,scity,sstate,szip, sphone,sregdate,studid ;
29 EXIT when studrec%NOTFOUND;
30 rowcount :=studrec%ROWCOUNT;
31
32 DBMS_OUTPUT.PUT_LINE(rowcount ||' ' ||'is the number of rows processed ');
33 DBMS_OUTPUT.PUT_LINE('Student ID:'||' '||studid);
34 DBMS_OUTPUT.PUT_LINE('Student Name:'||' '||salu||' '||fname||' '||lname);
35 DBMS_OUTPUT.PUT_LINE('Address:'||saddress);
36 DBMS_OUTPUT.PUT_LINE('City:'||scity);
37 DBMS_OUTPUT.PUT_LINE('State:'||sstate);
38 DBMS_OUTPUT.PUT_LINE('Phone:'||sphone);
39 DBMS_OUTPUT.PUT_LINE('REGISTRATION DATE:'||sregdate);
40 END LOOP;
41 CLOSEstudrec;
42
43 IFstudrec%ISOPEN = FALSE
44 THEN
45 DBMS_OUTPUT.PUT_LINE('Cursor is closed');
46 ELSE
47 DBMS_OUTPUT.PUT_LINE('Cursor is open');
48 END IF;
49 EXCEPTION
50 WHEN OTHERS
51 THEN
52 DBMS_OUTPUT.PUT_LINE(SQLERRM);
53 END;
54 /
1 is the number of rows processed
Student ID: 167
Student Name: Mr. Jim Joas
43
Address:53-33 192nd St.
City:Fresh Meadows
State:NY
Phone:718-555-5555
REGISTRATION DATE:FEB-02-2007
2 is the number of rows processed
Student ID: 168
Student Name: Ms. Sally Naso
Address:812 79th St.
City:North Bergen
State:NJ
Phone:201-555-5555
REGISTRATION DATE:FEB-02-2007
3 is the number of rows processed
Student ID: 169
Student Name: Mr. Frantz McLean
Address:23-08 Newtown Ave.
City:Astoria
State:NY
Phone:718-555-5555
REGISTRATION DATE:FEB-02-2007
4 is the number of rows processed
Student ID: 170
Student Name: Ms. P. Balterzar
Address:30 Carriage Rd.
City:Roslyn
State:NY
Phone:718-555-5555
REGISTRATION DATE:FEB-02-2007
5 is the number of rows processed
Student ID: 171
Student Name: Ms. Denise Brownstein
Address:104-36 196th St.
City:Hollis
State:NY
Phone:718-555-5555
REGISTRATION DATE:FEB-02-2007
6 is the number of rows processed
Student ID: 172
44
Student Name: Ms. Maria Arias
Address:Box 216
City:Bellrose
State:NY
Phone:718-555-5555
REGISTRATION DATE:FEB-02-2007
7 is the number of rows processed
Student ID: 173
Student Name: Mr. Oscar McGill
Address:578 E 40th ST.
City:Brooklyn
State:NY
Phone:718-555-5555
REGISTRATION DATE:FEB-02-2007
8 is the number of rows processed
Student ID: 174
Student Name: Mr. Michael Brown
Address:265 Hawthorne St #2D
City:Brooklyn
State:NY
Phone:718-555-5555
REGISTRATION DATE:FEB-02-2007
9 is the number of rows processed
Student ID: 175
Student Name: Ms. Debra Boyce
Address:294 East 98 St.
City:Brooklyn
State:NY
Phone:718-555-5555
REGISTRATION DATE:FEB-02-2007
10 is the number of rows processed
Student ID: 176
Student Name: Ms. Beth Satterfield
Address:140 Amity St
City:Brooklyn
State:NY
Phone:718-555-5555
REGISTRATION DATE:FEB-02-2007
Results Abridged
45
SQL>
SQL> set serveroutput on
SQL> declare
2 studidstudent.student_id%type;
3 salustudent.salutation%type;
4 fnamestudent.first_name%type;
5 lnamestudent.last_name%type;
6 saddressstudent.street_address%TyPE;
7 scityzipcode.city%Type;
8 sstatezipcode.state%Type;
9 szipzipcode.zip%type;
10 sphonestudent.phone%type;
11 sregdatevarchar2(80) :=0;
12 rowcount PLS_INTEGER :=0;
13
14 cursorstudrec(studidint)
15 is
16 SELECT S.SALUTATION ,S.FIRST_NAME, S.LAST_NAME,
17 S.STREET_ADDRESS,Z.CITY,Z.STATE,Z.ZIP,S.PHONE, TO_CHAR(S.REGISTRATION_DATE,'MON-DD-RRRR') AS REGISTRATION_DATE,
18 S.STUDENT_ID
19 FROM STUDENT S INNER JOIN ZIPCODE Z
20 ON
21 S.ZIP = Z.ZIP
22 wherestudent_id = studid;
23
24 begin
25
26 openstudrec(375);
27 loop
28 fetch studrec into salu,fname, lname, saddress,scity,sstate,szip, sphone,sregdate,studid ;
29 EXIT when studrec%NOTFOUND;
30 rowcount :=studrec%ROWCOUNT;
31
32 DBMS_OUTPUT.PUT_LINE(rowcount ||' ' ||'is the number of rows processed ');
33 DBMS_OUTPUT.PUT_LINE('Student ID:'||' '||studid);
34 DBMS_OUTPUT.PUT_LINE('Student Name:'||' '||salu||' '||fname||' '||lname);
35 DBMS_OUTPUT.PUT_LINE('Address:'||saddress);
46
36 DBMS_OUTPUT.PUT_LINE('City:'||scity);
37 DBMS_OUTPUT.PUT_LINE('State:'||sstate);
38 DBMS_OUTPUT.PUT_LINE('Phone:'||sphone);
39 DBMS_OUTPUT.PUT_LINE('REGISTRATION DATE:'||sregdate);
40 END LOOP;
41
42
43 IFstudrec%ISOPEN = FALSE
44 THEN
45 DBMS_OUTPUT.PUT_LINE('Cursor is closed');
46 ELSE
47 DBMS_OUTPUT.PUT_LINE('Cursor is open');
48 END IF;
49 EXCEPTION
50 WHEN OTHERS
51 THEN
52 DBMS_OUTPUT.PUT_LINE(SQLERRM);
53 END;
54 /
1 is the number of rows processed
Student ID: 375
Student Name: Mr. Jack Kasperovich
Address:98-17 162nd Ave.
City:Howard Bank
State:NY
Phone:718-555-5555
REGISTRATION DATE:FEB-21-2007
Cursor is open
PL/SQL procedure successfully completed.
SQL>
SQL>
SQL> set serveroutput on
SQL> declare
2 studidstudent.student_id%type;
3 salustudent.salutation%type;
4 fnamestudent.first_name%type;
5 lnamestudent.last_name%type;
47
6 saddressstudent.street_address%TyPE;
7 scityzipcode.city%Type;
8 sstatezipcode.state%Type;
9 szipzipcode.zip%type;
10 sphonestudent.phone%type;
11 sregdatevarchar2(80) :=0;
12 rowcount PLS_INTEGER :=0;
13
14 cursorstudrec(studidint)
15 is
16 SELECT S.SALUTATION ,S.FIRST_NAME, S.LAST_NAME,
17 S.STREET_ADDRESS,Z.CITY,Z.STATE,Z.ZIP,S.PHONE, TO_CHAR(S.REGISTRATION_DATE,'MON-DD-RRRR') AS REGISTRATION_DATE,
18 S.STUDENT_ID
19 FROM STUDENT S INNER JOIN ZIPCODE Z
20 ON
21 S.ZIP = Z.ZIP
22 wherestudent_id = studid;
23
24 begin
25
26 openstudrec(375);
27 loop
28 fetch studrec into salu,fname, lname, saddress,scity,sstate,szip, sphone,sregdate,studid ;
29 EXIT when studrec%NOTFOUND;
30 rowcount :=studrec%ROWCOUNT;
31
32 DBMS_OUTPUT.PUT_LINE(rowcount ||' ' ||'is the number of rows processed ');
33 DBMS_OUTPUT.PUT_LINE('Student ID:'||' '||studid);
34 DBMS_OUTPUT.PUT_LINE('Student Name:'||' '||salu||' '||fname||' '||lname);
35 DBMS_OUTPUT.PUT_LINE('Address:'||saddress);
36 DBMS_OUTPUT.PUT_LINE('City:'||scity);
37 DBMS_OUTPUT.PUT_LINE('State:'||sstate);
38 DBMS_OUTPUT.PUT_LINE('Phone:'||sphone);
39 DBMS_OUTPUT.PUT_LINE('REGISTRATION DATE:'||sregdate);
40 END LOOP;
41 CLOSEstudrec;
42
43 IFstudrec%ISOPEN = FALSE
44 THEN
48
45 DBMS_OUTPUT.PUT_LINE('Cursor is closed');
46 ELSE
47 DBMS_OUTPUT.PUT_LINE('Cursor is open');
48 END IF;
49 EXCEPTION
50 WHEN OTHERS
51 THEN
52 DBMS_OUTPUT.PUT_LINE(SQLERRM);
53 END;
54 /
1 is the number of rows processed
Student ID: 375
Student Name: Mr. Jack Kasperovich
Address:98-17 162nd Ave.
City:Howard Bank
State:NY
Phone:718-555-5555
REGISTRATION DATE:FEB-21-2007
Cursor is closed
PL/SQL procedure successfully completed.
SQL>
SQL> SET ECHO OFF;
SQL> SPOOL OFF;
Implicit Cursors
SET SERVEROUTPUT ON
BEGIN
DBMS_OUTPUT.ENABLE(1000000);
UPDATE STUDENT
SET FIRST_NAME = 'JACKSON'
WHERE STUDENT_ID = 375;
DBMS_OUTPUT.PUT_LINE(SQL%ROWCOUNT||'rows updated');
49
IF SQL%NOTFOUND
THEN
DBMS_OUTPUT.PUT_LINE('CHECK THE STUDENT ID ENTERED BECAUSE IS NOT FOUND IN DATABASE');
END IF;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN DBMS_OUTPUT.PUT_lINE(SQLERRM);
END;
/
anonymous block completed
1rows updated
select first_name ,last_name, student_id from student where student_id = 375
FIRST_NAME LAST_NAME STUDENT_ID
JACKSON Kasperovich 375
SET SERVEROUTPUT ON
BEGIN
DBMS_OUTPUT.ENABLE(1000000);
UPDATE STUDENT
SET FIRST_NAME = 'JACKSON'
WHERE STUDENT_ID = 500;
DBMS_OUTPUT.PUT_LINE(SQL%ROWCOUNT||'rows updated');
IF SQL%NOTFOUND
THEN
DBMS_OUTPUT.PUT_LINE('CHECK THE STUDENT ID ENTERED BECAUSE IS NOT FOUND IN DATABASE');
END IF;
COMMIT;
50
EXCEPTION
WHEN OTHERS
THEN DBMS_OUTPUT.PUT_lINE(SQLERRM);
END;
anonymous block completed
0rows updated
CHECK THE STUDENT ID ENTERED BECAUSE IS NOT FOUND IN DATABASE
Records
SQL> DECLARE
2
3 Studentsstudent%rowtype;
4
5 begin
6
7 Students.student_id :=400;
8 Students.first_name :='joe';
9 Students.last_name :='Joe';
10 Students.street_address := '5909 Wood Lane Drv';
11 Students.zip := '48104';
12 Students.phone := '709-908-9876';
13 Students.Employer :='ABC NEWS';
14 Students.Registration_date := '30-jan-09';
51
15 Students.Created_date := '30-jan-09';
16 Students.modified_date := '30-jan-09';
17 Students.created_by := 'sunny';
18 Students.modified_by :='sunny';
19
20
21 insert into student(student_id, first_name, last_name,street_address,zip,phone,
22 employer, registration_date, created_date, modified_date, created_by,modified_by)
23 values(Students.student_id,Students.first_name ,Students.last_name , Students.street_address,
24 Students.zip,Students.phone,Students.Employer, Students.Registration_date ,
25 Students.Created_date ,Students.modified_date, Students.created_by,
26 Students.modified_by
27 );
28
29 end;
30 /
PL/SQL procedure successfully completed.
SQL> commit;
Commit complete.
select first_name,last_name,student_id from student where student_id =400;
DECLARE
TYPE studentsR is record
( student_idstudent.student_id%TYPE,
first_namestudent.first_name%TYPE,
last_namestudent.last_name%TYPE,
street_addressstudent.street_address%TYPE,
phonestudent.phone%TYPE,
zip student.zip%TYPE,
FIRST_NAME LAST_NAME STUDENT_ID
joe Joe 400
52
employerstudent.employer%type,
registration_datestudent.registration_date%type,
created_datestudent.created_date%type,
modified_datestudent.modified_date%type,
created_bystudent.created_by%type,
modified_bystudent.modified_by%type
);
Students studentsR;
begin
Students.student_id :=600;
Students.first_name :='Michael';
Students.last_name :='Joesph';
Students.street_address := '5909 Wood Lane Drv';
Students.zip := '48104';
Students.phone := '709-908-9876';
Students.Employer :='ABC NEWS';
Students.Registration_date := '30-jan-09';
Students.Created_date := '30-jan-09';
Students.modified_date := '30-jan-09';
Students.created_by := 'sunny';
Students.modified_by :='sunny';
insert into student(student_id, first_name, last_name,street_address,zip,phone,
employer, registration_date, created_date, modified_date, created_by,modified_by)
values(Students.student_id,Students.first_name ,Students.last_name , Students.street_address,
Students.zip,Students.phone,Students.Employer, Students.Registration_date ,
Students.Created_date ,Students.modified_date, Students.created_by,
Students.modified_by
);
commit;
end;
/
53
select first_name,last_name,student_id from student where student_id =600;
FIRST_NAME LAST_NAME STUDENT_ID
Michael Joesph 600
Oracle Label Security
DBA
SQL> create user secmanidentified by s;
User created.
SQL> create user bank identified by b;
User created.
SQL> grant dba to secman;
Grant succeeded.
SQL> grant create session , resources to bank;
grant create session , resources to bank
*
ERROR at line 1:
ORA-01919: role 'RESOURCES' does not exist
SQL> grant create session , resource to bank;
54
Grant succeeded.
SQL> spool off
grant execute on dbms_rls to secman;
grant execute succeeded.
grant execute on dbms_rls to system;
grant execute succeeded.
SQL> create user lara identified by l;
User created.
SQL> create user scott identified by s;
User created.
SQL> grant create session to scott, lara;
Grant succeeded.
SQL> set echo off
SQL> spool off;
USER Secman
SQL> create table access_policy
2 (AM_NAME VARCHAR2(20) NOT NULL,
3 CUST_ID NUMBER NOT NULL,
4 ACCESS_TYPE CHAR(1) NOT NULL);
Table created.
SQL>
SQL> INSERT INTO ACCESS_POLICY(AM_NAME, CUST_ID, ACCESS_TYPE)
2 VALUES('SCOTT', 123, 'S');
55
1 row created.
SQL>
SQL> INSERT INTO ACCESS_POLICY(AM_NAME, CUST_ID, ACCESS_TYPE)
2 VALUES('SCOTT', 123, 'I');
1 row created.
SQL>
SQL> INSERT INTO ACCESS_POLICY(AM_NAME, CUST_ID, ACCESS_TYPE)
2 VALUES('SCOTT', 123, 'D');
1 row created.
SQL>
SQL> INSERT INTO ACCESS_POLICY(AM_NAME, CUST_ID, ACCESS_TYPE)
2 VALUES ('SCOTT', 123, 'U');
1 row created.
SQL>
SQL> INSERT INTO ACCESS_POLICY(AM_NAME, CUST_ID, ACCESS_TYPE)
2 VALUES ('SCOTT', 456, 'S');
1 row created.
SQL>
SQL> INSERT INTO ACCESS_POLICY(AM_NAME, CUST_ID, ACCESS_TYPE)
2 VALUES('SCOTT', 789, 'S');
1 row created.
SQL>
SQL> INSERT INTO ACCESS_POLICY(AM_NAME, CUST_ID, ACCESS_TYPE)
2 VALUES('LARA', 456, 'S');
1 row created.
SQL>
56
SQL> INSERT INTO ACCESS_POLICY(AM_NAME, CUST_ID, ACCESS_TYPE)
2 VALUES ('LARA', 456, 'I');
1 row created.
SQL>
SQL> INSERT INTO ACCESS_POLICY(AM_NAME, CUST_ID, ACCESS_TYPE)
2 VALUES ('LARA', 456, 'D');
1 row created.
SQL>
SQL> INSERT INTO ACCESS_POLICY(AM_NAME, CUST_ID, ACCESS_TYPE)
2 VALUES ('LARA', 456, 'U');
1 row created.
SQL>
SQL> create or replace function get_sel_cust_id
2 (p_schema in varchar2,
3 p_table in varchar2
4 )
5 return varchar2
6 as
7 l_retstrvarchar2(2000);
8 begin
9 if (p_schema = user) then
10 l_retstr :=null;
11 else
12 for cust_rec in
13 (select cust_id from access_policy where am_name = USER
14 and access_type = 'S'
15 )loop
16 l_retstr :=l_retstr||','||cust_rec.cust_id;
17 end loop;
18 l_retstr :=ltrim(l_retstr, ',');
19 l_retstr :='CUST_ID IN ('||l_retstr||')';
20 end if;
21 return l_retstr;
57
22 end;
23 /
Function created.
SQL> INSERT INTO ACCESS_POLICY(AM_NAME, CUST_ID, ACCESS_TYPE)
2 VALUES ('SECMAN', 123, 'S');
1 row created.
SQL>
SQL> INSERT INTO ACCESS_POLICY(AM_NAME, CUST_ID, ACCESS_TYPE)
2 VALUES('SECMAN',456,'S');
1 row created.
SQL>
SQL> INSERT INTO ACCESS_POLICY(AM_NAME, CUST_ID, ACCESS_TYPE)
2 VALUES('SECMAN', 789,'S');
1 row created.
SQL> CREATE OR REPLACE FUNCTION get_iud_cust_id
2 (p_schema in varchar2,
3 p_table in varchar2
4 ) return varchar2
5 as
6 l_retstrvarchar2(2000);
7 begin
8 if(p_schema = user) then
9 l_retstr := null;
10 else
11 forcust_rec in
12 (
13 select cust_id from access_policy where am_name = USER
14 and access_type in ('I', 'U', 'D')
15 ) loop
16 l_retstr := l_retstr||','||cust_rec.cust_id;
17 end loop;
58
18 l_retstr := ltrim(l_retstr, ',');
19 l_retstr := 'CUST_ID IN ('||l_retstr||')';
20 end if;
21 return l_retstr;
22 end;
23 /
Function created.
SQL>
SQL> INSERT INTO ACCESS_POLICY(AM_NAME, CUST_ID, ACCESS_TYPE)
2 VALUES('SECMAN',123, 'U');
1 row created.
SQL> SELECT GET_IUD_CUST_ID('BANK', 'CUSTOMERS') FROM DUAL
2
SQL> /
GET_IUD_CUST_ID('BANK','CUSTOMERS')
--------------------------------------------------------------------------------
CUST_ID IN (123)
SQL> SET ECHO OFF
SQL> SPOOL OFF
UserScott
SQL> select * from BANK.CUSTOMERS;
CUST_ID CUST_NAME
---------- --------------------
123 Jay Kulkarni
456 Wim Patel
SQL> select * from BANK.ACCOUNTS;
ACC_ID CUST_ID BALANCE
59
---------- ---------- ----------
101 123 10000000
102 123 15000000
201 456 10000000
202 456 20000000
SQL> SET ECHO OFF;
SQL> SPOOL OFF;
USER Bank
SQL> select * from bank.accounts;
ACC_ID CUST_ID BALANCE
---------- ---------- ----------
101 123 10000000
102 123 15000000
201 456 10000000
202 456 20000000
SQL> select * from bank.customers;
CUST_ID CUST_NAME
---------- --------------------
456 Wim Patel
SQL> update bank.customers set cust_name = 'Smith Joe';
1 row updated.
SQL> select * from bank.customers;
CUST_ID CUST_NAME
---------- --------------------
456 Smith Joe
SQL> commit;
60
Commit complete.
SQL> insert into bank.customers (cust_id, cust_name) values(999, 'Monica joe');
insert into bank.customers (cust_id, cust_name) values(999, 'Monica joe')
*
ERROR at line 1:
ORA-28115: policy with check option violation
SQL> spool off
USER Secman2
SQL>
SQL> begin
2 dbms_rls.add_policy (
3 object_schema => 'BANK',
4 object_name => 'CUSTOMERS',
5 policy_name => 'CUST_SEL_POLICY',
6 function_schema => 'SECMAN',
7 policy_function => 'GET_SEL_CUST_ID',
8 statement_types => 'SELECT',
9 update_check => TRUE
10 );
11 end;
12 /
PL/SQL procedure successfully completed.
SQL>
SQL> begin
2 dbms_rls.add_policy (
3 object_schema => 'BANK',
4 object_name => 'CUSTOMERS',
5 policy_name => 'CUST_IUD_POLICY',
6 function_schema => 'SECMAN',
7 policy_function => 'GET_IUD_CUST_ID',
61
8 statement_types => 'INSERT, UPDATE, DELETE',
9 update_check => TRUE
10 );
11 end;
12 /
PL/SQL procedure successfully completed.
SQL> spool off
62

Weitere ähnliche Inhalte

Andere mochten auch

COMPLICAÇÕES DECORRENTES DA COLOCAÇÃO DE PIERCINGS EM CAVIDADE ORAL – RELATO ...
COMPLICAÇÕES DECORRENTES DA COLOCAÇÃO DE PIERCINGS EM CAVIDADE ORAL – RELATO ...COMPLICAÇÕES DECORRENTES DA COLOCAÇÃO DE PIERCINGS EM CAVIDADE ORAL – RELATO ...
COMPLICAÇÕES DECORRENTES DA COLOCAÇÃO DE PIERCINGS EM CAVIDADE ORAL – RELATO ...Fundecto
 
Плахин В.Т. Имя как «очаг» рекламного семиозиса
Плахин В.Т. Имя как «очаг» рекламного семиозисаПлахин В.Т. Имя как «очаг» рекламного семиозиса
Плахин В.Т. Имя как «очаг» рекламного семиозисаprasu1995
 
Adela Law Initiative
Adela Law InitiativeAdela Law Initiative
Adela Law Initiativeinternetbar
 
Visual resume Igor
Visual resume IgorVisual resume Igor
Visual resume IgorIgor Marin
 
Documento
DocumentoDocumento
Documentonadala
 
Apresentação1
Apresentação1Apresentação1
Apresentação1miniantena
 
Mrs craig final exam 3
Mrs craig   final exam 3Mrs craig   final exam 3
Mrs craig final exam 3cmhagc
 
Mrs craig final exam 3
Mrs craig   final exam 3Mrs craig   final exam 3
Mrs craig final exam 3cmhagc
 
Small Astroid Presentation
Small Astroid PresentationSmall Astroid Presentation
Small Astroid PresentationGertWeltens
 
участие в форуме 2013
участие в форуме 2013участие в форуме 2013
участие в форуме 2013Antonina Navros
 
ICAEW/Grant Thornton UK Business Confidence Monitor Q3 2013
ICAEW/Grant Thornton UK Business Confidence Monitor Q3 2013ICAEW/Grant Thornton UK Business Confidence Monitor Q3 2013
ICAEW/Grant Thornton UK Business Confidence Monitor Q3 2013Grant Thornton UK LLP
 
Target audience aa 1
Target audience aa 1Target audience aa 1
Target audience aa 1nctcmedia12
 
CHQ Schools Presentation
CHQ Schools PresentationCHQ Schools Presentation
CHQ Schools PresentationAndyMcMorran
 

Andere mochten auch (20)

COMPLICAÇÕES DECORRENTES DA COLOCAÇÃO DE PIERCINGS EM CAVIDADE ORAL – RELATO ...
COMPLICAÇÕES DECORRENTES DA COLOCAÇÃO DE PIERCINGS EM CAVIDADE ORAL – RELATO ...COMPLICAÇÕES DECORRENTES DA COLOCAÇÃO DE PIERCINGS EM CAVIDADE ORAL – RELATO ...
COMPLICAÇÕES DECORRENTES DA COLOCAÇÃO DE PIERCINGS EM CAVIDADE ORAL – RELATO ...
 
Плахин В.Т. Имя как «очаг» рекламного семиозиса
Плахин В.Т. Имя как «очаг» рекламного семиозисаПлахин В.Т. Имя как «очаг» рекламного семиозиса
Плахин В.Т. Имя как «очаг» рекламного семиозиса
 
Upravljanje digitalnim pravima, Tatjana Brzulović Stanisavljević
Upravljanje digitalnim pravima, Tatjana Brzulović StanisavljevićUpravljanje digitalnim pravima, Tatjana Brzulović Stanisavljević
Upravljanje digitalnim pravima, Tatjana Brzulović Stanisavljević
 
Adela Law Initiative
Adela Law InitiativeAdela Law Initiative
Adela Law Initiative
 
Visual resume Igor
Visual resume IgorVisual resume Igor
Visual resume Igor
 
Documento
DocumentoDocumento
Documento
 
Baum3
Baum3Baum3
Baum3
 
Definitions
DefinitionsDefinitions
Definitions
 
Apresentação1
Apresentação1Apresentação1
Apresentação1
 
Masgnb seminar operator_gnb_2013-program
Masgnb seminar operator_gnb_2013-programMasgnb seminar operator_gnb_2013-program
Masgnb seminar operator_gnb_2013-program
 
Mrs craig final exam 3
Mrs craig   final exam 3Mrs craig   final exam 3
Mrs craig final exam 3
 
Mrs craig final exam 3
Mrs craig   final exam 3Mrs craig   final exam 3
Mrs craig final exam 3
 
Fdfsdf
FdfsdfFdfsdf
Fdfsdf
 
Small Astroid Presentation
Small Astroid PresentationSmall Astroid Presentation
Small Astroid Presentation
 
участие в форуме 2013
участие в форуме 2013участие в форуме 2013
участие в форуме 2013
 
ICAEW/Grant Thornton UK Business Confidence Monitor Q3 2013
ICAEW/Grant Thornton UK Business Confidence Monitor Q3 2013ICAEW/Grant Thornton UK Business Confidence Monitor Q3 2013
ICAEW/Grant Thornton UK Business Confidence Monitor Q3 2013
 
Target audience aa 1
Target audience aa 1Target audience aa 1
Target audience aa 1
 
Fleur la Libre
Fleur la LibreFleur la Libre
Fleur la Libre
 
CHQ Schools Presentation
CHQ Schools PresentationCHQ Schools Presentation
CHQ Schools Presentation
 
Master Thesis
Master ThesisMaster Thesis
Master Thesis
 

Ähnlich wie Oracle 11G- PLSQL

OOW19 - Killing database sessions
OOW19 - Killing database sessionsOOW19 - Killing database sessions
OOW19 - Killing database sessionsConnor McDonald
 
OOW19 - Flashback, not just for DBAs
OOW19 - Flashback, not just for DBAsOOW19 - Flashback, not just for DBAs
OOW19 - Flashback, not just for DBAsConnor McDonald
 
OOW19 - Ten Amazing SQL features
OOW19 - Ten Amazing SQL featuresOOW19 - Ten Amazing SQL features
OOW19 - Ten Amazing SQL featuresConnor McDonald
 
Understanding Optimizer-Statistics-for-Developers
Understanding Optimizer-Statistics-for-DevelopersUnderstanding Optimizer-Statistics-for-Developers
Understanding Optimizer-Statistics-for-DevelopersEnkitec
 
12c Mini Lesson - Data Redaction
12c Mini Lesson - Data Redaction12c Mini Lesson - Data Redaction
12c Mini Lesson - Data RedactionConnor McDonald
 
5. Basic Structure of SQL Queries.pdf
5. Basic Structure of SQL Queries.pdf5. Basic Structure of SQL Queries.pdf
5. Basic Structure of SQL Queries.pdfSunita Milind Dol
 
pdfcoffee.com_i-openwells-basics-training-3-pdf-free.pdf
pdfcoffee.com_i-openwells-basics-training-3-pdf-free.pdfpdfcoffee.com_i-openwells-basics-training-3-pdf-free.pdf
pdfcoffee.com_i-openwells-basics-training-3-pdf-free.pdfJalal Neshat
 
Oracle12c For Developers
Oracle12c For DevelopersOracle12c For Developers
Oracle12c For DevelopersAlex Nuijten
 
Most important "trick" of performance instrumentation
Most important "trick" of performance instrumentationMost important "trick" of performance instrumentation
Most important "trick" of performance instrumentationCary Millsap
 
UKOUG - 25 years of hints and tips
UKOUG - 25 years of hints and tipsUKOUG - 25 years of hints and tips
UKOUG - 25 years of hints and tipsConnor McDonald
 
Relational DB Course
Relational DB  Course Relational DB  Course
Relational DB Course Sunny U Okoro
 
Book fundamentals of-digital-electronics
Book fundamentals of-digital-electronicsBook fundamentals of-digital-electronics
Book fundamentals of-digital-electronicsViji Yogi Balu
 
APAC Groundbreakers 2019 - Perth/Melbourne
APAC Groundbreakers 2019 - Perth/Melbourne APAC Groundbreakers 2019 - Perth/Melbourne
APAC Groundbreakers 2019 - Perth/Melbourne Connor McDonald
 
IBM Connections 4.5 User Data Propagation.
IBM Connections 4.5 User Data Propagation.IBM Connections 4.5 User Data Propagation.
IBM Connections 4.5 User Data Propagation.michele buccarello
 

Ähnlich wie Oracle 11G- PLSQL (20)

OOW19 - Killing database sessions
OOW19 - Killing database sessionsOOW19 - Killing database sessions
OOW19 - Killing database sessions
 
OOW19 - Flashback, not just for DBAs
OOW19 - Flashback, not just for DBAsOOW19 - Flashback, not just for DBAs
OOW19 - Flashback, not just for DBAs
 
OOW19 - Ten Amazing SQL features
OOW19 - Ten Amazing SQL featuresOOW19 - Ten Amazing SQL features
OOW19 - Ten Amazing SQL features
 
Understanding Optimizer-Statistics-for-Developers
Understanding Optimizer-Statistics-for-DevelopersUnderstanding Optimizer-Statistics-for-Developers
Understanding Optimizer-Statistics-for-Developers
 
12c Mini Lesson - Data Redaction
12c Mini Lesson - Data Redaction12c Mini Lesson - Data Redaction
12c Mini Lesson - Data Redaction
 
SAV
SAVSAV
SAV
 
5. Basic Structure of SQL Queries.pdf
5. Basic Structure of SQL Queries.pdf5. Basic Structure of SQL Queries.pdf
5. Basic Structure of SQL Queries.pdf
 
pdfcoffee.com_i-openwells-basics-training-3-pdf-free.pdf
pdfcoffee.com_i-openwells-basics-training-3-pdf-free.pdfpdfcoffee.com_i-openwells-basics-training-3-pdf-free.pdf
pdfcoffee.com_i-openwells-basics-training-3-pdf-free.pdf
 
Oracle12c For Developers
Oracle12c For DevelopersOracle12c For Developers
Oracle12c For Developers
 
Oracle12 for Developers - Oracle OpenWorld Preview AMIS
Oracle12 for Developers - Oracle OpenWorld Preview AMISOracle12 for Developers - Oracle OpenWorld Preview AMIS
Oracle12 for Developers - Oracle OpenWorld Preview AMIS
 
Most important "trick" of performance instrumentation
Most important "trick" of performance instrumentationMost important "trick" of performance instrumentation
Most important "trick" of performance instrumentation
 
UKOUG - 25 years of hints and tips
UKOUG - 25 years of hints and tipsUKOUG - 25 years of hints and tips
UKOUG - 25 years of hints and tips
 
Relational DB Course
Relational DB  Course Relational DB  Course
Relational DB Course
 
Fundamentals of digital electronics
Fundamentals of digital electronicsFundamentals of digital electronics
Fundamentals of digital electronics
 
Book fundamentals of-digital-electronics
Book fundamentals of-digital-electronicsBook fundamentals of-digital-electronics
Book fundamentals of-digital-electronics
 
Digital electronics(2)
Digital electronics(2)Digital electronics(2)
Digital electronics(2)
 
APAC Groundbreakers 2019 - Perth/Melbourne
APAC Groundbreakers 2019 - Perth/Melbourne APAC Groundbreakers 2019 - Perth/Melbourne
APAC Groundbreakers 2019 - Perth/Melbourne
 
Flashback ITOUG
Flashback ITOUGFlashback ITOUG
Flashback ITOUG
 
IBM Connections 4.5 User Data Propagation.
IBM Connections 4.5 User Data Propagation.IBM Connections 4.5 User Data Propagation.
IBM Connections 4.5 User Data Propagation.
 
Service Manual.pdf
Service Manual.pdfService Manual.pdf
Service Manual.pdf
 

Mehr von Sunny U Okoro

SQL Server and SSAS
SQL Server and SSAS SQL Server and SSAS
SQL Server and SSAS Sunny U Okoro
 
BI Apps Reports 5 QlikSense Desktop
BI Apps Reports 5  QlikSense DesktopBI Apps Reports 5  QlikSense Desktop
BI Apps Reports 5 QlikSense DesktopSunny U Okoro
 
MS SSAS 2008 & MDX Reports
MS SSAS 2008 &  MDX Reports MS SSAS 2008 &  MDX Reports
MS SSAS 2008 & MDX Reports Sunny U Okoro
 
DBA Oracle,SQL Server, MYSQL,DB2 Express Postgres & Sybase
DBA Oracle,SQL Server, MYSQL,DB2 Express Postgres & SybaseDBA Oracle,SQL Server, MYSQL,DB2 Express Postgres & Sybase
DBA Oracle,SQL Server, MYSQL,DB2 Express Postgres & SybaseSunny U Okoro
 
BI Apps ETL 4- Informatica PowerCenter Express
BI  Apps ETL 4- Informatica PowerCenter  ExpressBI  Apps ETL 4- Informatica PowerCenter  Express
BI Apps ETL 4- Informatica PowerCenter ExpressSunny U Okoro
 
BI Apps Reports 4 Cognos BI and Crystal Reports
BI Apps Reports 4  Cognos BI and Crystal ReportsBI Apps Reports 4  Cognos BI and Crystal Reports
BI Apps Reports 4 Cognos BI and Crystal ReportsSunny U Okoro
 
Tableau Reports and Oracle OBIEE
Tableau Reports and  Oracle OBIEETableau Reports and  Oracle OBIEE
Tableau Reports and Oracle OBIEESunny U Okoro
 
DB 3 Sybase ASE 15 & MS SQL Server
DB 3 Sybase ASE 15 & MS SQL Server DB 3 Sybase ASE 15 & MS SQL Server
DB 3 Sybase ASE 15 & MS SQL Server Sunny U Okoro
 
Advanced ETL2 Pentaho
Advanced ETL2  Pentaho Advanced ETL2  Pentaho
Advanced ETL2 Pentaho Sunny U Okoro
 
BI Apps Reports2- Oracle OBIEE & SAP Business Objects
BI Apps Reports2- Oracle OBIEE & SAP Business ObjectsBI Apps Reports2- Oracle OBIEE & SAP Business Objects
BI Apps Reports2- Oracle OBIEE & SAP Business ObjectsSunny U Okoro
 
MiS SharePoint 2010-SSRS, Power View & PowerPivot 2012
MiS SharePoint 2010-SSRS, Power View & PowerPivot 2012MiS SharePoint 2010-SSRS, Power View & PowerPivot 2012
MiS SharePoint 2010-SSRS, Power View & PowerPivot 2012Sunny U Okoro
 
BI Apps OLAP & Reports- SSAS 2012 Tabular & Multidimensional
BI Apps  OLAP & Reports- SSAS 2012 Tabular & Multidimensional BI Apps  OLAP & Reports- SSAS 2012 Tabular & Multidimensional
BI Apps OLAP & Reports- SSAS 2012 Tabular & Multidimensional Sunny U Okoro
 
Advanced SSRS 2012-SSAS,SSIS, XML, ASP.NET,Forms
Advanced SSRS 2012-SSAS,SSIS, XML, ASP.NET,FormsAdvanced SSRS 2012-SSAS,SSIS, XML, ASP.NET,Forms
Advanced SSRS 2012-SSAS,SSIS, XML, ASP.NET,FormsSunny U Okoro
 
Advanced ETL MS SSIS 2012 & Talend
Advanced ETL  MS  SSIS 2012 & Talend Advanced ETL  MS  SSIS 2012 & Talend
Advanced ETL MS SSIS 2012 & Talend Sunny U Okoro
 
DB Develop 2 Oracle 12c, DB2, MYSQL, SQL Anywhere 16
 DB Develop 2 Oracle 12c, DB2, MYSQL, SQL Anywhere 16  DB Develop 2 Oracle 12c, DB2, MYSQL, SQL Anywhere 16
DB Develop 2 Oracle 12c, DB2, MYSQL, SQL Anywhere 16 Sunny U Okoro
 
DB Security Oracle 11g-Application Context, Dynamic Views & Aduits
DB Security Oracle 11g-Application Context, Dynamic Views & AduitsDB Security Oracle 11g-Application Context, Dynamic Views & Aduits
DB Security Oracle 11g-Application Context, Dynamic Views & AduitsSunny U Okoro
 

Mehr von Sunny U Okoro (20)

SQL Server and SSAS
SQL Server and SSAS SQL Server and SSAS
SQL Server and SSAS
 
BI Apps Reports 5 QlikSense Desktop
BI Apps Reports 5  QlikSense DesktopBI Apps Reports 5  QlikSense Desktop
BI Apps Reports 5 QlikSense Desktop
 
MS SSAS 2008 & MDX Reports
MS SSAS 2008 &  MDX Reports MS SSAS 2008 &  MDX Reports
MS SSAS 2008 & MDX Reports
 
DBA Oracle,SQL Server, MYSQL,DB2 Express Postgres & Sybase
DBA Oracle,SQL Server, MYSQL,DB2 Express Postgres & SybaseDBA Oracle,SQL Server, MYSQL,DB2 Express Postgres & Sybase
DBA Oracle,SQL Server, MYSQL,DB2 Express Postgres & Sybase
 
Database Migration
Database MigrationDatabase Migration
Database Migration
 
Cognos Express
Cognos ExpressCognos Express
Cognos Express
 
BI Apps ETL 4- Informatica PowerCenter Express
BI  Apps ETL 4- Informatica PowerCenter  ExpressBI  Apps ETL 4- Informatica PowerCenter  Express
BI Apps ETL 4- Informatica PowerCenter Express
 
Oracle ODI
Oracle ODIOracle ODI
Oracle ODI
 
BI Apps Reports 4 Cognos BI and Crystal Reports
BI Apps Reports 4  Cognos BI and Crystal ReportsBI Apps Reports 4  Cognos BI and Crystal Reports
BI Apps Reports 4 Cognos BI and Crystal Reports
 
Tableau Reports and Oracle OBIEE
Tableau Reports and  Oracle OBIEETableau Reports and  Oracle OBIEE
Tableau Reports and Oracle OBIEE
 
DB 3 Sybase ASE 15 & MS SQL Server
DB 3 Sybase ASE 15 & MS SQL Server DB 3 Sybase ASE 15 & MS SQL Server
DB 3 Sybase ASE 15 & MS SQL Server
 
MS SSAS 2012 & MDX
MS SSAS 2012  &  MDXMS SSAS 2012  &  MDX
MS SSAS 2012 & MDX
 
Advanced ETL2 Pentaho
Advanced ETL2  Pentaho Advanced ETL2  Pentaho
Advanced ETL2 Pentaho
 
BI Apps Reports2- Oracle OBIEE & SAP Business Objects
BI Apps Reports2- Oracle OBIEE & SAP Business ObjectsBI Apps Reports2- Oracle OBIEE & SAP Business Objects
BI Apps Reports2- Oracle OBIEE & SAP Business Objects
 
MiS SharePoint 2010-SSRS, Power View & PowerPivot 2012
MiS SharePoint 2010-SSRS, Power View & PowerPivot 2012MiS SharePoint 2010-SSRS, Power View & PowerPivot 2012
MiS SharePoint 2010-SSRS, Power View & PowerPivot 2012
 
BI Apps OLAP & Reports- SSAS 2012 Tabular & Multidimensional
BI Apps  OLAP & Reports- SSAS 2012 Tabular & Multidimensional BI Apps  OLAP & Reports- SSAS 2012 Tabular & Multidimensional
BI Apps OLAP & Reports- SSAS 2012 Tabular & Multidimensional
 
Advanced SSRS 2012-SSAS,SSIS, XML, ASP.NET,Forms
Advanced SSRS 2012-SSAS,SSIS, XML, ASP.NET,FormsAdvanced SSRS 2012-SSAS,SSIS, XML, ASP.NET,Forms
Advanced SSRS 2012-SSAS,SSIS, XML, ASP.NET,Forms
 
Advanced ETL MS SSIS 2012 & Talend
Advanced ETL  MS  SSIS 2012 & Talend Advanced ETL  MS  SSIS 2012 & Talend
Advanced ETL MS SSIS 2012 & Talend
 
DB Develop 2 Oracle 12c, DB2, MYSQL, SQL Anywhere 16
 DB Develop 2 Oracle 12c, DB2, MYSQL, SQL Anywhere 16  DB Develop 2 Oracle 12c, DB2, MYSQL, SQL Anywhere 16
DB Develop 2 Oracle 12c, DB2, MYSQL, SQL Anywhere 16
 
DB Security Oracle 11g-Application Context, Dynamic Views & Aduits
DB Security Oracle 11g-Application Context, Dynamic Views & AduitsDB Security Oracle 11g-Application Context, Dynamic Views & Aduits
DB Security Oracle 11g-Application Context, Dynamic Views & Aduits
 

Kürzlich hochgeladen

Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitecturePixlogix Infotech
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machinePadma Pradeep
 
How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?XfilesPro
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Allon Mureinik
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...shyamraj55
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersThousandEyes
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhisoniya singh
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...HostedbyConfluent
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphNeo4j
 

Kürzlich hochgeladen (20)

Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC Architecture
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machine
 
How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
 

Oracle 11G- PLSQL

  • 2. 1 Contents Introduction ..................................................................................................................................................2 School Database Diagram.............................................................................................................................4 Triggers..........................................................................................................................................................6 Stored Procedures ......................................................................................................................................15 Packages......................................................................................................................................................31 Functions.....................................................................................................................................................33 Cursors ........................................................................................................................................................37 Records .......................................................................................................................................................50 Oracle Label Security ..................................................................................................................................53
  • 4. 3 Microsoft Power Pivot Oracle SQL Developer Data Modeler
  • 6. 5
  • 7. 6 Triggers Connected to: Personal Oracle Database 11g Release 11.1.0.6.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options SQL> create table student_aduit 2 (student_id Number(8,0), 3 salutation varchar2(5), 4 first_name varchar2(25), 5 last_name varchar2(25), 6 street_address varchar2(50), 7 zip varchar2(5), 8 phone varchar2(15), 9 record_id number, 10 modified_by varchar2(30) 11 ); Table created. SQL> create sequence studentrecord_aduit_seq 2 start with 09081 3 increment by 45 4 nocycle 5 nocache; Sequence created.
  • 8. 7 SQL> create or replace trigger student_aduit_RD 2 before insert on student_aduit 3 for each row 4 begin 5 /* fill in the record_id with the primary key values created by sequence*/ 6 select studentrecord_aduit_seq.nextval 7 into :NEW.record_id 8 from dual; 9 end student_aduit_RD; 10 / Trigger created. SQL> Alter table student_aduit 2 add modified_date date; Table altered. SQL> Alter table student_aduit 2 add EMPLOYER varchar2(50); Table altered. SQL> Alter table student_aduit 2 add REGISTRATION_DATE date; Table altered. SQL> Alter table student_aduit 2 add created_by varchar2(50); Table altered. SQL> SQL> Alter table student_aduit 2 add CREATED_DATE date; Table altered.
  • 9. 8 SQL>descstudent_aduit; Name Null? Type ----------------------------------------- -------- ---------------------------- STUDENT_ID NUMBER(8) SALUTATION VARCHAR2(5) FIRST_NAME VARCHAR2(25) LAST_NAME VARCHAR2(25) STREET_ADDRESS VARCHAR2(50) ZIP VARCHAR2(5) PHONE VARCHAR2(15) RECORD_ID NUMBER MODIFIED_BY VARCHAR2(30) MODIFIED_DATE DATE EMPLOYER VARCHAR2(50) REGISTRATION_DATE DATE CREATED_BY VARCHAR2(50) CREATED_DATE DATE SQL> Alter table student_aduit 2 add action_typechar(12); Table altered. SQL> Create or replace trigger studentrecd_inst_trgg 2 after insert on student 3 for each row 4 begin 5 insert into student_aduit(student_id,salutation,first_name, last_name, 6 street_address, zip, phone, employer, registration_date, created_by, created_date) 7 select :New.student_id,:New.salutation, :New.first_name. :New.last_name, 8 :NEW.street_address, :New.zip, :New.phone, :New.employer, :New.registration_date, 9 :NEW.created_by, :NEW.created_date FROM DUAL; 10 ENDstudentrecd_inst_trgg; 11 /
  • 10. 9 Warning: Trigger created with compilation errors. SQL> SHOW ERRORS; Errors for TRIGGER STUDENTRECD_INST_TRGG: LINE/COL ERROR -------- ----------------------------------------------------------------- 2/4 PL/SQL: SQL Statement ignored 4/60 PL/SQL: ORA-00919: invalid function SQL> Create or replace trigger studentrecd_4 2 after insert on STUDENT 3 for each row 4 begin 5 insert into student_aduit(student_id,salutation,first_name, last_name, street_address, zip, phone, employer, registration_date, created_by, created_date) 6 select :New.student_id,:New.salutation, :New.first_name, :New.last_name, 7 :NEW.street_address, :New.zip, :New.phone, :New.employer, :New.registration_date, 8 :NEW.created_by, :NEW.created_date FROM DUAL; 9 END studentrecd_4; 10 / Trigger created. SQL> Create or replace trigger studentrecd_updt_trg 2 after update on student 3 for each row
  • 11. 10 4 begin 5 insert into student_aduit(student_id,salutation,first_name, last_name, street_address, zip, phone, employer, registration_date, modified_by, modified_date) 6 select :New.student_id,:New.salutation, :New.first_name, :New.last_name, 7 :NEW.street_address, :New.zip, :New.phone, :New.employer, :New.registration_date, 8 :NEW.modified_by, :NEW.modified_date FROM DUAL; 9 ENDstudentrecd_updt_trg; 10 / Trigger created. Create or replace trigger studentrecd_delt_trg after delete on student for each row begin insert into student_aduit(student_id,salutation,first_name, last_name, street_address, zip, phone, employer, registration_date, modified_by, modified_date) select :old.student_id,:old.salutation, :old.first_name, :old.last_name, :old.street_address, :old.zip, :old.phone, :old.employer, :old.registration_date, :old.modified_by, :old.modified_date FROM DUAL; END studentrecd_delt_trg; / Trigger created. insert into student(salutation, first_name, last_name, street_address, zip,phone,employer,registration_date, created_by, created_date, student_id, modified_by ,MODIFIED_DATE) values('Mr', 'Jackson','Philp','1900 E Bellview Apt 341D','07055', '7089809812','County Foods',(select sysdate from dual),'Jackson',(select sysdate from dual), 805678, 'NA', (selectsysdate from dual)); 1 row created. select * from student where student_id = 805678
  • 12. 11 STUDENT_ID SALUTATION FIRST_NAME LAST_NAME STREET_ADDRESS ZIP PHONE EMPLOYER REGISTRATION_DATE CREATED_BY CREATED_DATE MODIFIED_BY MODIFIED_DATE ---------------------- ---------- ------------------------- ------------------------- -------------------------------------------------- ----- --------------- -------------------------------------------------- ----- -------------------- ------------------------------ ------------------------- ------------------------------ ------------------------- 805678 Mr Jackson Philp 1900 E Bellview Apt 341D 07055 7089809812 County Foods 15-MAR-13 Jackson 15-MAR-13 NA 15-MAR-13 update student set last_name ='Mark', modified_by='Jackson', Modified_date = (select sysdate from dual) wherestudent_id = 805678; select * from student_aduit; STUDE NT_ID SALUT ATION FIRST_ NAME LAST_ NAME STREET_ADD RESS ZIP PHON E RECO RD_I D MODIF IED_BY MODIFIE D_DATE EMPL OYER REGISTRATIO N_DATE CREAT ED_BY CREATED_D ATE ACTION_T YPE 80567 8 Mr Jackso n Philp 1900 E Bellview Apt 341D 705 5 70898 09812 9171 Coun ty Foods 3/15/2013 Jackso n 3/15/2013 80567 8 Mr Jackso n Philp 1900 E Bellview Apt 341D 705 5 70898 09812 9216 Coun ty Foods 3/15/2013 Jackso n 3/15/2013 80567 8 Mr Jackso n Mark 1900 E Bellview Apt 341D 705 5 70898 09812 9261 Jackso n 3/15/201 3 Coun ty Foods 3/15/2013
  • 13. 12 SQL> delete student where student_id = 805678; 1 row deleted. SQL> commit; select * from student_aduit; STUDE NT_ID SALUT ATION FIRST_ NAME LAST_ NAME STREET_ADDR ESS ZI P PHON E RECOR D_ID MODIFI ED_BY MODIFIE D_DATE EMPLO YER REGISTRATI ON_DATE CREAT ED_BY CREATED _DATE ACTION _TYPE 805678 Mr Jackson Philp 1900 E Bellview Apt 341D 70 55 70898 09812 9171 County Foods 3/15/2013 Jackson 3/15/20 13 805678 Mr Jackson Philp 1900 E Bellview Apt 341D 70 55 70898 09812 9216 County Foods 3/15/2013 Jackson 3/15/20 13 805678 Mr Jackson Mark 1900 E Bellview Apt 341D 70 55 70898 09812 9261 Jackson 3/15/201 3 County Foods 3/15/2013 805678 Mr Jackson Mark 1900 E Bellview Apt 341D 70 55 70898 09812 9306 Jackson 3/15/201 3 County Foods 3/15/2013
  • 14. 13 selecttrigger_name, trigger_type, triggering_event, table_name, column_name, action_type, trigger_body,REFERENCING_NAMES ,CROSSEDITION fromuser_triggers TRIGGER_NAM E TRIGGE R_TYPE TRIGGERIN G_EVENT TABLE_ NAME COLUMN _NAME ACTION _TYPE TRIGGER_BODY REFERENCI NG_NAMES CROSSE DITION STUDENTRECD _INST_TRGG AFTER EACH ROW INSERT STUDENT PL/SQL begin insert into student_aduit(student_id,s alutation,first_name, last_name, street_address, REFERENCIN G NEW AS NEW OLD AS OLD NO STUDENTRECD _UPDT_TRG AFTER EACH ROW UPDATE STUDENT PL/SQL begin insert into student_aduit(student_id,s alutation,first_name, last_name, street_address, zip, REFERENCIN G NEW AS NEW OLD AS OLD NO STUDENT_ADUI T_RD BEFORE EACH ROW INSERT STUDENT _ADUIT PL/SQL begin /* fill in the record_id with the primary key values created by sequence*/ select studentrec REFERENCIN G NEW AS NEW OLD AS OLD NO STUDENTRECD _4 AFTER EACH ROW INSERT STUDENT PL/SQL begin insert into student_aduit(student_id,s alutation,first_name, last_name, street_address, zip, REFERENCIN G NEW AS NEW OLD AS OLD NO STUDENTRECD _DELT_TRG AFTER EACH ROW DELETE STUDENT PL/SQL begin insert into student_aduit(student_id,s alutation,first_name, REFERENCIN G NEW AS NEW OLD AS OLD NO
  • 16. 15 Stored Procedures SQL> Create table cities 2 (city_namechar(45), 3 Location_Statechar(45), 4 country char(45) 5 ); Table created. SQL> SQL> create or replace procedure city 2 (city_namecity.city_name%TYPE, 3 Location_statecity.Location_State%TYPE, 4 country city.country%TYPE 5 ) 6 AS BEGIN 7 INSERT INTO city(city_name, location_state, country) 8 values(city_name, location_state, country); 9 End city; 10 / Warning: Procedure created with compilation errors. SQL> show errors; Errors for PROCEDURE CITY: LINE/COL ERROR -------- ----------------------------------------------------------------- 0/0 PL/SQL: Compilation unit analysis terminated 2/13 PLS-00225: subprogram or cursor 'CITY' reference is out of scope SQL> create or replace procedure city 2 (city_namecities.city_name%TYPE, 3 Location_statecities.Location_State%TYPE,
  • 17. 16 4 country cities.country%TYPE 5 ) 6 AS BEGIN 7 INSERT INTO city(city_name, location_state, country) 8 values(city_name, location_state, country); 9 End city; 10 / Warning: Procedure created with compilation errors. SQL> show errors; Errors for PROCEDURE CITY: LINE/COL ERROR -------- ----------------------------------------------------------------- 7/7 PL/SQL: SQL Statement ignored 7/19 PL/SQL: ORA-04044: procedure, function, package, or type is not allowed here create or replace procedure city_insert (city_namecities.city_name%TYPE, Location_statecities.Location_State%TYPE, countrycities.country%TYPE ) AS BEGIN INSERT INTO cities(city_name, location_state, country) values(city_name, location_state, country); End city_insert; / Procedure created. SQL> Begin 2 city_insert('Washington','DC','USA');
  • 18. 17 3 city_insert('Chicago','IL','USA'); 4 End; 5 / PL/SQL procedure successfully completed. Select * from cities; CITY_NAME LOCATION_STATE COUNTRY Washington DC USA Chicago IL USA / Begin city_insert('Portland','Or','USA'); city_insert('Portland','ME','USA'); city_insert('New York','NY', 'USA'); End; / Select * from cities; CITY_NAME LOCATION_STATE COUNTRY Washington DC USA Chicago IL USA Portland Or USA Portland ME USA New York NY USA
  • 19. 18 create or replace procedure city_update (L_statecities.location_state%TYPE, c_idcities.city_id%TYPE )AS Begin update cities setlocation_state = L_state wherecity_id = c_id; endcity_update; / Procedure created. SQL> begin 2 city_update('New York','PA'); 3 end; 4 / PL/SQL procedure successfully completed. SQL> ALTER TABLE CITIES ADD CITY_ID NUMBER; Table altered. SQL> DELETE CITIES; 5 rows deleted. create or replace procedure city_insert (city_namecities.city_name%TYPE, city_idcities.city_id%TYPE, Location_statecities.Location_State%TYPE, countrycities.country%TYPE )
  • 20. 19 AS BEGIN INSERT INTO cities(city_name,city_id, location_state, country) values(city_name, city_id, location_state, country); End city_insert; / SQL> Begin 2 city_insert('Portland',909,'Or','USA'); 3 city_insert('Portland',890,'ME','USA'); 4 city_insert('New York',788,'NY', 'USA'); 5 city_insert('chicago',789,'IL', 'USA'); 6 city_insert('Washington',787,'DC', 'USA'); 7 End; 8 / PL/SQL procedure successfully completed. Select * from cities CITY_NAME LOCATION_STATE COUNTRY CITY_ID Portland Or USA 909 Portland ME USA 890 New York NY USA 788 chicago IL USA 789 Washington DC USA 787
  • 21. 20 SQL> begin 2 city_update('IL','787'); 3 end; 4 / Select * from cities CITY_NAME LOCATION_STATE COUNTRY CITY_ID Portland Or USA 909 Portland ME USA 890 New York NY USA 788 chicago IL USA 789 Washington IL USA 787 SQL> create or replace procedure city_delete 2 ( 3 c_idcities.city_id%TYPE 4 )AS Begin 5 delete cities 6 where city_id = c_id; 7 endcity_delete; 8 / Procedure created.
  • 22. 21 Select * from cities CITY_NAME LOCATION_STATE COUNTRY CITY_ID Portland Or USA 909 Portland ME USA 890 New York NY USA 788 chicago IL USA 789 SQL> SQL> create or replace procedure studentselect 2 (stud_id in student.student_id%TYPE, 3 salut OUT student.salutation%TYPE, 4 F_name OUT student.first_name%TYPE, 5 L_Name OUT student.Last_name%TYPE, 6 S_Add OUTstudent.Street_Address%TYPE, 7 ZIP OUTstudent.ZIP%TYPE, 8 Phone OUT student.phone%TYPE, 9 EMP OUT student.Employer%Type, 10 RegdateOUT student.Registration_Date%TYPE, 11 Crdate OUT student.Created_date%TYPE, 12 CBY OUT student.created_by%TYPE, 13 MBY OUTstudent.Modified_by%TYPE, 14 MdateOUT student.Modified_date%Type) 15 IS 16 BEGIN 17 SELECT 18 initcap( SALUTATION)as SALUTATION, initcap (FIRST_NAME)as First_Name nitcap (LAST_NAME)as Last_Name, 19 initcap(STREET_ADDRESS)as Street_Address,
  • 23. 22 20 ZIP, PHONE, initcap (EMPLOYER)as Employer, REGISTRATION_DATE, 21 CREATED_BY, CREATED_DATE, 22 MODIFIED_BY, MODIFIED_DATE 23 INTO 24 salut,F_name,L_Name,S_Add,ZIP,Phone,EMP,Regdate,CBY,Crdate,MBY,Mdate 25 FROM STUDENT 26 WHERE STUDENT_ID = stud_id; 27 ENDstudentselect; 28 / Procedure created. SQL> SQL> DECLARE 2 salutstudent.salutation%TYPE; 3 F_namestudent.first_name%TYPE; 4 L_Namestudent.Last_name%TYPE; 5 S_Addstudent.Street_Address%TYPE; 6 ZIP student.ZIP%TYPE; 7 Phone student.phone%TYPE; 8 EMP student.Employer%Type; 9 Regdatestudent.Registration_Date%TYPE; 10 Crdatestudent.Created_date%TYPE; 11 CBY student.created_by%TYPE; 12 MBY student.Modified_by%TYPE; 13 Mdatestudent.Modified_date%Type; 14 BEGIN 15 studentselect(384,salut,F_name,L_Name,S_Add,ZIP, 16 Phone,EMP,Regdate,Crdate,CBY,MBY,Mdate); 17 18 19 DBMS_OUTPUT.PUT('SALUTATION : ' || salut); 20 DBMS_OUTPUT.PUT('FIRST_NAME: ' || F_name); 21 DBMS_OUTPUT.PUT('LAST_NAME : ' || L_Name);
  • 24. 23 22 DBMS_OUTPUT.PUT('STUDENT_ADDRESS : ' || S_Add); 23 DBMS_OUTPUT.PUT('ZIP: ' || ZIP); 24 DBMS_OUTPUT.PUT('PHONE: ' || Phone); 25 DBMS_OUTPUT.PUT('EMPLOYER : ' || EMP); 26 DBMS_OUTPUT.PUT('REGISTRATION_DATE : ' || Regdate); 27 DBMS_OUTPUT.PUT('CREATED_DATE: ' || Crdate); 28 DBMS_OUTPUT.PUT('CREATED_BY: ' || CBY); 29 DBMS_OUTPUT.PUT('MODIFIED_BY: ' || MBY); 30 DBMS_OUTPUT.PUT('MODIFIED_DATE: ' || Mdate); 31 32 end; 33 / PL/SQL procedure successfully completed. SQL> SQL> DECLARE 2 salutstudent.salutation%TYPE; 3 F_namestudent.first_name%TYPE; 4 L_Namestudent.Last_name%TYPE; 5 S_Addstudent.Street_Address%TYPE; 6 ZIP student.ZIP%TYPE; 7 Phone student.phone%TYPE; 8 EMP student.Employer%Type; 9 Regdatestudent.Registration_Date%TYPE; 10 Crdatestudent.Created_date%TYPE; 11 CBY student.created_by%TYPE; 12 MBY student.Modified_by%TYPE; 13 Mdatestudent.Modified_date%Type; 14 BEGIN 15 studentselect(384,salut,F_name,L_Name,S_Add,ZIP, 16 Phone,EMP,Regdate,Crdate,CBY,MBY,Mdate); 17 18
  • 25. 24 19 DBMS_OUTPUT.PUT_LINE('SALUTATION : ' || salut); 20 DBMS_OUTPUT.PUT_LINE('FIRST_NAME: ' || F_name); 21 DBMS_OUTPUT.PUT_LINE('LAST_NAME : ' || L_Name); 22 DBMS_OUTPUT.PUT_LINE('STUDENT_ADDRESS : ' || S_Add); 23 DBMS_OUTPUT.PUT_LINE('ZIP: ' || ZIP); 24 DBMS_OUTPUT.PUT_LINE('PHONE: ' || Phone); 25 DBMS_OUTPUT.PUT_LINE('EMPLOYER : ' || EMP); 26 DBMS_OUTPUT.PUT_LINE('REGISTRATION_DATE : ' || Regdate); 27 DBMS_OUTPUT.PUT_LINE('CREATED_DATE: ' || Crdate); 28 DBMS_OUTPUT.PUT_LINE('CREATED_BY: ' || CBY); 29 DBMS_OUTPUT.PUT_LINE('MODIFIED_BY: ' || MBY); 30 DBMS_OUTPUT.PUT_lINE('MODIFIED_DATE: ' || Mdate); 31 32 end; 33 / SALUTATION : Mr. FIRST_NAME: Asian LAST_NAME :Chirichella STUDENT_ADDRESS : 134-25 Franklin Ave. #512 ZIP: 11355 PHONE: 718-555-5555 EMPLOYER :Peo Capital Corp. REGISTRATION_DATE : 23-FEB-07 CREATED_DATE: 23-FEB-07 CREATED_BY: BROSENZWEIG MODIFIED_BY: BROSENZW MODIFIED_DATE: 26-FEB-07 PL/SQL procedure successfully completed.
  • 26. 25 SQL> DECLARE 2 salutstudent.salutation%TYPE; 3 F_namestudent.first_name%TYPE; 4 L_Namestudent.Last_name%TYPE; 5 S_Addstudent.Street_Address%TYPE; 6 ZIP student.ZIP%TYPE; 7 Phone student.phone%TYPE; 8 EMP student.Employer%Type; 9 Regdatestudent.Registration_Date%TYPE; 10 Crdatestudent.Created_date%TYPE; 11 CBY student.created_by%TYPE; 12 MBY student.Modified_by%TYPE; 13 Mdatestudent.Modified_date%Type; 14 BEGIN 15 studentselect(384,salut,F_name,L_Name,S_Add,ZIP, 16 Phone,EMP,Regdate,Crdate,CBY,MBY,Mdate); 17 18 19 DBMS_OUTPUT.PUT_LINE('Name : ' || salut ||F_name||','||L_Name); 20 DBMS_OUTPUT.PUT_LINE('STUDENT_ADDRESS : ' || S_Add); 21 DBMS_OUTPUT.PUT_LINE('ZIP: ' || ZIP); 22 DBMS_OUTPUT.PUT_LINE('PHONE: ' || Phone); 23 DBMS_OUTPUT.PUT_LINE('EMPLOYER : ' || EMP); 24 DBMS_OUTPUT.PUT_LINE('REGISTRATION_DATE : ' || TO_CHAR(Regdate,'Month-d d-YYYY')); 25 DBMS_OUTPUT.PUT_LINE('CREATED_DATE: ' || TO_CHAR( Crdate,'Month-dd-YYYY ')); 26 DBMS_OUTPUT.PUT_LINE('CREATED_BY: ' || CBY); 27 DBMS_OUTPUT.PUT_LINE('MODIFIED_BY: ' || MBY); 28 DBMS_OUTPUT.PUT_lINE('MODIFIED_DATE: ' || TO_CHAR(Mdate, 'Month-dd-YYYY ')); 29
  • 27. 26 30 end; 31 / Name :Mr.Asian,Chirichella STUDENT_ADDRESS : 134-25 Franklin Ave. #512 ZIP: 11355 PHONE: 718-555-5555 EMPLOYER :Peo Capital Corp. REGISTRATION_DATE : February -23-2007 CREATED_DATE: February -23-2007 CREATED_BY: BROSENZWEIG MODIFIED_BY: BROSENZW MODIFIED_DATE: February -26-2007 PL/SQL procedure successfully completed. SQL> SQL> create or replace procedure studentselect3 2 (stud_id in student.student_id%TYPE, 3 salut OUT student.salutation%TYPE, 4 F_name OUT student.first_name%TYPE, 5 L_Name OUT student.Last_name%TYPE, 6 S_Add OUTstudent.Street_Address%TYPE, 7 Phone OUT student.phone%TYPE, 8 EMP OUT student.Employer%Type, 9 RegdateOUT student.Registration_Date%TYPE, 10 Crdate OUT student.Created_date%TYPE, 11 CBY OUT student.created_by%TYPE, 12 MBY OUTstudent.Modified_by%TYPE, 13 MdateOUT student.Modified_date%Type, 14 CTY OUT ZIPCODE.CITY%TYPE, 15 STA OUT ZIPCODE.STATE%TYPE,
  • 28. 27 16 ZIP OUTstudent.ZIP%TYPE 17 ) 18 IS 19 BEGIN 20 21 SELECT 22 initcap(S.SALUTATION)as SALUTATION, initcap (S.FIRST_NAME)as First_Name , Initcap (S.LAST_NAME)asLast_Name, 23 initcap(S.STREET_ADDRESS)as Street_Address, 24 PHONE, initcap (S.EMPLOYER)as Employer, S.REGISTRATION_DATE, 25 S.CREATED_BY,S.CREATED_DATE, 26 S.MODIFIED_BY, S.MODIFIED_DATE, Z.CITY, Z.STATE, Z.ZIP 27 INTO 28 salut,F_name,L_Name,S_Add,Phone,EMP,Regdate,CBY,Crdate,MBY,Mdate, CTY, STA,ZIP 29 FROM STUDENT S 30 INNER JOIN 31 ZIPCODE Z 32 ON 33 S.ZIP = Z.ZIP 34 WHERE STUDENT_ID = stud_id; 35 END studentselect3; 36 / Procedure created. SQL> SQL> DECLARE 2 salutstudent.salutation%TYPE; 3 F_namestudent.first_name%TYPE;
  • 29. 28 4 L_Namestudent.Last_name%TYPE; 5 S_Addstudent.Street_Address%TYPE; 6 Phone student.phone%TYPE; 7 EMP student.Employer%Type; 8 Regdatestudent.Registration_Date%TYPE; 9 Crdatestudent.Created_date%TYPE; 10 CBY student.created_by%TYPE; 11 MBY student.Modified_by%TYPE; 12 Mdatestudent.Modified_date%Type; 13 CTY ZIPCODE.CITY%TYPE; 14 STA ZIPCODE.STATE%TYPE; 15 ZIP student.ZIP%TYPE; 16 BEGIN 17 studentselect3(384,salut,F_name,L_Name,S_Add, 18 Phone,EMP,Regdate,Crdate,CBY,MBY,Mdate, CTY,STA,ZIP); 19 20 21 DBMS_OUTPUT.PUT_LINE('Name : ' || salut ||F_name||','||L_Name); 22 DBMS_OUTPUT.PUT_LINE('STUDENT_ADDRESS : ' || S_Add); 23 DBMS_OUTPUT.PUT_LINE('CITY : ' || CTY); 24 DBMS_OUTPUT.PUT_LINE('R_STATE : ' || STA); 25 DBMS_OUTPUT.PUT_LINE('ZIP: ' || ZIP); 26 DBMS_OUTPUT.PUT_LINE('PHONE: ' || Phone); 27 DBMS_OUTPUT.PUT_LINE('EMPLOYER : ' || EMP); 28 DBMS_OUTPUT.PUT_LINE('REGISTRATION_DATE : ' || TO_CHAR(Regdate,'Month-d d-YYYY')); 29 DBMS_OUTPUT.PUT_LINE('CREATED_DATE: ' || TO_CHAR( Crdate,'Month-dd-YYYY ')); 30 DBMS_OUTPUT.PUT_LINE('CREATED_BY: ' || CBY); 31 DBMS_OUTPUT.PUT_LINE('MODIFIED_BY: ' || MBY); 32 DBMS_OUTPUT.PUT_lINE('MODIFIED_DATE: ' || TO_CHAR(Mdate, 'Month-dd-YYYY ')); 33 34 end;
  • 30. 29 35 / Name :Mr.Asian,Chirichella STUDENT_ADDRESS : 134-25 Franklin Ave. #512 CITY : Flushing R_STATE : NY ZIP: 11355 PHONE: 718-555-5555 EMPLOYER :Peo Capital Corp. REGISTRATION_DATE : February -23-2007 CREATED_DATE: February -23-2007 CREATED_BY: BROSENZWEIG MODIFIED_BY: BROSENZW MODIFIED_DATE: February -26-2007 PL/SQL procedure successfully completed. SQL> SELECT * FROM USER_PROCEDURES WHERE OBJECT_TYPE = 'PROCEDURE' ;
  • 31. 30 SELECT * FROM USER_PROCEDURES WHERE OBJECT_TYPE ='PACKAGE'; OBJECT_NAME PROCEDURE_NAME OBJECT_ID SUBPROGRAM_ID OBJECT_TYPE AGGREGATE PIPELINED PARALLEL INTERFACE DETERMINISTIC AUTHID STUDENTSELECT 72969 1 PROCEDURE NO NO NO NO NO DEFINER CITY_DELETE 72966 1 PROCEDURE NO NO NO NO NO DEFINER CITY_INSERT 72964 1 PROCEDURE NO NO NO NO NO DEFINER CITY_UPDATE 72965 1 PROCEDURE NO NO NO NO NO DEFINER CITY 72963 1 PROCEDURE NO NO NO NO NO DEFINER STUDENT_SELECT 72968 1 PROCEDURE NO NO NO NO NO DEFINER OBJECT_NAME PROCEDURE_NAME OBJECT_ID SUBPROGRAM_ID OBJECT_TYPE AGGREGATE PIPELINED PARALLEL INTERFACE DETERMINISTIC AUTHID CITIESDB UPDATECITY 73066 1 PACKAGE NO NO NO NO NO DEFINER CITIESDB DELETECITY 73066 2 PACKAGE NO NO NO NO NO DEFINER CITIESDB 73066 0 PACKAGE NO NO NO NO NO DEFINER
  • 32. 31 Packages SQL> CREATE OR REPLACE PACKAGE CitiesDB as 2 PROCEDURE updatecity(CID IN CITIES.CITY_ID%TYPE, 3 CSTATE IN CITIES.LOCATION_STATE%TYPE, 4 CCITY IN CITIES.CITY_NAME%TYPE ); 5 PROCEDURE DELETECITY(CID IN CITIES.CITY_ID%TYPE); 6 7 END CitiesDB; 8 / Package created. SQL> CREATE OR REPLACE PACKAGE BODY CitiesDB as 2 PROCEDURE updatecity(CID IN CITIES.CITY_ID%TYPE, 3 CSTATE IN CITIES.LOCATION_STATE%TYPE, 4 CCITY IN CITIES.CITY_NAME%TYPE ) IS 5 BEGIN 6 UPDATE CITIES 7 SET CITY_NAME = CCITY, LOCATION_STATE = CSTATE 8 WHERE CITY_ID = CID; 9 END updatecity; 10 11 PROCEDURE DELETECITY(CID IN CITIES.CITY_ID%TYPE) IS 12 BEGIN 13 DELETE FROM CITIES 14 WHERE CITY_ID = CID; 15 END DELETECITY; 16 17 END CitiesDB; 18 / Package body created.
  • 33. 32 SQL> BEGIN 2 CitiesDB.updatecity(789,'PA', 'CHICAGO'); 3 END; 4 / PL/SQL procedure successfully completed. SELECT * FROM CITIES; CITY_NAME LOCATION_STATE COUNTRY CITY_ID Portland Or USA 909 Portland ME USA 890 New York NY USA 788 CHICAGO PA USA 789 SQL> SQL> BEGIN 2 CitiesDB.updatecity(909, 'WA','PORTLAND' ); 3 CitiesDB.DELETECITY(890); 4 END; 5 / PL/SQL procedure successfully completed. CITY_NAME LOCATION_STATE COUNTRY CITY_ID PORTLAND WA USA 909 New York NY USA 788 CHICAGO PA USA 789
  • 34. 33 Functions SQL> CREATE OR REPLACE FUNCTION STUDENTNAME 2 (studid in student.student_id%TYPE 3 ) 4 RETURN 5 VARCHAR2 IS 6 7 STUDENT_NAME VARCHAR2(50); 8 BEGIN 9 10 SELECT INITCAP (S.FIRST_NAME||','||S.LAST_NAME)AS NAME 11 INTO 12 STUDENT_NAME 13 FROM STUDENT S 14 WHERE S.STUDENT_ID = studid; 15 16 RETURN STUDENT_NAME; 17 18 END STUDENTNAME; 19 / Function created. SQL> COMMIT; Commit complete.
  • 35. 34 SQL> SQL> SELECT STUDENTNAME(STUDENT_ID)STUDENT_NAME 2 FROM STUDENT 3 WHERE STUDENT_ID =120; STUDENT_NAME --------------------------------------------------- Ralph,Alexander SQL> SQL> SELECT STUDENTNAME(S.STUDENT_ID)STUDENT_NAME 2 ,S.STUDENT_ID, SUM(G.NUMERIC_GRADE)AS GRADE, 3 G.SECTION_ID 4 FROM STUDENT S 5 INNER JOIN GRADE G 6 ON 7 S.STUDENT_ID = G.STUDENT_ID 8 WHERE S.STUDENT_ID = 120 9 AND 10 G.SECTION_ID = 103 11 GROUP BY STUDENTNAME(S.STUDENT_ID), S.STUDENT_ID, G.SECTION_ID; STUDENT_NAME -------------------------------------------------------------------------- STUDENT_ID GRADE SECTION_ID ---------- ---------- ---------- Ralph,Alexander 120 751 103
  • 36. 35 SQL> GROUP BY STUDENTNAME(S.STUDENT_ID), S.STUDENT_ID, G.SECTION_ID; SP2-0734: unknown command beginning "GROUP BY S..." - rest of line ignored. SQL>SELECT STUDENTNAME(S.STUDENT_ID)STUDENT_NAME 2 ,S.STUDENT_ID, SUM(G.NUMERIC_GRADE)AS GRADE, 3 G.SECTION_ID 4 FROM STUDENT S 5 INNER JOIN GRADE G 6 ON 7 S.STUDENT_ID = G.STUDENT_ID 8 WHERE S.STUDENT_ID IN( 120,211) 9 GROUP BY STUDENTNAME(S.STUDENT_ID), S.STUDENT_ID, G.SECTION_ID; STUDENT_NAME -------------------------------------------------------------------------------- STUDENT_ID GRADE SECTION_ID ---------- ---------- ---------- Jenny,Goldsmith 211 798 141 Jenny,Goldsmith 211 943 86 Ralph,Alexander 120 751 103 create OR REPLACE view S_GRADES (STUDENT_NAME, STUDENT_ID, GRADE, INSTRUCTOR_NAME, SECTION_ID, DESCRIPTION) as SELECT S.salutation||''||S.first_name ||','||S.last_name as Student_Name ,S.STUDENT_ID, SUM(G.NUMERIC_GRADE)AS GRADE, I.salutation||''||I.first_name ||','||I.last_name as Instructor_Name, G.SECTION_ID, C.DESCRIPTION as DESCRIPTION
  • 37. 36 FROM STUDENT S INNER JOIN GRADE G ON S.STUDENT_ID = G.STUDENT_ID INNER JOIN SECTION T ON G.SECTION_ID = T.SECTION_ID INNER JOIN COURSE C ON C.COURSE_NO = T.COURSE_NO INNER JOIN INSTRUCTOR I ON T.INSTRUCTOR_ID = I.INSTRUCTOR_ID group by S.salutation||''||S.first_name ||','||S.last_name, S.STUDENT_ID, I.salutation||''||I.first_name ||','||I.last_name, G.SECTION_ID, C.DESCRIPTION;
  • 38. 37 Cursors Explicit Cursors SQL> show user; USER is "SUNNY" SQL> SQL> set serveroutput on SQL> declare 2 salustudent.salutation%type; 3 fnamestudent.first_name%type; 4 lnamestudent.last_name%type; 5 saddressstudent.street_address%TyPE; 6 scityzipcode.city%Type; 7 sstatezipcode.state%Type; 8 szipzipcode.zip%type; 9 sphonestudent.phone%type; 10 sregdatevarchar2(80) :=0; 11 rowcount PLS_INTEGER :=0; 12 13 cursorstudrec 14 is 15 SELECT S.SALUTATION ,S.FIRST_NAME, S.LAST_NAME, 16 S.STREET_ADDRESS,Z.CITY,Z.STATE,Z.ZIP,S.PHONE, TO_CHAR(S.REGISTRATION_DATE,'MON-DD-RRRR') AS REGISTRATION_DATE 17 FROM STUDENT S INNER JOIN ZIPCODE Z 18 ON 19 S.ZIP = Z.ZIP; 20 21 begin 22 23 openstudrec; 24 loop 25 fetchstudrec into salu,fname, lname, saddress,scity,sstate,szip, sphone,sregdate; 26 EXIT when studrec%NOTFOUND; 27 rowcount :=studrec%ROWCOUNT; 28 29 DBMS_OUTPUT.PUT_LINE(rowcount ||' ' ||'is the number of rows processed '); 30 DBMS_OUTPUT.PUT_LINE('Student Name:'||' '||salu||' '||fname||' '||lname); 31 DBMS_OUTPUT.PUT_LINE('Address:'||saddress); 32 DBMS_OUTPUT.PUT_LINE('City:'||scity);
  • 39. 38 33 DBMS_OUTPUT.PUT_LINE('State:'||sstate); 34 DBMS_OUTPUT.PUT_LINE('Phone:'||sphone); 35 DBMS_OUTPUT.PUT_LINE('REGISTRATION DATE:'||sregdate); 36 END LOOP; 37 CLOSEstudrec; 38 39 IFstudrec%ISOPEN = FALSE 40 THEN 41 DBMS_OUTPUT.PUT_LINE('Cursor is closed'); 42 ELSE 43 DBMS_OUTPUT.PUT_LINE('Cursor is open'); 44 END IF; 45 EXCEPTION 46 WHEN OTHERS 47 THEN 48 DBMS_OUTPUT.PUT_LINE(SQLERRM); 49 END; 50 / 1 is the number of rows processed Student Name: Mr. Jim Joas Address:53-33 192nd St. City:Fresh Meadows State:NY Phone:718-555-5555 REGISTRATION DATE:FEB-02-2007 2 is the number of rows processed Student Name: Ms. Sally Naso Address:812 79th St. City:North Bergen State:NJ Phone:201-555-5555 REGISTRATION DATE:FEB-02-2007 3 is the number of rows processed Student Name: Mr. Frantz McLean Address:23-08 Newtown Ave. City:Astoria State:NY Phone:718-555-5555 REGISTRATION DATE:FEB-02-2007
  • 40. 39 4 is the number of rows processed Student Name: Ms. P. Balterzar Address:30 Carriage Rd. City:Roslyn State:NY Phone:718-555-5555 REGISTRATION DATE:FEB-02-2007 Results Abridged SQL> set serveroutput on SQL> declare 2 studidstudent.student_id%type; 3 salustudent.salutation%type; 4 fnamestudent.first_name%type; 5 lnamestudent.last_name%type; 6 saddressstudent.street_address%TyPE; 7 scityzipcode.city%Type; 8 sstatezipcode.state%Type; 9 szipzipcode.zip%type; 10 sphonestudent.phone%type; 11 sregdatevarchar2(80) :=0; 12 rowcount PLS_INTEGER :=0; 13 14 cursorstudrec(studidint) 15 is 16 SELECT S.SALUTATION ,S.FIRST_NAME, S.LAST_NAME, 17 S.STREET_ADDRESS,Z.CITY,Z.STATE,Z.ZIP,S.PHONE, TO_CHAR(S.REGISTRATION_DATE,'MON-DD-RRRR') AS REGISTRATION_DATE, 18 S.STUDENT_ID 19 FROM STUDENT S INNER JOIN ZIPCODE Z 20 ON 21 S.ZIP = Z.ZIP 22 wherestudent_id<studid ; 23 24 begin 25 26 openstudrec(375); 27 loop 28 fetch studrec into salu,fname, lname, saddress,scity,sstate,szip, sphone,sregdate,studid ; 29 EXIT when studrec%NOTFOUND;
  • 41. 40 30 rowcount :=studrec%ROWCOUNT; 31 32 DBMS_OUTPUT.PUT_LINE(rowcount ||' ' ||'is the number of rows processed '); 33 DBMS_OUTPUT.PUT_LINE('Student ID:'||' '||studid); 34 DBMS_OUTPUT.PUT_LINE('Student Name:'||' '||salu||' '||fname||' '||lname); 35 DBMS_OUTPUT.PUT_LINE('Address:'||saddress); 36 DBMS_OUTPUT.PUT_LINE('City:'||scity); 37 DBMS_OUTPUT.PUT_LINE('State:'||sstate); 38 DBMS_OUTPUT.PUT_LINE('Phone:'||sphone); 39 DBMS_OUTPUT.PUT_LINE('REGISTRATION DATE:'||sregdate); 40 END LOOP; 41 CLOSEstudrec; 42 43 IFstudrec%ISOPEN = FALSE 44 THEN 45 DBMS_OUTPUT.PUT_LINE('Cursor is closed'); 46 ELSE 47 DBMS_OUTPUT.PUT_LINE('Cursor is open'); 48 END IF; 49 EXCEPTION 50 WHEN OTHERS 51 THEN 52 DBMS_OUTPUT.PUT_LINE(SQLERRM); 53 END; 54 / 1 is the number of rows processed Student ID: 167 Student Name: Mr. Jim Joas Address:53-33 192nd St. City:Fresh Meadows State:NY Phone:718-555-5555 REGISTRATION DATE:FEB-02-2007 2 is the number of rows processed Student ID: 168 Student Name: Ms. Sally Naso Address:812 79th St. City:North Bergen State:NJ
  • 42. 41 Phone:201-555-5555 REGISTRATION DATE:FEB-02-2007 3 is the number of rows processed Student ID: 169 Student Name: Mr. Frantz McLean Address:23-08 Newtown Ave. City:Astoria State:NY Phone:718-555-5555 REGISTRATION DATE:FEB-02-2007 4 is the number of rows processed Student ID: 170 Student Name: Ms. P. Balterzar Address:30 Carriage Rd. City:Roslyn State:NY Phone:718-555-5555 REGISTRATION DATE:FEB-02-2007 Results Abridged SQL> set serveroutput on SQL> declare 2 studidstudent.student_id%type; 3 salustudent.salutation%type; 4 fnamestudent.first_name%type; 5 lnamestudent.last_name%type; 6 saddressstudent.street_address%TyPE; 7 scityzipcode.city%Type; 8 sstatezipcode.state%Type; 9 szipzipcode.zip%type; 10 sphonestudent.phone%type; 11 sregdatevarchar2(80) :=0; 12 rowcount PLS_INTEGER :=0; 13 14 cursorstudrec(studidint) 15 is 16 SELECT S.SALUTATION ,S.FIRST_NAME, S.LAST_NAME, 17 S.STREET_ADDRESS,Z.CITY,Z.STATE,Z.ZIP,S.PHONE, TO_CHAR(S.REGISTRATION_DATE,'MON-DD-RRRR') AS REGISTRATION_DATE, 18 S.STUDENT_ID
  • 43. 42 19 FROM STUDENT S INNER JOIN ZIPCODE Z 20 ON 21 S.ZIP = Z.ZIP 22 wherestudent_id != studid; 23 24 begin 25 26 openstudrec(375); 27 loop 28 fetch studrec into salu,fname, lname, saddress,scity,sstate,szip, sphone,sregdate,studid ; 29 EXIT when studrec%NOTFOUND; 30 rowcount :=studrec%ROWCOUNT; 31 32 DBMS_OUTPUT.PUT_LINE(rowcount ||' ' ||'is the number of rows processed '); 33 DBMS_OUTPUT.PUT_LINE('Student ID:'||' '||studid); 34 DBMS_OUTPUT.PUT_LINE('Student Name:'||' '||salu||' '||fname||' '||lname); 35 DBMS_OUTPUT.PUT_LINE('Address:'||saddress); 36 DBMS_OUTPUT.PUT_LINE('City:'||scity); 37 DBMS_OUTPUT.PUT_LINE('State:'||sstate); 38 DBMS_OUTPUT.PUT_LINE('Phone:'||sphone); 39 DBMS_OUTPUT.PUT_LINE('REGISTRATION DATE:'||sregdate); 40 END LOOP; 41 CLOSEstudrec; 42 43 IFstudrec%ISOPEN = FALSE 44 THEN 45 DBMS_OUTPUT.PUT_LINE('Cursor is closed'); 46 ELSE 47 DBMS_OUTPUT.PUT_LINE('Cursor is open'); 48 END IF; 49 EXCEPTION 50 WHEN OTHERS 51 THEN 52 DBMS_OUTPUT.PUT_LINE(SQLERRM); 53 END; 54 / 1 is the number of rows processed Student ID: 167 Student Name: Mr. Jim Joas
  • 44. 43 Address:53-33 192nd St. City:Fresh Meadows State:NY Phone:718-555-5555 REGISTRATION DATE:FEB-02-2007 2 is the number of rows processed Student ID: 168 Student Name: Ms. Sally Naso Address:812 79th St. City:North Bergen State:NJ Phone:201-555-5555 REGISTRATION DATE:FEB-02-2007 3 is the number of rows processed Student ID: 169 Student Name: Mr. Frantz McLean Address:23-08 Newtown Ave. City:Astoria State:NY Phone:718-555-5555 REGISTRATION DATE:FEB-02-2007 4 is the number of rows processed Student ID: 170 Student Name: Ms. P. Balterzar Address:30 Carriage Rd. City:Roslyn State:NY Phone:718-555-5555 REGISTRATION DATE:FEB-02-2007 5 is the number of rows processed Student ID: 171 Student Name: Ms. Denise Brownstein Address:104-36 196th St. City:Hollis State:NY Phone:718-555-5555 REGISTRATION DATE:FEB-02-2007 6 is the number of rows processed Student ID: 172
  • 45. 44 Student Name: Ms. Maria Arias Address:Box 216 City:Bellrose State:NY Phone:718-555-5555 REGISTRATION DATE:FEB-02-2007 7 is the number of rows processed Student ID: 173 Student Name: Mr. Oscar McGill Address:578 E 40th ST. City:Brooklyn State:NY Phone:718-555-5555 REGISTRATION DATE:FEB-02-2007 8 is the number of rows processed Student ID: 174 Student Name: Mr. Michael Brown Address:265 Hawthorne St #2D City:Brooklyn State:NY Phone:718-555-5555 REGISTRATION DATE:FEB-02-2007 9 is the number of rows processed Student ID: 175 Student Name: Ms. Debra Boyce Address:294 East 98 St. City:Brooklyn State:NY Phone:718-555-5555 REGISTRATION DATE:FEB-02-2007 10 is the number of rows processed Student ID: 176 Student Name: Ms. Beth Satterfield Address:140 Amity St City:Brooklyn State:NY Phone:718-555-5555 REGISTRATION DATE:FEB-02-2007 Results Abridged
  • 46. 45 SQL> SQL> set serveroutput on SQL> declare 2 studidstudent.student_id%type; 3 salustudent.salutation%type; 4 fnamestudent.first_name%type; 5 lnamestudent.last_name%type; 6 saddressstudent.street_address%TyPE; 7 scityzipcode.city%Type; 8 sstatezipcode.state%Type; 9 szipzipcode.zip%type; 10 sphonestudent.phone%type; 11 sregdatevarchar2(80) :=0; 12 rowcount PLS_INTEGER :=0; 13 14 cursorstudrec(studidint) 15 is 16 SELECT S.SALUTATION ,S.FIRST_NAME, S.LAST_NAME, 17 S.STREET_ADDRESS,Z.CITY,Z.STATE,Z.ZIP,S.PHONE, TO_CHAR(S.REGISTRATION_DATE,'MON-DD-RRRR') AS REGISTRATION_DATE, 18 S.STUDENT_ID 19 FROM STUDENT S INNER JOIN ZIPCODE Z 20 ON 21 S.ZIP = Z.ZIP 22 wherestudent_id = studid; 23 24 begin 25 26 openstudrec(375); 27 loop 28 fetch studrec into salu,fname, lname, saddress,scity,sstate,szip, sphone,sregdate,studid ; 29 EXIT when studrec%NOTFOUND; 30 rowcount :=studrec%ROWCOUNT; 31 32 DBMS_OUTPUT.PUT_LINE(rowcount ||' ' ||'is the number of rows processed '); 33 DBMS_OUTPUT.PUT_LINE('Student ID:'||' '||studid); 34 DBMS_OUTPUT.PUT_LINE('Student Name:'||' '||salu||' '||fname||' '||lname); 35 DBMS_OUTPUT.PUT_LINE('Address:'||saddress);
  • 47. 46 36 DBMS_OUTPUT.PUT_LINE('City:'||scity); 37 DBMS_OUTPUT.PUT_LINE('State:'||sstate); 38 DBMS_OUTPUT.PUT_LINE('Phone:'||sphone); 39 DBMS_OUTPUT.PUT_LINE('REGISTRATION DATE:'||sregdate); 40 END LOOP; 41 42 43 IFstudrec%ISOPEN = FALSE 44 THEN 45 DBMS_OUTPUT.PUT_LINE('Cursor is closed'); 46 ELSE 47 DBMS_OUTPUT.PUT_LINE('Cursor is open'); 48 END IF; 49 EXCEPTION 50 WHEN OTHERS 51 THEN 52 DBMS_OUTPUT.PUT_LINE(SQLERRM); 53 END; 54 / 1 is the number of rows processed Student ID: 375 Student Name: Mr. Jack Kasperovich Address:98-17 162nd Ave. City:Howard Bank State:NY Phone:718-555-5555 REGISTRATION DATE:FEB-21-2007 Cursor is open PL/SQL procedure successfully completed. SQL> SQL> SQL> set serveroutput on SQL> declare 2 studidstudent.student_id%type; 3 salustudent.salutation%type; 4 fnamestudent.first_name%type; 5 lnamestudent.last_name%type;
  • 48. 47 6 saddressstudent.street_address%TyPE; 7 scityzipcode.city%Type; 8 sstatezipcode.state%Type; 9 szipzipcode.zip%type; 10 sphonestudent.phone%type; 11 sregdatevarchar2(80) :=0; 12 rowcount PLS_INTEGER :=0; 13 14 cursorstudrec(studidint) 15 is 16 SELECT S.SALUTATION ,S.FIRST_NAME, S.LAST_NAME, 17 S.STREET_ADDRESS,Z.CITY,Z.STATE,Z.ZIP,S.PHONE, TO_CHAR(S.REGISTRATION_DATE,'MON-DD-RRRR') AS REGISTRATION_DATE, 18 S.STUDENT_ID 19 FROM STUDENT S INNER JOIN ZIPCODE Z 20 ON 21 S.ZIP = Z.ZIP 22 wherestudent_id = studid; 23 24 begin 25 26 openstudrec(375); 27 loop 28 fetch studrec into salu,fname, lname, saddress,scity,sstate,szip, sphone,sregdate,studid ; 29 EXIT when studrec%NOTFOUND; 30 rowcount :=studrec%ROWCOUNT; 31 32 DBMS_OUTPUT.PUT_LINE(rowcount ||' ' ||'is the number of rows processed '); 33 DBMS_OUTPUT.PUT_LINE('Student ID:'||' '||studid); 34 DBMS_OUTPUT.PUT_LINE('Student Name:'||' '||salu||' '||fname||' '||lname); 35 DBMS_OUTPUT.PUT_LINE('Address:'||saddress); 36 DBMS_OUTPUT.PUT_LINE('City:'||scity); 37 DBMS_OUTPUT.PUT_LINE('State:'||sstate); 38 DBMS_OUTPUT.PUT_LINE('Phone:'||sphone); 39 DBMS_OUTPUT.PUT_LINE('REGISTRATION DATE:'||sregdate); 40 END LOOP; 41 CLOSEstudrec; 42 43 IFstudrec%ISOPEN = FALSE 44 THEN
  • 49. 48 45 DBMS_OUTPUT.PUT_LINE('Cursor is closed'); 46 ELSE 47 DBMS_OUTPUT.PUT_LINE('Cursor is open'); 48 END IF; 49 EXCEPTION 50 WHEN OTHERS 51 THEN 52 DBMS_OUTPUT.PUT_LINE(SQLERRM); 53 END; 54 / 1 is the number of rows processed Student ID: 375 Student Name: Mr. Jack Kasperovich Address:98-17 162nd Ave. City:Howard Bank State:NY Phone:718-555-5555 REGISTRATION DATE:FEB-21-2007 Cursor is closed PL/SQL procedure successfully completed. SQL> SQL> SET ECHO OFF; SQL> SPOOL OFF; Implicit Cursors SET SERVEROUTPUT ON BEGIN DBMS_OUTPUT.ENABLE(1000000); UPDATE STUDENT SET FIRST_NAME = 'JACKSON' WHERE STUDENT_ID = 375; DBMS_OUTPUT.PUT_LINE(SQL%ROWCOUNT||'rows updated');
  • 50. 49 IF SQL%NOTFOUND THEN DBMS_OUTPUT.PUT_LINE('CHECK THE STUDENT ID ENTERED BECAUSE IS NOT FOUND IN DATABASE'); END IF; COMMIT; EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_lINE(SQLERRM); END; / anonymous block completed 1rows updated select first_name ,last_name, student_id from student where student_id = 375 FIRST_NAME LAST_NAME STUDENT_ID JACKSON Kasperovich 375 SET SERVEROUTPUT ON BEGIN DBMS_OUTPUT.ENABLE(1000000); UPDATE STUDENT SET FIRST_NAME = 'JACKSON' WHERE STUDENT_ID = 500; DBMS_OUTPUT.PUT_LINE(SQL%ROWCOUNT||'rows updated'); IF SQL%NOTFOUND THEN DBMS_OUTPUT.PUT_LINE('CHECK THE STUDENT ID ENTERED BECAUSE IS NOT FOUND IN DATABASE'); END IF; COMMIT;
  • 51. 50 EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_lINE(SQLERRM); END; anonymous block completed 0rows updated CHECK THE STUDENT ID ENTERED BECAUSE IS NOT FOUND IN DATABASE Records SQL> DECLARE 2 3 Studentsstudent%rowtype; 4 5 begin 6 7 Students.student_id :=400; 8 Students.first_name :='joe'; 9 Students.last_name :='Joe'; 10 Students.street_address := '5909 Wood Lane Drv'; 11 Students.zip := '48104'; 12 Students.phone := '709-908-9876'; 13 Students.Employer :='ABC NEWS'; 14 Students.Registration_date := '30-jan-09';
  • 52. 51 15 Students.Created_date := '30-jan-09'; 16 Students.modified_date := '30-jan-09'; 17 Students.created_by := 'sunny'; 18 Students.modified_by :='sunny'; 19 20 21 insert into student(student_id, first_name, last_name,street_address,zip,phone, 22 employer, registration_date, created_date, modified_date, created_by,modified_by) 23 values(Students.student_id,Students.first_name ,Students.last_name , Students.street_address, 24 Students.zip,Students.phone,Students.Employer, Students.Registration_date , 25 Students.Created_date ,Students.modified_date, Students.created_by, 26 Students.modified_by 27 ); 28 29 end; 30 / PL/SQL procedure successfully completed. SQL> commit; Commit complete. select first_name,last_name,student_id from student where student_id =400; DECLARE TYPE studentsR is record ( student_idstudent.student_id%TYPE, first_namestudent.first_name%TYPE, last_namestudent.last_name%TYPE, street_addressstudent.street_address%TYPE, phonestudent.phone%TYPE, zip student.zip%TYPE, FIRST_NAME LAST_NAME STUDENT_ID joe Joe 400
  • 53. 52 employerstudent.employer%type, registration_datestudent.registration_date%type, created_datestudent.created_date%type, modified_datestudent.modified_date%type, created_bystudent.created_by%type, modified_bystudent.modified_by%type ); Students studentsR; begin Students.student_id :=600; Students.first_name :='Michael'; Students.last_name :='Joesph'; Students.street_address := '5909 Wood Lane Drv'; Students.zip := '48104'; Students.phone := '709-908-9876'; Students.Employer :='ABC NEWS'; Students.Registration_date := '30-jan-09'; Students.Created_date := '30-jan-09'; Students.modified_date := '30-jan-09'; Students.created_by := 'sunny'; Students.modified_by :='sunny'; insert into student(student_id, first_name, last_name,street_address,zip,phone, employer, registration_date, created_date, modified_date, created_by,modified_by) values(Students.student_id,Students.first_name ,Students.last_name , Students.street_address, Students.zip,Students.phone,Students.Employer, Students.Registration_date , Students.Created_date ,Students.modified_date, Students.created_by, Students.modified_by ); commit; end; /
  • 54. 53 select first_name,last_name,student_id from student where student_id =600; FIRST_NAME LAST_NAME STUDENT_ID Michael Joesph 600 Oracle Label Security DBA SQL> create user secmanidentified by s; User created. SQL> create user bank identified by b; User created. SQL> grant dba to secman; Grant succeeded. SQL> grant create session , resources to bank; grant create session , resources to bank * ERROR at line 1: ORA-01919: role 'RESOURCES' does not exist SQL> grant create session , resource to bank;
  • 55. 54 Grant succeeded. SQL> spool off grant execute on dbms_rls to secman; grant execute succeeded. grant execute on dbms_rls to system; grant execute succeeded. SQL> create user lara identified by l; User created. SQL> create user scott identified by s; User created. SQL> grant create session to scott, lara; Grant succeeded. SQL> set echo off SQL> spool off; USER Secman SQL> create table access_policy 2 (AM_NAME VARCHAR2(20) NOT NULL, 3 CUST_ID NUMBER NOT NULL, 4 ACCESS_TYPE CHAR(1) NOT NULL); Table created. SQL> SQL> INSERT INTO ACCESS_POLICY(AM_NAME, CUST_ID, ACCESS_TYPE) 2 VALUES('SCOTT', 123, 'S');
  • 56. 55 1 row created. SQL> SQL> INSERT INTO ACCESS_POLICY(AM_NAME, CUST_ID, ACCESS_TYPE) 2 VALUES('SCOTT', 123, 'I'); 1 row created. SQL> SQL> INSERT INTO ACCESS_POLICY(AM_NAME, CUST_ID, ACCESS_TYPE) 2 VALUES('SCOTT', 123, 'D'); 1 row created. SQL> SQL> INSERT INTO ACCESS_POLICY(AM_NAME, CUST_ID, ACCESS_TYPE) 2 VALUES ('SCOTT', 123, 'U'); 1 row created. SQL> SQL> INSERT INTO ACCESS_POLICY(AM_NAME, CUST_ID, ACCESS_TYPE) 2 VALUES ('SCOTT', 456, 'S'); 1 row created. SQL> SQL> INSERT INTO ACCESS_POLICY(AM_NAME, CUST_ID, ACCESS_TYPE) 2 VALUES('SCOTT', 789, 'S'); 1 row created. SQL> SQL> INSERT INTO ACCESS_POLICY(AM_NAME, CUST_ID, ACCESS_TYPE) 2 VALUES('LARA', 456, 'S'); 1 row created. SQL>
  • 57. 56 SQL> INSERT INTO ACCESS_POLICY(AM_NAME, CUST_ID, ACCESS_TYPE) 2 VALUES ('LARA', 456, 'I'); 1 row created. SQL> SQL> INSERT INTO ACCESS_POLICY(AM_NAME, CUST_ID, ACCESS_TYPE) 2 VALUES ('LARA', 456, 'D'); 1 row created. SQL> SQL> INSERT INTO ACCESS_POLICY(AM_NAME, CUST_ID, ACCESS_TYPE) 2 VALUES ('LARA', 456, 'U'); 1 row created. SQL> SQL> create or replace function get_sel_cust_id 2 (p_schema in varchar2, 3 p_table in varchar2 4 ) 5 return varchar2 6 as 7 l_retstrvarchar2(2000); 8 begin 9 if (p_schema = user) then 10 l_retstr :=null; 11 else 12 for cust_rec in 13 (select cust_id from access_policy where am_name = USER 14 and access_type = 'S' 15 )loop 16 l_retstr :=l_retstr||','||cust_rec.cust_id; 17 end loop; 18 l_retstr :=ltrim(l_retstr, ','); 19 l_retstr :='CUST_ID IN ('||l_retstr||')'; 20 end if; 21 return l_retstr;
  • 58. 57 22 end; 23 / Function created. SQL> INSERT INTO ACCESS_POLICY(AM_NAME, CUST_ID, ACCESS_TYPE) 2 VALUES ('SECMAN', 123, 'S'); 1 row created. SQL> SQL> INSERT INTO ACCESS_POLICY(AM_NAME, CUST_ID, ACCESS_TYPE) 2 VALUES('SECMAN',456,'S'); 1 row created. SQL> SQL> INSERT INTO ACCESS_POLICY(AM_NAME, CUST_ID, ACCESS_TYPE) 2 VALUES('SECMAN', 789,'S'); 1 row created. SQL> CREATE OR REPLACE FUNCTION get_iud_cust_id 2 (p_schema in varchar2, 3 p_table in varchar2 4 ) return varchar2 5 as 6 l_retstrvarchar2(2000); 7 begin 8 if(p_schema = user) then 9 l_retstr := null; 10 else 11 forcust_rec in 12 ( 13 select cust_id from access_policy where am_name = USER 14 and access_type in ('I', 'U', 'D') 15 ) loop 16 l_retstr := l_retstr||','||cust_rec.cust_id; 17 end loop;
  • 59. 58 18 l_retstr := ltrim(l_retstr, ','); 19 l_retstr := 'CUST_ID IN ('||l_retstr||')'; 20 end if; 21 return l_retstr; 22 end; 23 / Function created. SQL> SQL> INSERT INTO ACCESS_POLICY(AM_NAME, CUST_ID, ACCESS_TYPE) 2 VALUES('SECMAN',123, 'U'); 1 row created. SQL> SELECT GET_IUD_CUST_ID('BANK', 'CUSTOMERS') FROM DUAL 2 SQL> / GET_IUD_CUST_ID('BANK','CUSTOMERS') -------------------------------------------------------------------------------- CUST_ID IN (123) SQL> SET ECHO OFF SQL> SPOOL OFF UserScott SQL> select * from BANK.CUSTOMERS; CUST_ID CUST_NAME ---------- -------------------- 123 Jay Kulkarni 456 Wim Patel SQL> select * from BANK.ACCOUNTS; ACC_ID CUST_ID BALANCE
  • 60. 59 ---------- ---------- ---------- 101 123 10000000 102 123 15000000 201 456 10000000 202 456 20000000 SQL> SET ECHO OFF; SQL> SPOOL OFF; USER Bank SQL> select * from bank.accounts; ACC_ID CUST_ID BALANCE ---------- ---------- ---------- 101 123 10000000 102 123 15000000 201 456 10000000 202 456 20000000 SQL> select * from bank.customers; CUST_ID CUST_NAME ---------- -------------------- 456 Wim Patel SQL> update bank.customers set cust_name = 'Smith Joe'; 1 row updated. SQL> select * from bank.customers; CUST_ID CUST_NAME ---------- -------------------- 456 Smith Joe SQL> commit;
  • 61. 60 Commit complete. SQL> insert into bank.customers (cust_id, cust_name) values(999, 'Monica joe'); insert into bank.customers (cust_id, cust_name) values(999, 'Monica joe') * ERROR at line 1: ORA-28115: policy with check option violation SQL> spool off USER Secman2 SQL> SQL> begin 2 dbms_rls.add_policy ( 3 object_schema => 'BANK', 4 object_name => 'CUSTOMERS', 5 policy_name => 'CUST_SEL_POLICY', 6 function_schema => 'SECMAN', 7 policy_function => 'GET_SEL_CUST_ID', 8 statement_types => 'SELECT', 9 update_check => TRUE 10 ); 11 end; 12 / PL/SQL procedure successfully completed. SQL> SQL> begin 2 dbms_rls.add_policy ( 3 object_schema => 'BANK', 4 object_name => 'CUSTOMERS', 5 policy_name => 'CUST_IUD_POLICY', 6 function_schema => 'SECMAN', 7 policy_function => 'GET_IUD_CUST_ID',
  • 62. 61 8 statement_types => 'INSERT, UPDATE, DELETE', 9 update_check => TRUE 10 ); 11 end; 12 / PL/SQL procedure successfully completed. SQL> spool off
  • 63. 62