日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

ORACLE PL/SQL编程之六:把过程与函数说透(穷追猛打,把根儿都拔起!)

發布時間:2024/1/17 数据库 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ORACLE PL/SQL编程之六:把过程与函数说透(穷追猛打,把根儿都拔起!) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
原文:ORACLE PL/SQL編程之六:把過程與函數說透(窮追猛打,把根兒都拔起!)

ORACLE PL/SQL編程之六:

把過程與函數說透(窮追猛打,把根兒都拔起!)

?

繼上篇:ORACLE PL/SQL編程之八:把觸發器說透 得到了大家的強力支持,感謝。接下來再下猛藥,介紹下一篇,大家一定要支持與推薦呀~!我也才有動力寫后面的。

?

本篇主要內容如下:

6.1?引言

6.2?創建函數

6.3?存儲過程

6.3.1?創建過程

6.3.2?調用存儲過程

6.3.3?AUTHID

6.3.4?PRAGMA AUTONOMOUS_TRANSACTION

6.3.5?開發存儲過程步驟

6.3.6?刪除過程和函數

6.3.7?過程與函數的比較

?

6.1?引言

過程與函數(另外還有包與觸發器)是命名的PL/SQL塊(也是用戶的方案對象),被編譯后存儲在數據庫中,以備執行。因此,其它PL/SQL塊可以按名稱來使用他們。所以,可以將商業邏輯、企業規則寫成函數或過程保存到數據庫中,以便共享。

過程和函數統稱為PL/SQL子程序,他們是被命名的PL/SQL塊,均存儲在數據庫中,并通過輸入、輸出參數或輸入/輸出參數與其調用者交換信息。過程和函數的唯一區別是函數總向調用者返回數據,而過程則不返回數據。在本節中,主要介紹:

1.?? 創建存儲過程和函數。

2.?? 正確使用系統級的異常處理和用戶定義的異常處理。

3.?? 建立和管理存儲過程和函數。

6.2?創建函數

1. 創建函數

?

語法如下:

?

CREATE?[OR?REPLACE]?FUNCTION?function_name
?(arg1?
[?{?IN?|?OUT?|?IN?OUT?}]?type1?[DEFAULT?value1],
?
[arg2?[?{?IN?|?OUT?|?IN?OUT?}]?type2?[DEFAULT?value1]],
?......
?
[argn?[?{?IN?|?OUT?|?IN?OUT?}]?typen?[DEFAULT?valuen]])
?
[?AUTHID?DEFINER?|?CURRENT_USER?]
RETURN?return_type?
?
IS?|?AS
????
<類型.變量的聲明部分>?
BEGIN
????執行部分
????
RETURN?expression
EXCEPTION
????異常處理部分
END?function_name;

?

l???????? IN,OUT,IN OUT是形參的模式。若省略,則為IN模式。IN模式的形參只能將實參傳遞給形參,進入函數內部,但只能讀不能寫,函數返回時實參的值不變。OUT模式的形參會忽略調用時的實參值(或說該形參的初始值總是NULL),但在函數內部可以被讀或寫,函數返回時形參的值會賦予給實參。IN OUT具有前兩種模式的特性,即調用時,實參的值總是傳遞給形參,結束時,形參的值傳遞給實參。調用時,對于IN模式的實參可以是常量或變量,但對于OUTIN OUT模式的實參必須是變量。

?

l???????? 一般,只有在確認function_name函數是新函數或是要更新的函數時,才使用OR REPALCE關鍵字,否則容易刪除有用的函數。

?

例1.?????????? 獲取某部門的工資總和:

?

--獲取某部門的工資總和
CREATE?OR?REPLACE
FUNCTION?get_salary(
??Dept_no?
NUMBER,
??Emp_count?OUT?
NUMBER)
??
RETURN?NUMBER?
IS
??V_sum?
NUMBER;
BEGIN
??
SELECT?SUM(SALARY),?count(*)?INTO?V_sum,?emp_count
????
FROM?EMPLOYEES?WHERE?DEPARTMENT_ID=dept_no;
??
RETURN?v_sum;
EXCEPTION
???
WHEN?NO_DATA_FOUND?THEN?
??????DBMS_OUTPUT.PUT_LINE(
'你需要的數據不存在!');
???
WHEN?OTHERS?THEN?
??????DBMS_OUTPUT.PUT_LINE(SQLCODE
||'---'||SQLERRM);
END?get_salary;

?

2. 函數的調用

函數聲明時所定義的參數稱為形式參數,應用程序調用時為函數傳遞的參數稱為實際參數。應用程序在調用函數時,可以使用以下三種方法向函數傳遞參數:

?

第一種參數傳遞格式:位置表示法。

即在調用時按形參的排列順序,依次寫出實參的名稱,而將形參與實參關聯起來進行傳遞。用這種方法進行調用,形參與實參的名稱是相互獨立,沒有關系,強調次序才是重要的。

格式為:

?????? argument_value1[,argument_value2 …]

?

2計算某部門的工資總和:

?

DECLARE
??V_num?
NUMBER;
??V_sum?
NUMBER;
BEGIN
??V_sum?:
=get_salary(10,?v_num);
??DBMS_OUTPUT.PUT_LINE(
'部門號為:10的工資總和:'||v_sum||',人數為:'||v_num);
END;

第二種參數傳遞格式:名稱表示法。

即在調用時按形參的名稱與實參的名稱,寫出實參對應的形參,而將形參與實參關聯起來進行傳遞。這種方法,形參與實參的名稱是相互獨立的,沒有關系,名稱的對應關系才是最重要的,次序并不重要。

格式為:

?????? argument => parameter [,…]

其中:argument 為形式參數,它必須與函數定義時所聲明的形式參數名稱相同parameter 為實際參數。

在這種格式中,形勢參數與實際參數成對出現,相互間關系唯一確定,所以參數的順序可以任意排列。

3計算某部門的工資總和:

?

DECLARE
??V_num?
NUMBER;
????V_sum?
NUMBER;
BEGIN
????V_sum?:
=get_salary(emp_count?=>?v_num,?dept_no?=>?10);
????DBMS_OUTPUT.PUT_LINE(
'部門號為:10的工資總和:'||v_sum||',人數為:'||v_num);
END;?

第三種參數傳遞格式:組合傳遞。

即在調用一個函數時,同時使用位置表示法和名稱表示法為函數傳遞參數。采用這種參數傳遞方法時,使用位置表示法所傳遞的參數必須放在名稱表示法所傳遞的參數前面。也就是說,無論函數具有多少個參數,只要其中有一個參數使用名稱表示法,其后所有的參數都必須使用名稱表示法。

?

4

CREATE?OR?REPLACE?FUNCTION?demo_fun(
??Name?
VARCHAR2,--注意VARCHAR2不能給精度,如:VARCHAR2(10),其它類似
??Age?INTEGER,
??Sex?
VARCHAR2)
??
RETURN?VARCHAR2?
AS
??V_var?
VARCHAR2(32);
BEGIN
??V_var?:
=?name||''||TO_CHAR(age)||'歲.'||sex;
??
RETURN?v_var;
END;

DECLARE?
??
Var?VARCHAR(32);
BEGIN
??
Var?:=?demo_fun('user1',?30,?sex?=>?'');
??DBMS_OUTPUT.PUT_LINE(
var);

??
Var?:=?demo_fun('user2',?age?=>?40,?sex?=>?'');
??DBMS_OUTPUT.PUT_LINE(
var);

??
Var?:=?demo_fun('user3',?sex?=>?'',?age?=>?20);
??DBMS_OUTPUT.PUT_LINE(
var);
END;

?

無論采用哪一種參數傳遞方法,實際參數和形式參數之間的數據傳遞只有兩種方法:傳址法和傳值法。所謂傳址法是指在調用函數時,將實際參數的地址指針傳遞給形式參數,使形式參數和實際參數指向內存中的同一區域,從而實現參數數據的傳遞。這種方法又稱作參照法,即形式參數參照實際參數數據。輸入參數均采用傳址法傳遞數據。

