Professional Documents
Culture Documents
ã¹]<gè…‚jÖ]æ<ËÖ]<Üé×Ãj×Ö<íÚ^ÃÖ]<퉉ö¹]
אאאא
א
א
٢٦٢
٢٦٢ אא
א א
W،،אא،א
אאאאאאאאאא
א א ،א א א א א א
אאאאאא
؛אאאאאא
K אאא
אאאאאאא
א ،א אא
א א א א א א א ،
א،אאאא
אאאאאאאאאאאאא
א א ،א
Kאא،אא
א?א??א?אא
Kאאאאאא
אאאאאאא
،א،אאאא
Kאאאאא
א א א א
Kא
אאאא
٢٦٢ אא
א א
،א א א ،א א Wא א
א،אאאאאא
א א א א ،א א אא ،
Kאאא
אאא
ã¹]<gè…‚jÖ]æ<ËÖ]<Üé×Ãj×Ö<íÚ^ÃÖ]<퉉ö¹]
אאאא
א
אא
אא
١
אא ٢٦٢ אא
אא א א
Wאא
،א א אא אא א א א
א אאא א א א
אא
Wאא
Wא،א
א .١
אRolls K٢
אאאRevokeאGrantאא אK٣
Wאאא
٪١٠٠אאאאא
٥Wאא
Wאא
•
Projectorא •
•
•
-١-
אא ٢٦٢ אא
אא א א
אאWאא
אאא
א Multi-user Environmentא
WאאKאאא
K System Securityא K١
System א אא א א א
، א א ،א א א Level
Kאאא
Data Securityא K٢
אאאאא אא
Kאא
אא
Database administratorא،SQLאא
אאאאאאא
אאאאאאא אK
Kא א א א
אF אאאאא
KEאאאא
א ،Tables א א א א WSchema א
، SchemaKSequencesא،Views א
Kאא
-٢-
אא ٢٦٢ אא
אא א א
-٣-
אא ٢٦٢ אא
אא א א
א
،CREATE USERא
Kאאאאאא
א א K אא א
Kאא
CREATE USER user_name
IDENTIFIED BY password;
W
אאאא User_name
אאאא Password
W
SQL> CREATE USER scott
2 IDENTIFIED BY tiger;
User Created.
אאא DBAאא
Wאאא
GRANT privilege [, privilege …]
TO user_name [, user_name, …];
W
אאאא Privilege
אאאא User_name
Wאאאאאאא
CREATE SESSIONאא• א
CREATE TABLE •
CREATE SEQUENCE •
CREATE VIEW •
CREATE PROCEDUREא •
-٤-
אא ٢٦٢ אא
אא א א
W
SQL> GRANT create session, create table, create sequence, create view
2 TO scott;
Grant succeeded.
ﻣﺎ هﻲ اﻟﻮﻇﻴﻔﺔRole
، א א א אא א
K אא א א K
Kאא
א אא ، א DBA א
K
CREATE ROLE role_name;
، Tables א managerא אא
Kא CLARKא BLAKEא ،views
Kאאאא
SQL> CREATE ROLE manager;
Role Created.
SQL> GRANT create table, create view
2 TO manager;
Grant succeeded.
-٥-
אא ٢٦٢ אא
אא א א
W
Kאא User_name
Kאא Password
א אא ، א א א א
K
Object Privileges אאא
،View،Tableאאא
אאKאאאKProcedureSequence
Kאאאא
Procedure Sequence View Table אא
√ √ ALTER
√ √ DELETE
√ EXECUTE
√ INDEX
√ √ INSERT
√ REFERENCE
√ √ √ SELECT
√ √ UPDATE
אאא
אאKאא،אא
אKאא א א
with grant א א א K
אKאאאאאoption
Kאאאאא
-٦-
אא ٢٦٢ אא
אא א א
-٧-
אא ٢٦٢ אא
אא א א
،deptאאscottאאא
Kאא
Kאאאא
אאאאא
אאא،Data Dictionaryאאא
Kאא
א א
Data Dictionary Table
אאאא ROLE_SYS_PRIVS
אאאא ROLE_TAB_PRIVS
אאאאא USER_ROLE_PRIVS
אאאא אUSER_TAB_PRIVS_MADE
אאא אUSER_TAB_PRIVS_RECD
אאאאא אUSER_COL_PRIVS_MADE
אאא אUSER_COL_PRIVS_RECD
،אאאאאאW
Kאאא
-٨-
אא ٢٦٢ אא
אא א א
Kאאא
אא،REVOKEאאאא
אאאאאא،אא
KאWITH GRANT OPTIONאא
-٩-
אא ٢٦٢ אא
אא א א
א؟אאאא E١
؟א
_________________________________________________
؟אאא E٢
_________________________________________________
؟אאאאא، א E٣
_________________________________________________
אאא،DBAאא E٤
؟אאא،אאא
_________________________________________________
؟אאאא E٥
_________________________________________________
אDEPTאאALIא،SALEMא E٦
K
KSALEMאDEPTאאALIא E٧
KSALEMאDEPTאאALIא E٨
KאאאאDEPTאאא E٩
- ١٠ -
אא ٢٦٢ אא
אא א א
Data DictionaryאUSER_TABLESא E١٠
Kאא
KALIאDEPTאאא،SALEMאE١١
- ١١ -
אאא
ã¹]<gè…‚jÖ]æ<ËÖ]<Üé×Ãj×Ö<íÚ^ÃÖ]<퉉ö¹]
אאאא
א
אאא
אא
٢
אא ٢٦٢ אא
אאא א א
Wאא
אאאאאאאאאא
אאאאא
Wאא
Wא،א
אא K١
אאא K٢
אאא אK٣
אאאאא אK٤
Wאאא
٪١٠٠אאאא
٤Wאא
Wאא
•
Projectorא •
•
•
- ١٢ -
אא ٢٦٢ אא
אאא א א
אא
Explicit Cursorsאאא
א Select א א אא א
א אאKא ،
א א א א א Active set א
،אא אאא אאאא
KאאאKאא
Active Set
- ١٣ -
אא ٢٦٢ אא
אאא א א
אאא
Wאאאאא
NO
YES
EMPTY
DECLARE OPEN FETCH CLOSE
أﻧﺸﺊ ﺣﺪد ﺣﻤﻞ اﻓﺤﺺ أاﻟﻎ
ﻣﻮﻗﻌ ًﺎ ﻓﻲ اﻟﻤﺠﻤﻮﻋﺔ اﻟﺴﻄﺮ ﻟﺘﺤﺪﻳﺪ اﻟﻤﺠﻤﻮﻋﺔ
اﻟﺬاﻟﻜﺮة اﻟﻨﺸﻄﺔ اﻟﺤﺈﻟﻰ ﻓﻲ اﻷﺳﻄﺮ .اﻟﻨﺸﻄﺔ
ﺧﺎﺻ ًﺎ اﻟﻤﺘﻐﻴﺮات اﻟﻤﺘﻮﻓﺮة ﻓﻲ
ﺑﺠﻤﻠﺔ اﻟﻤﺠﻤﻮﻋﻪ
،اﻟﻨﺸﻄﺔ
Wאאאאא
א א אWDeclareא K١
Kאא
،א א א א WOpen א K٢
Kאאאאאא
אאאאאאWFetchאא K٣
אKאאאא
א א،Kאא אא
א א،אא
Kא
،אא א א א א WClose א K٤
Kא
،אא א
Kא
- ١٤ -
אא ٢٦٢ אא
אאא א א
א
אאאCursor
KPL/SQLאא •
KFETCH
CURSOR cursor_name IS
Select_statement
KאאאאORDER BYאאא
W
DECLARE
CURSOR emp_cursor IS
SELECT empno, ename
FROM emp;
CURSOR dept_cursor IS
SELECT *
FROM dept
WHERE deptno = 10;
BEGIN
……
- ١٥ -
אא ٢٦٢ אא
אאא א א
א
א אאא א אא
א א א ،א א א
Kא
א PL/SQL א W
KFetchא،Exception
OPEN Cursor_name;
Wאא
Kאאא אאא Fetch
Kאאאא
FETCH cursor_name INTO [variable1, variable2, …] |
record_name];
WאFetchאא
אא Fetch א INTOאא א אK١
KאאאSelectא
KFETCH INTOאאRecord K٢
K،א אK٣
WFetchא
אאאא K١
Kאאאאאאא K٢
KאאאאFOR loopאא אK٣
- ١٦ -
אא ٢٦٢ אא
אאא א א
W
FETCH emp_cursor INTO v_empno, v_ename;
Wאא
א،אאאא א א
Kא אKאאאא
א אא
KINVALID_CURSOR
א א א PL/SQL א
א א
KאאEאאFאא
،אאאאW
א א OPEN_CURSORSאאאאא
K٥٠
…
FOR I IN 1—10 LOOP
FETCH emp_cursor INTO v_empno, v_ename;
…
END LOOP
CLOSE emp_cursor;
END;
- ١٧ -
אא ٢٦٢ אא
אאא א א
אא
،א א
KאאאKא
KאאאW
א אא א
אא
True/False %ISOPEN
K
א
True/False %NOTFOUND
א
א
True/False %FOUND
א
אא
Number %ROWCOUNT
אא
%ISOPEN
א אא K א א
TRUE א K א א،א،%ISOPEN
KאאאKא
W
IF NOT emp_cursor%ISOPEN THEN
OPEN emp_cursor;
END IF;
LOOP
FETCH emp_cursor; …
K%ROWCOUNT%NOTFOUND
Kאאא%ROWCOUNTאא• א
Kאאא%NOTFOUNDאא• א
- ١٨ -
אא ٢٦٢ אא
אאא א א
W
DECLARE
v_empno emp.empno%TYPE;
v_ename emp.ename%TYPE;
CURSOR emp_cursor IS
SELECT empno, ename
FROM emp;
BEGIN
OPEN emp_cursor;
LOOP
FETCH emp_cursor INTO v_empno, v_ename;
EXIT WHEN emp_cursor%ROWCOUNT > 10 OR
Emp_cursor%NOTFOUND;
…
END LOOP;
CLOSE emp_cursor;
END;
א NULL %NOTFOUND،
א WHEN א אא
Wאאא،TRUE
EXIT WHEN emp_curor%NOTFOUND
OR emp_cursor%NOTFOUND IS NULL;
Cursors and Recordsאאא
K א א א
אאאKאאאאא
א אאא א،אא
Kא
Kא PL/SQL אאא אאאא
Kאאאא
- ١٩ -
אא ٢٦٢ אא
אאא א א
DECLARE CURSOR emp_cursor IS
SELECT empno, ename
FROM emp;
Emp_record emp_cursor%ROWTYPE;
BEGIN
OPEN emp_cursor;
LOOP
FETCH emp_cursor INTO emp_record;
EXIT WHEN emp_cursor%NOTFOUND;
INSERT INTO temp_list(empid,empname)
VALUES (emp_record.empno, emp_record.ename);
END LOOP;
COMMIT;
CLOSE emp_cursor;
END;
KFORא
،אא אא א א FOR אא א אא
א KFOR אא א א ،
א א אא א
א Kאא א ،א
Wא
SET SERVEROUTPUT ON
DECLARE
CURSOR emp_cursor IS
SELECT ename, deptno
FROM emp;
BEGIN
FOR emp_record IN emp_cursor LOOP
-- EF
IF emp_record.deptno = 30 THEN
DBMS_OUTPUT.PUT_LINE (‘Employee ‘ ||
- ٢٠ -
אא ٢٦٢ אא
אאא א א
אאאFORאאא
א א ،א א א א א
אKאא א א א،אא
Wאאאא،אאאא
SET SERVEROUTPUT ON
BEGIN
FOR emp_record IN (SELECT ename, deptno
FROM emp) LOOP
-- EF
IF emp_record.deptno = 30 THEN
DBMS_OUTPUT.PUT_LINE (‘Employee ‘ ||
emp_record.ename || ‘ works in the Sales Dept. ‘);
END IF;
END LOOP;--
END; /
- ٢١ -
אא ٢٦٢ אא
אאא א א
W
KאאאאאE١
SQL> CREATE TABLE top_dogs
(name VARCHAR2(25),
salary NUMBER(11,2) );
KאPL/SQLE٢
Ksubstitution variablesאאאאאn אK١
KEMPאאnאאאא،אא K٢
KTop_dogsאאא K٣
Kאאאא אK٤
- ٢٢ -
אא ٢٦٢ אא
אאא א א
Please enter the number of top money makers: 2
NAME SALARY
KING 5000
FORD 3000
SCOTT 3000
- ٢٣ -
אאא
ã¹]<gè…‚jÖ]æ<ËÖ]<Üé×Ãj×Ö<íÚ^ÃÖ]<퉉ö¹]
אאאא
א
אא
אא
٣
אא ٢٦٢ אא
אא א א
Wאא
Kאאאא،אאאאא
Kאאאאאא
Wאא
Wא،א
אאאא K١
אאא אK٢
אא אK٣
אאאאאאא K٤
Wאאא
٪١٠٠אאא
٤Wאא
Wאא
•
Projectorא •
•
•
- ٢٣ -
אא ٢٦٢ אא
אא א א
אא
אא
W
א א א ،PL/SQL א
אא،אאאאא
Kאא
؟
W،א
אKאאא،א K١
א ORA-01403
KNO-DATA-FOUNDאPL/SQLא
א RAISEאאא K٢
א אא،אא
Kא
אא אא א אאאא
א א א א،אא
Kאא،(Enclosing Block)אאאא
א אאא
KאאאאאאאאFailure
- ٢٤ -
אא ٢٦٢ אא
אא א א
DECLARE DECLARE
אאאא
Wאאאא
אאא אK١
Kאאא
אאא אK٢
Kאאאא
אאא אK٣
Kאאאא
- ٢٥ -
אא ٢٦٢ אא
אא א א
Wאאאא،אאאא
EXCEPTION
WHEN exception1 [ OR exception2 . . . ] THEN
Statement1;
Statement2;
[WHEN exception3 [ OR exception4 . . . ] THEN
Statement1;
Statement2;
. . .]
[WHEN OTHERS THEN
Statement1;
Statement2;
. . .]
א،אאWHEN OTHERSאא
Kאאאאאאא
אא
אאאא
، א א א א א אא
Wאאא
NO_DATA_FOUND K١
TOO_MANY_ROWS K٢
INVALID_CURSOR K٣
ZERO_DIVIDE K٤
DUP_VAL_ON_INDEX K٥
- ٢٦ -
אא ٢٦٢ אא
אא א א
אאאא
،א אאאא
، א א א א אא
אאKאאאOTHERאאא
Kאאאאאא
DECLARE ASSOCIATE REFERENCE
Declarative Section Exception
Handling Section
א PRAGMA א א
EXCEPTION_INIT א
א
، א א א PRAGMA א א
אאאאאאא
KPRAGMA
- ٢٧ -
אא ٢٦٢ אא
אא א א
W
DECLARE
e_emps_remaining EXCEPTION;
PRAGMA_EXCEPTION_INIT (e_emps_remaining, -2292) ;
v_deptno dept.deptno%TYPE := &p_deptno ;
BEGIN
DELETE FROM dept
WHERE deptno = v_deptno;
COMMIT;
EXCEPTION
WHEN e_emps_remaining THEN
DBMS_OUTPUT.PUT_LINE (‘Cannot remove dept ‘||
TO_CHAR (v_deptno) || ‘. Employees exist ‘);
END;
Kאאאא
Wאא،אאאאPL/SQL
אא K١
KRAISEא K٢
DECLARE
e_invalid_product EXCEPTION;
BEGIN
UPDATE product
SET descrip = ‘&product_description’
WHERE prodid = &product_number;
IF SQL%NOTFOUND THEN
RAISE e-invalid_product;
END IF;
COMMIT;
EXCEPTION
WHEN e_invalid_product THEN
DBMS_OUTPUT.PUT_LINE (‘Invalid product number. ‘);
END;
- ٢٨ -
אא ٢٦٢ אא
אא א א
אא
Wאאאאא،א
אSQLCODE K١
KSQLERRM K٢
DECLARE
v_error_code number;
v_error_message varchar2(255);
BEGIN
...
exception
WHEN OTHERS THEN
ROLLBACK;
v_error_code := SQLCODE;
v_error_message := SQLERRM;
INSERT INTO errors VALUES (v_error_code, v_error_message);
END;
אאא
א،א א
א אKאאאא א
א א אאא א אא
KאאEnclosing Block
- ٢٩ -
אא ٢٦٢ אא
אא א א
DECLARE
. . .
exception; e_no_rows
exception; e_integrity
PRAGMA EXCEPTION_INIT (e_integrity, -2292);
BEGIN
FOR c_reocrd IN emp_cursor LOOP
BEGIN
BEGIN
SELECT …
SELECT …
UPDATE …
UPDATE …
IF SQL%NOTFOUND THEN
IF SQL%NOTFOUND THEN
RAISE e_no_rows;
RAISE e_no_rows;
END IF;
END IF;
EXCEPTION
EXCEPTION
WHEN e_inventory THEN …
WHEN e_inventory THEN …
WHEN e_no_rows THEN …
WHEN e_no_rows THEN …
END;
END;
END LOOP;
EXCEPTION
א ، א א א
אא א אא ،NO_DATA_FOUND
א אא א א ،א א
KאאאאאEאאאFאא
- ٣٠ -
אא ٢٦٢ אא
אא א א
KRAISE_APPLICATION_ERRORא
א א RAISE_APPLICATION_ERROR א אא
Kאאאא
…
EXCEPTION
WHEN NO_DATA_FOUND THEN
RAISE_APPLICATION_ERROR (-20201,
‘Manager is not a valid employee.’);
END;
Wאא،אאאאאאאאא
…
DELETE FROM emp
WHERE mgr = v_mgr;
IF SQL%NOTFOUND THEN
RAISE_APPLICATION_ERROR (-20202, ‘This is not a valid manager’);
END IF;
…
- ٣١ -
אא ٢٦٢ אא
אא א א
KאאאPL/SQLא E١
א א א ، א א אא א K١
<Salary>א?אMESSAGES
א א א א אא א K٢
K<Salary>א?אMESSAGES
א א MESSAGES ، אא א א אא א K٣
Kא
? א MESSAGES א א K٤
K?
KMESSAGESאאאאא K٥
RESULTS
٢٠٠٠–
٥٠٠א
٣٥٠٠א
DEPT אא א PL/SQL א E٢
Substitution א אא א א אא אא א
Kvariables
א אא א אK١
Kאא
KאPL/SQL K٢
- ٣٢ -
אא ٢٦٢ אא
אא א א
G_MESSAGE
א٥٠אא
אאאאאאPL/SQLאE٣
K$١٠٠
Kאא،אא K١
Kאאאאא،אא K٢
Kאאאא K٣
- ٣٣ -
אא ٢٦٢ אא
אא א א
Please enter the salary: 800
PL/SQL procedure successfully completed.
G_MESSAGE
٩٠٠٧٠٠אE١F
G_MESSAGE
٣١٠٠٢٩٠٠אE٣F
G_MESSAGE
٦١٠٠٥٩٠٠א
- ٣٤ -
אאא
ã¹]<gè…‚jÖ]æ<ËÖ]<Üé×Ãj×Ö<íÚ^ÃÖ]<퉉ö¹]
אאאא
א
אא
אא
٤
אאא ٢٦٢ אא
אא א א
Wאא
אאאאאאאא
Kאאאאאא،א
Wאא
Wא،א
אא K١
אאאאא K٢
אאאא אK٣
אא K٤
אאאאא K٥
Wאאא
٪١٠٠אאא
٤Wאא
Wאא
•
Projectorא •
•
•
- ٣٥ -
אאא ٢٦٢ אא
אא א א
Wאאא
Program Constructsאא
W
،Program Modules א אא אא א א
،Modulesאאא א אא
א،אאא א
אא Database Server א א אא
Kא אאא
Source Codeאאא אאא
אא א KP-Code א Compile א
W’אאא
Anonymous Stored
procedure/
block DECLARE Function
EXCEPTION
Database Package
trigger
Object Type
- ٣٦ -
אאא ٢٦٢ אא
אא א א
אאאא
Wאאאאא
KאאאאאWAnonymous Block K١
Kאאאא
אאא،SubprogramsWNamed Block K٢
Function, Procedure, Trigger, PackageWאא
Kא
אאא א אא
KNested Blocksאא
Anonymous PL/SQL Block
אא א،א אא
א PL/SQL ،
Wאאא،Execution time
- ٣٧ -
אאא ٢٦٢ אא
אא א א
J Wאא،
- ٣٨ -
אאא ٢٦٢ אא
אא א א
Header
IS
Declaration section
BEGIN
Executable Section
Exception (optional)
Exception section
END;
،Subprograms،אאאאאא
אאא אאא،א
Wאא،Headerאאא
KFunctionProcedureאאא K
אאא אK
K،אא K
KFunctionsאאאReturnא K
א IS א
KAnonymous BlocksאאאIS
אאא Anonymous Blocks אא אאאא
K؟Subprogramsאאא
א א אא א א א א
א א
Kא
- ٣٩ -
אאא ٢٦٢ אא
אא א א
.Advantages of Subprogramsאאאאאאא
KImprove Reusabilityאא K١
א אאא א א
אאאאא،א
Kא
KImprove maintenanceא K٢
אא אאאא א
אא ،
א אא א א
א א א ،א א א
Kא
KImprove Performanceא K٣
א • א
Kאא
א אאא אאאאא •
Network Traffic אא
؟אאאאא
א Database Server א א אא
Procedure Builder Database Client א KSQL*Plus
KForms Builderאאאאא
KProceduresFunctionsאאא
א
- ٤٠ -
אאא
ã¹]<gè…‚jÖ]æ<ËÖ]<Üé×Ãj×Ö<íÚ^ÃÖ]<퉉ö¹]
אאאא
א
א
א
٥
אא ٢٦٢ אא
א א א
Wאא
،אאא
Kאאאא
Wאא
Wא،א
א K١
אא K٢
אאאאאא אK٣
אאאאא אK٤
K٥
Wאאא
٪١٠٠אאא
٥Wאא
Wאא
o
Projectorא o
o
o
- ٦١ -
אא ٢٦٢ אא
א א א
Procedureא
אא א
WProcedureReturn value
CREATE [OR REPLACE] PROCEDURE procedure_name
[ (Parameter1 [,Parameter2, …] ) ]
AS
[ Local Declaration ]
Begin
Executable Statements
[Exception
exception handlers ]
END [procedure_name]
،אאא א Procedure
W א
Header אK١
אאאISASאא
Body אK٢
Kא א אא אא א IS
א ،אא ، א REPLACE
א א אא א א
Kא
- ٦٢ -
אא ٢٦٢ אא
א א א
Procedureאא
K؟Procedureאאאא
1
Oracle
Editor
SQL*Plus
Code
Procedure Code
Builder
Save
SQL> START file.sql
2
Source code
ORACLE
Compile
P-Code
Execute
- ٦٣ -
אא ٢٦٢ אא
א א א
- ٦٤ -
אא ٢٦٢ אא
א א א
א א
Procedureאאאא EאאFIN
אאProcedureאא OUT
אא Procedure א א IN OUT
Parameterאא
Parameter Modes for Formal Parametersאאאאא
אאא אא، א א א
אא Actual Parameter אא،א א
Kאאאא
IN OUT OUT IN
אאא
א א א א
אאא
א Subprogramא
א
Initialized Variable Un initialized variable אא
Actual א א
א Parameters
א ،
،
אW
א א ،IN א א א
א
א א،א א
K٪١٠אא
- ٦٥ -
אא ٢٦٢ אא
א א א
SQL> CREATE OR REPLACE PROCEDURE raise_salary
2 (v_id in emp.empno%TYPE)
3 IS
4 BEGIN
5 UPDATE emp
6 SET sal = sal * 1.10
7 WHERE empno = v_id;
8 END raise_salary;
9 /
Procedure created.
SQL> EXECUTE raise_salary(7369)
PL/SQL procedure successfully completed
SQL*Plusא،אאאאא
אא א Raise_salaryא
٪١٠אאאא
EXECUTEא،SQL*Plusא
SQL> EXECUTE raise_salary (7369)
אאא،Procedure Builderאאא
אאא
PL/SQL> raise_salary (7369)
א א א א א אאא
K
- ٦٦ -
אא ٢٦٢ אא
א א א
אW
SQL> CREAE OR REPLACE PROCEDURE query_emp
(v_id IN emp.empno%TYPE,
v_name OUT emp.ename%TYPE,
v_salary OUT emp.sal%TYPE,
v_comm OUT emp.empno%TYPE)
IS
BEGIN
SELECT ename, sal, comm.
INTO v_name, v_salary, V_comm
FROM emp
WHERE empno = v_id;
END query_emp;
/
אא אא ،אא א
Kאאא
אאאSQL*Plusאאא
Wא،אאאא
SQL> START emp_query.sql
Procedure created.
Kאאאאemp_query.sql
SQL> VARIABLE g_name VARCHAR2(15)
SQL> VARIABLE g_sal NUMBER
SQL> VARIABLE g_comm NUMBER
אW
SQL> CREATE OR REPLACE PROCEDURE format_phone
(v_phone_no IN OUT VARCHAR2)
IS
BEGIN
v_phone_no := ‘(‘ || SUBSTR(V_phone_no,1,3) ||
‘)’ || SUNSTR(V_phone_no,4,3) ||
‘-‘ || SUBSTR(v_phone_no,7);
END format_phone;
/
א Kא אאא
אאאא אא
K
SQL> VARIABLR g_phone_no VARCHAR2(15)
- ٦٨ -
אא ٢٦٢ אא
א א א
אאא
א אאאא אא
Kא،אW
א א
אאאאא Positionא
א א א א Nameא
EZ>Fאאאא
א א א א א א Combination
Kא
W
BEGIN
add_dept;
add_dept (‘TRAINING’, ‘NEW YORK’);
add_dept (v_loc => ‘DALLAS’, v_name => ‘EDUCATION’);
add_dept (v_loc => ‘BOSTON’);
END;
/
SQL> SELECT * FROM dept;
- ٦٩ -
אא ٢٦٢ אא
א א א
אאDefaultאאאא
אא א Defaultאאאא
Wאא،אאאאאא
SQL> CREATE OR REPLACE PROCEDURE add_dept
(v_name IN dept.dname%TYPE DEFAULT ‘unknown’,
v_loc IN dept.loc%TYPE DEFAULT ‘unknown’)
IS
BEGIN
INSERT INTO dept
VALUES (dept_deptno.NEXTVL, v_name, v_loc);
END add_dept;
/
אא
א א SQL*Plus א א
א Named Subprogram א א
Kאאאאאאא،Anonymous Block
W
SQL> CREATE OR REPLACE PROCEDURE process_emps
IS
CURSOR emp_cursor IS
SELECT empno
FROM emp;
BEGIN
FOR emp_rec IN emp_cursor
LOOP
raise_salary (emp_rec.empno); -- invoke procedure
END LOOP;
COMMT;
END;
/
- ٧٠ -
אא ٢٦٢ אא
א א א
- ٧١ -
אא ٢٦٢ אא
א א א
E١
PRODUCTאא ADD_PROD K١
Kאאאאא
א א ، א א א א K٢
KאPRODUCTאא،
E٢
،PRODUCT UPD_PROD K١
א،אאאאאא
Kא
، א א،אאא K٢
א א Kא PRODUCT א א
Kא
E٣
א،PRODUCT DEL_PROD K١
א א א ، אא א א א
K
، א א ، א א א .٢
אאKאPRODUCTאא
Kא
- ٧٢ -
אאא
ã¹]<gè…‚jÖ]æ<ËÖ]<Üé×Ãj×Ö<íÚ^ÃÖ]<퉉ö¹]
אאאא
א
א
א
٦
אא ٢٦٢ אא
א א א
Wאא
Kאאאאא
Wאא
Wא،א
אא K٦
אאא K٧
אא K٨
אא K٩
אאא אK١٠
Wאאא
٪١٠٠אאא
٤Wאא
Wאא
o
Projectorא o
o
o
- ٧٣ -
אא ٢٦٢ אא
א א א
Functionsאאאא
אא אא
אKExpressionאאא،Return value
WFunction
CREATE [OR REPLACE] FUNCTION function_name
[ (argument1 [mode1] datatype1 [,argument2 [mode2] datatype2, …] ) ]
RETURN datatype
IS|AS
[ Local Declaration ]
Begin
Executable Statements
[Exception
exception handlers ]
END [function_name]
אאא Function א
Wא אא،א
Header אK١
،א א אאא IS ASאא
אא אא א REPLACE א
א א RETURN אא אK٢
Ksize
Body אK٣
،א אאא אאא IS
RETURN (variable)אא
- ٧٤ -
אא ٢٦٢ אא
א א א
Functionאאא
K؟Functionאאאאאא
Editor
1 Oracle
Code SQL*Plus
Procedure Code
Compile Builder
Save
SQL> START file.sql
2 Compile
Source code
ORACLE
P-Code
Execute
- ٧٥ -
אא ٢٦٢ אא
א א א
- ٧٦ -
אא ٢٦٢ אא
א א א
RETURN v_salary
INSERT, א א אא
KאאאUPDATE, DELETE
- ٧٧ -
אא ٢٦٢ אא
א א א
Drop function DDL Rollback א W
Kאאאא
אאא
אא א
Expression PL/SQL
RETURN data type
א אא
Wאאאאאא
א K١
א K٢
א K٣
- ٧٨ -
אא ٢٦٢ אא
א א א
E١
אאא PROD_DESCא א אK
PRODUCTSאא
Kאאא K
KDescSQL*Plusא K
KDescאאאא K
E٢
empno א אא Annual_Sal א א אK
א א ، א א א
KNULLcommאא،(sal*12)+comm
، א א א א ،א א אK
Kאאאאאאא،א
- ٧٩ -
אאא
ã¹]<gè…‚jÖ]æ<ËÖ]<Üé×Ãj×Ö<íÚ^ÃÖ]<퉉ö¹]
אאאא
א
א
א
٧
אא ٢٦٢ אא
א א א
Wאא
Kאאא
Wאא
Wא،א
אא K١
אא K٢
אא K٣
אא K٤
Wאאא
٪١٠٠אאא
٨Wאא
Wאא
•
Projectorא •
•
•
- ٨٠ -
אא ٢٦٢ אא
א א א
Wאא
אא
،א Database Triggerאא
אאא אאאאאא
Kא
Application Trigger א
KForms Builderאאאאאא،א
א،Views אא אאאא
אאא אDML
Kinstead of ??
אא
WאאאTriggerא
א אK١
K
א א א א א א אK٢
Kאאאא
،אא א K٣
Constraint Primary key אא
Kא
א אאאא אK٤
Kא
- ٨١ -
אא ٢٦٢ אא
א א א
א
אאאא
אא،אאא،א،אא
Wאא،אאאאKאאא
אא א א
Before
א
After Trigger Timingא
Kא
Instead of
א
Insert א
א א DML Trigger Event א
Update
view א
Delete
א
Statement א Trigger Type א
Row
א א Trigger body א
PL/SQL
א
אא،אאאאא
אאאאאא
KאEאF
- ٨٢ -
אא ٢٦٢ אא
א א א
א
Wא،אאאא
،אאאW Before K١
Wאאאא
Trigger א א א •
א א א K Firing
א אאא
KRollbackאאאאKא
Kאאא •
،אאאWAfter K٢
Wאאאא
אאאא •
??אא ?? •
Kא
אא אWInstead of K٣
א views א א א K א
Kאא
،א א א ? ? א
?אא Insert, update, delete
Kאא?
- ٨٣ -
אא ٢٦٢ אא
א א א
אאא
Kא אאאאא
Kinsert ,update or deleteאאא
אאאupdate אאאא
א א
Kא
. . . . UPDATE OF sal . . . .
Ksalאאאאאאא
Wאא
. . . . INSERT or UPDATE or DELETE . . . .
Wא
אWאא אאא
א EUPDATE F א
Kאאאאא
،אאאW K١
אאאאאKא
Kא
- ٨٤ -
אא ٢٦٢ אא
א א א
אא אאW K٢
א،א
אאאאKאאא
Kאאא
KDEPTאאא אW
SQL> INSERT INTO dept (deptno, dname, loc)
Kאאאא א
?? ،א א ?? א א
א??אא??אא
א א א Kא
אאאאא
Kא
Before Statement
DEPT table
- ٨٥ -
אא ٢٦٢ אא
א א א
K٣٠אאאאא אאW
א אאא
، אא??א، א
א??אא??
Kאא??KUPDATEא
Before Statement trigger
אאא
- ٨٦ -
אא ٢٦٢ אא
א א א
Wא
א אאאא
،PL/SQL SQLאא،
K،אא،אא،אא
אאא א
Correlation אאאאאאא א
WאאPL/SQL Block
[DECLARE]
BEGIN
[EXCEPTION]
END;
Wא
CREATE [OR REPLACE] TRIGGER trigger_name
ON table_name
PL/SQL block;
אאאא אא
אאאא א
אאא א
אאאא אא
א ،א א אא א א א אא
ENDBEGINDECLAREאא
- ٨٧ -
אא ٢٦٢ אא
א א א
K??W
SQL> CREATE OR REPLACE TRIGGER secure_emp
BEGIN
IF (TO_CHAR (sysdate,’DY’) IN (‘THU’,’FRI’)) OR
END IF;
END;
/
א??אאא،
Kאאאא
،א א
א אKאאא
אא אא
אKאאאא
KRollbackא
Server side built inא RAISE_APPLICATION_ERROR א
Kאאאאא
- ٨٨ -
אא ٢٦٢ אא
א א א
SQL> INSERT INTO emp (empno, ename, deptno)
*
ERROR at line 1:
ORA-20500: You may only insert into EMP during normal hours.
KORACLEאאW
W Using Conditional Predicatesאאאא
אאאאאא
KאאאאINSERTING, DELETING, UPDATINGאא
EMPאאאאאאאאW
Kאא
- ٨٩ -
אא ٢٦٢ אא
א א א
SQL> CREATE OR REPLACE TRIGGER secure_emp
BEGIN
THEN
IF INSERTING THEN
RAISE_APPLICATION_ERROR (-20500,
ELSIF DELETING
RAISE_APPLICATION_ERROR (-20502,
ELSIF UPDATING(‘SAL’)
RAISE_APPLICATION_ERROR (-20503,
ELSE
RAISE_APPLICATION_ERROR (-20504,
END IF;
END IF;
END;
- ٩٠ -
אא ٢٦٢ אא
א א א
א א א א ??
Kא
אאא،א אW
Wאאאאא،
USER TABLENAME COLUMN INS UPD DEL MAX MAX MAX
SCOTT EMP 1 1 1 5 5 5
JONES EMP 0 0 0 5 0 0
DECLARE
V_salary_changes NUMBER;
V_max_changes NUMBER;
BEGIN
FROM audit_table
RAISE_APPLICATION_ERROR (-20501,
END;
Wא
CREATE [OR REPLACE] TRIGGER trigger_name
ON table_name
[ REFERENCING OLD AS OLD | NEW AS new]
[WHEN condition]
PL/SQL block;
אאאא אא
אאאא א
אאא א
אאאא אא
אאאא א
- ٩٢ -
אא ٢٦٢ אא
א א א
Kאאא
FOR EACH ROW
אאאאאW
Kאא،
SQL> CREATE OR REPLACE TRIGGER audit_emp
BEGIN
IF DELETING THEN
ELSE
END IF;
END; /
AUDIT_EMP_TABLEEMPאאW
א א א KEMP א א א
Kאא
SQL> CREATE OR REPLACE TRIGGER audit_emp_values
BEGIN
:NEW.sal);
END;
/
Audit_Emp_Tableאאא
USER_NAME TIMESTAMP ID OLD_LAST_NAME NEW_LAST_NAME
א א א ، א א
KNEWOLDאאא
אא אא א
אא NULL INSERTא
אאNewOLD• א
PL/SQLSQLEWF،אאא •
KWHENאאאאאEWF •
- ٩٥ -
אא ٢٦٢ אא
א א א
SQL> CREATE OR REPLACE TRIGGER derive_commmission_pct
IF INSERTING THEN
:NEW.comm := 0;
ELSIF :OLD.comm IS NULL THEN
:NEW.comm := 0;
ELSE
:NEW.comm := :OLD.comm * (:NEW.sal/:OLD.sal);
END IF;
END;
/
- ٩٦ -
אא ٢٦٢ אא
א א א
؟אאא
Wאאאא
א א
CREATE TRIGGERא אK١ CREATE PROCEDUREא אK١
Data Dictionary א K٢ Data Dictionary א K٢
א Source א א א Source א א
p_code p_code
EFא K٣ EFא K٣
א א
EFא K١ EFא K١
- ٩٧ -
אא ٢٦٢ אא
א א א
א p_codeאא
אאא א ، Data Dictionary
KאKא
אאא
EnabledWא
א،אאKDisabled
Data base integrity אאא
Wאאא
ALTER TABLE table_name DISABLE | ENABLE ALL TRIGGERS
Wאא
ALTER TRIGGER trigger_name COMPILE
K אאא
- ٩٨ -
אא ٢٦٢ אא
א א א
א א א
Wאאא،א
DROP TRIGGER trigger_name
W
SQL> DROP TRIGGER secure_emp;
Wא
Wאאאאאאא
א Foreign Keyאא،Primary Key אא K١
KאאאאUnique Keyא
WאאMutatingא،Mutatingא אK٢
אKא א،אא א א •
אאאאאאא
Kא
Foreign אאא א •
KKey
W
א ، א א א
Kאאאאא
- ٩٩ -
אא ٢٦٢ אא
א א א
SQL> CREATE OR REPLACE TRIGGER check_salary
v_minsalary emp.sal%type;
v_maxsalary emp.sal%type;
BEGIN
END IF;
END;
Kאא،א
WKאא،אאא
- ١٠٠ -
אא ٢٦٢ אא
א א א
SQL> UPDATE emp
ERROR at line 2
ORA-04091: table EMP is mutating, trigger/function may not see it
mutatingאא،א אא
KאKEMP
- ١٠١ -
אא ٢٦٢ אא
א א א
W
E١
٨W٠٠א،אאא אא
WאKאא٦W٠٠א
א SECURE_DML א K١
W،אאאא
?אאאא?
א א א א PRODUCT א K٢
E٢
COMM SALESMAN א א
א EMP א א K א
KCUSTOMERא
א אא א Kא אK١
אאאאא،אא،customer ID
אאאאאאKא
،אאאEMPאאא
K٪٥אא
אאאאORDאא
Kאאאאאא
- ١٠٢ -
٢٦٢ אא
א א
- ١٣٤ -
٢٦٢ אא
א א
- ١٣٥ -
٢٦٢ אא
א א
- ١٣٦ -
٢٦٢ אא
א א
א
- ١٣٧ -
א ٢٦٢ אא
א א
אא
אאא
אא–אאא،א،8i/8אא •
K١٤٢٢
אאא
Introduction to SQL and PL/SQL, Oracle University book, volume 2 •
- ١٣٩ -
א ٢٦٢ אא
א א
א
١ אאWאא
٢ אאא
٢ אא
٣ אאא
٤ א
٦ א
٧ אאא
٨ אאאא
٨ אאא
١٠
١٣ אאאWאא
١٤ אאא
١٥ א
١٦ א
١٦ אא
١٧ אא
١٨ אא
١٩ אאא
٢٠ Forאאא
٢٢
٢٥ אאWאא
٢٥ א
٢٦ אאא
٢٧ אא
٢٩ אא
א ٢٦٢ אא
א א
٣٠ אא
٣١ RAISE_APPLICATION_ERRORא
٣٢
٣٦ אאWאאא
٣٦
٣٧ אאא
٣٧ א
٣٨ אא
٣٩ אאאאאא
٤٢ אWאא
٤٣ אא
٤٤ אא
٤٩ אא
٥٠ אאDefaultאאאא
٥٠ אאא
٥١ אא
٥٢
٥٣ אאWאא
٥٤ אאאא
٥٦ אאא
٥٦ אא
٥٨ אאא
٥٨ אאאאאא
٥٩
٦١ אאאWאא
٦١ אא
٦٢ א
א ٢٦٢ אא
א א
٦٧ א
٦٩ אאאא
٧٢ א
٧٧ אאא
٧٩ א
٧٩ א
٨٢
٨٣ א
אאאאאא
אEאFאא
GOTEVOT appreciates the financial support provided by BAE SYSTEMS