5. PL/SQL
聽聽 PL/SQL(Procedural Language/SQL)鏄湪鏍囧噯SQL鐨勫熀紜涓婂鍔犱簡榪囩▼鍖栧鐞嗙殑璇█
聽聽 Oracle瀹㈡埛绔伐鍏瘋闂甇racle鏈嶅姟鍣ㄧ殑鎿嶄綔璇█
聽聽 Oracle瀵筍QL鐨勬墿鍏?br />聽聽 BEGIN
聽聽 聽聽IF TO_CHAR(SYSDATE, 'DAY')='Monday' THEN
聽聽 聽聽聽聽pay_for_hamburgers;
聽聽聽ELSE
聽聽聽聽聽borrow_hamburger_money;
聽聽聽END IF;
聽 END;聽聽
聽 聽聽
6. PL/SQL
聽 緇撴瀯鍖栨ā鍧楀寲緙栫▼
聽 鑹ソ鐨勫彲縐繪鎬?br />聽 鑹ソ鐨勫彲緇存姢鎬?br />聽 鎻愬崌緋葷粺鎬ц兘
聽 涓嶄究浜庡悜寮傛瀯鏁版嵁搴撶Щ妞嶅簲鐢ㄧ▼搴?br />聽
7. SQL聽聽聽聽聽 聽聽
聽 絎洓浠h璦
聽 鍋氫粈涔堬紝涓嶇鎬庝箞鍋?br />聽 緙哄皯榪囩▼涓庢帶鍒惰鍙?br />聽 鏃犵畻娉曟弿榪拌兘鍔?br />聽
8. PL/SQL
聽聽 Procedural Language/SQL
聽聽 鎵╁睍
聽聽 聽聽-鍙橀噺鍜岀被鍨?br />聽聽 聽聽-鎺у埗緇撴瀯
聽聽 聽聽-榪囩▼涓庡嚱鏁?br />聽聽 聽聽-瀵硅薄綾誨瀷涓庢柟娉?br />聽聽 BEGIN
聽聽 聽聽IF TO_CHAR(SYSDATE, 'DAY')='Monday' THEN
聽聽 聽聽聽聽pay_for_hamburgers;
聽聽聽ELSE
聽聽聽聽聽borrow_hamburger_money;
聽聽聽END IF;
聽 END;聽聽
聽
9. 絎簩绔?br />聽聽 1.PL/SQL綆浠?br />聽聽 2. PL/SQL紼嬪簭緇撴瀯
聽聽 3. 鍙橀噺涓庢暟鎹被鍨嬄犅犅犅?br />聽聽 4. PL/SQL鎺у埗璇彞
聽聽 5. PL/SQL娓告爣
聽聽 6. 寮傚父鎹曡幏
聽聽 7. 瀛愮▼搴?br />聽聽 聽聽1. 榪囩▼
聽聽 聽聽2. 鍑芥暟
聽聽 8. 鍖?br />聽聽 9. 瑙﹀彂鍣?聽 聽聽
10. PL/SQL紼嬪簭緇撴瀯
聽聽聽 PL/SQL鍧?br />聽-鐢蟲槑閮ㄥ垎錛?DECLARE
聽-鎵ц閮ㄥ垎錛?BEGIN
聽-寮傚父澶勭悊錛?EXCEPTION
聽聽聽 DECLARE
聽v_StudentID NUMBER(5):=1000;
聽v_FirstName VARCHAR(20);
聽聽聽 BEGIN
聽SELECT first_name
聽聽INTO v_FirstName
聽FROM students
聽WHERE id=v_StudentID;
聽聽聽 EXCEPTION
聽WHEN NO_DATA_FOUND THEN
聽聽INSERT INTO log_table(info)
聽聽VALUES('Student 1000 does not exist!');
聽聽聽 END;
11. PL/SQL寮鍙戠幆澧?br />聽聽聽 SqlPlus鈻插伐鍏?br />聽聽聽 GUI寮鍙戝伐鍏?br />聽-SQL娓歌瀹?br />聽-SQL紼嬪簭鍛?br />聽鈥︹?br />聽鐩稿叧淇℃伅
聽http://www.oracle.com
聽http://gwynne.cs.ualberta.ca/~oracle/817doc/index.htm
聽聽聽 娉細鈻?Oracle鍏徃鐨凷QL宸ュ叿錛屼篃鍙互鐢ㄥ畠鏉ユ搷浣淥racle鏁版嵁搴撱?/p>
12. PL/SQL瀛楃闆?br />聽聽聽 瀛楁瘝錛欰-Z, a-z
聽聽聽 鏁板瓧錛?-9
聽聽聽 絀虹櫧錛歍ab,絀烘牸錛屽洖杞?br />聽聽聽 絎﹀彿錛?-*/<>=();:'@"%||&--/**/
聽聽聽 PL/SQL瀵瑰ぇ灝忓啓涓嶆晱鎰?/p>
13. 鏍囪瘑絎?br />聽聽聽 鐢ㄦ潵緇欏璞″懡鍚?br />聽-鍙橀噺銆佹父鏍囥佺被鍨嬨佸瓙紼嬪簭
聽聽聽 鍛藉悕瑙勫垯
聽-瀛楁瘝寮澶?br />聽-鍚庤窡浠繪剰鐨勯潪絀烘牸瀛楃銆佹暟瀛椼佽揣甯佺鍙楓佷笅鍒掔嚎鎴?
聽-鏈澶ч暱搴︿負30涓瓧絎?br />聽聽聽 鏍囪瘑絎︾殑渚嬪瓙
聽聽聽 x, First Name, v_StudentID, x+y, TempVar, _tmp_, v1, v2_,
聽聽聽 1_var, s#, v$3, This_is_a_really_long_identifier
14. 鍙橀噺澹版槑
聽聽聽 璇硶
聽聽聽 鍙橀噺鍚?綾誨瀷 [甯告暟] [闈炵┖] [:=鍊糫;
聽聽聽 渚嬪瓙
聽聽聽 DECLARE
聽v_Desc VARCHAR2(50);
聽v_Num NUMBER:=45;
聽v_Count BINARY_INTEGER:=0;
聽聽聽 PL/SQL瑙勫畾娌℃湁鍒濆鍖栫殑鍙橀噺涓篘ULL
聽-NULL錛氭湭瀹氫箟
15. 絎笁绔?br />聽聽 1.PL/SQL綆浠?br />聽聽 2. PL/SQL紼嬪簭緇撴瀯
聽聽 3. 鍙橀噺涓庢暟鎹被鍨嬄犅犅犅?br />聽聽 4. PL/SQL鎺у埗璇彞
聽聽 5. PL/SQL娓告爣
聽聽 6. 寮傚父鎹曡幏
聽聽 7. 瀛愮▼搴?br />聽聽 聽聽1. 榪囩▼
聽聽 聽聽2. 鍑芥暟
聽聽 8. 鍖?br />聽聽 9. 瑙﹀彂鍣?
16. 鏁版嵁綾誨瀷
聽聽聽 鏍囬噺鍨?br />聽-鏁板瓧鍨嬨佸瓧絎﹀瀷銆佸竷灝斿瀷銆佹棩鏈熷瀷
聽聽聽 緇勫悎鍨?br />聽-RECORD, TABLE, VARRAY
聽聽聽 鍙傝冨瀷
聽-REF CURSOR, REF object_type
聽聽聽 LOB(澶у璞?
聽-BFILE 鏄簩榪涘埗錛屽瓨鍌ㄥ湪鏁版嵁搴撳闈㈢殑
聽-BLOB 鏄簩榪涘埗
聽-CLOB 鏄崟瀛楄妭瀛楃鏁版嵁
聽-NCLOB 鏄瀛楄妭瀛楃鏁版嵁
17. 鏍囬噺綾誨瀷
聽聽聽 鏁板瓧綾誨瀷
聽-BINARY_INTEGER, DEC, FLOAT, REAL...
聽-NUMBER
聽-NUMBER(3)
聽-NUMBER(4,3)
聽-How about NUMBER(4,6)
聽聽聽 瀛楃鍨?br />聽-CHAR, VARCHAR, VARCHAR2, STRING...
聽-LONG
聽聽聽 甯冨皵鍨?BOOLEAN)
聽聽聽 鏃ユ湡鍨?DATE)
18. %TYPE
聽聽聽 鍙橀噺鍏鋒湁涓庢暟鎹簱鐨勮〃涓煇涓瀛楁鐩稿悓鐨勭被鍨?br />聽聽聽 DECLARE
聽v_FirstName VARCHAR2(20);
聽聽聽 DECLARE
聽v_FirstName students.first_name%TYPE;
19. 璁板綍綾誨瀷
聽聽聽 TYPE 璁板綍鍚?IS RECORD(
聽鍩? 綾誨瀷1 [闈炵┖] [:=琛ㄨ揪寮?]
聽鍩? 綾誨瀷2 [闈炵┖] [:=琛ㄨ揪寮?]
聽...
聽鍩焠 綾誨瀷n [闈炵┖] [:=琛ㄨ揪寮弉]
聽聽聽 濡傛灉涓涓瓧孌甸檺瀹歂OT NULL錛岄偅涔堝畠蹇呴』鎷ユ湁涓涓垵濮嬪?br />聽聽聽 鎵鏈夋病鏈夊垵濮嬪寲鐨勫瓧孌甸兘浼氬垵濮嬪寲涓篘ULL
20. RECORD綾誨瀷鐨勪嬌鐢?br />聽 DECLARE
聽TYPE t_Rec IS RECORD(
聽聽student_id NUMBER(4),
聽聽first_name VARCHAR2(20):='Scott',
聽聽last_name VARCHAR2(20),
聽聽major BINARY_INTEGER);
聽v_Stu t_Rec;
聽聽聽 鍚岀被鍨嬬殑RECORD鍙橀噺鍙互鐩鎬簰璧嬪?br />聽聽聽 鎸塕ECORD鍙橀噺鐨勫瓧孌佃祴鍊?璁板綍鍚?鍩熷悕)
21. %ROWTYPE
聽聽%ROWTYPE榪斿洖涓涓熀浜庢暟鎹簱琛ㄥ畾涔夌殑綾誨瀷
聽聽DECLARE
聽聽聽v_StuRec Student%ROWTYPE;
聽聽聽...
聽聽聽v_StuRec.student_id := 1234;
聽聽聽v_StuRec.first_name := 'Bush';
聽聽聽...
聽聽聽%ROwtype鍜宺ecord鐨勫尯鍒槸浠涔堬紵
聽聽聽
22. TABLE綾誨瀷
聽聽聽 TYPE 琛ㄧ被鍨?IS TABLE OF 綾誨瀷 INDEX BY BINARY_INTEGER;
聽聽聽 TABLE綾誨瀷涓巑ap<int, _T>綾諱技
聽聽聽 琛ㄤ腑鍏冪礌鐨勭被鍨嬪彲浠ユ槸澶嶅悎綾誨瀷
聽聽聽 琛岀殑鏁扮洰鐨勯檺鍒剁敱BINARY_INTEGER鐨勮寖鍥村喅瀹?br />聽聽聽 Key娌℃湁蹇呰鏄『搴忕殑
聽聽聽 褰撴暟鎹鎻掑叆琛ㄤ腑鏃訛紝琛ㄦ墍闇鐨勭┖闂村氨琚垎閰嶄簡
聽聽聽
23. TABLE綾誨瀷鐨勪緥瀛?br />聽聽聽 DECLARE
聽聽聽TYPE t_StuTable IS TABLE OF Student%ROWTYPE INDEX BY BINARY_INTEGER;
聽聽聽v_Student t_StuTable;
聽聽BEGIN
聽聽聽SELECT *
聽聽聽INTO v_Student(1001)
聽聽聽FROM Student
聽聽聽WHERE id = 1001;
聽聽END;
24. 鍙橀噺鐨勪綔鐢ㄥ煙涓庡彲瑙佹?br />聽聽 DECLARE
聽聽聽v_Num NUMBER(3, 2);
聽聽BEGIN
聽聽聽 聽v_Num := 123.45;
聽聽聽DECLARE
聽聽聽聽v_Ch VARCHAR2(10);
聽聽聽BEGIN
聽聽聽聽v_Num := 321.45;
聽聽聽聽v_Ch := 'Hello';
聽聽聽聽...
聽聽聽END;
聽聽聽...
聽聽END;
聽聽
25. 絎洓绔?br />聽聽 1.PL/SQL綆浠?br />聽聽 2. PL/SQL紼嬪簭緇撴瀯
聽聽 3. 鍙橀噺涓庢暟鎹被鍨嬄犅犅犅?br />聽聽 4. PL/SQL鎺у埗璇彞
聽聽 5. PL/SQL娓告爣
聽聽 6. 寮傚父鎹曡幏
聽聽 7. 瀛愮▼搴?br />聽聽 聽聽1. 榪囩▼
聽聽 聽聽2. 鍑芥暟
聽聽 8. 鍖?br />聽聽 9. 瑙﹀彂鍣?
聽聽聽聽聽聽
26. PL/SQL鎺у埗璇彞
聽聽聽 鏉′歡璇彞
聽聽聽 寰幆璇彞
聽聽聽 GOTO璇彞
聽聽聽 娉細鈻?鍦≒L/SQL涓紝--涓哄崟琛屾敞閲婏紝/**/涓哄琛屾敞閲娿偮犅犅?
聽聽聽
27. 鏉′歡璇彞
聽聽IF THEN ELSE END IF
聽聽IF 甯冨皵琛ㄨ揪寮? THEN
聽聽聽...
聽聽ELSIF 甯冨皵琛ㄨ揪寮? THEN
聽聽聽...
聽聽ELSE
聽聽聽...
聽聽END IF;
聽聽鏉′歡涓篘ULL涓嶧ALSE鐩稿悓聽聽
聽聽
28. 寰幆璇彞1
聽聽綆鍗曞驚鐜?br />聽聽LOOP
聽聽聽...
聽聽IF 甯冨皵琛ㄨ揪寮?THEN
聽聽聽EXIT;
聽聽END IF;
聽聽END LOOP;
聽聽
29. 寰幆璇彞2
聽聽聽 WHILE寰幆
聽聽聽 WHILE 甯冨皵琛ㄨ揪寮?LOOP
聽聽聽 聽...
聽聽聽 END LOOP;
聽聽聽
30. 寰幆璇彞3
聽聽 聽FOR寰幆
聽聽 聽FOR 寰幆璁℃暟 IN [鍙嶅悜鐨刔 涓嬮檺..涓婇檺 LOOP
聽聽 聽聽...
聽聽 聽END LOOP;
聽聽 聽
31. GOTO璇彞
聽聽GOTO 鏍囩鍚?
聽聽鍙兘鐢卞唴閮ㄧ殑璇彞鍧楄煩寰澶栭儴鍧?br />聽聽璁劇疆鏍囩
聽聽<<鏍囩鍚?gt;>
聽聽鍙互涓哄驚鐜緗爣絳?br />聽聽...
聽聽<<l_b1>>
聽聽FOR v_index IN 1..50 LOOP
聽聽聽...
聽聽聽IF v_index > 40 THEN
聽聽聽聽EXIT l_b1;
聽聽聽END IF;
聽聽END LOOP l_b1;
聽聽
32. NULL璇彞
聽聽聽 鍙互鍦ㄨ鍙ュ潡涓姞絀鴻鍙?br />聽聽聽 鐢ㄤ簬琛ュ厖璇彞鐨勫畬鏁存?br />聽聽聽 IF v_idx > 40 THEN
聽聽聽 聽...
聽聽聽 ELSE
聽聽聽 聽NULL;
聽聽聽 END IF;
聽聽聽
33. SQL涓殑PL/SQL 1
聽聽鏁版嵁鎿嶇旱璇█聽聽聽
聽聽SELECT, INSERT, DELETE, SET TRANSACTION, EXPLAIN PLAN
聽聽鏁版嵁瀹氫箟璇█
聽聽DROP, CREATE, ALTER, GRANT, REVOKE
聽聽浜嬪姟鎺у埗
聽聽COMMIT, ROLLBACK, SAVEPOINT
聽聽浼氳瘽鎺у埗
聽聽ALERT SESSION, SET ROLE
聽聽緋葷粺鎺у埗
聽聽ALERT SYSTEM
聽聽ESQL
聽聽CONNECT, DECLARE CURSOR, ALLOCATE
聽聽
34. SQL涓殑PL/SQL 2
聽聽鍙湁DML SQL鍙互鐩存帴鍦≒L/SQL涓嬌鐢?br />聽聽浣跨敤Oracle鍐呯疆鐨凞BMS_SQL鍖咃紝鍙互浣跨敤鍔ㄦ丼QL璇彞
聽聽鍔ㄦ丼QL璇彞鏄湪榪愯鏃剁敓鎴愪竴涓猄QL鐨勪覆錛屽皢璇ヤ覆鎻愪氦緇橠BMS_SQL鍖呮潵鎵ц
聽聽
35. 鍐呯疆鐨凷QL鍑芥暟
聽聽瀛楃鍑芥暟
聽聽聽CHR, CONCAT, INITCAP, LOWER, LPAD, LTRIM, RTRIM, REPLACE,
聽聽聽RPAD, SUBSTR, SUBSTRB, TRANSLATE UPPER, INSTR, ASCII,LENGTH...聽聽
聽聽鏁板瓧鍑芥暟
聽聽聽ABS, ACOS, ASIN, CEIL, EXP, FLOOR, LOG, MOD, POWER, ROUND...
聽聽鏃ユ湡鍑芥暟
聽聽聽ADD_MONTHS, LAST_DAY, MONTHS_BETWEEN, NEW_TIME, NEXT_DAY, ROUND, SYSDATE, TRUNC...
聽聽杞崲鍑芥暟
聽聽聽CHARTOROWID, CONVERT,HEXTORAW, RAWTOHEX, ROWIDTOCHAR, TO_CHAR, TO_DATE, COUNT...
聽聽聽
36. 絎簲绔?br />聽聽 1.PL/SQL綆浠?br />聽聽 2. PL/SQL紼嬪簭緇撴瀯
聽聽 3. 鍙橀噺涓庢暟鎹被鍨嬄犅犅犅?br />聽聽 4. PL/SQL鎺у埗璇彞
聽聽 5. PL/SQL娓告爣
聽聽 6. 寮傚父鎹曡幏
聽聽 7. 瀛愮▼搴?br />聽聽 聽聽1. 榪囩▼
聽聽 聽聽2. 鍑芥暟
聽聽 8. 鍖?br />聽聽 9. 瑙﹀彂鍣?br />聽聽
37. 娓告爣
聽娓告爣鐢ㄤ簬鎻愬彇澶氳鏁版嵁闆?br />聽娓告爣鐨勪嬌鐢?br />聽聽-澹版槑娓告爣
聽聽-涓烘煡璇㈡墦寮娓告爣
聽聽-灝嗙粨鏋滄彁鍙栧嚭鏉ワ紝瀛樺叆PL/SQL鍙橀噺涓?br />聽聽-鍏抽棴娓告爣聽聽
38. 澹版槑娓告爣
聽DECLARE CURSOR 娓告爣鍚?IS 閫夋嫨澹版槑
聽濡傛灉鍦ㄩ夋嫨澹版槑涓嬌鐢ㄤ簡PL/SQL錛屽彉閲忕殑澹版槑蹇呴』鏀懼湪娓告爣鍓嶉潰
聽v_major students.major%TYPE;
聽DECLARE
聽聽CURSOR c_student IS
聽聽聽SELECT first_name, last_name
聽聽聽FROM students
聽聽聽WHERE major = v_major;
聽鍙橀噺鍚嶄笌鍒楀悕涓鑷翠絾涓嶅悓
39. 鎵撳紑娓告爣
聽OPEN 娓告爣鍚?br />聽鑻ラ夋嫨澹版槑宸測滅瓑寰呮洿鏂扳濆垯鍔犻攣銆?/p>
40. 浠庢父鏍囧彇
聽FETCH鐨勪袱縐嶅艦寮?br />聽聽-FETCH 娓告爣鍚?INTO 鍙橀噺1, 鍙橀噺2,...;
聽聽-FETCH 娓告爣鍚?INTO 鍙橀噺璁板綍
41.聽鍏抽棴娓告爣
聽聽聽 CLOSE 娓告爣鍚?
聽聽聽 娓告爣浣跨敤鍚庡簲璇ュ叧闂?br />聽聽聽 聽-FETCH鍏抽棴鍚庣殑娓告爣鏄潪娉曠殑
聽聽聽 聽-鍏抽棴涓涓叧闂簡鐨勬父鏍囦篃鏄潪娉曠殑
聽聽聽 聽
42. 娓告爣鐨勫睘鎬?br />聽聽%FOUND聽聽聽 聽
聽聽%NOTFOUND
聽聽%ISOPEN
聽聽%ROWCOUNT
聽聽
43. 娓告爣鐨凢ETCH寰幆
聽聽LOOP
聽聽聽FETCH 娓告爣 INTO...
聽聽聽EXIT WHEN 娓告爣%NOTFOUND;
聽聽END LOOP; 聽聽
聽聽WHILE 娓告爣%FOUND LOOP
聽聽聽聽
44. 娓告爣鐨勪緥瀛?br />聽聽Mycursor:
聽聽聽print name and id from student where age < 30
聽聽For_cursor:
聽聽聽Print dept_id, user_id, last_name, first_name from s_emp
聽聽聽where dept_id < 40
聽聽聽
45. 甯﹀弬鏁扮殑娓告爣
聽聽CURSOR鍙互甯﹀弬鏁?br />聽聽DECLARE
聽聽聽CURSOR c_student(p_major students.major%TYPE)
聽聽聽SELECT *
聽聽聽FROM students
聽聽聽WHERE major = p_major;
聽聽BEGIN
聽聽聽OPEN c_student(101);
聽聽聽...
聽聽聽
46. 絎叚绔?br />聽聽 1.PL/SQL綆浠?br />聽聽 2. PL/SQL紼嬪簭緇撴瀯
聽聽 3. 鍙橀噺涓庢暟鎹被鍨嬄犅犅犅?br />聽聽 4. PL/SQL鎺у埗璇彞
聽聽 5. PL/SQL娓告爣
聽聽 6. 寮傚父鎹曡幏
聽聽 7. 瀛愮▼搴?br />聽聽 聽聽1. 榪囩▼
聽聽 聽聽2. 鍑芥暟
聽聽 8. 鍖?br />聽聽 9. 瑙﹀彂鍣犅犅?br />聽聽
47. 寮傚父
聽聽PL/SQL閿欒
聽聽聽-緙栬瘧鏃?br />聽聽聽-榪愯鏃?br />聽聽榪愯鏃剁殑鍑洪敊澶勭悊
聽聽聽-EXCEPTION
聽聽聽
48. 寮傚父澶勭悊鍧?br />聽聽DECLARE
聽聽聽...
聽聽BEGIN
聽聽聽...
聽聽EXCEPTION
聽聽聽WHEN OTHERS THEN
聽聽聽聽handler_error(...);
聽聽END;聽
聽聽
49. 鐢ㄦ埛鑷畾涔夌殑寮傚父
聽聽DECLARE
聽聽聽e_TooManyStudents EXCEPTION;
聽聽BEGIN
聽聽聽...
聽聽聽RAISE e_TooManyStudents;
聽聽聽...
聽聽EXCEPTION
聽聽聽WHEN e_TooManyStudents THEN
聽聽聽...
聽聽END;
聽聽
50. 棰勫畾涔夌殑ORACLE寮傚父聽聽聽
聽聽ORA-0001
聽聽聽-DUP_VAL_ON_INDEX
聽聽ORA-0051
聽聽聽-TIMEOUT_ON_RESOURCE
聽聽ORA-1001
聽聽聽-INVALID_CURSOR
聽聽聽...
聽聽ORA-6533
聽聽聽-SUBSCRIPT_BEYOND_COUNT
聽聽聽
51. 瑙﹀彂寮傚父
聽聽RAISE exception_variable
聽聽聽DECLARE
聽聽聽聽A EXCEPTION
聽聽聽BEGIN
聽聽聽聽...
聽聽聽聽RAISE A;
聽聽聽聽...
聽聽聽EXCEPTION
聽聽聽聽WHEN A THEN
聽聽聽聽...
聽聽聽END;
聽聽聽
52. 澶勭悊寮傚父
聽聽EXCEPTION
聽聽聽WHEN e_TooManyStudents THEN
聽聽聽聽INSERT INTO log_file(info)
聽聽聽聽VALUES('Major 1100 has' || v_CurStudents || 'max aloowed is' || v_Max);
聽聽END;
聽聽
53. 澶勭悊鎵鏈夌殑寮傚父
聽聽寮傚父鐨勪紶閫?br />聽聽澶勭悊鎵鏈夊叾浠栧紓甯?br />聽聽EXCEPTION
聽聽聽WHEN e_TooManyStudents THEN
聽聽聽聽...
聽聽聽WHEN OTHERS THEN
聽聽聽聽v_ErrCode := SQLCODE;
聽聽聽聽v_ErrText := SUBSTR(SQLERRM, 1, 200);
聽聽聽聽INSERT INTO log_file(code, message, info)
聽聽聽聽VALUES(v_ErrCode, v_ErrCode, v_ErrText, 'ORACLE Error');
聽聽聽END;
聽聽聽
54. 絎竷绔?br />聽聽 1.PL/SQL綆浠?br />聽聽 2. PL/SQL紼嬪簭緇撴瀯
聽聽 3. 鍙橀噺涓庢暟鎹被鍨嬄犅犅犅?br />聽聽 4. PL/SQL鎺у埗璇彞
聽聽 5. PL/SQL娓告爣
聽聽 6. 寮傚父鎹曡幏
聽聽 7. 瀛愮▼搴?br />聽聽 聽聽1. 榪囩▼
聽聽 聽聽2. 鍑芥暟
聽聽 8. 鍖?br />聽聽 9. 瑙﹀彂鍣犅犅犅犅?br />聽聽
55. 瀛愮▼搴?br />聽聽鍖垮悕鍧?br />聽聽聽-鍖垮悕鍧椾笉瀛樺湪浜庢暟鎹簱涓?br />聽聽聽-姣忔浣跨敤鏃墮兘浼氳繘琛岀紪璇?br />聽聽聽-涓嶈兘鍦ㄥ叾浠栧潡涓浉浜掕皟鐢?br />聽聽甯﹀悕鍧?br />聽聽聽-鍙瓨鍌ㄤ簬鏁版嵁搴撲腑
聽聽聽-鍙互鍦ㄤ換浣曢渶瑕佺殑鍦版柟璋冪敤
聽聽聽-榪囩▼銆佸嚱鏁般佸寘銆佽Е鍙戝櫒聽
聽聽聽
56. 榪囩▼
聽聽鍒涘緩procedure
聽聽CREATE [OR REPLACE] PROCEDURE proc_name
聽聽聽[(arg_name[{IN | OUT | IN OUT}]TYPE,
聽聽聽聽...
聽聽聽聽arg_name[{IN | OUT | IN OUT}]TYPE)]聽聽聽
聽聽聽聽{IS | AS}
聽聽procedure_body
聽聽
57. 榪囩▼鐨勫弬鏁版ā寮?br />聽聽IN
聽聽聽-鍦ㄨ皟鐢ㄨ繃紼嬬殑鏃跺欙紝瀹為檯鍙傛暟鐨勫艱浼犻掔粰璇ヨ繃紼嬶紱鍦ㄨ繃紼嬪唴閮紝褰㈠弬鏄彧鍙鐨勩?br />聽聽OUT
聽聽聽-鍦ㄨ皟鐢ㄨ繃紼嬫椂錛屼換浣曠殑瀹炲弬灝嗚蹇界暐錛涘湪榪囩▼鍐呴儴錛屽艦鍙傛槸鍙彲鍐欑殑銆?br />聽聽IN OUT
聽聽聽-鏄疘N涓嶰UT聽鐨勭粍鍚堬紝鍦ㄨ皟鐢ㄨ繃紼嬬殑鏃跺欙紝瀹炲弬鐨勫煎彲浠ヨ浼犻掔粰璇ヨ繃紼嬶紱鍦ㄨ繃紼嬪唴閮紝褰㈠弬涔熷彲浠ヨ璇誨嚭涔熷彲浠ヨ鍐欏叆錛?br />聽聽聽榪囩▼緇撴潫鏃訛紝鎺у埗浼氳繑鍥炵粰鎺у埗鐜錛岃屽艦寮忓弬鏁扮殑鍐呭灝嗚祴緇欒皟鐢ㄦ椂鐨勫疄闄呭弬鏁般?br />聽聽鍙傛暟鐨勭己鐪佹ā寮忔槸IN
聽聽
58. 榪囩▼鐨勪富浣?br />聽聽PROCEDURE BODY
聽聽-榪囩▼鐨勪富浣撴槸涓涓嫢鏈夊0鏄庯紝鎵ц鍜屽紓甯稿鐞嗙殑瀹屾暣鐨凱L/SQL鍧椔犅?br />聽聽-澹版槑閮ㄥ垎鍦↖S鎴朅S鍏抽敭瀛椾笌BEGIN鍏抽敭瀛椾箣闂?br />聽聽-鎵ц閮ㄥ垎鍦˙EGIN鍜孍XCEPTION涔嬮棿
聽聽-寮傚父澶勭悊鍦‥XCEPTION涓嶦ND涔嬮棿
聽聽
59. 榪囩▼鐨勪緥瀛惵犅?br />聽聽CREATE OR REPLACE PROCEDURE ModeText(
聽聽聽p_InParm IN NUMBER,
聽聽聽p_OutParm OUT NUMBER,
聽聽聽p_InOut IN OUT NUMBER)
聽聽IS
聽聽聽v_LocalVar NUMBER;
聽聽BEGIN
聽聽聽v_LocalVar := p_InParm;聽聽聽//legal
聽聽聽p_InParm := 7;聽聽聽聽聽聽聽//illegal聽聽聽
聽聽聽p_OutParm := 7;聽聽聽聽聽聽聽//legal
聽聽聽v_LocalVar := p_OutParm;聽聽//illegal
聽聽聽v_LocalVar := p_InOutParm;聽//legal
聽聽聽p_InOutParm := 7;聽聽聽聽聽聽//legal
聽聽聽...
聽聽END ModeTest;
聽聽
60. 璋冪敤榪囩▼鐨勪緥瀛?br />聽聽DECLARE
聽聽聽v_var1 NUMBER := 1001;
聽聽聽v_var2 NUMBER := 1234;
聽聽BEGIN
聽聽聽ModeTest(10, v_var1, v_var2);
聽聽END;
聽聽DECLARE
聽聽聽v_var1 NUMBER;
聽聽BEGIN
聽聽聽ModeTest(12, v_var1, 10);
聽聽END;
聽聽
61. 鎸囧畾瀹炲弬鐨勬ā寮?br />聽聽浣嶇疆鏍囩ず娉?br />聽聽聽-璋冪敤鏃舵坊鍏ユ墍鏈夊弬鏁幫紝瀹炲弬涓庡艦鍙傛寜欏哄簭涓涓瀵瑰簲
聽聽鍚嶅瓧鏍囩ず娉?br />聽聽聽-璋冪敤鏃剁粰鍑哄艦鍙傚悕瀛楋紝騫剁粰鍑哄疄鍙?br />聽聽聽聽ModeTest(p_InParm => 12,
聽聽聽聽聽聽聽聽 p_OutParm => v_var1,
聽聽聽聽聽聽聽聽 p_InOut => 10);
聽聽涓ょ鏂規硶鍙互娣風敤
聽聽聽-娣風敤鏃訛紝絎竴涓弬鏁板繀欏婚氳繃浣嶇疆鏉ユ寚瀹?br />聽聽聽-鍚嶅瓧鏍囩ず娉曞浜庡弬鏁板緢澶氭椂錛屽彲鎻愰珮紼嬪簭鐨勫彲璇繪?br />聽聽聽
62. 浣跨敤緙虹渷鍙傛暟鏃?br />聽聽褰㈠弬鍙互鎸囨槑緙虹渷鍊?br />聽聽parm_name[mode]type{:= | DEFAULT} init_value
聽聽浣嶇疆鏍囩ず娉曟椂錛屾墍鏈夌殑緙虹渷鍊奸兘鏀懼湪鏈鍚庨潰
聽聽-浣跨敤鍚嶅瓧鏍囩ず娉曞垯鏃犳墍璋?br />聽聽濡傛灉浣跨敤浜嗙己鐪佸鹼紝灝介噺灝嗙己鐪佸兼斁鍦ㄥ弬鏁拌〃鐨勬湯灝?br />聽聽
63. 鍑芥暟
聽聽鍑芥暟鍦ㄦ墍鏈夌殑鍦版柟閮戒笌榪囩▼鐩鎬技
聽聽聽-閮芥湁鍚嶅瓧
聽聽聽-閮芥湁緇熶竴鐨勫艦寮忥細澹版槑銆佹墽琛屼笌寮傚父澶勭悊
聽聽聽-鍙互瀛樺偍鍦ㄦ暟鎹簱涓紝涔熷彲浠ュ0鏄庡湪鏃犲悕鍧楃殑鍐呴儴
聽聽宸埆
聽聽聽-榪囩▼璋冪敤鏈韓鏄竴涓狿L/SQL璇彞
聽聽聽-鍑芥暟璋冪敤鏄〃杈懼紡鐨勪竴閮ㄥ垎
聽聽娉細鈻?鍙﹀錛屽嚱鏁版湁榪斿洖鍊鹼紝鑰岃繃紼嬫病鏈夈?br />聽聽聽
64. 鍑芥暟鐨勫0鏄?br />聽聽CREATE [OR REPLACE] FUNCTION func_name
聽聽聽[(arg_name[{IN | OUT | IN OUT}]TYPE,
聽聽聽聽...
聽聽聽聽arg_name[{IN | OUT | IN OUT}]TYPE)]
聽聽RETURN TYPE
聽聽{IS | AS}
聽聽function_Body
聽聽
65. RETURN璇彞
聽聽鍦ㄥ嚱鏁扮殑涓諱綋鍐呴儴錛宺eturn璇彞鐢ㄦ潵灝嗘帶鍒墮氳繃涓涓暟鍊艱繑鍥炵粰璋冪敤鐜
聽聽聽-聽RETURN <琛ㄨ揪寮?gt;;
聽聽鍦ㄤ竴涓嚱鏁頒富浣撲腑錛屽彲浠ヤ嬌鐢ㄥ涓繑鍥炶鍙?br />聽聽娌℃湁榪斿洖璇彞鐨勫嚱鏁板皢鏄竴涓敊璇?br />聽聽
66. 鍑芥暟鏍峰紡
聽聽鍑芥暟鍙互閫氳繃OUT鍙傛暟鏉ヨ繑鍥炲涓暟鍊?br />聽聽鍑芥暟鍙互鎺ユ敹緙虹渷鍙傛暟
聽聽
67. 鍒犻櫎榪囩▼涓庡嚱鏁?br />聽聽DROP PROCEDURE procedure_name;
聽聽DROP FUNCTION function_name;聽聽聽聽 聽聽
聽聽
68. 瀛愮▼搴忕殑浣嶇疆
聽聽瀛樺偍瀛愮▼搴?br />聽聽聽-閫氳繃CREATE OR REPLACE鍛戒護鍒涘緩聽聽
聽聽聽-浠ョ紪璇戝悗鐨勫艦寮忓瓨鏀懼湪鏁版嵁搴撲腑
聽聽鏈湴瀛愮▼搴?br />聽聽聽-娌℃湁CREATE OR REPLACE鍏抽敭瀛?br />聽聽聽-瀛愮▼搴忕殑瀹氫箟鏀懼湪鏃犲悕鍧楃殑澹版槑閮ㄥ垎
聽聽聽-瀛愮▼搴忚璇ユ棤鍚嶅潡浣跨敤
聽聽聽
69. 鏈湴瀛愮▼搴?br />聽聽DECLARE
聽聽聽v_var VARCHAR2;
聽聽聽FUNCTION func(p_Fname IN VARCHAR2, p_Lname IN VARCHAR2)
聽聽聽RETURN VARCHAR2 IS
聽聽聽BEGIN
聽聽聽聽...
聽聽聽END func;
聽聽BEGIN
聽聽聽v_var := func('First Name', 'Last Name');
聽聽聽...
聽聽END;
聽聽
70. 絎叓绔?br />聽聽 1.PL/SQL綆浠?br />聽聽 2. PL/SQL紼嬪簭緇撴瀯
聽聽 3. 鍙橀噺涓庢暟鎹被鍨嬄犅犅犅?br />聽聽 4. PL/SQL鎺у埗璇彞
聽聽 5. PL/SQL娓告爣
聽聽 6. 寮傚父鎹曡幏
聽聽 7. 瀛愮▼搴?br />聽聽 聽聽1. 榪囩▼
聽聽 聽聽2. 鍑芥暟
聽聽 8. 鍖?br />聽聽 9. 瑙﹀彂鍣?br />聽聽
71. 鍖?br />聽聽鍖呮槸鍙互灝嗙浉鍏沖璞″瓨鍌ㄥ湪涓璧風殑PL/SQL緇撴瀯
聽聽鍖呭彧鑳藉瓨鍌ㄥ湪鏁版嵁搴撲腑錛屼笉鑳芥槸鏈湴鐨勩?br />聽聽鍖呮槸涓涓甫鏈夊悕瀛楃殑澹版槑
聽聽鐩稿綋浜庝竴涓狿L/SQL鍧楃殑澹版槑閮ㄥ垎
聽聽鍦ㄥ潡鐨勫0鏄庨儴鍒嗗嚭鐜扮殑浠諱綍涓滆タ閮借兘鍑虹幇鍦ㄥ寘涓?br />聽聽鍖呬腑鍙互鍖呭惈榪囩▼銆佸嚱鏁般佹父鏍囦笌鍙橀噺
聽聽鍙互浠庡叾浠朠L/SQL鍧椾腑寮曠敤鍖咃紝鍖呮彁渚涗簡鍙敤浜嶱L/SQL鐨勫叏灞鍙橀噺
聽聽
72. 鍖呰鑼兟犅?br />聽聽鍖呭ご錛氬寘鍚簡鏈夊叧鍖呯殑鍐呭鐨勪俊鎭?br />聽聽鍖呭ご涓嶅惈浠諱綍榪囩▼鐨勪唬鐮?br />聽聽鍖呰鑼冪殑璇硶
聽聽CREATE [OR REPLACE] PACKAGE pack_name{IS | AS}
聽聽聽procedure_specification | function_specification |
聽聽聽variable_declaration | type_definition |
聽聽聽exception_declaration | cursor_declaration
聽聽END pack_name;
聽聽
73. 鍖呭ご鐨勪緥瀛?
聽聽CREAE OR REPLACE PACKAGE pak_test AS
聽聽聽PROCEDURE AddStudent(p_StuID IN students.id%TYPE,
聽聽聽聽聽聽聽聽聽聽聽聽聽 p_Dep IN classes.department%TYPE,
聽聽聽聽聽聽聽聽聽聽聽聽聽 p_Course IN classes.course%TYPE);聽聽
聽聽聽PROCEDURE RemoveStudent(p_StuID IN students.id%TYPE);
聽聽聽e_StudentNotRegistered EXCEPTION;
聽聽聽TYPE t_StuIDTable IS TABLE OF students.id%TYPE INDEX
聽聽聽BY BINARY_INTEGER;
聽聽END pak_name;
聽聽聽聽聽聽聽
74. 鍖呭ご鐨勪緥瀛?
聽聽鍦ㄥ寘pak_test涓寘鍚簡涓や釜榪囩▼錛屼竴涓被鍨嬩笌涓涓紓甯?br />聽聽AddStudent
聽聽RemoveStudent
聽聽t_StuIDTable
聽聽e_StudentNotRegistered
聽聽鍖呯殑閮ㄤ歡鍙互鎸変換鎰忔搴忓嚭鐜幫紝浣嗗璞″繀欏誨0鏄庡湪琚紩鐢ㄧ殑鍓嶉潰
聽聽鎵鏈夎繃紼嬫垨鍑芥暟鐨勪唬鐮佷笉鑳藉嚭鐜板湪鍖呭ご涓?br />聽聽
75. 鍖呬富浣撀犅?br />聽聽鍖呬富浣撴槸鍙夌殑錛屽鏋滃寘澶翠腑娌℃湁浠諱綍鍑芥暟涓庤繃紼嬶紝鍒欏寘涓諱綋鍙互涓嶉渶瑕?br />聽聽鍖呬富浣撲笌鍖呭ご瀛樻斁鍦ㄤ笉鍚岀殑鏁版嵁瀛楀吀涓?br />聽聽濡傛灉鍖呭ご鐨勭紪璇戜笉鎴愬姛錛屽寘涓諱綋灝辨棤娉曟紜殑緙栬瘧鍑烘潵
聽聽鍖呬富浣撲腑鍖呭惈浜嗗湪鍖呭ご涓0鏄庣殑鎵鏈夎繃紼嬩笌鍑芥暟鐨勪唬鐮?br />聽聽榪囩▼涓庡嚱鏁扮殑瑙勮寖鍦ㄥ寘澶翠笌鍖呬富浣撲腑蹇呴』涓鑷?br />聽聽瑙勮寖鍖呮嫭瀛愮▼搴忕殑鍚嶅瓧錛屽弬鏁扮殑鍚嶅瓧浠ュ強鍙傛暟鐨勬ā寮忥細鍖呮嫭綾誨瀷涓庨『搴?br />聽聽
76. 鍖呬富浣撶殑璇硶
聽聽CREATE OR REPLACE PACKAGE BODY pak_test AS
聽聽聽PROCEDURE AddStudent(p_StuID IN students.id%TYPE,
聽聽聽聽聽聽聽聽聽聽聽聽聽聽 p_Dep IN classes.department%TYPE,
聽聽聽聽聽聽聽聽聽聽聽聽聽聽 p_Course IN classes.course%TYPE) IS
聽聽聽BEGIN
聽聽聽聽...
聽聽聽END AddStudent;
聽聽聽PROCEDURE聽RemoveStudent(p_StuID IN students.id%TYPE) IS
聽聽聽BEGIN
聽聽聽聽...
聽聽聽END RemoveStudent;
聽聽END pak_test;
聽聽
77. 鍖呯殑浣滅敤鍩?br />聽聽鍦ㄥ寘澶翠腑澹版槑鐨勬墍鏈変笢瑗垮湪鍖呯殑澶栭潰閮藉彲浠ヤ嬌鐢?br />聽聽浣跨敤鏃跺繀欏繪寚鏄庡寘鐨勫悕瀛?br />聽聽鐩存帴璋冪敤鍖呬腑鐨勮繃紼?br />聽聽pak_test.AddStudent(100010, 'CS', 101);
聽聽鍦ㄥ寘鐨勪富浣撲腑鍙互鐩存帴浣跨敤鍖呭ご涓0鏄庣殑瀵硅薄
聽聽涓嶉渶瑕佹寚鏄庡寘鐨勫悕瀛?br />聽聽
78. 鍖呬腑瀛愮▼搴忕殑閲嶈澆
聽聽鍚屼竴涓寘涓殑榪囩▼涓庡嚱鏁伴兘鍙互閲嶈澆
聽聽鐩稿悓鐨勮繃紼嬫垨鍑芥暟鍚嶅瓧錛屼絾鍙傛暟涓嶅悓
聽聽閲嶈澆涓嶈兘浠呬粎渚濇嵁鏄弬鏁板悕瀛楀拰妯″紡涓嶅悓
聽聽閲嶈澆涓嶈兘浠呬粎渚濇嵁鍑芥暟鐨勮繑鍥炵被鍨?br />聽聽閲嶈澆鐨勫弬鏁板繀欏繪槸涓嶅悓綾誨瀷鏃?br />聽聽閲嶈澆瑕佹眰鍙傛暟綾誨瀷蹇呴』涓嶅悓
聽聽鑰屼笖瑕佹眰鏄笉鍚岀被鍨嬫棌鐨?br />聽聽鏃犳硶鍖哄垎CHAR涓嶸ARCHAR2
聽聽
79. 鍖呯殑鍒濆鍖?br />聽聽鍖呭瓨鏀懼湪鏁版嵁搴撲腑
聽聽鍦ㄧ涓嬈¤璋冪敤鐨勬椂鍊欙紝鍖呬粠鏁版嵁搴撲腑璋冨叆鍐呭瓨騫惰鍒濆鍖?br />聽聽鍖呬腑瀹氫箟鐨勬墍鏈夊彉閲忛兘琚垎閰嶅唴瀛?br />聽聽姣忎釜浼氳瘽閮藉皢鎷ユ湁鑷繁鐨勫寘鍐呭彉閲忕殑鍓湰
聽聽鍙互鎸囧畾鍖呯殑鍒濆鍖栦唬鐮?br />聽聽CREATE OR REPLACE PACKAGE BODY pac_name{IS | AS}聽聽聽聽聽聽
聽聽聽...
聽聽BEGIN
聽聽聽--Initialization code
聽聽END pac_name;
聽聽
80. 絎節绔?br />聽聽 1.PL/SQL綆浠?br />聽聽 2. PL/SQL紼嬪簭緇撴瀯
聽聽 3. 鍙橀噺涓庢暟鎹被鍨嬄犅犅犅?br />聽聽 4. PL/SQL鎺у埗璇彞
聽聽 5. PL/SQL娓告爣
聽聽 6. 寮傚父鎹曡幏
聽聽 7. 瀛愮▼搴?br />聽聽 聽聽1. 榪囩▼
聽聽 聽聽2. 鍑芥暟
聽聽 8. 鍖?br />聽聽 9. 瑙﹀彂鍣?聽聽
聽聽
81. 瑙﹀彂鍣?br />聽聽瑙﹀彂鍣ㄤ笌榪囩▼銆佸嚱鏁扮被浼?br />聽聽閮芥槸甯︽湁鍚嶅瓧鐨勬墽琛屽潡
聽聽閮芥湁澹版槑銆佹墽琛屼綋鍜屽紓甯稿鐞嗛儴鍒?br />聽聽瑙﹀彂鍣ㄤ笌榪囩▼銆佸嚱鏁扮殑宸埆
聽聽瑙﹀彂鍣ㄥ繀欏誨瓨鍌ㄥ湪鏁版嵁搴撲腑
聽聽瀵逛簬榪囩▼鍜屽嚱鏁幫紝蹇呴』鏄懼紡鍦扮敱鍙︿竴涓繍琛屽潡璋冪敤
聽聽瀵逛簬瑙﹀彂鍣紝鏄敱瑙﹀彂浜嬩歡鑷姩嬋鍙?br />聽聽瑙﹀彂浜嬩歡鏄湪鏁版嵁搴撹〃涓婃墽琛岀殑DML鏁版嵁鎿嶄綔
聽聽INSERT, UPDATE, DELETE聽聽 聽聽聽聽聽聽聽聽聽聽聽聽聽聽 聽聽
聽聽
82. 瑙﹀彂鍣ㄧ殑浣滅敤
聽聽鐢ㄤ簬緇存姢鏁版嵁鐨勫畬鏁存?br />聽聽鏈変簺澶嶆潅鐨勬暟鎹畬鏁存х害鏉熸棤娉曞湪鍒涘緩琛ㄧ殑鏃跺埢閫氳繃澹版槑鎬х害鏉熻В鍐?br />聽聽閫氳繃鏁版嵁搴撹〃鐨勮褰曠殑淇敼鏉ユ墽琛屽璁″姛鑳?br />聽聽褰撹〃琚慨鏀圭殑鏃跺欙紝鑷姩緇欏叾浠栭渶瑕佹墽琛屾搷浣滅殑紼嬪簭鍙戜俊鍙?br />聽聽
83. 鍒涘緩瑙﹀彂鍣?br />聽聽璇硶
聽聽CREATE [OR REPLACE]聽TRIGGER trigger_name
聽聽{BEFORE | AFTER} triggering_event ON table_reference
聽聽[FOR EACH ROW[WHEN trigger_condition]]
聽聽trigger_body;
聽聽蹇呴』鐨勯儴鍒?br />聽聽瑙﹀彂鍣ㄥ悕錛歵rigger_name
聽聽瑙﹀彂浜嬩歡錛歵riggering_event
聽聽瑙﹀彂鍣ㄤ富浣擄細trigger_body
聽聽鍙夐儴鍒?br />聽聽WHEN瀛愬彞
聽聽
84. 瑙﹀彂鍣ㄧ殑渚嬪瓙
聽聽CREATE OR REPLACE TRIGGER UpdateMajorStats
聽聽AFTER INSERT OR DELETE OR UPDATE ON students
聽聽DECLARE
聽聽聽CURSOR c_Statistics聽IS
聽聽聽聽SELECT major, COUNT(*) total_students, SUM(current_credits) total_credits
聽聽聽聽聽FROM students
聽聽聽聽聽GROUP BY major;
聽聽BEGIN
聽聽聽FOR v_StatsRecord in c_Statistics LOOP
聽聽聽聽UPDATE major_stats
聽聽聽聽聽SET total_credits = v_StatsRecord.total_credits,
聽聽聽聽聽聽聽total_students = v_StatsRecord.total_students
聽聽聽聽聽WHERE major = v_StatsRecord.major;
聽聽聽聽聽IF SQL%NOTFOUND THEN
聽聽聽聽聽聽INSERT INTO major_stats(major, total_credits, total_students)
聽聽聽聽聽聽聽VALUES(v_StatsRecord.major, v_StatsRecord.total_credits, v_StatsRecord.total_students);
聽聽聽聽聽END IF;
聽聽聽END LOOP;
聽聽END UpdateMajorStats;
聽聽
85. 瑙﹀彂鍣ㄧ粍浠?br />聽聽瑙﹀彂鍣ㄥ悕
聽聽聽-鍦ㄥ悓涓涓暟鎹簱涓?br />聽聽聽聽榪囩▼銆佸寘涓庤〃鐨勫悕瀛楃┖闂寸浉鍚?br />聽聽聽聽瑙﹀彂鍣ㄤ嬌鐢ㄥ崟鐙殑鍚嶅瓧絀洪棿
聽聽聽聽瑙﹀彂鍣ㄥ彲浠ヤ笌琛ㄥ悓鍚?br />聽聽瑙﹀彂鍣ㄧ被鍨?br />聽聽聽-瑙﹀彂浜嬩歡鍐沖畾浜嗚Е鍙戝櫒鐨勭被鍨?br />聽聽聽聽璇彞錛欼NSERT, UPDATE, DELETE
聽聽聽聽瀹氭椂錛欱EFORE, AFTER
聽聽聽聽綰у埆錛?br />聽聽聽聽聽-琛岀駭瑙﹀彂鍣?FOR EACH ROW)錛屽鐢辮Е鍙戣鍙ュ獎鍝嶇殑姣忎竴琛岀偣鐏竴嬈?br />聽聽聽聽聽-璇彞綰цЕ鍙戝櫒錛屼粎鍦ㄨ鍙ユ墽琛屽墠/鍚庢墽琛屼竴嬈?br />聽聽聽聽聽
86.聽瑙﹀彂鍣ㄧ被鍨?br />聽聽鍏辨湁12縐嶈Е鍙戝櫒綾誨瀷
聽聽涓変釜璇彞(INSERT/UPDATE/DELETE)
聽聽涓ょ綾誨瀷(涔嬪墠/涔嬪悗)
聽聽涓ょ綰у埆(row-level/statement-level)
聽聽涓涓〃鏈澶氬彲浠ュ畾涔?2涓Е鍙戝櫒
聽聽PL/SQL2.1浠ュ悗鐗堟湰錛屽浜庢瘡縐嶇被鍨嬪彲浠ユ嫢鏈夊涓Е鍙戝櫒
聽聽
87. 瑙﹀彂鍣ㄧ殑闄愬埗
聽聽瑙﹀彂鍣ㄧ殑涓諱綋鏄疨L/SQL璇彞鍧?br />聽聽鎵鏈夎兘鍑虹幇鍦≒L/SQL鍧椾腑鐨勮鍙ュ湪瑙﹀彂鍣ㄤ富浣撲腑閮芥槸鍚堟硶鐨勯檺鍒?br />聽聽涓嶅簲璇ヤ嬌鐢ㄤ簨鍔℃帶鍒惰鍙?br />聽聽COMMIT, ROLLBACK, SAVEPOINT
聽聽鐢辮Е鍙戝櫒璋冪敤鐨勪換浣曡繃紼嬩笌鍑芥暟閮戒笉鑳戒嬌鐢ㄤ簨鍔℃帶鍒惰鍙?br />聽聽涓嶈兘澹版槑浠諱綍LONG鎴朙ONG RAW鍙橀噺
聽聽鍙互璁塊棶鐨勮〃鏈夐檺
聽聽
88. 瑙﹀彂鍣ㄧ殑涓諱綋鍙互璁塊棶鐨勮〃
聽聽鍙樺寲琛?br />聽聽琚獶ML璇彞姝e湪淇敼鐨勮〃錛屼害鍗沖畾涔夎Е鍙戝櫒鐨勮〃
聽聽闄愬埗琛?br />聽聽鏈変簺琛ㄥ湪鍒涘緩鐨勬椂鍊欏氨甯︽湁鍙傝冨畬鏁存ч檺鍒剁殑澹版槑
聽聽涓婚敭涓庡閿?br />聽聽瑙﹀彂鍣ㄤ富浣撲腑鐨勯檺鍒?br />聽聽涓嶅彲浠ヨ鍙栨垨淇敼浠諱綍鍙樺寲琛?br />聽聽涓嶅彲浠ヨ鍙栨垨淇敼闄愬埗琛ㄧ殑涓婚敭錛屽敮涓鍊煎垪錛屽閿垪
聽聽
89. 鐩稿叧淇℃伅
聽聽ORACLE浜у搧涓庤祫鏂欎俊鎭?br />聽聽http://www.oracle.com
聽聽ORACLE 8i鐨勮祫鏂?br />聽聽http://gwynne.cs.ualberta.ca/~oracle/817doc/index.htm
聽聽
90. 瀛︾睄綆$悊淇℃伅搴?br />聽聽璁捐涓涓猟ata schema, 灝唗arena鍏徃鐨勫綾嶇鐞嗕俊鎭緩绔嬪湪鏁版嵁搴撲腑
聽聽搴旇鍖呮嫭涓嬪垪淇℃伅
聽聽聽瀛﹀憳淇℃伅
聽聽聽璇劇▼淇℃伅
聽聽聽鐝駭淇℃伅
聽聽聽...
聽聽寤虹珛鏁版嵁搴撹〃鎴栫浉鍏寵鍥?br />聽聽聽浣跨敤sqlplus?浣跨敤PL/SQL?
聽聽浣跨敤PL/SQL紼嬪簭鏉ュ畬鎴?br />聽聽聽杈撳叆閮ㄥ垎鏁版嵁
聽聽聽瀹屾垚綆鍗曟煡璇㈠姛鑳?br />聽聽浣跨敤Pro*C瀹屾垚涓嬪垪鍔熻兘
聽聽鏁版嵁鎻掑叆銆佷慨鏀逛笌鍒犻櫎
聽聽鏁版嵁鏌ヨ
聽聽
91. 緋葷粺浣跨敤璁拌垂緋葷粺
聽聽鎬濊冨茍璁捐璁板笎緋葷粺涓嬌鐢ㄧ殑data schema
聽聽
92. 璋㈣阿
鈽呭ソ涔︽帹鑽愶細
聽聽Oracle9i PL/SQL紼嬪簭璁捐(Oracle9i PL/SQL Programming)
聽聽Oracle Express鍑哄搧錛屽畼鏂廣佹潈濞侊紝縐夋壙浜嗛害鏍煎姵甯屽皵涓璐殑涓ヨ皚娌誨鐨勪綔椋庯紝鑰屼笖涓や綅璇戣呯炕璇戜篃寰堝埌浣?br />聽
聽 聽Oracle9i寮鍙戞寚鍗楋細PL/SQL紼嬪簭璁捐(Oracle9i Developer: PL/SQL Programming)
聽 聽璇ヤ功鎻愪緵浜嗗ぇ閲忓疂璐電殑瀹為檯緇冧範鏈轟細錛屽寘鎷愭鎿嶄綔鐨勬寚瀵間互鍙婃瘡涓绔犱腑鐨勫涔犻銆佽澶栦綔涓氫互鍙婂疄渚嬬爺絀?br />聽 聽聽
聽
聽聽聽聽
聽聽聽聽聽聽聽
聽聽
聽聽
聽聽聽聽
聽聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 聽
聽聽
聽聽聽聽聽聽
聽聽聽聽聽聽聽聽聽聽聽聽
聽聽聽聽聽聽聽
PL/SQL鏁版嵁搴撶紪紼?涓?
絎竴绔?/p>
1. Oracle搴旂敤緙栬緫鏂規硶姒傝
絳旓細1) Pro*C/C++/... : C璇█鍜屾暟鎹簱鎵撲氦閬撶殑鏂規硶錛屾瘮OCI鏇村父鐢?
聽聽聽 2) ODBC
聽聽聽 3) OCI: C璇█鍜屾暟鎹簱鎵撲氦閬撶殑鏂規硶錛屽拰ProC寰堢浉浼鹼紝鏇村簳灞傦紝寰堝皯鐢?
聽聽聽 4) SQLJ: 寰堟柊鐨勪竴縐嶇敤Java璁塊棶Oracle鏁版嵁搴撶殑鏂規硶錛屼細鐨勪漢涓嶅;
聽聽聽 5) JDBC
聽聽聽 6) PL/SQL: 瀛樺偍鍦ㄦ暟鎹唴榪愯, 鍏朵粬鏂規硶涓哄湪鏁版嵁搴撳瀵規暟鎹簱璁塊棶;
2. PL/SQL
絳旓細1) PL/SQL(Procedual language/SQL)鏄湪鏍囧噯SQL鐨勫熀紜涓婂鍔犱簡榪囩▼鍖栧鐞嗙殑璇█;
聽聽聽 2) Oracle瀹㈡埛绔伐鍏瘋闂甇racle鏈嶅姟鍣ㄧ殑鎿嶄綔璇█;
聽聽聽 3) Oracle瀵筍QL鐨勬墿鍏?
4. PL/SQL鐨勪紭緙虹偣
絳旓細浼樼偣錛?br />聽聽聽 1) 緇撴瀯鍖栨ā鍧楀寲緙栫▼錛屼笉鏄潰鍚戝璞?
聽聽聽 2) 鑹ソ鐨勫彲縐繪鎬?涓嶇Oracle榪愯鍦ㄤ綍縐嶆搷浣滅郴緇?;
聽聽聽 3) 鑹ソ鐨勫彲緇存姢鎬?緙栬瘧閫氳繃鍚庡瓨鍌ㄥ湪鏁版嵁搴撻噷);
聽聽聽 4) 鎻愬崌緋葷粺鎬ц兘;
聽聽聽 緙虹偣
聽聽聽 1) 涓嶄究浜庡悜寮傛瀯鏁版嵁搴撶Щ妞嶅簲鐢ㄧ▼搴?鍙兘鐢ㄤ簬Oracle);
5. SQL涓嶱L/SQL鐨勫尯鍒?br />絳旓細SQL錛?) 絎洓浠h璦(鏅鴻兘璇█);
聽聽聽聽聽聽聽聽 2) 鍋氫粈涔堬紝涓嶇鎬庝箞鍋?
聽聽聽聽聽聽聽聽 3) 緙哄皯榪囩▼涓庢帶鍒惰鍙?
聽聽聽聽聽聽聽聽 4) 鏃犵畻娉?br />聽聽聽 PL/SQL: 1) 鎵╁睍鍙橀噺鍜岀被鍨?
聽聽聽聽聽聽聽聽聽聽聽 2) 鎵╁睍鎺у埗緇撴瀯;
聽聽聽聽聽聽聽聽聽聽聽 3) 鎵╁睍榪囩▼涓庡嚱鏁?
聽聽聽聽聽聽聽聽聽聽聽 4) 鎵╁睍瀵硅薄綾誨瀷涓庢柟娉?br />聽聽聽聽聽聽聽聽聽聽聽聽
絎簩绔?/p>
PL/SQL紼嬪簭緇撴瀯
1. PL/SQL鍧?br />絳旓細1) 鐢蟲槑閮ㄥ垎, DECLARE(涓嶅彲灝?;
聽聽聽 2) 鎵ц閮ㄥ垎, BEGIN...END;
聽聽聽 3) 寮傚父澶勭悊錛孍XCEPTION(鍙互娌℃湁);
2. PL/SQL寮鍙戠幆澧?br />絳旓細鍙互榪愮敤浠諱綍綰枃鏈殑緙栬緫鍣ㄧ紪杈戯紝渚嬪錛歏I
3. PL/SQL瀛楃闆?br />絳旓細PL/SQL瀵瑰ぇ灝忓啓涓嶆晱鎰?/p>
4. 鏍囪瘑絎﹀懡鍚嶈鍒?br />絳旓細1) 瀛楁瘝寮澶?
聽聽聽 2) 鍚庤窡浠繪剰鐨勯潪絀烘牸瀛楃銆佹暟瀛椼佽揣甯佺鍙楓佷笅鍒掔嚎銆佹垨# ;
聽聽聽 3) 鏈澶ч暱搴︿負30涓瓧絎?鍏釜瀛楃宸﹀彸鏈鍚堥?;
5. 鍙橀噺澹版槑
絳旓細璇硶
聽聽聽 Var_name type [CONSTANT][NOT NULL][:=value];
聽聽聽 娉細1) 鐢蟲槑鏃跺彲浠ユ湁榛樿鍊間篃鍙互娌℃湁;
聽聽聽聽聽聽聽 2) 濡傛湁[CONSTANT][NOT NULL], 鍙橀噺涓瀹氳鏈変竴涓垵濮嬪?
聽聽聽聽聽聽聽 3) 璧嬪艱鍙ヤ負鈥?=鈥?
聽聽聽聽聽聽聽 4) 鍙橀噺鍙互璁や負鏄暟鎹簱閲屼竴涓瓧孌?
聽聽聽聽聽聽聽 5) 瑙勫畾娌℃湁鍒濆鍖栫殑鍙橀噺涓篘ULL;
絎笁绔?/p>
1. 鏁版嵁綾誨瀷
絳旓細1) 鏍囬噺鍨嬶細鏁板瓧鍨嬨佸瓧絎﹀瀷銆佸竷灝斿瀷銆佹棩鏈熷瀷;
聽聽聽 2) 緇勫悎鍨嬶細RECORD(甯哥敤)銆乀ABLE(甯哥敤)銆乂ARRAY(杈冨皯鐢?
聽聽聽 3) 鍙傝冨瀷錛歊EF CURSOR(娓告爣)銆丷EF object_type
聽聽聽 4) LOB(Large Object)
2. %TYPE
絳旓細鍙橀噺鍏鋒湁涓庢暟鎹簱鐨勮〃涓煇涓瀛楁鐩稿悓鐨勭被鍨?br />聽聽聽 渚嬶細v_FirstName studengts.first_name%TYPE;
3. RECORD綾誨瀷
絳旓細TYPE record_name IS RECORD(聽聽聽聽聽聽聽聽聽聽聽 /*鍏朵腑TYPE錛孖S錛孯ECORD涓哄叧閿瓧錛宺ecord_name涓哄彉閲忓悕縐?/
聽field1 type [NOT NULL][:=expr1],聽聽 /*姣忎釜絳変環鐨勬垚鍛橀棿鐢ㄩ楀彿鍒嗛殧*/
聽field2 type [NOT NULL][:=expr2],聽聽 /*濡傛灉涓涓瓧孌甸檺瀹歂OT NULL錛岄偅涔堝畠蹇呴』鎷ユ湁涓涓垵濮嬪?/
聽聽聽聽聽聽聽 ...聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 /*鎵鏈夋病鏈夊垵濮嬪寲鐨勫瓧孌甸兘浼氬垵濮嬩負NULL
聽fieldn type [NOT NULL][:=exprn]);
4. %ROWTYPE
絳旓細榪斿洖涓涓熀浜庢暟鎹簱瀹氫箟鐨勭被鍨?br />聽聽聽 DECLARE
聽聽聽聽聽 v_StuRec Student%ROWTYPE;聽聽聽聽聽聽聽聽聽聽聽 /*Student涓鴻〃鐨勫悕瀛?/
聽聽聽 娉細涓?涓畾涓涓猺ecord鐩告瘮錛屼竴姝ュ氨瀹屾垚錛岃?涓畾涔夊垎浜屾錛歛. 鎵鏈夌殑鎴愬憳鍙橀噺閮借鐢蟲槑; b. 瀹炰緥鍖栧彉閲?
5. TABLE綾誨瀷
絳旓細TYPE tabletype IS TABLE OF type INDEX BY BINARY_INTEGER;
聽聽聽 渚嬶細DECLARE
聽聽聽聽聽聽聽聽聽 TYPE t_StuTable IS TABLE OF Student%ROWTYPE INDEX BY BINARY_INTERGER;
聽聽聽聽聽聽聽聽聽 v_Student t_StuTable;
聽BEGIN
聽聽聽聽聽聽聽聽聽 SELECT * INTO v_Student(100) FROM Student WHERE id = 1001;
聽聽聽聽聽聽聽 END;
聽聽聽 娉細1) 琛岀殑鏁扮洰鐨勯檺鍒剁敱BINARY_INTEGER鐨勮寖鍥村喅瀹?
6. 鍙橀噺鐨勪綔鐢ㄥ煙鍜屽彲瑙佹?br />絳旓細1) 鎵ц鍧楅噷鍙互宓屽叆鎵ц鍧?
聽聽聽 2) 閲屽眰鎵ц鍧楃殑鍙橀噺瀵瑰灞備笉鍙;
聽聽聽 3) 閲屽眰鎵ц鍧楀澶栧眰鎵ц鍧楀彉閲忕殑淇敼浼氬獎鍝嶅灞傚潡鍙橀噺鐨勫?
絎洓绔?/p>
1. 鏉′歡璇彞
絳旓細IF boolean_expression1 THEN
聽聽聽 ...
聽聽聽 ELSIF boolean_expression2 THEN聽聽 /*娉ㄦ剰鏄疎LSIF錛岃屼笉鏄疎LSEIF*/
聽聽聽 ...聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 /*ELSE璇彞涓嶆槸蹇呴』鐨勶紝浣咵ND IF;鏄繀欏葷殑*/
聽聽聽 ELSE
聽聽聽 ...
聽聽聽 END IF;
2. 寰幆璇彞
絳旓細1) Loop
聽聽聽聽聽聽 ...
聽聽聽聽聽聽聽聽 IF boolean_expr THEN聽聽聽聽聽聽聽 /* */
聽聽聽聽聽聽聽聽聽聽聽 EXIT;聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 /* EXIT WHEN boolean_expr */
聽聽聽聽聽聽聽聽 END IF;聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 /* */
聽聽聽聽聽聽 END LOOP;
聽聽聽 2) WHILE boolean_expr LOOP
聽聽聽聽聽聽 ...
聽聽聽聽聽聽 END LOOP;
聽聽聽 3) FOR loop_counter IN [REVERSE] low_blound..high_bound LOOP
聽聽聽聽聽聽 ...
聽聽聽聽聽聽 END LOOP;
聽聽聽聽聽聽 娉細a. 鍔犱笂REVERSE 琛ㄧず閫掑噺錛屼粠緇撴潫杈圭晫鍒拌搗濮嬭竟鐣岋紝閫掑噺姝ラ暱涓轟竴;
聽聽聽聽聽聽聽聽聽聽 b. low_blound聽 璧峰杈圭晫; high_bound聽 緇撴潫杈圭晫;
3. GOTO璇彞
絳旓細GOTO label_name;
聽聽聽 1) 鍙兘鐢卞唴閮ㄥ潡璺沖線澶栭儴鍧?
聽聽聽 2) 璁劇疆鏍囩錛?lt;<label_name>>
聽聽聽 3) 紺轟緥錛?br />聽聽聽聽聽聽 LOOP
聽聽聽聽聽聽 ...
聽聽聽聽聽聽聽聽 IF D%ROWCOUNT = 50 THEN
聽聽聽聽聽聽聽聽聽聽聽 GOTO l_close;
聽聽聽聽聽聽聽聽 END IF;
聽聽聽聽聽聽 ...
聽聽聽聽聽聽 END LOOP;
聽聽聽聽聽聽 <<l_close>>;
聽聽聽聽聽聽 ...
4. NULL璇彞
絳旓細鍦ㄨ鍙ュ潡涓姞絀鴻鍙ワ紝鐢ㄤ簬琛ュ厖璇彞鐨勫畬鏁存с傜ず渚嬶細
聽聽聽 IF boolean_expr THEN
聽聽聽 ...
聽聽聽 ELSE
聽聽聽聽聽 NULL;
聽聽聽 END IF;
5. SQL in PL/SQL
絳旓細1) 鍙湁DML SQL鍙互鐩存帴鍦≒L/SQL涓嬌鐢?
絎簲绔?/p>
1. 娓告爣(CURSOR)
絳旓細1) 浣滅敤錛氱敤浜庢彁鍙栧琛屾暟鎹泦;
聽聽聽 2) 澹版槑錛歛. 鏅氱敵鏄庯細DELCARE CURSOR CURSOR_NAME IS select_statement聽 /* CURSOR鐨勫唴瀹瑰繀欏繪槸涓鏉℃煡璇㈣鍙?/
聽聽聽聽聽聽聽聽聽聽聽聽 b. 甯﹀弬鏁扮敵鏄庯細DELCARE CURSOR c_stu(p_id student.ID%TYPE) SELECT * FROM student WHERE ID = p_id;
聽聽聽 3) 鎵撳紑娓告爣錛歄PEN Cursor_name;聽聽 /*鐩稿綋浜庢墽琛宻elect璇彞錛屼笖鎶婃墽琛岀粨鏋滃瓨鍏URSOR;
聽聽聽 4) 浠庢父鏍囦腑鍙栨暟錛歛. FETCH cursor_name INTO var1, var2, ...; /*鍙橀噺鐨勬暟閲忋佺被鍨嬨侀『搴忚鍜孴able涓瓧孌典竴鑷?*/
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 b. FETCH cursor_name INTO record_var;
聽聽聽聽聽聽 娉細灝嗗間粠CURSOR鍙栧嚭鏀懼叆鍙橀噺涓紝姣廎ETCH涓嬈″彇涓鏉¤褰?
聽聽聽 5) 鍏抽棴娓告爣: CLOSE Cursor_name;
聽聽聽聽聽聽 娉細a. 娓告爣浣跨敤鍚庡簲璇ュ叧闂?
聽聽聽聽聽聽聽聽聽聽 b. 鍏抽棴鍚庣殑娓告爣涓嶈兘FETCH鍜屽啀嬈LOSE;
聽聽聽聽聽聽聽聽聽聽 c. 鍏抽棴娓告爣鐩稿綋浜庡皢鍐呭瓨涓瑿URSOR鐨勫唴瀹規竻絀?
2. 娓告爣鐨勫睘鎬?br />絳旓細1) %FOUND:聽聽聽 鏄惁鏈夊?
聽聽聽 2) %NOTFOUND: 鏄惁娌℃湁鍊?
聽聽聽 3) %ISOPEN:聽聽 鏄惁鏄墦寮鐘舵?
聽聽聽 4) %ROWCOUNT: CURSOR褰撳墠鐨勮褰曞彿;
3. 娓告爣鐨凢ETCH寰幆
絳旓細1) LOOP
聽聽聽聽聽聽聽聽 FETCH cursor INTO ...
聽聽聽聽聽聽聽聽 EXIT WHEN cursor%NOTFOUND;聽聽 /*褰揷ursor涓病璁板綍鍚庨鍑?/
聽聽聽聽聽聽 END LOOP;
聽聽聽 2) WHILE cursor%FOUND LOOP
聽聽聽聽聽聽聽聽 FETCH cursor INTO ...
聽聽聽聽聽聽 END LOOP;
聽聽聽 3) FOR var IN cursor LOOP
聽聽聽聽聽聽聽聽 FETCH cursor INTO...
聽聽聽聽聽聽 END LOOP;
聽聽聽聽聽聽
絎叚绔?/p>
1. 寮傚父
絳旓細DECLARE
聽聽聽聽聽 ...
聽聽聽聽聽 e_TooManyStudents EXCEPTION;聽 /* 鐢蟲槑寮傚父 */
聽聽聽聽聽 ...
聽聽聽 BEGIN
聽聽聽聽聽 ...
聽聽聽聽聽 RAISE e_TooManyStudents;聽聽聽聽聽 /* 瑙﹀彂寮傚父 */
聽聽聽聽聽 ...
聽聽聽 EXCEPTION
聽聽聽聽聽 WHEN e_TooManyStudents THEN聽聽 /* 瑙﹀彂寮傚父 */
聽聽聽聽聽 ...
聽聽聽聽聽 WHEN OTHERS THEN聽聽聽聽聽聽聽聽聽聽聽聽聽 /* 澶勭悊鎵鏈夊叾浠栧紓甯?*/
聽聽聽聽聽 ...
聽聽聽 END;
2004-9-8聽聽聽聽 鏄熸湡涓壜犅犅?闃?/p>
PL/SQL鏁版嵁搴撶紪紼?涓?
1. 瀛樺偍榪囩▼(PROCEDURE)
絳旓細鍒涘緩榪囩▼錛?br />聽聽聽 CREATE [OR REPLACE] PROCEDURE proc_name
聽聽聽聽聽聽聽聽 [(arg_name[{IN|OUT|IN OUT}]TYPE,
聽聽聽聽聽聽聽聽聽聽 arg_name[{IN|OUT|IN OUT}]TYPE)]
聽聽聽聽聽聽聽聽聽 {IS|AS}
聽聽聽 procedure_body
聽聽聽 1) IN: 琛ㄧず璇ュ弬鏁頒笉鑳借璧嬪?鍙兘浣嶄簬絳夊彿鍙寵竟);
聽聽聽 2) OUT:琛ㄧず璇ュ弬鏁板彧鑳借璧嬪?鍙兘浣嶄簬絳夊彿宸﹁竟);
聽聽聽 3) IN OUT: 琛ㄧず璇ョ被鍨嬫棦鑳借璧嬪間篃鑳戒紶鍊?
2. 瀛樺偍榪囩▼渚嬪瓙
絳旓細CREATE OR REPLACE PROCEDURE ModeTest(
聽聽聽聽聽聽聽 p_InParm IN NUMBER,
聽聽聽聽聽聽聽 p_OutParm OUT NUMBER,
聽聽聽聽聽聽聽 p_InOutParm IN OUT NUMBER)
聽聽聽 IS
聽聽聽聽聽聽聽 v_LocalVar NUMBER;聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 /* 澹版槑閮ㄥ垎 */
聽聽聽 BEGIN
聽聽聽聽聽聽聽 v_LocalVar:=p_InParm;聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 /* 鎵ц閮ㄥ垎 */
聽聽聽聽聽聽聽 p_OutParm:=7;
聽聽聽聽聽聽聽 p_InOutParm:=7;
聽聽聽聽聽聽聽 ...
聽聽聽 EXCEPTION
聽聽聽聽聽聽聽 ...聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 /* 寮傚父澶勭悊閮ㄥ垎 */
聽聽聽 END ModeTest;
聽聽聽
3. 璋冪敤PROCEDURE鐨勪緥瀛?br />絳旓細1) 鍖垮悕鍧楀彲浠ヨ皟;
聽聽聽 2) 鍏朵粬PROCDEURE鍙互璋冪敤;
聽聽聽 渚嬶細
聽聽聽 DECLARE
聽聽聽聽聽聽聽 v_var1 NUMBER;
聽聽聽 BEGIN
聽聽聽聽聽聽聽 ModeTest(12, v_var1, 10);
聽聽聽 END;
聽聽聽 娉細姝ゆ椂v_var1絳変簬7
4. 鎸囧畾瀹炲弬鐨勬ā寮?br />絳旓細1) 浣嶇疆鏍囩ず娉曪細璋冪敤鏃舵坊鍏ユ墍鏈夊弬鏁幫紝瀹炲弬涓庡艦鍙傛寜欏哄簭涓涓瀵瑰簲;
聽聽聽 2) 鍚嶅瓧鏍囩ず娉曪細璋冪敤鏃剁粰鍑哄艦鍙傚悕瀛楋紝騫剁粰鍑哄疄鍙?br />聽聽聽聽聽聽 ModeTest(p_InParm=>12, p_OutParm=>v_var1, p_Inout=>10);
聽聽聽 娉細a. 涓ょ鏂規硶鍙互娣風敤;
聽聽聽聽聽聽聽 b. 娣風敤鏃剁涓涓弬鏁板繀欏婚氳繃浣嶇疆鏉ユ寚瀹氥?/p>
5. 鍑芥暟(Function)涓庤繃紼?Procedure)鐨勫尯鍒?br />絳旓細1) 榪囩▼璋冪敤鏈韓鏄竴涓狿L/SQL璇彞(鍙互鍦ㄥ懡浠よ涓氳繃exec璇彞鐩存帴璋冪敤);
聽聽聽 2) 鍑芥暟璋冪敤鏄〃杈懼紡鐨勪竴閮ㄥ垎;
6. 鍑芥暟鐨勫0鏄?br />絳旓細CREATE [OR REPLACE] PROCEDURE proc_name
聽聽聽聽聽聽聽 [(arg_name[{IN|OUT|IN OUT}]TYPE,
聽聽聽聽聽聽聽聽聽 arg_name[{IN|OUT|IN OUT}]TYPE)]
聽聽聽 RETURN TYPE
聽聽聽 {IS|AS}
聽聽聽 procedure_body
聽聽聽 娉細1) 娌℃湁榪斿洖璇彞鐨勫嚱鏁板皢鏄竴涓敊璇?
7. 鍒犻櫎榪囩▼涓庡嚱鏁?br />絳旓細DROP PROCEDURE proc_name;
聽聽聽 DROP FUNCTION func_name;
絎叓绔?/p>
1. 鍖?br />絳旓細1) 鍖呮槸鍙互灝嗙浉鍏沖璞″瓨鍌ㄥ湪涓璧風殑PL/SQL鐨勭粨鏋?
聽聽聽 2) 鍖呭彧鑳藉瓨鍌ㄥ湪鏁版嵁搴撲腑錛屼笉鑳芥槸鏈湴鐨?
聽聽聽 3) 鍖呮槸涓涓甫鏈夊悕瀛楃殑澹版槑;
聽聽聽 4) 鐩稿綋浜庝竴涓狿L/SQL鍧楃殑澹版槑閮ㄥ垎;
聽聽聽 5) 鍦ㄥ潡鐨勫0鏄庨儴鍒嗗嚭鐜扮殑浠諱綍涓滆タ閮借兘鍑虹幇鍦ㄥ寘涓?
聽聽聽 6) 鍖呬腑鍙互鍖呭惈榪囩▼銆佸嚱鏁般佹父鏍囦笌鍙橀噺;
聽聽聽 7) 鍙互浠庡叾浠朠L/SQL鍧椾腑寮曠敤鍖咃紝鍖呮彁渚涗簡鍙敤浜嶱L/SQL鐨勫叏灞鍙橀噺銆?br />聽聽聽 8) 鍖呮湁鍖呭ご鍜屽寘涓諱綋錛屽鍖呭ご涓病鏈変換浣曞嚱鏁頒笌榪囩▼錛屽垯鍖呬富浣撳彲浠ヤ笉闇瑕併?/p>
2. 鍖呭ご
絳旓細1) 鍖呭ご鍖呭惈浜嗘湁鍏沖寘鐨勫唴瀹圭殑淇℃伅錛屽寘澶翠笉鍚換浣曡繃紼嬬殑浠g爜銆?br />聽聽聽 2) 璇硶錛?br />聽聽聽聽聽聽 CREATE [OR REPLACE] PACKAGE pack_name {IS|AS}
聽聽聽聽聽聽聽聽聽聽聽 procedure_specification|function_specification|variable_declaration|type_definition|exception_declaration|cursor_declaration
聽聽聽聽聽聽 END pack_name;
聽聽聽 3) 紺轟緥錛?br />聽聽聽聽聽聽 CREATE OR REPLACE PACKAGE pak_test AS
聽聽聽聽聽聽聽聽聽聽 PROCEDURE RemoveStudent(p_StuID IN students.id%TYPE);
聽聽聽聽聽聽聽聽聽聽 TYPE t_StuIDTable IS TABLE OF students.id%TYPE INDEX BY BINARY_INTEGER;
聽聽聽聽聽聽 END pak_test;
3. 鍖呬富浣?br />絳旓細1) 鍖呬富浣撴槸鍙夌殑錛屽鍖呭ご涓病鏈変換浣曞嚱鏁頒笌榪囩▼錛屽垯鍖呬富浣撳彲浠ヤ笉闇瑕併?br />聽聽聽 2) 鍖呬富浣撲笌鍖呭ご瀛樻斁鍦ㄤ笉鍚岀殑鏁版嵁瀛楀吀涓?br />聽聽聽 3) 濡傚寘澶寸紪璇戜笉鎴愬姛錛屽寘涓諱綋鏃犳硶姝g‘緙栬瘧銆?br />聽聽聽 4) 鍖呬富浣撳寘鍚簡鎵鏈夊湪鍖呭ご涓0鏄庣殑鎵鏈夎繃紼嬩笌鍑芥暟鐨勪唬鐮併?br />聽聽聽 5) 紺轟緥錛?br />聽聽聽聽聽聽 CREATE OR REPLACE PACKAGE BODY pak_test AS
聽聽聽聽聽聽聽聽聽聽 PROCEDURE RemoveStudent(p_StuID IN students.id%TYPE) IS
聽聽聽聽聽聽聽聽聽聽 BEGIN
聽聽聽聽聽聽聽聽聽聽聽聽聽 ...
聽聽聽聽聽聽聽聽聽聽 END RemoveStudent;
聽聽聽聽聽聽聽聽聽聽 TYPE t_StuIDTable IS TABLE OF students.id%TYPE INDEX BY BINARY_INTEGER;
聽聽聽聽聽聽 END pak_test;
4. 鍖呯殑浣滅敤鍩?br />絳旓細1) 鍦ㄥ寘澶栬皟鐢ㄥ寘涓繃紼?闇鍔犲寘鍚?錛歱ak_test.AddStudent(100010, 'CS', 101);
聽聽聽 2) 鍦ㄥ寘涓諱綋涓彲浠ョ洿鎺ヤ嬌鐢ㄥ寘澶翠腑澹版槑鐨勫璞″拰榪囩▼(涓嶉渶鍔犲寘鍚?;
5. 鍖呬腑瀛愮▼搴忕殑閲嶈澆
絳旓細1) 鍚屼竴涓寘涓殑榪囩▼涓庡嚱鏁伴兘鍙互閲嶈澆;
聽聽聽 2) 鐩稿悓鐨勮繃紼嬫垨鍑芥暟鍚嶅瓧錛屼絾鍙傛暟涓嶅悓;
6. 鍖呯殑鍒濆鍖?br />絳旓細1) 鍖呭瓨鏀懼湪鏁版嵁搴撲腑;
聽聽聽 2) 鍦ㄧ涓嬈¤璋冪敤鐨勬椂鍊欙紝鍖呬粠鏁版嵁搴撲腑璋冨叆鍐呭瓨騫惰鍒濆鍖?
聽聽聽 3) 鍖呬腑瀹氫箟鐨勬墍鏈夊彉閲忛兘琚垎閰嶅唴瀛?
聽聽聽 4) 姣忎釜浼氳瘽閮藉皢鎷ユ湁鑷繁鐨勫寘鍐呭彉閲忕殑鍓湰銆?/p>
絎節绔?/p>
1. 瑙﹀彂鍣?br />絳旓細1) 瑙﹀彂鍣ㄤ笌榪囩▼/鍑芥暟鐨勭浉鍚岀偣
聽聽聽聽聽聽 a. 閮芥槸甯︽湁鍚嶅瓧鐨勬墽琛屽潡;
聽聽聽聽聽聽 b. 閮芥湁澹版槑銆佹墽琛屼綋鍜屽紓甯擱儴鍒?
聽聽聽 2) 瑙﹀彂鍣ㄤ笌榪囩▼/鍑芥暟鐨勪笉鍚岀偣
聽聽聽聽聽聽 a. 瑙﹀彂鍣ㄥ繀欏誨瓨鍌ㄥ湪鏁版嵁搴撲腑;
聽聽聽聽聽聽 b. 瑙﹀彂鍣ㄨ嚜鍔ㄦ墽琛?
2. 鍒涘緩瑙﹀彂鍣?br />絳旓細1) 璇硶錛?br />聽聽聽聽聽聽 CREATE [OR REPLACE] TRIGGER trigger_name
聽聽聽聽聽聽 {BEFORE|AFTER} triggering_event ON table_reference
聽聽聽聽聽聽 [FOR EACH ROW [WHEN trigger_condition]]
聽聽聽聽聽聽 trigger_body;
聽聽聽 2) 鑼冧緥錛?br />聽聽聽聽聽聽 CREATE OR REPLACE TRIGGER UpdateMajorStats AFTER INSERT OR DELETE OR UPDATE ON students
聽聽聽聽聽聽 DECLARE
聽聽聽聽聽聽聽聽聽聽 CURSOR c_Statistics IS
聽聽聽聽聽聽聽聽聽聽聽聽聽聽 SELECT * FROM students GROUP BY major;
聽聽聽聽聽聽 BEGIN
聽聽聽聽聽聽聽聽聽聽 ...
聽聽聽聽聽聽 END Up;
3. 瑙﹀彂鍣?br />絳旓細1) 涓変釜璇彞(INSERT/UPDATE/DELETE);
聽聽聽 2) 浜岀綾誨瀷(涔嬪墠/涔嬪悗);
聽聽聽 3) 浜岀綰у埆(row-level/statement-level);
聽聽聽 鎵浠ヤ竴鍏辨湁 3 X 2 X 2 = 12
4. 瑙﹀彂鍣ㄧ殑闄愬埗
絳旓細1) 涓嶅簲璇ヤ嬌鐢ㄤ簨鍔℃帶鍒惰鍙?
聽聽聽 2) 涓嶈兘澹版槑浠諱綍LONG鎴朙ONG RAW鍙橀噺;
聽聽聽 3) 鍙互璁塊棶鐨勮〃鏈夐檺銆?/p>
5. 瑙﹀彂鍣ㄧ殑涓諱綋鍙互璁塊棶鐨勮〃
絳旓細1) 涓嶅彲浠ヨ鍙栨垨淇敼浠諱綍鍙樺寲琛?琚獶ML璇彞姝e湪淇敼鐨勮〃);
聽聽聽 2) 涓嶅彲浠ヨ鍙栨垨淇敼闄愬埗琛?甯︽湁綰︽潫鐨勮〃)鐨勪富閿佸敮涓鍊箋佸閿垪銆?/p>
聽聽聽
聽聽聽聽聽聽
聽
聽