?????? 傳值法是指將實際參數的數據拷貝到形式參數,而不是傳遞實際參數的地址。默認時,輸出參數和輸入/輸出參數均采用傳值法。在函數調用時,ORACLE將實際參數數據拷貝到輸入/輸出參數,而當函數正常運行退出時,又將輸出形式參數和輸入/輸出形式參數數據拷貝到實際參數變量中。

?

3. 參數默認值

CREATE OR REPLACE FUNCTION 語句中聲明函數參數時可以使用DEFAULT關鍵字為輸入參數指定默認值。

?

5

CREATE?OR?REPLACE?FUNCTION?demo_fun(
??Name?
VARCHAR2,
??Age?
INTEGER,
??Sex?
VARCHAR2?DEFAULT?'')
??
RETURN?VARCHAR2?
AS
??V_var?
VARCHAR2(32);
BEGIN
??V_var?:
=?name||''||TO_CHAR(age)||'歲.'||sex;
??
RETURN?v_var;
END;

?

具有默認值的函數創建后,在函數調用時,如果沒有為具有默認值的參數提供實際參數值,函數將使用該參數的默認值。但當調用者為默認參數提供實際參數時,函數將使用實際參數值。在創建函數時,只能為輸入參數設置默認值,而不能為輸入/輸出參數設置默認值。

DECLARE

?var VARCHAR(32);

BEGIN

?Var := demo_fun('user1', 30);

?DBMS_OUTPUT.PUT_LINE(var);

?Var := demo_fun('user2', age => 40);

?DBMS_OUTPUT.PUT_LINE(var);

?Var := demo_fun('user3', sex => '', age => 20);

?DBMS_OUTPUT.PUT_LINE(var);

END;

6.3?存儲過程

6.3.1?創建過程

?

建立存儲過程

ORACLE SERVER上建立存儲過程,可以被多個應用程序調用,可以向存儲過程傳遞參數,也可以向存儲過程傳回參數.

?

創建過程語法:

?

CREATE?[OR?REPLACE]?PROCEDURE?procedure_name
(
[arg1?[?IN?|?OUT?|?IN?OUT?]]?type1?[DEFAULT?value1],
?
[arg2?[?IN?|?OUT?|?IN?OUT?]]?type2?[DEFAULT?value1]],
?......
?
[argn?[?IN?|?OUT?|?IN?OUT?]]?typen?[DEFAULT?valuen])
????
[?AUTHID?DEFINER?|?CURRENT_USER?]
{?
IS?|?AS?}
??
<聲明部分>?
BEGIN
??
<執行部分>
EXCEPTION
??
<可選的異常錯誤處理程序>
END?procedure_name;

?

說明:相關參數說明參見函數的語法說明。

?

6用戶連接登記記錄;

?

CREATE?TABLE?logtable?(userid?VARCHAR2(10),?logdate?date);

CREATE?OR?REPLACE?PROCEDURE?logexecution?
IS
BEGIN
INSERT?INTO?logtable?(userid,?logdate)?VALUES?(USER,?SYSDATE);
END;

?

7刪除指定員工記錄;

?

CREATE?OR?REPLACE
PROCEDURE?DelEmp
(v_empno?
IN?employees.employee_id%TYPE)?
AS
No_result?EXCEPTION;
BEGIN
???
DELETE?FROM?employees?WHERE?employee_id?=?v_empno;
???
IF?SQL%NOTFOUND?THEN
??????RAISE?no_result;
???
END?IF;
???DBMS_OUTPUT.PUT_LINE(
'編碼為'||v_empno||'的員工已被刪除!');
EXCEPTION
???
WHEN?no_result?THEN?
??????DBMS_OUTPUT.PUT_LINE(
'溫馨提示:你需要的數據不存在!');
???
WHEN?OTHERS?THEN
??????DBMS_OUTPUT.PUT_LINE(SQLCODE
||'---'||SQLERRM);
END?DelEmp;

?

8插入員工記錄:

?

CREATE?OR?REPLACE
PROCEDURE?InsertEmp(
???v_empno?????
in?employees.employee_id%TYPE,
???v_firstname?
in?employees.first_name%TYPE,
???v_lastname??
in?employees.last_name%TYPE,
???v_deptno????
in?employees.department_id%TYPE
???)?
AS
???empno_remaining?EXCEPTION;
???PRAGMA?EXCEPTION_INIT(empno_remaining,?
-1);
???
/*?-1?是違反唯一約束條件的錯誤代碼?*/
BEGIN
???
INSERT?INTO?EMPLOYEES(EMPLOYEE_ID,?FIRST_NAME,?LAST_NAME,?HIRE_DATE,DEPARTMENT_ID)
???
VALUES(v_empno,?v_firstname,v_lastname,?sysdate,?v_deptno);
???DBMS_OUTPUT.PUT_LINE(
'溫馨提示:插入數據記錄成功!');
EXCEPTION
???
WHEN?empno_remaining?THEN?
??????DBMS_OUTPUT.PUT_LINE(
'溫馨提示:違反數據完整性約束!');
???
WHEN?OTHERS?THEN
??????DBMS_OUTPUT.PUT_LINE(SQLCODE
||'---'||SQLERRM);
END?InsertEmp;

9使用存儲過程向departments表中插入數據。

?

CREATE?OR?REPLACE
PROCEDURE?insert_dept
??(v_dept_id?
IN?departments.department_id%TYPE,
???v_dept_name?
IN?departments.department_name%TYPE,
???v_mgr_id?
IN?departments.manager_id%TYPE,
???v_loc_id?
IN?departments.location_id%TYPE)
IS
???ept_null_error?EXCEPTION;
???PRAGMA?EXCEPTION_INIT(ept_null_error,?
-1400);
???ept_no_loc_id?EXCEPTION;
???PRAGMA?EXCEPTION_INIT(ept_no_loc_id,?
-2291);
BEGIN
???
INSERT?INTO?departments
???(department_id,?department_name,?manager_id,?location_id)
???
VALUES
???(v_dept_id,?v_dept_name,?v_mgr_id,?v_loc_id);
???DBMS_OUTPUT.PUT_LINE(
'插入部門'||v_dept_id||'成功');
EXCEPTION
???
WHEN?DUP_VAL_ON_INDEX?THEN
??????RAISE_APPLICATION_ERROR(
-20000,?'部門編碼不能重復');
???
WHEN?ept_null_error?THEN
??????RAISE_APPLICATION_ERROR(
-20001,?'部門編碼、部門名稱不能為空');
???
WHEN?ept_no_loc_id?THEN
??????RAISE_APPLICATION_ERROR(
-20002,?'沒有該地點');
END?insert_dept;

