<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Decode360's Blog

    業(yè)精于勤而荒于嬉 QQ:150355677 MSN:decode360@hotmail.com

      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 ::  :: 管理 ::
      397 隨筆 :: 33 文章 :: 29 評論 :: 0 Trackbacks
    Oracle中的進制轉(zhuǎn)換
    ?
    ??? 本文通過創(chuàng)建一個Oracle的各種進制之間的轉(zhuǎn)換函數(shù)包,來了解一下Oracle的Package、Procdure、Function、Type等等元素的基本特性,以及這些元素之間的相互關(guān)系。不過最值得借鑒的還是這個包的作者的編碼習(xí)慣,這的是非常賞心悅目的一段代碼啊,包括注釋結(jié)構(gòu)也很美。注:實例來源于網(wǎng)絡(luò),我能夠找到的網(wǎng)址是:http://www.laozizhu.com/view-Oracle%E9%87%8C%E4%BA%8C%E8%BF%9B%E5%88%B6%E3%80%81%E5%85%AB%E8%BF%9B%E5%88%B6%E3%80%81%E5%8D%81%E8%BF%9B%E5%88%B6%E3%80%81%E5%8D%81%E5%85%AD%E8%BF%9B%E5%88%B6%E4%B9%8B%E9%97%B4%E7%9A%84%E4%BA%92%E7%9B%B8%E8%BD%AC%E6%8D%A2-18961.htm (汗,好長的漢字網(wǎng)址……)
    ?
    ?
    Oracle里二進制、八進制、十進制、十六進制之間的互相轉(zhuǎn)換

    --各進制之間轉(zhuǎn)換

    CREATE OR REPLACE TYPE type_str_agg AS OBJECT
    (
    total VARCHAR2(4000),
    ?
    STATIC FUNCTION odciaggregateinitialize(sctx IN OUT type_str_agg)
    RETURN NUMBER,
    ?
    MEMBER FUNCTION odciaggregateiterate
    (
    SELF IN OUT type_str_agg,
    VALUE IN VARCHAR2
    ) RETURN NUMBER,
    ?
    MEMBER FUNCTION odciaggregateterminate
    (
    SELF IN type_str_agg,
    returnvalue OUT VARCHAR2,
    flags IN NUMBER
    ) RETURN NUMBER,
    ?
    MEMBER FUNCTION odciaggregatemerge
    (
    SELF IN OUT type_str_agg,
    ctx2 IN type_str_agg
    ) RETURN NUMBER
    )
    /

    CREATE OR REPLACE TYPE BODY type_str_agg IS
    ?
    STATIC FUNCTION odciaggregateinitialize(sctx IN OUT type_str_agg)
    RETURN NUMBER IS
    BEGIN
    sctx := type_str_agg(NULL);
    RETURN odciconst.success;
    END;
    ?
    MEMBER FUNCTION odciaggregateiterate
    (
    SELF IN OUT type_str_agg,
    VALUE IN VARCHAR2
    ) RETURN NUMBER IS

    BEGIN
    SELF.total := SELF.total || VALUE;
    RETURN odciconst.success;
    END;
    ?
    MEMBER FUNCTION odciaggregateterminate
    (
    SELF IN type_str_agg,
    returnvalue OUT VARCHAR2,
    flags IN NUMBER
    ) RETURN NUMBER IS
    BEGIN
    returnvalue := SELF.total;
    RETURN odciconst.success;
    END;
    ?
    MEMBER FUNCTION odciaggregatemerge
    (
    SELF IN OUT type_str_agg,
    ctx2 IN type_str_agg
    ) RETURN NUMBER IS
    BEGIN
    SELF.total := SELF.total || ctx2.total;
    RETURN odciconst.success;
    END;
    ?
    END;
    /
    ?
    ?
    ?
    ?
    ?

    CREATE OR REPLACE FUNCTION f_stragg(p_input VARCHAR2) RETURN VARCHAR2
    PARALLEL_ENABLE
    AGGREGATE USING type_str_agg;
    /

    CREATE OR REPLACE PACKAGE pkg_number_trans IS
    ?
    FUNCTION f_bin_to_oct(p_str IN VARCHAR2) RETURN VARCHAR2;
    ?
    FUNCTION f_bin_to_dec(p_str IN VARCHAR2) RETURN VARCHAR2;
    ?
    FUNCTION f_bin_to_hex(p_str IN VARCHAR2) RETURN VARCHAR2;
    ?
    FUNCTION f_oct_to_bin(p_str IN VARCHAR2) RETURN VARCHAR2;
    ?
    FUNCTION f_oct_to_dec(p_str IN VARCHAR2) RETURN VARCHAR2;
    ?
    FUNCTION f_oct_to_hex(p_str IN VARCHAR2) RETURN VARCHAR2;
    ?
    FUNCTION f_hex_to_bin(p_str IN VARCHAR2) RETURN VARCHAR2;
    ?
    FUNCTION f_hex_to_oct(p_str IN VARCHAR2) RETURN VARCHAR2;
    ?
    FUNCTION f_hex_to_dec(p_str IN VARCHAR2) RETURN VARCHAR2;
    ?
    FUNCTION f_dec_to_bin(p_int IN VARCHAR2) RETURN VARCHAR2;
    ?
    FUNCTION f_dec_to_oct(p_int IN VARCHAR2) RETURN VARCHAR2;
    ?
    FUNCTION f_dec_to_hex(p_int IN VARCHAR2) RETURN VARCHAR2;
    ?
    END pkg_number_trans;
    /
    CREATE OR REPLACE PACKAGE BODY pkg_number_trans IS
    ?

    FUNCTION f_bin_to_oct(p_str IN VARCHAR2) RETURN VARCHAR2 IS
    ----------------------------------------------------------------------------------------------------------------------
    -- 對象名稱: f_bin_to_oct
    -- 對象描述: 二進制轉(zhuǎn)換八進制
    -- 輸入?yún)?shù): p_str 二進制字符串
    -- 返回結(jié)果: 八進制字符串
    -- 測試用例: SELECT pkg_number_trans.f_bin_to_oct('11110001010') FROM dual;
    -- 備 注: 需要定義f_stragg函數(shù)和type_str_agg類型
    ----------------------------------------------------------------------------------------------------------------------
    v_return VARCHAR2(4000);
    v_bin VARCHAR2(4000);
    BEGIN
    v_bin := substr('00' || p_str, -3 * ceil(length(p_str) / 3));
    SELECT f_stragg(data1) INTO v_return
    FROM (SELECT (CASE upper(substr(v_bin, (rownum - 1) * 3 + 1, 3))
    WHEN '000' THEN '0'
    WHEN '001' THEN '1'
    WHEN '010' THEN '2'
    WHEN '011' THEN '3'
    WHEN '100' THEN '4'
    WHEN '101' THEN '5'
    WHEN '110' THEN '6'
    WHEN '111' THEN '7'
    END) data1
    FROM dual
    CONNECT BY rownum <= length(v_bin) / 3);
    RETURN v_return;
    EXCEPTION
    WHEN OTHERS THEN
    RETURN NULL;
    END f_bin_to_oct;
    ?
    FUNCTION f_bin_to_dec(p_str IN VARCHAR2) RETURN VARCHAR2 IS
    ----------------------------------------------------------------------------------------------------------------------
    -- 對象名稱: f_bin_to_dec
    -- 對象描述: 二進制轉(zhuǎn)換十進制
    -- 輸入?yún)?shù): p_str 二進制字符串
    -- 返回結(jié)果: 十進制字符串
    -- 測試用例: SELECT pkg_number_trans.f_bin_to_dec('11110001010') FROM dual;
    ----------------------------------------------------------------------------------------------------------------------
    v_return VARCHAR2(4000);
    BEGIN
    SELECT SUM(data1) INTO v_return
    FROM (SELECT substr(p_str, rownum, 1) * power(2, length(p_str) - rownum) data1
    FROM dual
    CONNECT BY rownum <= length(p_str));
    RETURN v_return;
    EXCEPTION
    WHEN OTHERS THEN
    RETURN NULL;
    END f_bin_to_dec;
    ?
    FUNCTION f_bin_to_hex(p_str IN VARCHAR2) RETURN VARCHAR2 IS
    ----------------------------------------------------------------------------------------------------------------------
    -- 對象名稱: f_bin_to_hex
    -- 對象描述: 二進制轉(zhuǎn)換十六進制
    -- 輸入?yún)?shù): p_str 二進制字符串
    -- 返回結(jié)果: 十六進制字符串
    -- 測試用例: SELECT pkg_number_trans.f_bin_to_oct('11110001010') FROM dual;
    -- 備 注: 需要定義f_stragg函數(shù)和type_str_agg類型
    ----------------------------------------------------------------------------------------------------------------------
    v_return VARCHAR2(4000);
    v_bin VARCHAR2(4000);
    BEGIN
    v_bin := substr('000' || p_str, -4 * ceil(length(p_str) / 4));
    SELECT f_stragg(data1) INTO v_return
    FROM (SELECT (CASE upper(substr(v_bin, (rownum - 1) * 4 + 1, 4))
    WHEN '0000' THEN '0'
    WHEN '0001' THEN '1'
    WHEN '0010' THEN '2'
    WHEN '0011' THEN '3'
    WHEN '0100' THEN '4'
    WHEN '0101' THEN '5'
    WHEN '0110' THEN '6'
    WHEN '0111' THEN '7'
    WHEN '1000' THEN '8'
    WHEN '1001' THEN '9'
    WHEN '1010' THEN 'A'
    WHEN '1011' THEN 'B'
    WHEN '1100' THEN 'C'
    WHEN '1101' THEN 'D'
    WHEN '1110' THEN 'E'
    WHEN '1111' THEN 'F'
    END) data1
    FROM dual
    CONNECT BY rownum <= length(v_bin) / 4);
    RETURN v_return;
    EXCEPTION
    WHEN OTHERS THEN
    RETURN NULL;
    END f_bin_to_hex;
    ?

    FUNCTION f_oct_to_bin(p_str IN VARCHAR2) RETURN VARCHAR2 IS
    ----------------------------------------------------------------------------------------------------------------------
    -- 對象名稱: f_oct_to_bin
    -- 對象描述: 八進制轉(zhuǎn)換二進制
    -- 輸入?yún)?shù): p_str 八進制字符串
    -- 返回結(jié)果: 二進制字符串
    -- 測試用例: SELECT pkg_number_trans.f_oct_to_bin('3612') FROM dual;
    -- 備 注: 需要定義f_stragg函數(shù)和type_str_agg類型
    ----------------------------------------------------------------------------------------------------------------------
    v_return VARCHAR2(4000);
    BEGIN
    SELECT to_char(to_number(f_stragg(data1))) INTO v_return
    FROM (SELECT (CASE upper(substr(p_str, rownum, 1))
    WHEN '0' THEN '000'
    WHEN '1' THEN '001'
    WHEN '2' THEN '010'
    WHEN '3' THEN '011'
    WHEN '4' THEN '100'
    WHEN '5' THEN '101'
    WHEN '6' THEN '110'
    WHEN '7' THEN '111'
    END) data1
    FROM dual
    CONNECT BY rownum <= length(p_str));
    RETURN v_return;
    EXCEPTION
    WHEN OTHERS THEN
    RETURN NULL;
    END f_oct_to_bin;
    ?
    FUNCTION f_oct_to_dec(p_str IN VARCHAR2) RETURN VARCHAR2 IS
    ----------------------------------------------------------------------------------------------------------------------
    -- 對象名稱: f_oct_to_dec
    -- 對象描述: 八進制轉(zhuǎn)換十進制
    -- 輸入?yún)?shù): p_str 八進制字符串
    -- 返回結(jié)果: 十進制字符串
    -- 測試用例: SELECT pkg_number_trans.f_oct_to_dec('3612') FROM dual;
    ----------------------------------------------------------------------------------------------------------------------
    v_return VARCHAR2(4000);
    BEGIN
    SELECT SUM(data1) INTO v_return
    FROM (SELECT substr(p_str, rownum, 1) * power(8, length(p_str) - rownum) data1
    FROM dual
    CONNECT BY rownum <= length(p_str));
    RETURN v_return;
    EXCEPTION
    WHEN OTHERS THEN
    RETURN NULL;
    END f_oct_to_dec;
    ?
    FUNCTION f_oct_to_hex(p_str IN VARCHAR2) RETURN VARCHAR2 IS
    ----------------------------------------------------------------------------------------------------------------------
    -- 對象名稱: f_oct_to_bin
    -- 對象描述: 八進制轉(zhuǎn)換十六進制
    -- 輸入?yún)?shù): p_str 八進制字符串
    -- 返回結(jié)果: 十六進制字符串
    -- 測試用例: SELECT pkg_number_trans.f_oct_to_hex('3612') FROM dual;
    ----------------------------------------------------------------------------------------------------------------------
    v_return VARCHAR2(4000);
    v_bin VARCHAR2(4000);
    BEGIN
    SELECT pkg_number_trans.f_oct_to_bin(p_str) INTO v_bin FROM dual;
    SELECT pkg_number_trans.f_bin_to_hex(v_bin) INTO v_return FROM dual;
    RETURN v_return;
    EXCEPTION
    WHEN OTHERS THEN
    RETURN NULL;
    END f_oct_to_hex;
    ?
    FUNCTION f_dec_to_bin(p_int IN VARCHAR2) RETURN VARCHAR2 IS
    ----------------------------------------------------------------------------------------------------------------------
    -- 對象名稱: f_dec_to_bin
    -- 對象描述: 十進制轉(zhuǎn)換二進制
    -- 輸入?yún)?shù): p_str 十進制字符串
    -- 返回結(jié)果: 二進制字符串
    -- 測試用例: SELECT pkg_number_trans.f_dec_to_bin('1930') FROM dual;
    ----------------------------------------------------------------------------------------------------------------------
    v_return VARCHAR2(4000);
    v_hex VARCHAR2(4000);
    BEGIN
    SELECT pkg_number_trans.f_dec_to_hex(p_int) INTO v_hex FROM dual;
    SELECT pkg_number_trans.f_hex_to_bin(v_hex) INTO v_return FROM dual;
    RETURN v_return;
    EXCEPTION
    WHEN OTHERS THEN
    RETURN NULL;
    END f_dec_to_bin;
    FUNCTION f_dec_to_oct(p_int IN VARCHAR2) RETURN VARCHAR2 IS
    ----------------------------------------------------------------------------------------------------------------------
    -- 對象名稱: f_dec_to_oct
    -- 對象描述: 十進制轉(zhuǎn)換八進制
    -- 輸入?yún)?shù): p_str 十進制字符串
    -- 返回結(jié)果: 八進制字符串
    -- 測試用例: SELECT pkg_number_trans.f_dec_to_oct('1930') FROM dual;
    ----------------------------------------------------------------------------------------------------------------------
    v_return VARCHAR2(4000);
    v_bin VARCHAR2(4000);
    BEGIN
    SELECT pkg_number_trans.f_dec_to_bin(p_int) INTO v_bin FROM dual;
    v_bin := substr('00' || v_bin, -3 * ceil(length(v_bin) / 3));
    SELECT f_stragg(data1) INTO v_return
    FROM (SELECT (CASE upper(substr(v_bin, (rownum - 1) * 3 + 1, 3))
    WHEN '000' THEN '0'
    WHEN '001' THEN '1'
    WHEN '010' THEN '2'
    WHEN '011' THEN '3'
    WHEN '100' THEN '4'
    WHEN '101' THEN '5'
    WHEN '110' THEN '6'
    WHEN '111' THEN '7'
    END) data1
    FROM dual
    CONNECT BY rownum <= length(v_bin) / 3);
    RETURN v_return;
    EXCEPTION
    WHEN OTHERS THEN
    RETURN NULL;
    END f_dec_to_oct;
    ?
    FUNCTION f_dec_to_hex(p_int IN VARCHAR2) RETURN VARCHAR2 IS
    ----------------------------------------------------------------------------------------------------------------------
    -- 對象名稱: f_dec_to_oct
    -- 對象描述: 十進制轉(zhuǎn)換十六進制
    -- 輸入?yún)?shù): p_str 十進制字符串
    -- 返回結(jié)果: 十六進制字符串
    -- 測試用例: SELECT pkg_number_trans.f_dec_to_hex('1930') FROM dual;
    ----------------------------------------------------------------------------------------------------------------------
    v_return VARCHAR2(4000);
    BEGIN
    SELECT upper(TRIM(to_char(p_int, 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'))) INTO v_return FROM dual;
    RETURN v_return;
    EXCEPTION
    WHEN OTHERS THEN
    RETURN NULL;
    END f_dec_to_hex;
    ?
    FUNCTION f_hex_to_bin(p_str IN VARCHAR2) RETURN VARCHAR2 IS
    ----------------------------------------------------------------------------------------------------------------------
    -- 對象名稱: f_dec_to_oct
    -- 對象描述: 十六進制轉(zhuǎn)換二進制
    -- 輸入?yún)?shù): p_str 十六進制字符串
    -- 返回結(jié)果: 二進制字符串
    -- 測試用例: SELECT pkg_number_trans.f_hex_to_oct('78A') FROM dual;
    ----------------------------------------------------------------------------------------------------------------------
    v_return VARCHAR2(4000);
    BEGIN
    SELECT to_char(to_number(f_stragg(data1))) INTO v_return
    FROM (SELECT (CASE upper(substr(p_str, rownum, 1))
    WHEN '0' THEN '0000'
    WHEN '1' THEN '0001'
    WHEN '2' THEN '0010'
    WHEN '3' THEN '0011'
    WHEN '4' THEN '0100'
    WHEN '5' THEN '0101'
    WHEN '6' THEN '0110'
    WHEN '7' THEN '0111'
    WHEN '8' THEN '1000'
    WHEN '9' THEN '1001'
    WHEN 'A' THEN '1010'
    WHEN 'B' THEN '1011'
    WHEN 'C' THEN '1100'
    WHEN 'D' THEN '1101'
    WHEN 'E' THEN '1110'
    WHEN 'F' THEN '1111'
    END) data1
    FROM dual
    CONNECT BY rownum <= length(p_str));
    RETURN v_return;
    EXCEPTION
    WHEN OTHERS THEN
    RETURN NULL;
    END f_hex_to_bin;
    ?
    FUNCTION f_hex_to_oct(p_str IN VARCHAR2) RETURN VARCHAR2 IS
    ----------------------------------------------------------------------------------------------------------------------
    -- 對象名稱: f_dec_to_oct
    -- 對象描述: 十六進制轉(zhuǎn)換八進制
    -- 輸入?yún)?shù): p_str 十六進制字符串
    -- 返回結(jié)果: 八進制字符串
    -- 測試用例: SELECT pkg_number_trans.f_hex_to_oct('78A') FROM dual;
    ----------------------------------------------------------------------------------------------------------------------
    v_return VARCHAR2(4000);
    v_bin VARCHAR2(4000);
    BEGIN
    SELECT pkg_number_trans.f_hex_to_bin(p_str) INTO v_bin FROM dual;
    SELECT pkg_number_trans.f_bin_to_oct(v_bin) INTO v_return FROM dual;
    RETURN v_return;
    EXCEPTION
    WHEN OTHERS THEN
    RETURN NULL;
    END f_hex_to_oct;
    ?
    FUNCTION f_hex_to_dec(p_str IN VARCHAR2) RETURN VARCHAR2 IS
    ----------------------------------------------------------------------------------------------------------------------
    -- 對象名稱: f_hex_to_dec
    -- 對象描述: 十六進制轉(zhuǎn)換十進制
    -- 輸入?yún)?shù): p_str 十六進制字符串
    -- 返回結(jié)果: 十進制字符串
    -- 測試用例: SELECT pkg_number_trans.f_hex_to_dec('78A') FROM dual;
    ----------------------------------------------------------------------------------------------------------------------
    v_return VARCHAR2(4000);
    BEGIN
    SELECT SUM(data1) INTO v_return
    FROM (SELECT (CASE upper(substr(p_str, rownum, 1))
    WHEN 'A' THEN '10'
    WHEN 'B' THEN '11'
    WHEN 'C' THEN '12'
    WHEN 'D' THEN '13'
    WHEN 'E' THEN '14'
    WHEN 'F' THEN '15'
    ELSE substr(p_str, rownum, 1)
    END) * power(16, length(p_str) - rownum) data1
    FROM dual
    CONNECT BY rownum <= length(p_str));
    RETURN v_return;
    EXCEPTION
    WHEN OTHERS THEN
    RETURN NULL;
    END f_hex_to_dec;
    ?
    END pkg_number_trans;
    /
    ?
    ?
    ?
    ?
    ?
    ?
    另外再轉(zhuǎn)一篇比較簡單的做法:
    ---------------------------------------------------------------------------------
    http://www.wangchao.net.cn/bbsdetail_1775191.html
    ?
    ?
    進制轉(zhuǎn)換是開發(fā)中經(jīng)常需要用到的,本文簡單介紹幾種常用的進制轉(zhuǎn)化方法.

    一 16進制轉(zhuǎn)換為10進制

      可以通過to_number函數(shù)實現(xiàn)
      SQL> select to_number(’19f’,’xxx’) from dual;
      TO_NUMBER(’19F’,’XXX’)
      ----------------------
      415
      SQL> select to_number(’f’,’xx’) from dual;
      TO_NUMBER(’F’,’XX’)
      -------------------
      15
    二 10進制轉(zhuǎn)換為16進制

      可以通過to_char函數(shù)轉(zhuǎn)換
      SQL> select to_char(123,’xxx’) from dual;
      TO_C
      ----
      7b
      SQL> select to_char(4567,’xxxx’) from dual;
      TO_CH
      -----
      11d7
    三 2進制轉(zhuǎn)換為10進制

      從Oracle9i開始,提供函數(shù)bin_to_num進行2進制到10進制的轉(zhuǎn)換
      SQL> select bin_to_num(1,1,0,1) a,bin_to_num(1,0) b from dual;
      A ??? B
      ----- ----------
      13 ?? 2
      SQL> select bin_to_num(1,1,1,0,1) from dual;
      BIN_TO_NUM(1,1,1,0,1)
      ---------------------
      29
    四 通過自定義函數(shù)實現(xiàn)進制轉(zhuǎn)換
      以下函數(shù)來自AskTom網(wǎng)站,是Tom給出的例子,供參考:
      create or replace function to_base( p_dec in number, p_base in number )
      return varchar2
      is
      l_str varchar2(255) default NULL;
      l_num number default p_dec;
      l_hex varchar2(16) default ’0123456789ABCDEF’;
      begin
      if ( trunc(p_dec) <> p_dec OR p_dec < 0 ) then
      raise PROGRAM_ERROR;
      end if;
      loop
      l_str := substr( l_hex, mod(l_num,p_base)+1, 1 ) l_str;
      l_num := trunc( l_num/p_base );
      exit when ( l_num = 0 );
      end loop;
      return l_str;
      end to_base;
      /
      create or replace function to_dec
      ( p_str in varchar2,
      p_from_base in number default 16 ) return number
      is
      l_num number default 0;
      l_hex varchar2(16) default ’0123456789ABCDEF’;
      begin
      for i in 1 .. length(p_str) loop
      l_num := l_num * p_from_base + instr(l_hex,upper(substr(p_str,i,1)))-1;
      end loop;
      return l_num;
      end to_dec;
      /
      show errors
      create or replace function to_hex( p_dec in number ) return varchar2
      is
      begin
      return to_base( p_dec, 16 );
      end to_hex;
      /
      create or replace function to_bin( p_dec in number ) return varchar2
      is
      begin
      return to_base( p_dec, 2 );
      end to_bin;
      /
      create or replace function to_oct( p_dec in number ) return varchar2
      is
      begin
      return to_base( p_dec, 8 );
      end to_oct;
      /
    ?
    posted on 2009-07-02 22:15 decode360 閱讀(1438) 評論(0)  編輯  收藏 所屬分類: 07.Oracle
    主站蜘蛛池模板: 亚洲第一页在线播放| 青青草国产免费国产是公开 | 国产在线国偷精品免费看| 亚洲国产高清人在线| 日本免费福利视频| 国产成人无码区免费网站| 亚洲av无码专区在线| 亚洲精品国产精品乱码不卡| 色欲国产麻豆一精品一AV一免费 | 亚洲精品和日本精品| 一级毛片全部免费播放| 亚洲色偷偷色噜噜狠狠99| 国产亚洲精品精华液| 欧美a级成人网站免费| 国产三级在线免费观看| 亚洲av成人一区二区三区| 中文字幕亚洲一区二区三区 | 亚洲乳大丰满中文字幕| 午夜免费福利网站| 一级毛片在线观看免费| 一级女性全黄久久生活片免费| 亚洲毛片无码专区亚洲乱| 亚洲性久久久影院| 日韩一区二区免费视频| 69影院毛片免费观看视频在线 | 久久这里只精品热免费99| 国产精品久久久久久亚洲小说| 亚洲网址在线观看你懂的| 亚洲精品麻豆av| 午夜色a大片在线观看免费| 四虎成人精品永久免费AV| 亚洲免费在线观看| 亚洲av无码有乱码在线观看| 亚洲免费视频网站| 国产亚洲精品AA片在线观看不加载| 卡1卡2卡3卡4卡5免费视频| 免费成人激情视频| 久久国产精品免费专区| 成在线人免费无码高潮喷水| 噜噜噜亚洲色成人网站| 亚洲高清一区二区三区电影|