/*調用實例一:
DECLARE
???ept_20000?EXCEPTION;
???PRAGMA?EXCEPTION_INIT(ept_20000,?-20000);
???ept_20001?EXCEPTION;
???PRAGMA?EXCEPTION_INIT(ept_20001,?-20001);
???ept_20002?EXCEPTION;
???PRAGMA?EXCEPTION_INIT(ept_20002,?-20002);
BEGIN
???insert_dept(300,?'部門300',?100,?2400);
???insert_dept(310,?NULL,?100,?2400);
???insert_dept(310,?'部門310',?100,?900);
EXCEPTION
???WHEN?ept_20000?THEN
??????DBMS_OUTPUT.PUT_LINE('ept_20000部門編碼不能重復');
???WHEN?ept_20001?THEN
??????DBMS_OUTPUT.PUT_LINE('ept_20001部門編碼、部門名稱不能為空');
???WHEN?ept_20002?THEN
??????DBMS_OUTPUT.PUT_LINE('ept_20002沒有該地點');
???WHEN?OTHERS?THEN
??????DBMS_OUTPUT.PUT_LINE('others出現了其他異常錯誤');
END;

調用實例二:
DECLARE
???ept_20000?EXCEPTION;
???PRAGMA?EXCEPTION_INIT(ept_20000,?-20000);
???ept_20001?EXCEPTION;
???PRAGMA?EXCEPTION_INIT(ept_20001,?-20001);
???ept_20002?EXCEPTION;
???PRAGMA?EXCEPTION_INIT(ept_20002,?-20002);
BEGIN
???insert_dept(v_dept_name?=>?'部門310',?v_dept_id?=>?310,?
???????????????v_mgr_id?=>?100,?v_loc_id?=>?2400);
???insert_dept(320,?'部門320',?v_mgr_id?=>?100,?v_loc_id?=>?900);
EXCEPTION
???WHEN?ept_20000?THEN
??????DBMS_OUTPUT.PUT_LINE('ept_20000部門編碼不能重復');
???WHEN?ept_20001?THEN
??????DBMS_OUTPUT.PUT_LINE('ept_20001部門編碼、部門名稱不能為空');
???WHEN?ept_20002?THEN
??????DBMS_OUTPUT.PUT_LINE('ept_20002沒有該地點');
???WHEN?OTHERS?THEN
??????DBMS_OUTPUT.PUT_LINE('others出現了其他異常錯誤');
END;
*/

?

6.3.2?調用存儲過程

?

?? ?存儲過程建立完成后,只要通過授權,用戶就可以在SQLPLUS ORACLE開發工具或第三方開發工具中來調用運行。對于參數的傳遞也有三種:按位置傳遞、按名稱傳遞和組合傳遞,傳遞方法與函數的一樣。ORACLE 使用EXECUTE 語句來實現對存儲過程的調用:

?

EXEC[UTE]?procedure_name(?parameter1,?parameter2…);

?

10

?

EXECUTE?logexecution;

?

11查詢指定員工記錄;

?

CREATE?OR?REPLACE
PROCEDURE?QueryEmp
(v_empno?
IN??employees.employee_id%TYPE,
?v_ename?OUT?employees.first_name
%TYPE,
?v_sal???OUT?employees.salary
%TYPE)?
AS
BEGIN
???????
SELECT?last_name?||?last_name,?salary?INTO?v_ename,?v_sal?
????
FROM?employees?
????
WHERE?employee_id?=?v_empno;?
???????DBMS_OUTPUT.PUT_LINE(
'溫馨提示:編碼為'||v_empno||'的員工已經查到!');
EXCEPTION
???????
WHEN?NO_DATA_FOUND?THEN?
??????DBMS_OUTPUT.PUT_LINE(
'溫馨提示:你需要的數據不存在!');
??????
WHEN?OTHERS?THEN?
??????DBMS_OUTPUT.PUT_LINE(SQLCODE
||'---'||SQLERRM);
END?QueryEmp;
--調用
?DECLARE
????v1?employees.first_name
%TYPE;
????v2?employees.salary
%TYPE;
?
BEGIN
???QueryEmp(
100,?v1,?v2);
???DBMS_OUTPUT.PUT_LINE(
'姓名:'||v1);
???DBMS_OUTPUT.PUT_LINE(
'工資:'||v2);
???QueryEmp(
103,?v1,?v2);
???DBMS_OUTPUT.PUT_LINE(
'姓名:'||v1);
???DBMS_OUTPUT.PUT_LINE(
'工資:'||v2);
???QueryEmp(
104,?v1,?v2);
???DBMS_OUTPUT.PUT_LINE(
'姓名:'||v1);
???DBMS_OUTPUT.PUT_LINE(
'工資:'||v2);
END;

?

12計算指定部門的工資總和,并統計其中的職工數量。

?

CREATE?OR?REPLACE
PROCEDURE?proc_demo
(
??dept_no?
NUMBER?DEFAULT?10,
????sal_sum?OUT?
NUMBER,
????emp_count?OUT?
NUMBER
??)
IS
BEGIN
????
SELECT?SUM(salary),?COUNT(*)?INTO?sal_sum,?emp_count
??
FROM?employees?WHERE?department_id?=?dept_no;
EXCEPTION
???
WHEN?NO_DATA_FOUND?THEN
??????DBMS_OUTPUT.PUT_LINE(
'溫馨提示:你需要的數據不存在!');
???
WHEN?OTHERS?THEN
??????DBMS_OUTPUT.PUT_LINE(SQLCODE
||'---'||SQLERRM);
END?proc_demo;

DECLARE
V_num?
NUMBER;
V_sum?
NUMBER(8,?2);
BEGIN
??Proc_demo(
30,?v_sum,?v_num);
DBMS_OUTPUT.PUT_LINE(
'溫馨提示:30號部門工資總和:'||v_sum||',人數:'||v_num);
??Proc_demo(sal_sum?
=>?v_sum,?emp_count?=>?v_num);
DBMS_OUTPUT.PUT_LINE(
'溫馨提示:10號部門工資總和:'||v_sum||',人數:'||v_num);
END;

?????? PL/SQL 程序中還可以在塊內建立本地函數和過程,這些函數和過程不存儲在數據庫中,但可以在創建它們的PL/SQL 程序中被重復調用。本地函數和過程在PL/SQL 塊的聲明部分定義,它們的語法格式與存儲函數和過程相同,但不能使用CREATE OR REPLACE 關鍵字。

?

13建立本地過程,用于計算指定部門的工資總和,并統計其中的職工數量;

?

DECLARE
V_num?
NUMBER;
V_sum?
NUMBER(8,?2);
PROCEDURE?proc_demo
??(
????Dept_no?
NUMBER?DEFAULT?10,
????Sal_sum?OUT?
NUMBER,
????Emp_count?OUT?
NUMBER
??)
IS
BEGIN
????
SELECT?SUM(salary),?COUNT(*)?INTO?sal_sum,?emp_count?
????
FROM?employees?WHERE?department_id=dept_no;
EXCEPTION
???
WHEN?NO_DATA_FOUND?THEN?
??????DBMS_OUTPUT.PUT_LINE(
'你需要的數據不存在!');
???
WHEN?OTHERS?THEN?
??????DBMS_OUTPUT.PUT_LINE(SQLCODE
||'---'||SQLERRM);
END?proc_demo;
--調用方法:
BEGIN
????Proc_demo(
30,?v_sum,?v_num);
DBMS_OUTPUT.PUT_LINE(
'30號部門工資總和:'||v_sum||',人數:'||v_num);
????Proc_demo(sal_sum?
=>?v_sum,?emp_count?=>?v_num);
DBMS_OUTPUT.PUT_LINE(
'10號部門工資總和:'||v_sum||',人數:'||v_num);
END;

6.3.3?AUTHID

過程中的AUTHID 指令可以告訴ORACLE ,這個過程使用誰的權限運行.默任情況下,存儲過程會作為調用者的過程運行,但是具有設計者的特權.這稱為設計者權利運行.

?

14建立過程,使用AUTOID DEFINER

?

Connect?HR/qaz
DROP?TABLE?logtable;
CREATE?table?logtable?(userid?VARCHAR2(10),?logdate?date);

CREATE?OR?REPLACE?PROCEDURE?logexecution?
????AUTHID?DEFINER
IS
BEGIN
???
INSERT?INTO?logtable?(userid,?logdate)?VALUES?(USER,?SYSDATE);
END;

GRANT?EXECUTE?ON?logexecution?TO?PUBLIC;

CONNECT?
/?AS?SYSDBA
GRANT?CONNECT?TO?testuser1?IDENTIFIED?BY?userpwd1;

CONNECT?testuser1
/userpwd1
INSERT?INTO?HR.LOGTABLE?VALUES?(USER,?SYSDATE);
EXECUTE?HR.logexecution

CONNECT?HR
/qaz
SELECT?*?FROM?HR.logtable;

?

15建立過程,使用AUTOID CURRENT_USER

?

CONNECT?HR/qaz

CREATE?OR?REPLACE?PROCEDURE?logexecution?
??AUTHID?
CURRENT_USER
IS
BEGIN
???
INSERT?INTO?logtable?(userid,?logdate)?VALUES?(USER,?SYSDATE);
END;

GRANT?EXECUTE?ON?logexecution?TO?PUBLIC;

CONNECT?testuser1
/userpwd1
INSERT?INTO?HR.LOGTABLE?VALUES?(USER,?SYSDATE);
EXECUTE?HR.logexecution

?

6.3.4?PRAGMA AUTONOMOUS_TRANSACTION

?

ORACLE8i 可以支持事務處理中的事務處理的概念.這種子事務處理可以完成它自己的工作,獨立于父事務處理進行提交或者回滾.通過使用這種方法,開發者就能夠這樣的過程,無論父事務處理是提交還是回滾,它都可以成功執行.

?

16建立過程,使用自動事務處理進行日志記錄;

?

DROP?TABLE?logtable;

CREATE?TABLE?logtable(
??Username?
varchar2(20),
??Dassate_time?date,
??Mege?
varchar2(60)
);

CREATE?TABLE?temp_table(?N?number?);

CREATE?OR?REPLACE?PROCEDURE?log_message(p_message?varchar2)
??
AS
??PRAGMA?AUTONOMOUS_TRANSACTION;
BEGIN
??
INSERT?INTO?logtable?VALUES?(?user,?sysdate,?p_message?);
??
COMMIT;
END?log_message;

BEGIN
??Log_message?(‘About?
to?insert?into?temp_table‘);
??
INSERT?INTO?temp_table?VALUES?(1);
??Log_message?(‘
Rollback?to?insert?into?temp_table‘);
??
ROLLBACK;
END;

SELECT?*?FROM?logtable;
SELECT?*?FROM?temp_table;

?

17建立過程,沒有使用自動事務處理進行日志記錄;

?

CREATE?OR?REPLACE?PROCEDURE?log_message(p_message?varchar2)
??
AS
BEGIN
??
INSERT?INTO?logtable?VALUES?(?user,?sysdate,?p_message?);
??
COMMIT;
END?log_message;

BEGIN
??Log_message?(
'About?to?insert?into?temp_table');
??
INSERT?INTO?temp_table?VALUES?(1);
??Log_message?(
'Rollback?to?insert?into?temp_table');
??
ROLLBACK;
END;

SELECT?*?FROM?logtable;
SELECT?*?FROM?temp_table;

?

6.3.5?開發存儲過程步驟

??? 開發存儲過程、函數、包及觸發器的步驟如下:

?

6.3.5.1?使用文字編輯處理軟件編輯存儲過程源碼

??? 使用文字編輯處理軟件編輯存儲過程源碼,要用類似WORD 文字處理軟件進行編輯時,要將源碼存為文本格式。

?

6.3.5.2?SQLPLUS或用調試工具將存儲過程程序進行解釋

??? SQLPLUS或用調試工具將存儲過程程序進行解釋;

??? SQL>下調試,可用START GET ORACLE命令來啟動解釋。如:

SQL>START c:\stat1.sql

??? 如果使用調式工具,可直接編輯和點擊相應的按鈕即可生成存儲過程。

?

6.3.5.3?調試源碼直到正確

??? 我們不能保證所寫的存儲過程達到一次就正確。所以這里的調式是每個程序員必須進行的工作之一。在SQLPLUS下來調式主要用的方法是:

l???????? 使用 SHOW ERROR命令來提示源碼的錯誤位置;

l???????? 使用 user_errors 數據字典來查看各存儲過程的錯誤位置。

?

6.3.5.4?授權執行權給相關的用戶或角色

如果調式正確的存儲過程沒有進行授權,那就只有建立者本人才可以運行。所以作為應用系統的一部分的存儲過程也必須進行授權才能達到要求。在SQL*PLUS下可以用GRANT命令來進行存儲過程的運行授權。

?

GRANT語法:

?

GRANT?system_privilege?|?role?
TO?user?|?role?|?PUBLIC?[WITH?ADMIN?OPTION]

GRANT?object_privilege?|?ALL?ON?schema.object?
TO?user?|?role?|?PUBLIC?[WITH?GRANT?OPTION]

--例子:

CREATE?OR?REPLACE?PUBLIC?SYNONYM?dbms_job?FOR?dbms_job

GRANT?EXECUTE?ON?dbms_job?TO?PUBLIC?WITH?GRANT?OPTION

?

6.3.5.5?與過程相關數據字典

?

USER_SOURCE, ALL_SOURCE, DBA_SOURCE, USER_ERRORS,

ALL_PROCEDURES,USER_OBJECTS,ALL_OBJECTS,DBA_OBJECTS

?

相關的權限:

CREATE ANY PROCEDURE

DROP ANY PROCEDURE

?

SQL*PLUS 中,可以用DESCRIBE 命令查看過程的名字及其參數表。

?

DESC[RIBE] Procedure_name;

?

6.3.6?刪除過程和函數

?

1.刪除過程

可以使用DROP PROCEDURE命令對不需要的過程進行刪除,語法如下:

DROP PROCEDURE [user.]Procudure_name;

?

2.刪除函數

可以使用DROP FUNCTION 命令對不需要的函數進行刪除,語法如下:

?

DROP?FUNCTION?[user.]Function_name;

--刪除上面實例創建的存儲過程與函數
DROP?PROCEDURE?logexecution;
DROP?PROCEDURE?delemp;
DROP?PROCEDURE?insertemp;
DROP?PROCEDURE?fireemp;
DROP?PROCEDURE?queryemp;
DROP?PROCEDURE?proc_demo;
DROP?PROCEDURE?log_message;
DROP?FUNCTION?demo_fun;
DROP?FUNCTION?get_salary;

?

6.3.7??????? 過程與函數的比較

?

使用過程與函數具有如下優點:

?

1、共同使用的代碼可以只需要被編寫和測試一次,而被需要該代碼的任何應用程序(如:.NETC++JAVAVB程序,也可以是DLL庫)調用。

2、這種集中編寫、集中維護更新、大家共享(或重用)的方法,簡化了應用程序的開發和維護,提高了效率與性能。

3、這種模塊化的方法,使得可以將一個復雜的問題、大的程序逐步簡化成幾個簡單的、小的程序部分,進行分別編寫、調試。因此使程序的結構清晰、簡單,也容易實現。

4、可以在各個開發者之間提供處理數據、控制流程、提示信息等方面的一致性。

5、節省內存空間。它們以一種壓縮的形式被存儲在外存中,當被調用時才被放入內存進行處理。并且,如果多個用戶要執行相同的過程或函數時,就只需要在內存中加載一個該過程或函數。

6、提高數據的安全性與完整性。通過把一些對數據的操作放到過程或函數中,就可以通過是否授予用戶有執行該過程或的權限,來限制某些用戶對數據進行這些操作。

?

過程與函數的相同功能有:

1、?都使用IN模式的參數傳入數據、OUT模式的參數返回數據。

2、?輸入參數都可以接受默認值,都可以傳值或傳引導。

3、?調用時的實際參數都可以使用位置表示法、名稱表示法或組合方法。

4、?都有聲明部分、執行部分和異常處理部分。

5、?其管理過程都有創建、編譯、授權、刪除、顯示依賴關系等。

?

使用過程與函數的原則:

1、如果需要返回多個值和不返回值,就使用過程;如果只需要返回一個值,就使用函數。

2、過程一般用于執行一個指定的動作,函數一般用于計算和返回一個值。

3、可以SQL語句內部(如表達式)調用函數來完成復雜的計算問題,但不能調用過程。所以這是函數的特色。

? 2011? EricHu

原創作品,轉貼請注明作者和出處,留此信息。

?

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

cnBlobs:http://www.cnblogs.com/huyong/
CSDNhttp://blog.csdn.net/chinahuyong?

?

作者:EricHuDBC\SB\SWebServiceWCFPM等)
出處:http://www.cnblogs.com/huyong/

Q Q80368704?? E-Mail: 80368704@qq.com
本博文歡迎大家瀏覽和轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,在『參考』的文章中,我會表明參考的文章來源,尊重他人版權。若您發現我侵犯了您的版權,請及時與我聯系。
更多文章請看?[置頂]索引貼——(不斷更新中)

?

刷新評論刷新頁面返回頂部 博客園首頁博問新聞閃存程序員招聘知識庫

About

www.spiga.com.mx

Copyright ?2014 yonghu86

博客園

總結

以上是生活随笔為你收集整理的ORACLE PL/SQL编程之六:把过程与函数说透(穷追猛打,把根儿都拔起!)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

久久免费美女视频 | 日韩av在线资源 | 日韩成人在线免费观看 | av黄色免费在线观看 | 日韩av电影中文字幕在线观看 | 狠狠操狠狠干天天操 | 91精品专区| 亚洲精品456在线播放第一页 | www.国产高清 | 日本精品视频在线观看 | 亚洲精品乱码久久久一二三 | 揉bbb玩bbb少妇bbb| 日本中文在线 | 在线观看黄色的网站 | 69久久99精品久久久久婷婷 | 久久av一区二区三区亚洲 | aⅴ精品av导航| 亚洲欧美激情插 | 最近中文字幕视频完整版 | 在线播放一区二区三区 | 国产精品av在线免费观看 | 日韩欧美国产成人 | 6080yy午夜一二三区久久 | 日韩国产欧美在线播放 | 黄色av免费看 | 国产精品久久久久久a | 精品免费视频 | 亚洲九九爱 | 久草久视频 | 久久 地址 | 久久精品国产久精国产 | 中文字幕在线观看免费观看 | 国产一级片一区二区三区 | 91女子私密保健养生少妇 | 插插插色综合 | 在线观看成人av | 四虎影视国产精品免费久久 | 日韩欧美在线一区 | 国产专区在线视频 | 成人黄色电影在线观看 | 在线看成人| 激情久久五月天 | 在线观看 亚洲 | 久草影视在线 | 精品久久一区二区三区 | 亚洲精品久久激情国产片 | 久久综合精品国产一区二区三区 | 91精品国产九九九久久久亚洲 | 精品久久一二三区 | 中文字幕av日韩 | 在线欧美日韩 | 激情综合婷婷 | 久久综合婷婷 | 看国产黄色大片 | 成人免费观看在线视频 | 久久伦理电影 | 久久久久激情电影 | 日韩网| 人人艹人人 | 久久精品视频免费播放 | 99国产情侣在线播放 | 日韩成人免费在线电影 | 久久精品播放 | 三级在线播放视频 | 日本中文不卡 | 四虎影视成人永久免费观看亚洲欧美 | 国产综合久久 | 国产高清av免费在线观看 | 性色av一区二区三区在线观看 | 久草网站 | 色吧久久 | 性色av香蕉一区二区 | av7777777 | 韩国精品一区二区三区六区色诱 | 国产在线视频资源 | 有没有在线观看av | 97超视频免费观看 | 91看片淫黄大片一级在线观看 | av青草| 中文在线免费看视频 | 久久久久黄 | 免费a视频在线观看 | 久久一级电影 | 国产精品免费麻豆入口 | 在线亚洲观看 | 欧美激情视频免费看 | 久久久99精品免费观看 | 国产亚洲精品久久久久久网站 | 黄色网址a | 中文字幕日本在线观看 | 在线观看av中文字幕 | 久久短视频| 黄色亚洲大片免费在线观看 | 日本中文一级片 | 91精品视频在线免费观看 | 国产精品久久久久久久久久久久午夜片 | 99久久999久久久精玫瑰 | 丁香五月亚洲综合在线 | se视频网址 | 手机在线黄色网址 | 国产精品美女毛片真酒店 | 久久99精品久久久久蜜臀 | 美女黄网久久 | 日本中文乱码卡一卡二新区 | 97av在线| 国产精品福利无圣光在线一区 | 丁香av在线 | 中文字幕精品在线 | 国产亚洲欧美在线视频 | 国内精品久久久久久 | 狠狠干狠狠久久 | 五月天婷婷狠狠 | 五月天婷婷视频 | 午夜久久久久久久久久久 | 国产欧美高清 | 91在线国内视频 | 天天夜夜狠狠操 | 成人免费视频网站在线观看 | 亚洲国产精品女人久久久 | 91一区在线观看 | 97成人超碰 | 五月激情在线 | 成人小视频在线播放 | 日韩综合一区二区 | 国产一级黄 | 999成人 | 国产一级做a爱片久久毛片a | 在线观看亚洲 | 国产成人av综合色 | www.夜夜操| 免费网站在线观看人 | 国产剧情在线一区 | 亚洲91精品在线观看 | 日韩精选在线 | 久久久亚洲电影 | 国产一二三在线视频 | 成人黄色免费在线观看 | 久久伊人八月婷婷综合激情 | 亚洲小视频在线 | 成人av电影网址 | 美女网站色免费 | 成人禁用看黄a在线 | 69国产盗摄一区二区三区五区 | 国产特级毛片aaaaaaa高清 | 日韩电影中文字幕 | 99久久精品午夜一区二区小说 | 久久久久久精 | 久久激情五月激情 | 国产精品一区二区无线 | 精品久久久久久亚洲综合网站 | 狠狠干天天干 | 97日日碰人人模人人澡分享吧 | 成人国产精品久久久春色 | 日韩高清不卡一区二区三区 | 男女啪啪免费网站 | 日韩av片无码一区二区不卡电影 | 白丝av在线| 在线免费观看国产精品 | 国产二区电影 | 九九九九九精品 | 91成人黄色| 国产精品精品久久久 | 在线观看91精品国产网站 | 色偷偷男人的天堂av | 欧美性生爱| 丰满少妇在线观看资源站 | av网站手机在线观看 | 欧美少妇xx | 免费色视频 | 国产精品一区一区三区 | 天天天天射 | 九九热免费在线观看 | 成人电影毛片 | 夜添久久精品亚洲国产精品 | 久久99精品国产一区二区三区 | 天天插综合网 | 国产日韩欧美中文 | 久久免费视频在线观看30 | av在线播放一区二区三区 | 99久久夜色精品国产亚洲 | 少妇做爰k8经典 | 日韩在线免费小视频 | 91超级碰碰 | av成人在线看 | 中文字幕影片免费在线观看 | 97视频资源 | 香蕉网站在线观看 | 国产第一页在线观看 | 免费看色网站 | 久草在线免费资源 | 久久成人麻豆午夜电影 | 国产午夜影院 | 麻豆久久久久久久 | 欧美一级特黄aaaaaa大片在线观看 | 国产精品久久精品 | www.久久久久 | 欧美一区二区在线刺激视频 | 中文免费| 久久伊人免费视频 | 九九免费在线观看视频 | 久草免费在线 | 国产黄色av影视 | av成人免费网站 | 四虎精品成人免费网站 | 精品久久久久久久久久国产 | 激情av网址 | 欧美韩日精品 | 99人成在线观看视频 | 国产无遮挡又黄又爽在线观看 | 日韩精品极品视频 | 激情婷婷亚洲 | 婷婷丁香在线视频 | 久久99热这里只有精品 | 福利视频一区二区 | 黄色软件视频网站 | 五月激情站 | 天天拍天天爽 | 国内精品久久久久 | 久久久久久久久久久国产精品 | 天天天天天天操 | 久久久精品视频网站 | 中文字幕一区二区三区四区 | 日韩精品电影在线播放 | 天天综合天天做 | 五月天六月婷 | 免费在线观看中文字幕 | 中文字幕在线免费观看视频 | 99精品在线视频观看 | 日本在线中文在线 | 在线高清av | 最新av免费 | 日韩在线免费电影 | 精品久久久久久久久久久久 | 免费福利视频网 | 综合色婷婷 | 国产又粗又猛又色又黄网站 | 狠狠干狠狠久久 | 国产午夜影院 | 国产精品96久久久久久吹潮 | 国产一级二级视频 | 久久久免费 | 一区二区三区三区在线 | 国产精品成人一区二区三区吃奶 | 国产精品久久伊人 | 久久久在线视频 | 日韩高清精品一区二区 | 在线观看www91 | 久久久久久久久久久综合 | 精品久久免费看 | 国产黄色在线观看 | 日韩成人免费电影 | 亚洲最快最全在线视频 | 黄色大片日本 | 丁香九月激情综合 | 国产精品9999久久久久仙踪林 | 日日操日日干 | 亚洲va欧洲va国产va不卡 | 国内精品久久久久国产 | 久久国产精品视频观看 | 国产aaa大片| 日韩av一区二区三区在线观看 | 天天插天天狠天天透 | 日韩二区精品 | 国内精品毛片 | 天天草天天插 | 日韩黄色在线观看 | 久久免费视频7 | 最近日本中文字幕a | 亚洲精品影院在线观看 | 欧美二区在线播放 | 色婷婷免费视频 | 国产美女网站在线观看 | 精品视频在线免费 | 亚洲精选在线 | 99在线免费视频观看 | 久久久久久在线观看 | 天天添夜夜操 | 国产一区在线观看视频 | 国产精品久久久久久久久久久久午 | 高清免费在线视频 | 在线免费观看一区二区三区 | 国产欧美精品一区二区三区 | 欧美一区二区日韩一区二区 | 在线免费观看麻豆视频 | 超碰97人 | 亚洲高清av在线 | 97在线视频网站 | 视频在线播放国产 | 天天射天天操天天干 | 激情婷婷av| 久久久久中文 | 久久精品国产精品亚洲 | 成人免费一级片 | 99性视频| 久久人人爽视频 | 91高清免费 | 成人亚洲免费 | 精品中文字幕在线 | 在线观看视频中文字幕 | 欧美精品999 | 日韩免费不卡视频 | 免费麻豆网站 | 在线播放国产一区二区三区 | 免费观看一级特黄欧美大片 | 看黄色91 | 国产高清在线免费观看 | 808电影免费观看三年 | 国产一级免费在线 | 国产18精品乱码免费看 | 国产专区第一页 | 国产成人av免费在线观看 | 免费观看xxxx9999片 | 国产高清精品在线观看 | 久久精品免费播放 | 久久综合影音 | 国产精品一二三 | 日p在线观看 | 国产黄色在线网站 | 99视频在线免费看 | 91夫妻视频 | 缴情综合网五月天 | 中文字幕色综合网 | 久草在线手机视频 | 亚洲少妇天堂 | 久久久精品国产免费观看同学 | 五月婷婷六月丁香激情 | 极品中文字幕 | 97超碰国产精品 | 亚洲一级免费电影 | 免费在线播放 | 久久资源总站 | 天天操狠狠操 | 亚洲精品视频二区 | 亚洲视频久久 | 久草在线资源观看 | 波多野结衣一区二区 | 国产小视频在线免费观看视频 | 亚洲精品国产精品国产 | 国产一区二区在线观看免费 | 国产伦理一区 | 97成人在线免费视频 | www.在线观看视频 | 91精品高清| 日韩专区在线 | 久久久一本精品99久久精品66 | 激情久久伊人 | 五月花婷婷 | 99免费看片 | 欧美成人中文字幕 | 亚洲精品女人 | 免费观看久久久 | 国产午夜麻豆影院在线观看 | 丁香婷婷深情五月亚洲 | 婷婷丁香激情网 | 国产成a人亚洲精v品在线观看 | 国产成人精品一区二三区 | 欧美天天综合 | 久久久久久亚洲精品 | 欧美性性网| 国产视频在线一区二区 | 日本黄色黄网站 | 国产一区二区三区免费视频 | 午夜免费在线观看 | 亚洲欧美激情精品一区二区 | 亚洲精品国产精品国自产在线 | 亚洲成人动漫在线观看 | 日韩精品免费在线视频 | 日韩在线视频一区二区三区 | 奇米导航| 中文字幕在线不卡国产视频 | 国产1区在线 | 久久天堂亚洲 | 狠狠干我| 黄色网中文字幕 | 日韩高清在线观看 | 天天射天天干天天插 | 美女免费黄视频网站 | 在线综合 亚洲 欧美在线视频 | 亚洲午夜精品久久久久久久久 | 91三级在线观看 | 日本久久电影 | 国产视频精品久久 | 一区二区三区四区在线免费观看 | 日韩网站一区二区 | 91亚洲欧美 | 中文一区二区三区在线观看 | 精品国产乱码久久久久 | 欧美日韩精品久久久 | 1000部国产精品成人观看 | 2021国产在线视频 | 91久久久久久久一区二区 | 久久精品视频2 | 中文字幕免 | 91av视频在线免费观看 | 欧美日韩91 | 午夜私人影院久久久久 | 成人av免费网站 | 中文字幕欧美激情 | av成人在线看 | 狠狠色丁香婷婷综合久小说久 | 欧美色图88 | 精品在线99| 91丨九色丨高潮丰满 | 免费网站黄 | 999视频网| 国产看片 色 | 欧美日本不卡视频 | 亚洲视频99| 欧美大片第1页 | 亚洲精品黄色在线观看 | 日韩电影在线观看一区 | 午夜三级影院 | 99精品视频免费全部在线 | 999免费视频 | 爱爱一区| 欧美精品999| 国产精品18久久久久vr手机版特色 | 99在线精品免费视频九九视 | 国产破处精品 | 亚洲国产中文在线 | 四虎国产视频 | 大胆欧美gogo免费视频一二区 | 麻豆91精品 | 午夜精品久久久久久久久久久久 | 免费看的黄色片 | 成人久久免费视频 | 国产高清免费在线播放 | 一区三区在线欧 | 欧美最新另类人妖 | 在线观看视频在线观看 | 国产剧情一区二区在线观看 | 在线看片视频 | 午夜精品久久久 | 美女免费视频观看网站 | 欧美日韩xxxxx| 国产精品一区二区在线观看 | 免费看日韩 | 久草资源免费 | 性色av免费观看 | 日韩在线电影观看 | 97精品一区二区三区 | 在线观看中文 | 激情黄色av | 国产视频一区在线免费观看 | 欧美日韩一区二区三区在线观看视频 | 激情五月婷婷激情 | 久久一区二区三区国产精品 | 高清一区二区三区 | 成人毛片网| 国产一区二区在线免费观看 | 亚洲成av人影院 | 日本最新一区二区三区 | 岛国av在线 | 久久99这里只有精品 | av资源在线看 | 最新在线你懂的 | 免费观看久久 | 福利视频网址 | 国色综合| 国产在线最新 | 亚洲永久精品国产 | 国产精品嫩草影视久久久 | 91成人免费电影 | 69精品在线观看 | 久日视频| 日韩一二三区不卡 | 日本黄色大片免费看 | 不卡的av片 | 国产精品中文字幕在线 | 免费看一级一片 | 久久人人射 | 国内外成人免费在线视频 | 色久天 | 亚洲视频在线免费观看 | 亚洲成人xxx| 在线免费黄网站 | 九色最新网址 | 日韩午夜小视频 | 一区二区三区日韩视频在线观看 | 日韩欧美视频在线免费观看 | 狠狠夜夜 | 久久久久美女 | 亚洲精品日韩在线观看 | 欧美日韩国产一区二区三区在线观看 | 中文字幕在线观看一区二区 | 日韩午夜一级片 | 日韩av中文在线 | 久久久久久久久久久久久久免费看 | 免费日韩 精品中文字幕视频在线 | 国产精品二区在线观看 | 日韩三级不卡 | 亚州欧美精品 | 最新av在线播放 | 精品国模一区二区 | 97国产在线播放 | 人人爽人人爽人人片av | 69视频网站 | 99国产精品 | 99热.com| 色婷婷综合久久久久中文字幕1 | 成人一级片免费看 | 日本韩国精品一区二区在线观看 | 在线中文字幕视频 | 免费99视频 | 激情偷乱人伦小说视频在线观看 | 免费看黄色91 | 日日摸日日添日日躁av | 日本电影久久 | 一二三区高清 | 国产色就色 | 国产精品免费一区二区 | 狠狠色综合网站久久久久久久 | 日韩免费电影网站 | 精品国产理论片 | 日日夜夜狠狠干 | 亚洲精品乱码久久久久久蜜桃动漫 | 国产在线永久 | 99精品电影| 91精品国产网站 | 国产伦理精品一区二区 | 久久精品亚洲综合专区 | 欧美在线视频不卡 | 婷婷爱五月天 | 深夜精品福利 | 午夜在线免费观看视频 | 日韩午夜一级片 | 日韩中文字幕免费电影 | 亚洲精品小区久久久久久 | 人人射人人射 | 狠狠色丁香婷综合久久 | 亚洲欧美日韩国产一区二区 | 国产成人精品一区二区三区福利 | 日韩av中文字幕在线免费观看 | 国产又粗又长又硬免费视频 | 人人干人人草 | 日韩在线资源 | 日韩中文字 | 国产一区二区精品久久 | 毛片网站在线观看 | 日韩av电影免费在线观看 | 激情动态 | 色多多视频在线 | 超碰在线个人 | 日本视频高清 | 在线观看色视频 | 国产精品99久久99久久久二8 | 在线天堂中文在线资源网 | 亚洲免费在线观看视频 | 一区二区三区免费在线观看视频 | 免费成人黄色av | 丁香5月婷婷 | 国产区高清在线 | 免费在线成人av电影 | 国产精品久久久久一区二区三区共 | 综合久久2023 | 丁香六月av | 国产视频精品久久 | 丁香婷婷深情五月亚洲 | 中文字幕在线观看第一区 | 久久五月天婷婷 | 91精品久久久久久久91蜜桃 | 狠狠色丁香婷婷综合视频 | 麻豆国产网站入口 | 精品在线播放 | 深夜国产福利 | 一区二区三区 亚洲 | 亚洲免费在线播放视频 | 天天操天天干天天摸 | 三上悠亚在线免费 | 久久久久国产a免费观看rela | 米奇影视7777 | 国产精彩视频 | 亚洲性少妇性猛交wwww乱大交 | 99久久久久久久 | 色福利网 | 国产精品少妇 | 日本一区二区三区免费看 | 久久久久成人精品免费播放动漫 | 久久免费视频国产 | 992tv人人草| 欧美激情视频一二三区 | 国产男女爽爽爽免费视频 | 午夜视频一区二区 | 亚洲高清精品在线 | 丝袜美腿在线 | 91精品人成在线观看 | 亚洲色图激情文学 | 国产.精品.日韩.另类.中文.在线.播放 | 伊人伊成久久人综合网小说 | 在线观看久草 | 国产1区在线 | 高清色免费 | av一本久道久久波多野结衣 | 果冻av在线| 精品久久久久久一区二区里番 | 91精品国产自产老师啪 | a√天堂中文在线 | av不卡中文 | 69av视频在线观看 | 亚洲精品乱码久久久久久写真 | 丝袜美腿在线播放 | 婷婷综合网 | 亚洲视频资源在线 | 日韩免费视频在线观看 | 伊人开心激情 | 日本免费一二三区 | 欧美成人h版 | 久久久久免费电影 | 91成人免费在线 | 九九热视频在线免费观看 | 欧日韩在线视频 | 天天操天天舔天天干 | 国产在线p | 97超碰人人澡人人 | 久久国产二区 | 国产小视频免费在线网址 | 精品美女在线视频 | 免费观看黄色12片一级视频 | 久草在线免费看视频 | 麻豆91视频 | 国产中文字幕一区二区 | 国产 视频 久久 | 精品国产资源 | 97视频人人 | 欧美日韩啪啪 | 久久综合色8888| 国产一级在线播放 | 日本激情动作片免费看 | 久久精品视频在线看 | 久久免费成人网 | 欧美性爽爽 | 亚洲老妇xxxxxx | 国产色a在线观看 | 成人高清在线观看 | 中文字幕一区在线观看视频 | 国产黄色精品在线 | 日韩精品久久中文字幕 | www亚洲国产 | 黄色网在线播放 | 91大神一区二区三区 | 午夜精品视频免费在线观看 | 国产精品久久久久久久久久久不卡 | 久久免费精品 | 玖草在线观看 | 日韩二区三区在线 | 超碰在线中文字幕 | 久久免费精品国产 | 人人狠狠综合久久亚洲婷 | 国产精品第2页 | 亚洲精品在线观看免费 | 精品在线一区二区 | 成人三级网站在线观看 | 偷拍精偷拍精品欧洲亚洲网站 | 亚洲视频1 | 99色免费 | 九九九在线观看视频 | 亚洲欧美日韩不卡 | 久久影视一区 | 1024在线看片 | 99色网站 | 久久综合丁香 | 亚洲国产高清在线观看视频 | 麻豆久久精品 | 91最新网址 | 99色婷婷 | 欧美三人交| 婷婷五月在线视频 | 国语对白少妇爽91 | 久操视频在线播放 | 中文字幕在线第一页 | 日本成址在线观看 | 四虎免费在线观看视频 | 国产精品99久久久久久久久久久久 | 又黄又爽免费视频 | 97**国产露脸精品国产 | 久久超碰免费 | 久久综合九色综合欧美就去吻 | 99精品在线免费观看 | 婷婷av在线 | 日韩手机视频 | av先锋中文字幕 | 91麻豆精品国产自产在线 | 美女视频a美女大全免费下载蜜臀 | 在线播放第一页 | 天天摸日日摸人人看 | 日本黄色片一区二区 | 91视频高清完整版 | www.干| 成人亚洲网 | 免费黄色网址网站 | 免费看国产曰批40分钟 | 少妇bbb| 日韩久久久久久久久久久久 | 综合五月婷婷 | 亚洲资源视频 | 最近2019年日本中文免费字幕 | 日韩久久激情 | 69视频网站 | 中文字幕在线播放日韩 | 国精产品999国精产品岳 | 中文字幕 91 | 五月激情婷婷丁香 | 99精品福利视频 | 韩日av在线| 欧美一级小视频 | 亚洲欧美综合精品久久成人 | 大荫蒂欧美视频另类xxxx | 国产精品网站 | 日韩色一区二区三区 | 中文字幕在线乱 | 中文在线字幕免费观看 | 久久伊人热| 黄色官网在线观看 | 日批在线看 | 久久国内免费视频 | 亚洲精品国偷自产在线91正片 | 国产一级视频在线 | 国产流白浆高潮在线观看 | 欧美一区二区三区四区夜夜大片 | 久久综合九色综合97婷婷女人 | 日韩成人邪恶影片 | 欧美乱码精品一区 | 午夜国产福利视频 | 天天干干 | 日韩在线中文字幕 | 在线免费观看国产黄色 | 久久国产免 | 欧美成年人在线视频 | 亚洲精品国产精品国 | 国产资源在线观看 | 久久久精品 | 国产资源精品在线观看 | 99久久久国产精品美女 | 久产久精国产品 | 91麻豆精品国产91久久久久久久久 | 久久久www成人免费精品张筱雨 | 久久高清片 | 久久区二区 | 久久久久久久久久久免费 | 91.dizhi永久地址最新 | 探花视频免费观看 | 国产精品ⅴa有声小说 | 国产这里只有精品 | 欧洲在线免费视频 | 天天爱天天草 | 欧美日韩视频网站 | 成人动漫一区二区 | 久久久久国产成人免费精品免费 | 午夜视频二区 | 色网址99 | 欧美怡红院视频 | 免费黄a| 97精产国品一二三产区在线 | 国内免费久久久久久久久久久 | 成人三级av | 99久久精品久久久久久动态片 | 免费观看十分钟 | 色综合天天狠天天透天天伊人 | 婷婷丁香七月 | 丰满少妇一级片 | 91超在线 | 手机av在线不卡 | 国产免费一区二区三区网站免费 | 懂色av一区二区三区蜜臀 | 国产精品 美女 | 成人蜜桃 | 国产一级精品绿帽视频 | 中文字幕在线看人 | 91看片淫黄大片91 | 免费不卡中文字幕视频 | 久久特级毛片 | 日韩性xxx | 久久看视频 | 午夜精品99久久免费 | 人人爽人人香蕉 | 欧美激情视频免费看 | 91女人18片女毛片60分钟 | 一区二区三区免费在线观看视频 | 西西4444www大胆艺术 | 久草视频在线免费 | 久久午夜精品影院一区 | 成人免费观看完整版电影 | 成人在线免费av | 人人干干人人 | 天天干夜夜夜 | 丰满少妇在线观看 | 97碰在线视频 | 国产精品不卡在线观看 | 久久免费的精品国产v∧ | 国产欧美在线一区二区三区 | 国产高清网站 | 国产黄色播放 | 在线视频 一区二区 | 性色av免费在线观看 | 中文有码在线 | 欧美激情视频一区二区三区免费 | 久久免费精彩视频 | 久久久久久久久久久影院 | 亚州人成在线播放 | 亚洲综合欧美日韩狠狠色 | 99在线热播精品免费99热 | 亚洲成aⅴ人在线观看 | 日韩系列在线观看 | 五月婷婷久草 | 亚洲日本在线一区 | av中文字幕在线电影 | 激情av资源| 日韩av影视 | 欧美a级在线播放 | 国产精品入口66mio女同 | 国产精品一区二区三区在线 | 97在线播放| 国产又粗又猛又黄又爽的视频 | 在线电影a | 九九在线播放 | 久久久精品免费观看 | 成人免费视频网 | 涩涩网站在线播放 | 草久视频在线 | 美女免费网站 | 国产精品乱码久久久久 | 国产手机免费视频 | 午夜精品一区二区三区可下载 | 一区二区精品在线 | 久久视频热 | 天天操夜操 | 久久久久www | 成年人免费在线观看 | 99色在线观看 | 午夜免费福利视频 | 国内精品中文字幕 | 亚洲视频电影在线 | 黄网站色视频 | 国产原创在线 | 国产精品久久久久久五月尺 | 在线观看中文字幕一区二区 | 一本一道久久a久久精品 | 精品嫩模福利一区二区蜜臀 | 天天爱天天操天天射 | 91亚瑟视频| 欧美在线久久 | 99久久99热这里只有精品 | 一级黄色a视频 | 久久精品久久精品久久39 | 亚洲精品美女视频 | 日韩.com | 亚洲区精品| 国产精品久久久久久超碰 | 在线免费观看黄色大片 | 中文字幕在线播放日韩 | 在线天堂v | 日韩一区二区三区高清免费看看 | 热精品 | 国色天香永久免费 | 玖玖视频在线 | 日韩欧美在线综合网 | 免费91在线| 久久九精品| 中文字幕乱码电影 | 91亚色视频在线观看 | 亚洲成av人影片在线观看 | 蜜臀精品久久久久久蜜臀 | 九月婷婷综合网 | 六月丁香在线观看 | 午夜在线日韩 | 日韩在线观看影院 | 伊人午夜视频 | 人人爽人人做 | 日日夜夜91 | 亚洲日本欧美 | 精品国产一区二区三区久久久 | 亚洲电影自拍 | 国产福利久久 | 永久黄网站色视频免费观看w | 欧美激情精品 | 久久久久久欧美二区电影网 | 亚洲男男gⅴgay双龙 | 国产91亚洲| 日韩高清在线看 | 最近中文字幕国语免费av | 人人cao | 97操操操 | 欧美亚洲一区二区在线 | 中文字幕一区在线观看视频 | 亚洲欧美视频 | 97香蕉超级碰碰久久免费软件 | 91精品国产综合久久婷婷香蕉 | 在线观看av免费观看 | 国产在线观看99 | 欧美日韩1区 | 91成人精品视频 | 国产黄a三级三级三级三级三级 | 色视频在线看 | 亚洲精品456在线播放乱码 | 丁香激情五月 | 超碰日韩 | 久久国产精品系列 | 国产精品18久久久久久vr | 丁香在线视频 | 成全免费观看视频 | 夜夜操网站 | 色视频网页 | 99久热在线精品视频 | 免费毛片一区二区三区久久久 | 激情网站 | 精品国产一区二区三区不卡 | 二区视频在线 | 最近日本韩国中文字幕 | 天堂av在线中文在线 | av中文字幕不卡 | 亚洲精品在线视频 | 久久久国产一区二区三区四区小说 | 久久99久久99免费视频 | 综合在线色 | 91视频 - 114av | 欧美专区国产专区 | 超碰在线官网 | 99se视频在线观看 | 97偷拍在线视频 | 日韩网页 | 中文字幕日本特黄aa毛片 | 日本中文字幕网 | 国产亚洲精品久久久久久久久久 | 欧美黑人xxxx猛性大交 | 亚洲视频 视频在线 | 高清av免费一区中文字幕 | 人人干天天射 | 亚洲免费成人av电影 | 国产麻豆精品久久一二三 | 日韩久久精品一区二区 | 久草在线高清视频 | 首页国产精品 | 在线看v片成人 | 狠狠躁夜夜躁人人爽超碰91 | 91福利影院在线观看 | 在线观看911视频 | 视频一区二区视频 | 99热播精品 | 六月丁香伊人 | 狠狠狠色 | 国产精品中文久久久久久久 | av电影中文字幕 | 成人亚洲网 | 国产精品99蜜臀久久不卡二区 | 久久精品国产精品亚洲 | 国产精品私人影院 | 欧美99精品| 一区二区三区在线看 | 亚洲 综合 国产 精品 | 亚洲男男gⅴgay双龙 | 色婷婷久久久综合中文字幕 | 国产成人精品综合久久久 | 免费的国产精品 | 日韩精品亚洲专区在线观看 | 欧美与欧洲交xxxx免费观看 | 最近日本中文字幕a | 欧美色综合久久 | 99在线观看 | 久久久久久久久亚洲精品 | 国产精品www | 一级黄色片在线免费看 | 99福利片| 热久久视久久精品18亚洲精品 | 精品在线亚洲视频 | 成人午夜电影在线观看 | 日韩av男人的天堂 | 日日干精品| 国语麻豆 | 日本黄色免费电影网站 | 久久久亚洲网站 | 免费一级片久久 | 欧美精品中文 | 国产视频资源在线观看 | 国产精品嫩草影视久久久 | 国产亚洲精品久久久久久无几年桃 | 中文区中文字幕免费看 | 久草免费色站 | 日韩性久久 | 国产亚洲婷婷 | 一区二区三区动漫 | 久久国产欧美日韩 | 97人人射| 国产69精品久久99的直播节目 | 97超碰在线人人 | 色婷婷综合视频在线观看 | 午夜精品一区二区三区免费视频 | 91亚洲欧美| www.伊人色.com | 999视频在线观看 | 96视频在线 | 国产精品免费在线播放 | 五月婷婷综合激情网 | 成人a视频在线观看 | 国产黄大片在线观看 | 日韩在线色| 麻花豆传媒mv在线观看网站 | 亚洲 欧美 国产 va在线影院 | 国产无遮挡猛进猛出免费软件 |