国产无遮挡裸体免费直播视频,久久精品国产蜜臀av,动漫在线视频一区二区,欧亚日韩一区二区三区,久艹在线 免费视频,国产精品美女网站免费,正在播放 97超级视频在线观看,斗破苍穹年番在线观看免费,51最新乱码中文字幕

Oracle導(dǎo)出excel數(shù)據(jù)

 更新時間:2016年03月15日 11:26:59   作者:mellowsmile  
oracle導(dǎo)出excel(非csv)的方法有兩種,1、使用sqlplus spool,2、使用包體,接下來通過本文給大家介紹Oracle導(dǎo)出excel數(shù)據(jù),需要的朋友參考下

推薦閱讀Oracle讀取excel數(shù)據(jù)

oracle導(dǎo)出excel(非csv)的方法有兩種,1、使用sqlplus spool,2、使用包體

現(xiàn)將網(wǎng)上相關(guān)代碼整理后貼出以備不時之需:

使用sqlplus:

使用sqlplus需要兩個文件:sql腳本文件和格式設(shè)置文件。

去除冗余信息,main.sql

--main.sql 注意,需要在sqlplus下運行 非plsql命令行下
set linesize 200
set term off verify off feedback off pagesize 999 
set markup html on entmap ON spool on preformat off
spool test_tables.xls
@get_tables.sql
spool off
exit 

sql腳本,get_tables.sql

--get_tables.sql
select * from all_objects where rownum<=1000; 

然后在sqlplus下運行main.sql

使用包體編程:

create or replace package smt_xlsx_maker_pkg is

/******************************************************************************
NAME: SMT_XLSX_MAKER_PKG
PURPOSE: XLSX 生成 Pkg,主要是從Oracle數(shù)據(jù)庫端生成Xlsx二進制的文件。

REVISIONS:
Ver Date Author Description
--------- ---------- --------------- ------------------------------------
1.0 2011/2/19 Anton Scheffer 1,New Create the pkg
1.1 2015/6/10 Sam.T 1.優(yōu)化核心處理生成xlsx的代碼,使得生成文檔的執(zhí)行效率大大提高!
1.1 2015/6/10 Sam.T 1.query2sheet增加綁定變量的可選輸入?yún)?shù)。
1.2 2015/6/15 Sam.T 1.代碼增加調(diào)試模式。直接設(shè)置G_DEBUG_MODE變量即可。
1.2 2015/6/20 Sam.T 1.為方便使用,再次封裝一些簡單易用的過程,生成xlsx文檔
1.2 2015/7/5 Sam.T 1.單條SQL生成xlsx文檔的內(nèi)容,增加是否顯示foot,以及顯示的行數(shù)。
jinzhao 解決數(shù)據(jù)量較大情況下導(dǎo)出excel報錯xml的問題。將dbms_lob.writeappend修改為dbms_lob.append
******************************************************************************/
---------
/**********************************************
******************************************************************************
Copyright (C) 2011, 2012 by Anton Scheffer
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

******************************************************************************
******************************************** */
/*

使用方法:

declare
l_sql varchar2(30000);
begin
l_sql := 'select * from all_objects';
smt_xlsx_maker_pkg.query2sheet(l_sql,
true,
'XLS_DIR',
'Export2.xlsx');
end;

除此之外,基本上Excel 中有的效果它都可以生成。
以下一個例子,包括居中,合并單元格,底色,新增工作表等:

begin

smt_xlsx_maker_pkg.clear_workbook;
smt_xlsx_maker_pkg.new_sheet;
smt_xlsx_maker_pkg.cell(5, 1, 5);
smt_xlsx_maker_pkg.cell(3, 1, 3);
smt_xlsx_maker_pkg.cell(2, 2, 45);
smt_xlsx_maker_pkg.cell(3,
2,
'Anton Scheffer',
p_alignment => smt_xlsx_maker_pkg.get_alignment(p_wraptext => true));
smt_xlsx_maker_pkg.cell(1,
4,
sysdate,
p_fontid => smt_xlsx_maker_pkg.get_font('Calibri',
p_rgb => 'FFFF0000'));
smt_xlsx_maker_pkg.cell(2,
4,
sysdate,
p_numfmtid => smt_xlsx_maker_pkg.get_numfmt('dd/mm/yyyy h:mm'));
smt_xlsx_maker_pkg.cell(3,
4,
sysdate,
p_numfmtid => smt_xlsx_maker_pkg.get_numfmt(smt_xlsx_maker_pkg.orafmt2excel('dd/mon/yyyy')));
smt_xlsx_maker_pkg.cell(5,
5,
75,
p_borderid => smt_xlsx_maker_pkg.get_border('double',
'double',
'double',
'double'));
smt_xlsx_maker_pkg.cell(2, 3, 33);
smt_xlsx_maker_pkg.hyperlink(1,
6,
'http://www.cnblogs.com/mellowsmile',
'jinzhao site');
smt_xlsx_maker_pkg.cell(1,
7,
'Some merged cells',
p_alignment => smt_xlsx_maker_pkg.get_alignment(p_horizontal => 'center'));
smt_xlsx_maker_pkg.mergecells(1, 7, 3, 7);
for i in 1 .. 5 loop
smt_xlsx_maker_pkg.comment(3, i + 3, 'Row ' || (i + 3), 'Anton');
end loop;
smt_xlsx_maker_pkg.new_sheet;
smt_xlsx_maker_pkg.set_row(1,
p_fillid => smt_xlsx_maker_pkg.get_fill('solid',
'FFFF0000'));
for i in 1 .. 5 loop
smt_xlsx_maker_pkg.cell(1, i, i);
smt_xlsx_maker_pkg.cell(2, i, i * 3);
smt_xlsx_maker_pkg.cell(3, i, 'x ' || i * 3);
end loop;
smt_xlsx_maker_pkg.query2sheet('select rownum, x.*
, case when mod( rownum, 2 ) = 0 then rownum * 3 end demo
, case when mod( rownum, 2 ) = 1 then ''demo '' || rownum end demo2 from dual x connect by rownum <= 5');
smt_xlsx_maker_pkg.save('XLS_DIR', 'Export3.xlsx');
end;
*/
g_debug_mode boolean := false;
---DBMS_OUTPUT直接輸出/FILE_OUTPUT文檔輸出/REQUEST_OUTPUT請求日志輸出/CONTEXT_OUTPUT 將日志改為上下文輸出
g_debug_type varchar2(240) := 'DBMS_OUTPUT';
---綁定變量用的臨時表變量
type rec_col_value is record(
col_id number(3),
col_value varchar2(2400));
type tab_col_value is table of rec_col_value index by binary_integer;
--
type tp_alignment is record(
vertical varchar2(11),
horizontal varchar2(16),
wraptext boolean);
--
procedure clear_workbook;
--
procedure new_sheet(p_sheetname varchar2 := null);
--
function orafmt2excel(p_format varchar2 := null) return varchar2;
--
function get_numfmt(p_format varchar2 := null) return pls_integer;
--
function get_font(p_name varchar2,
p_family pls_integer := 2,
p_fontsize number := 11,
p_theme pls_integer := 1,
p_underline boolean := false,
p_italic boolean := false,
p_bold boolean := false,
p_rgb varchar2 := null -- this is a hex ALPHA Red Green Blue value
) return pls_integer;
--
function get_fill(p_patterntype varchar2,
p_fgrgb varchar2 := null -- this is a hex ALPHA Red Green Blue value
) return pls_integer;
--
function get_border(p_top varchar2 := 'thin',
p_bottom varchar2 := 'thin',
p_left varchar2 := 'thin',
p_right varchar2 := 'thin')
/*
none
thin
medium
dashed
dotted
thick
double
hair
mediumDashed
dashDot
mediumDashDot
dashDotDot
mediumDashDotDot
slantDashDot
*/
return pls_integer;
--
function get_alignment(p_vertical varchar2 := null,
p_horizontal varchar2 := null,
p_wraptext boolean := null)
/* horizontal
center
centerContinuous
distributed
fill
general
justify
left
right
*/
/* vertical
bottom
center
distributed
justify
top
*/
return tp_alignment;
--
procedure cell(p_col pls_integer,
p_row pls_integer,
p_value number,
p_numfmtid pls_integer := null,
p_fontid pls_integer := null,
p_fillid pls_integer := null,
p_borderid pls_integer := null,
p_alignment tp_alignment := null,
p_sheet pls_integer := null);
--
procedure cell(p_col pls_integer,
p_row pls_integer,
p_value varchar2,
p_numfmtid pls_integer := null,
p_fontid pls_integer := null,
p_fillid pls_integer := null,
p_borderid pls_integer := null,
p_alignment tp_alignment := null,
p_sheet pls_integer := null);
--
procedure cell(p_col pls_integer,
p_row pls_integer,
p_value date,
p_numfmtid pls_integer := null,
p_fontid pls_integer := null,
p_fillid pls_integer := null,
p_borderid pls_integer := null,
p_alignment tp_alignment := null,
p_sheet pls_integer := null);
--
procedure hyperlink(p_col pls_integer,
p_row pls_integer,
p_url varchar2,
p_value varchar2 := null,
p_sheet pls_integer := null);
--
procedure comment(p_col pls_integer,
p_row pls_integer,
p_text varchar2,
p_author varchar2 := null,
p_width pls_integer := 150 -- pixels
,
p_height pls_integer := 100 -- pixels
,
p_sheet pls_integer := null);
--
procedure mergecells(p_tl_col pls_integer -- top left
,
p_tl_row pls_integer,
p_br_col pls_integer -- bottom right
,
p_br_row pls_integer,
p_sheet pls_integer := null);
--
procedure list_validation(p_sqref_col pls_integer,
p_sqref_row pls_integer,
p_tl_col pls_integer -- top left
,
p_tl_row pls_integer,
p_br_col pls_integer -- bottom right
,
p_br_row pls_integer,
p_style varchar2 := 'stop' -- stop, warning, information
,
p_title varchar2 := null,
p_prompt varchar := null,
p_show_error boolean := false,
p_error_title varchar2 := null,
p_error_txt varchar2 := null,
p_sheet pls_integer := null);
--
procedure list_validation(p_sqref_col pls_integer,
p_sqref_row pls_integer,
p_defined_name varchar2,
p_style varchar2 := 'stop' -- stop, warning, information
,
p_title varchar2 := null,
p_prompt varchar := null,
p_show_error boolean := false,
p_error_title varchar2 := null,
p_error_txt varchar2 := null,
p_sheet pls_integer := null);
--
procedure defined_name(p_tl_col pls_integer -- top left
,
p_tl_row pls_integer,
p_br_col pls_integer -- bottom right
,
p_br_row pls_integer,
p_name varchar2,
p_sheet pls_integer := null,
p_localsheet pls_integer := null);
--
procedure set_column_width(p_col pls_integer,
p_width number,
p_sheet pls_integer := null);
--
procedure set_column(p_col pls_integer,
p_numfmtid pls_integer := null,
p_fontid pls_integer := null,
p_fillid pls_integer := null,
p_borderid pls_integer := null,
p_alignment tp_alignment := null,
p_sheet pls_integer := null);
--
procedure set_row(p_row pls_integer,
p_numfmtid pls_integer := null,
p_fontid pls_integer := null,
p_fillid pls_integer := null,
p_borderid pls_integer := null,
p_alignment tp_alignment := null,
p_sheet pls_integer := null);
--
procedure freeze_rows(p_nr_rows pls_integer := 1,
p_sheet pls_integer := null);
--
procedure freeze_cols(p_nr_cols pls_integer := 1,
p_sheet pls_integer := null);
--
procedure freeze_pane(p_col pls_integer,
p_row pls_integer,
p_sheet pls_integer := null);
--
procedure set_autofilter(p_column_start pls_integer := null,
p_column_end pls_integer := null,
p_row_start pls_integer := null,
p_row_end pls_integer := null,
p_sheet pls_integer := null);
--
function finish return blob;
--
procedure save(p_directory varchar2, p_filename varchar2);
--
---當(dāng)p_footer設(shè)定參數(shù)為真,這個g_query2sheet_footer有值,則會顯示這個值的內(nèi)容。沒有則默認(rèn)是Generated xxxx
---有一點說明的是,&ROWS 字段會被自動替換為結(jié)果返回的行數(shù)。

g_query2sheet_footer varchar2(1000);
g_query2sheet_rows number; --結(jié)果返回的是多少行記錄
--這個是這個程序的"完全體"
procedure query2sheet(p_sql varchar2,
p_col_value_tab smt_xlsx_maker_pkg.tab_col_value ---運行的動態(tài)SQL的綁定變量
,
p_column_headers boolean := true,
p_directory varchar2 := null,
p_filename varchar2 := null,
p_sheet pls_integer := null,
p_footer boolean := true,
x_retcode out number ---0:成功 非0:失敗( 或者:0:成功 1:警告 2:錯誤 ----注意:確定警告的時候要做什么動作)
,
x_errbuf out varchar2 ---具體的錯誤信息
);
---默認(rèn)用上綁定變量的邏輯!
procedure query2sheet(p_sql varchar2,
p_column_headers boolean := true,
p_directory varchar2 := null,
p_filename varchar2 := null,
p_sheet pls_integer := null,
p_footer boolean := true,
x_retcode out number ---0:成功 非0:失敗( 或者:0:成功 1:警告 2:錯誤 ----注意:確定警告的時候要做什么動作)
,
x_errbuf out varchar2 ---具體的錯誤信息
);
---最簡單的使用版本
procedure query2sheet(p_sql varchar2,
p_column_headers boolean := true,
p_directory varchar2 := null,
p_filename varchar2 := null,
p_sheet pls_integer := null,
p_footer boolean := true);

---參考老外的,另外封裝的一個好用的過程!游標(biāo)直接輸出excel。未測試過~
procedure cursor2sheet(p_sql in sys_refcursor,
p_column_headers boolean := true,
p_directory varchar2 := null,
p_filename varchar2 := null,
p_sheet pls_integer := null,
p_footer boolean := true);
--
end; 
create or replace package body smt_xlsx_maker_pkg is
--
c_local_file_header constant raw(4) := hextoraw('504B0304'); -- Local file header signature
c_end_of_central_directory constant raw(4) := hextoraw('504B0506'); -- End of central directory signature
--
type tp_xf_fmt is record(
numfmtid pls_integer,
fontid pls_integer,
fillid pls_integer,
borderid pls_integer,
alignment tp_alignment);
type tp_col_fmts is table of tp_xf_fmt index by pls_integer;
type tp_row_fmts is table of tp_xf_fmt index by pls_integer;
type tp_widths is table of number index by pls_integer;
type tp_cell is record(
value number,
style varchar2(50));
type tp_cells is table of tp_cell index by pls_integer;
type tp_rows is table of tp_cells index by pls_integer;
type tp_autofilter is record(
column_start pls_integer,
column_end pls_integer,
row_start pls_integer,
row_end pls_integer);
type tp_autofilters is table of tp_autofilter index by pls_integer;
type tp_hyperlink is record(
cell varchar2(10),
url varchar2(1000));
type tp_hyperlinks is table of tp_hyperlink index by pls_integer;
subtype tp_author is varchar2(32767 char);
type tp_authors is table of pls_integer index by tp_author;
authors tp_authors;
type tp_comment is record(
text varchar2(32767 char),
author tp_author,
row pls_integer,
column pls_integer,
width pls_integer,
height pls_integer);
type tp_comments is table of tp_comment index by pls_integer;
type tp_mergecells is table of varchar2(21) index by pls_integer;
type tp_validation is record(
type varchar2(10),
errorstyle varchar2(32),
showinputmessage boolean,
prompt varchar2(32767 char),
title varchar2(32767 char),
error_title varchar2(32767 char),
error_txt varchar2(32767 char),
showerrormessage boolean,
formula1 varchar2(32767 char),
formula2 varchar2(32767 char),
allowblank boolean,
sqref varchar2(32767 char));
type tp_validations is table of tp_validation index by pls_integer;
type tp_sheet is record(
rows tp_rows,
widths tp_widths,
name varchar2(100),
freeze_rows pls_integer,
freeze_cols pls_integer,
autofilters tp_autofilters,
hyperlinks tp_hyperlinks,
col_fmts tp_col_fmts,
row_fmts tp_row_fmts,
comments tp_comments,
mergecells tp_mergecells,
validations tp_validations);
type tp_sheets is table of tp_sheet index by pls_integer;
type tp_numfmt is record(
numfmtid pls_integer,
formatcode varchar2(100));
type tp_numfmts is table of tp_numfmt index by pls_integer;
type tp_fill is record(
patterntype varchar2(30),
fgrgb varchar2(8));
type tp_fills is table of tp_fill index by pls_integer;
type tp_cellxfs is table of tp_xf_fmt index by pls_integer;
type tp_font is record(
name varchar2(100),
family pls_integer,
fontsize number,
theme pls_integer,
rgb varchar2(8),
underline boolean,
italic boolean,
bold boolean);
type tp_fonts is table of tp_font index by pls_integer;
type tp_border is record(
top varchar2(17),
bottom varchar2(17),
left varchar2(17),
right varchar2(17));
type tp_borders is table of tp_border index by pls_integer;
type tp_numfmtindexes is table of pls_integer index by pls_integer;
type tp_strings is table of pls_integer index by varchar2(32767 char);
type tp_str_ind is table of varchar2(32767 char) index by pls_integer;
type tp_defined_name is record(
name varchar2(32767 char),
ref varchar2(32767 char),
sheet pls_integer);
type tp_defined_names is table of tp_defined_name index by pls_integer;
type tp_book is record(
sheets tp_sheets,
strings tp_strings,
str_ind tp_str_ind,
str_cnt pls_integer := 0,
fonts tp_fonts,
fills tp_fills,
borders tp_borders,
numfmts tp_numfmts,
cellxfs tp_cellxfs,
numfmtindexes tp_numfmtindexes,
defined_names tp_defined_names);
workbook tp_book;
lc_rows tp_rows; --new 2015.5.27
--
procedure debuglog(p_msg in varchar2) is
begin
if g_debug_type = 'DBMS_OUTPUT' then
dbms_output.put_line(p_msg);
elsif g_debug_type = 'FILE_OUTPUT' then
--XYG_FND_FILE.PUT_LINE(FND_FILE.OUTPUT, P_MSG);
null;
elsif g_debug_type = 'REQUEST_OUTPUT' then
--LOG(P_MSG);
--FND_FILE.PUT_LINE (FND_FILE.LOG, P_MSG);
null;
end if;
end debuglog;
procedure blob2file(p_blob blob,
p_directory varchar2 := 'MY_DIR',
p_filename varchar2 := 'my.xlsx') is
t_fh utl_file.file_type;
t_len pls_integer := 32767;
begin
t_fh := utl_file.fopen(p_directory, p_filename, 'wb');
for i in 0 .. trunc((dbms_lob.getlength(p_blob) - 1) / t_len) loop
utl_file.put_raw(t_fh, dbms_lob.substr(p_blob, t_len, i * t_len + 1));
end loop;
utl_file.fclose(t_fh);
end;
--
function raw2num(p_raw raw, p_len integer, p_pos integer) return number is
begin
return utl_raw.cast_to_binary_integer(utl_raw.substr(p_raw,
p_pos,
p_len),
utl_raw.little_endian);
end;
--
function little_endian(p_big number, p_bytes pls_integer := 4) return raw is
begin
return utl_raw.substr(utl_raw.cast_from_binary_integer(p_big,
utl_raw.little_endian),
1,
p_bytes);
end;
--
function blob2num(p_blob blob, p_len integer, p_pos integer) return number is
begin
return utl_raw.cast_to_binary_integer(dbms_lob.substr(p_blob,
p_len,
p_pos),
utl_raw.little_endian);
end;
--
procedure add1file(p_zipped_blob in out blob,
p_name varchar2,
p_content blob) is
t_now date;
t_blob blob;
t_len integer;
t_clen integer;
t_crc32 raw(4) := hextoraw('00000000');
t_compressed boolean := false;
t_name raw(32767);
begin
t_now := sysdate;
t_len := nvl(dbms_lob.getlength(p_content), 0);
if t_len > 0 then
t_blob := utl_compress.lz_compress(p_content);
t_clen := dbms_lob.getlength(t_blob) - 18;
t_compressed := t_clen < t_len;
t_crc32 := dbms_lob.substr(t_blob, 4, t_clen + 11);
end if;
if not t_compressed then
t_clen := t_len;
t_blob := p_content;
end if;
if p_zipped_blob is null then
dbms_lob.createtemporary(p_zipped_blob, true);
end if;
t_name := utl_i18n.string_to_raw(p_name, 'AL32UTF8');
dbms_lob.append(p_zipped_blob,
utl_raw.concat(c_local_file_header -- Local file header signature
,
hextoraw('1400') -- version 2.0
,
case when
t_name =
utl_i18n.string_to_raw(p_name, 'US8PC437') then
hextoraw('0000') -- no General purpose bits
else hextoraw('0008') -- set Language encoding flag (EFS)
end,
case when t_compressed then
hextoraw('0800') -- deflate
else hextoraw('0000') -- stored
end,
little_endian(to_number(to_char(t_now,
'ss')) / 2 +
to_number(to_char(t_now,
'mi')) * 32 +
to_number(to_char(t_now,
'hh24')) * 2048,
2) -- File last modification time
,
little_endian(to_number(to_char(t_now,
'dd')) +
to_number(to_char(t_now,
'mm')) * 32 +
(to_number(to_char(t_now,
'yyyy')) - 1980) * 512,
2) -- File last modification date
,
t_crc32 -- CRC-32
,
little_endian(t_clen) -- compressed size
,
little_endian(t_len) -- uncompressed size
,
little_endian(utl_raw.length(t_name), 2) -- File name length
,
hextoraw('0000') -- Extra field length
,
t_name -- File name
));
if t_compressed then
dbms_lob.copy(p_zipped_blob,
t_blob,
t_clen,
dbms_lob.getlength(p_zipped_blob) + 1,
11); -- compressed content
elsif t_clen > 0 then
dbms_lob.copy(p_zipped_blob,
t_blob,
t_clen,
dbms_lob.getlength(p_zipped_blob) + 1,
1); -- content
end if;
if dbms_lob.istemporary(t_blob) = 1 then
dbms_lob.freetemporary(t_blob);
end if;
end;
--
procedure finish_zip(p_zipped_blob in out blob) is
t_cnt pls_integer := 0;
t_offs integer;
t_offs_dir_header integer;
t_offs_end_header integer;
t_comment raw(32767) := utl_raw.cast_to_raw('Implementation by Anton Scheffer');
begin
t_offs_dir_header := dbms_lob.getlength(p_zipped_blob);
t_offs := 1;
while dbms_lob.substr(p_zipped_blob,
utl_raw.length(c_local_file_header),
t_offs) = c_local_file_header loop
t_cnt := t_cnt + 1;
dbms_lob.append(p_zipped_blob,
utl_raw.concat(hextoraw('504B0102') -- Central directory file header signature
,
hextoraw('1400') -- version 2.0
,
dbms_lob.substr(p_zipped_blob,
26,
t_offs + 4),
hextoraw('0000') -- File comment length
,
hextoraw('0000') -- Disk number where file starts
,
hextoraw('0000') -- Internal file attributes =>
-- 0000 binary file
-- 0100 (ascii)text file
,
case when dbms_lob.substr(p_zipped_blob,
1,
t_offs + 30 +
blob2num(p_zipped_blob,
2,
t_offs + 26) - 1) in
(hextoraw('2F') -- /
,
hextoraw('5C') -- \
) then hextoraw('10000000') -- a directory/folder
else hextoraw('2000B681') -- a file
end -- External file attributes
,
little_endian(t_offs - 1) -- Relative offset of local file header
,
dbms_lob.substr(p_zipped_blob,
blob2num(p_zipped_blob,
2,
t_offs + 26),
t_offs + 30) -- File name
));
t_offs := t_offs + 30 + blob2num(p_zipped_blob, 4, t_offs + 18) -- compressed size
+ blob2num(p_zipped_blob, 2, t_offs + 26) -- File name length
+ blob2num(p_zipped_blob, 2, t_offs + 28); -- Extra field length
end loop;
t_offs_end_header := dbms_lob.getlength(p_zipped_blob);
dbms_lob.append(p_zipped_blob,
utl_raw.concat(c_end_of_central_directory -- End of central directory signature
,
hextoraw('0000') -- Number of this disk
,
hextoraw('0000') -- Disk where central directory starts
,
little_endian(t_cnt, 2) -- Number of central directory records on this disk
,
little_endian(t_cnt, 2) -- Total number of central directory records
,
little_endian(t_offs_end_header -
t_offs_dir_header) -- Size of central directory
,
little_endian(t_offs_dir_header) -- Offset of start of central directory, relative to start of archive
,
little_endian(nvl(utl_raw.length(t_comment),
0),
2) -- ZIP file comment length
,
t_comment));
end;
--
function alfan_col(p_col pls_integer) return varchar2 is
begin
return case when p_col > 702 then chr(64 + trunc((p_col - 27) / 676)) || chr(65 +
mod(trunc((p_col - 1) / 26) - 1,
26)) || chr(65 +
mod(p_col - 1,
26)) when p_col > 26 then chr(64 +
trunc((p_col - 1) / 26)) || chr(65 +
mod(p_col - 1,
26)) else chr(64 +
p_col) end;
end;
--
function col_alfan(p_col varchar2) return pls_integer is
begin
return ascii(substr(p_col, -1)) - 64 + nvl((ascii(substr(p_col, -2, 1)) - 64) * 26,
0) + nvl((ascii(substr(p_col,
-3,
1)) - 64) * 676,
0);
end;
--
procedure clear_workbook is
--t_row_ind pls_integer;
t_clear_rows tp_rows;
begin
for s in 1 .. workbook.sheets.count() loop
/*
t_row_ind := workbook.sheets( s ).rows.first();
while t_row_ind is not null
loop
workbook.sheets( s ).rows( t_row_ind ).delete();
t_row_ind := workbook.sheets( s ).rows.next( t_row_ind );
end loop;
*/
workbook.sheets(s).rows := t_clear_rows;
--lc_rows := t_clear_rows;
/*
lc_rows := workbook.sheets( s ).rows;
t_row_ind := lc_rows.first();
loop
exit when t_row_ind is null;
workbook.sheets( s ).rows( t_row_ind ).delete();
lc_rows( t_row_ind ).delete();
t_row_ind := lc_rows.next( t_row_ind );
end loop;*/
--lc_rows.delete();
workbook.sheets(s).rows.delete();
workbook.sheets(s).widths.delete();
workbook.sheets(s).autofilters.delete();
workbook.sheets(s).hyperlinks.delete();
workbook.sheets(s).col_fmts.delete();
workbook.sheets(s).row_fmts.delete();
workbook.sheets(s).comments.delete();
workbook.sheets(s).mergecells.delete();
workbook.sheets(s).validations.delete();
end loop;
workbook.strings.delete();
workbook.str_ind.delete();
workbook.fonts.delete();
workbook.fills.delete();
workbook.borders.delete();
workbook.numfmts.delete();
workbook.cellxfs.delete();
workbook.defined_names.delete();
workbook := null;
g_query2sheet_footer := null;
g_query2sheet_rows := null;
end;
--
procedure new_sheet(p_sheetname varchar2 := null) is
t_nr pls_integer := workbook.sheets.count() + 1;
t_ind pls_integer;
begin
workbook.sheets(t_nr).name := nvl(dbms_xmlgen.convert(translate(p_sheetname,
'a/\[]*:?',
'a')),
'Sheet' || t_nr);
if workbook.strings.count() = 0 then
workbook.str_cnt := 0;
end if;
if workbook.fonts.count() = 0 then
t_ind := get_font('Calibri');
end if;
if workbook.fills.count() = 0 then
t_ind := get_fill('none');
t_ind := get_fill('gray125');
end if;
if workbook.borders.count() = 0 then
t_ind := get_border('', '', '', '');
end if;
end;
--
procedure set_col_width(p_sheet pls_integer,
p_col pls_integer,
p_format varchar2) is
t_width number;
t_nr_chr pls_integer;
begin
if p_format is null then
return;
end if;
if instr(p_format, ';') > 0 then
t_nr_chr := length(translate(substr(p_format,
1,
instr(p_format, ';') - 1),
'a\"',
'a'));
else
t_nr_chr := length(translate(p_format, 'a\"', 'a'));
end if;
t_width := trunc((t_nr_chr * 7 + 5) / 7 * 256) / 256; -- assume default 11 point Calibri
if workbook.sheets(p_sheet).widths.exists(p_col) then
workbook.sheets(p_sheet).widths(p_col) := greatest(workbook.sheets(p_sheet)
.widths(p_col),
t_width);
else
workbook.sheets(p_sheet).widths(p_col) := greatest(t_width, 8.43);
end if;
end;
--
function orafmt2excel(p_format varchar2 := null) return varchar2 is
t_format varchar2(1000) := substr(p_format, 1, 1000);
begin
t_format := replace(replace(t_format, 'hh24', 'hh'), 'hh12', 'hh');
t_format := replace(t_format, 'mi', 'mm');
t_format := replace(replace(replace(t_format, 'AM', '~~'), 'PM', '~~'),
'~~',
'AM/PM');
t_format := replace(replace(replace(t_format, 'am', '~~'), 'pm', '~~'),
'~~',
'AM/PM');
t_format := replace(replace(t_format, 'day', 'DAY'), 'DAY', 'dddd');
t_format := replace(replace(t_format, 'dy', 'DY'), 'DAY', 'ddd');
t_format := replace(replace(t_format, 'RR', 'RR'), 'RR', 'YY');
t_format := replace(replace(t_format, 'month', 'MONTH'),
'MONTH',
'mmmm');
t_format := replace(replace(t_format, 'mon', 'MON'), 'MON', 'mmm');
return t_format;
end;
--
function get_numfmt(p_format varchar2 := null) return pls_integer is
t_cnt pls_integer;
t_numfmtid pls_integer;
begin
if p_format is null then
return 0;
end if;
t_cnt := workbook.numfmts.count();
for i in 1 .. t_cnt loop
if workbook.numfmts(i).formatcode = p_format then
t_numfmtid := workbook.numfmts(i).numfmtid;
exit;
end if;
end loop;
if t_numfmtid is null then
t_numfmtid := case
when t_cnt = 0 then
164
else
workbook.numfmts(t_cnt).numfmtid + 1
end;
t_cnt := t_cnt + 1;
workbook.numfmts(t_cnt).numfmtid := t_numfmtid;
workbook.numfmts(t_cnt).formatcode := p_format;
workbook.numfmtindexes(t_numfmtid) := t_cnt;
end if;
return t_numfmtid;
end;
--
function get_font(p_name varchar2,
p_family pls_integer := 2,
p_fontsize number := 11,
p_theme pls_integer := 1,
p_underline boolean := false,
p_italic boolean := false,
p_bold boolean := false,
p_rgb varchar2 := null -- this is a hex ALPHA Red Green Blue value
) return pls_integer is
t_ind pls_integer;
begin
if workbook.fonts.count() > 0 then
for f in 0 .. workbook.fonts.count() - 1 loop
if (workbook.fonts(f)
.name = p_name and workbook.fonts(f).family = p_family and workbook.fonts(f)
.fontsize = p_fontsize and workbook.fonts(f).theme = p_theme and workbook.fonts(f)
.underline = p_underline and workbook.fonts(f).italic = p_italic and workbook.fonts(f)
.bold = p_bold and
(workbook.fonts(f)
.rgb = p_rgb or (workbook.fonts(f).rgb is null and p_rgb is null))) then
return f;
end if;
end loop;
end if;
t_ind := workbook.fonts.count();
workbook.fonts(t_ind).name := p_name;
workbook.fonts(t_ind).family := p_family;
workbook.fonts(t_ind).fontsize := p_fontsize;
workbook.fonts(t_ind).theme := p_theme;
workbook.fonts(t_ind).underline := p_underline;
workbook.fonts(t_ind).italic := p_italic;
workbook.fonts(t_ind).bold := p_bold;
workbook.fonts(t_ind).rgb := p_rgb;
return t_ind;
end;
--
function get_fill(p_patterntype varchar2, p_fgrgb varchar2 := null)
return pls_integer is
t_ind pls_integer;
begin
if workbook.fills.count() > 0 then
for f in 0 .. workbook.fills.count() - 1 loop
if (workbook.fills(f)
.patterntype = p_patterntype and
nvl(workbook.fills(f).fgrgb, 'x') = nvl(upper(p_fgrgb), 'x')) then
return f;
end if;
end loop;
end if;
t_ind := workbook.fills.count();
workbook.fills(t_ind).patterntype := p_patterntype;
workbook.fills(t_ind).fgrgb := upper(p_fgrgb);
return t_ind;
end;
--
function get_border(p_top varchar2 := 'thin',
p_bottom varchar2 := 'thin',
p_left varchar2 := 'thin',
p_right varchar2 := 'thin') return pls_integer is
t_ind pls_integer;
begin
if workbook.borders.count() > 0 then
for b in 0 .. workbook.borders.count() - 1 loop
if (nvl(workbook.borders(b).top, 'x') = nvl(p_top, 'x') and
nvl(workbook.borders(b).bottom, 'x') = nvl(p_bottom, 'x') and
nvl(workbook.borders(b).left, 'x') = nvl(p_left, 'x') and
nvl(workbook.borders(b).right, 'x') = nvl(p_right, 'x')) then
return b;
end if;
end loop;
end if;
t_ind := workbook.borders.count();
workbook.borders(t_ind).top := p_top;
workbook.borders(t_ind).bottom := p_bottom;
workbook.borders(t_ind).left := p_left;
workbook.borders(t_ind).right := p_right;
return t_ind;
end;
--
function get_alignment(p_vertical varchar2 := null,
p_horizontal varchar2 := null,
p_wraptext boolean := null) return tp_alignment is
t_rv tp_alignment;
begin
t_rv.vertical := p_vertical;
t_rv.horizontal := p_horizontal;
t_rv.wraptext := p_wraptext;
return t_rv;
end;
--
function get_xfid(p_sheet pls_integer,
p_col pls_integer,
p_row pls_integer,
p_numfmtid pls_integer := null,
p_fontid pls_integer := null,
p_fillid pls_integer := null,
p_borderid pls_integer := null,
p_alignment tp_alignment := null) return varchar2 is
t_cnt pls_integer;
t_xfid pls_integer;
t_xf tp_xf_fmt;
t_col_xf tp_xf_fmt;
t_row_xf tp_xf_fmt;
begin
if workbook.sheets(p_sheet).col_fmts.exists(p_col) then
t_col_xf := workbook.sheets(p_sheet).col_fmts(p_col);
end if;
if workbook.sheets(p_sheet).row_fmts.exists(p_row) then
t_row_xf := workbook.sheets(p_sheet).row_fmts(p_row);
end if;
t_xf.numfmtid := coalesce(p_numfmtid,
t_col_xf.numfmtid,
t_row_xf.numfmtid,
0);
t_xf.fontid := coalesce(p_fontid,
t_col_xf.fontid,
t_row_xf.fontid,
0);
t_xf.fillid := coalesce(p_fillid,
t_col_xf.fillid,
t_row_xf.fillid,
0);
t_xf.borderid := coalesce(p_borderid,
t_col_xf.borderid,
t_row_xf.borderid,
0);
t_xf.alignment := coalesce(p_alignment,
t_col_xf.alignment,
t_row_xf.alignment);
if (t_xf.numfmtid + t_xf.fontid + t_xf.fillid + t_xf.borderid = 0 and
t_xf.alignment.vertical is null and
t_xf.alignment.horizontal is null and
not nvl(t_xf.alignment.wraptext, false)) then
return '';
end if;
if t_xf.numfmtid > 0 then
set_col_width(p_sheet,
p_col,
workbook.numfmts(workbook.numfmtindexes(t_xf.numfmtid))
.formatcode);
end if;
t_cnt := workbook.cellxfs.count();
for i in 1 .. t_cnt loop
if (workbook.cellxfs(i)
.numfmtid = t_xf.numfmtid and workbook.cellxfs(i)
.fontid = t_xf.fontid and workbook.cellxfs(i).fillid = t_xf.fillid and workbook.cellxfs(i)
.borderid = t_xf.borderid and
nvl(workbook.cellxfs(i).alignment.vertical, 'x') =
nvl(t_xf.alignment.vertical, 'x') and
nvl(workbook.cellxfs(i).alignment.horizontal, 'x') =
nvl(t_xf.alignment.horizontal, 'x') and
nvl(workbook.cellxfs(i).alignment.wraptext, false) =
nvl(t_xf.alignment.wraptext, false)) then
t_xfid := i;
exit;
end if;
end loop;
if t_xfid is null then
t_cnt := t_cnt + 1;
t_xfid := t_cnt;
workbook.cellxfs(t_cnt) := t_xf;
end if;
return 's="' || t_xfid || '"';
end;
--
procedure cell(p_col pls_integer,
p_row pls_integer,
p_value number,
p_numfmtid pls_integer := null,
p_fontid pls_integer := null,
p_fillid pls_integer := null,
p_borderid pls_integer := null,
p_alignment tp_alignment := null,
p_sheet pls_integer := null) is
t_sheet pls_integer := nvl(p_sheet, workbook.sheets.count());
begin
workbook.sheets(t_sheet).rows(p_row)(p_col).value := p_value;
workbook.sheets(t_sheet).rows(p_row)(p_col).style := null;
workbook.sheets(t_sheet).rows(p_row)(p_col).style := get_xfid(t_sheet,
p_col,
p_row,
p_numfmtid,
p_fontid,
p_fillid,
p_borderid,
p_alignment);
end;
--
function add_string(p_string varchar2) return pls_integer is
t_cnt pls_integer;
begin
if workbook.strings.exists(p_string) then
t_cnt := workbook.strings(p_string);
else
t_cnt := workbook.strings.count();
workbook.str_ind(t_cnt) := p_string;
workbook.strings(nvl(p_string, '')) := t_cnt;
end if;
workbook.str_cnt := workbook.str_cnt + 1;
return t_cnt;
end;
--
procedure cell(p_col pls_integer,
p_row pls_integer,
p_value varchar2,
p_numfmtid pls_integer := null,
p_fontid pls_integer := null,
p_fillid pls_integer := null,
p_borderid pls_integer := null,
p_alignment tp_alignment := null,
p_sheet pls_integer := null) is
t_sheet pls_integer := nvl(p_sheet, workbook.sheets.count());
t_alignment tp_alignment := p_alignment;
begin
workbook.sheets(t_sheet).rows(p_row)(p_col).value := add_string(p_value);
if t_alignment.wraptext is null and instr(p_value, chr(13)) > 0 then
t_alignment.wraptext := true;
end if;
workbook.sheets(t_sheet).rows(p_row)(p_col).style := 't="s" ' ||
get_xfid(t_sheet,
p_col,
p_row,
p_numfmtid,
p_fontid,
p_fillid,
p_borderid,
t_alignment);
end;
--
procedure cell(p_col pls_integer,
p_row pls_integer,
p_value date,
p_numfmtid pls_integer := null,
p_fontid pls_integer := null,
p_fillid pls_integer := null,
p_borderid pls_integer := null,
p_alignment tp_alignment := null,
p_sheet pls_integer := null) is
t_numfmtid pls_integer := p_numfmtid;
t_sheet pls_integer := nvl(p_sheet, workbook.sheets.count());
begin
--這里必須要改為1900系統(tǒng)!否則不同的Excel之間的復(fù)制和黏貼會出問題!相差4年。
--因為Windows的Excel默認(rèn)是1900系統(tǒng)。
--workbook.sheets( t_sheet ).rows( p_row )( p_col ).value := p_value - to_date('01-01-1904','DD-MM-YYYY');
workbook.sheets(t_sheet).rows(p_row)(p_col).value := p_value -
to_date('01-03-1900',
'DD-MM-YYYY') + 61;
if t_numfmtid is null and
not (workbook.sheets(t_sheet).col_fmts.exists(p_col) and workbook.sheets(t_sheet).col_fmts(p_col)
.numfmtid is not null) and
not (workbook.sheets(t_sheet).row_fmts.exists(p_row) and workbook.sheets(t_sheet).row_fmts(p_row)
.numfmtid is not null) then
t_numfmtid := get_numfmt('yyyy-mm-dd'); --dd/mm/yyyy 2015.7.1修改
end if;
workbook.sheets(t_sheet).rows(p_row)(p_col).style := get_xfid(t_sheet,
p_col,
p_row,
t_numfmtid,
p_fontid,
p_fillid,
p_borderid,
p_alignment);
end;
--
procedure hyperlink(p_col pls_integer,
p_row pls_integer,
p_url varchar2,
p_value varchar2 := null,
p_sheet pls_integer := null) is
t_ind pls_integer;
t_sheet pls_integer := nvl(p_sheet, workbook.sheets.count());
begin
workbook.sheets(t_sheet).rows(p_row)(p_col).value := add_string(nvl(p_value,
p_url));
workbook.sheets(t_sheet).rows(p_row)(p_col).style := 't="s" ' ||
get_xfid(t_sheet,
p_col,
p_row,
'',
get_font('Calibri',
p_theme => 10,
p_underline => true));
t_ind := workbook.sheets(t_sheet).hyperlinks.count() + 1;
workbook.sheets(t_sheet).hyperlinks(t_ind).cell := alfan_col(p_col) ||
p_row;
workbook.sheets(t_sheet).hyperlinks(t_ind).url := p_url;
end;
--
procedure comment(p_col pls_integer,
p_row pls_integer,
p_text varchar2,
p_author varchar2 := null,
p_width pls_integer := 150,
p_height pls_integer := 100,
p_sheet pls_integer := null) is
t_ind pls_integer;
t_sheet pls_integer := nvl(p_sheet, workbook.sheets.count());
begin
t_ind := workbook.sheets(t_sheet).comments.count() + 1;
workbook.sheets(t_sheet).comments(t_ind).row := p_row;
workbook.sheets(t_sheet).comments(t_ind).column := p_col;
workbook.sheets(t_sheet).comments(t_ind).text := dbms_xmlgen.convert(p_text);
workbook.sheets(t_sheet).comments(t_ind).author := dbms_xmlgen.convert(p_author);
workbook.sheets(t_sheet).comments(t_ind).width := p_width;
workbook.sheets(t_sheet).comments(t_ind).height := p_height;
end;
--
procedure mergecells(p_tl_col pls_integer -- top left
,
p_tl_row pls_integer,
p_br_col pls_integer -- bottom right
,
p_br_row pls_integer,
p_sheet pls_integer := null) is
t_ind pls_integer;
t_sheet pls_integer := nvl(p_sheet, workbook.sheets.count());
begin
t_ind := workbook.sheets(t_sheet).mergecells.count() + 1;
workbook.sheets(t_sheet).mergecells(t_ind) := alfan_col(p_tl_col) ||
p_tl_row || ':' ||
alfan_col(p_br_col) ||
p_br_row;
end;
--
procedure add_validation(p_type varchar2,
p_sqref varchar2,
p_style varchar2 := 'stop' -- stop, warning, information
,
p_formula1 varchar2 := null,
p_formula2 varchar2 := null,
p_title varchar2 := null,
p_prompt varchar := null,
p_show_error boolean := false,
p_error_title varchar2 := null,
p_error_txt varchar2 := null,
p_sheet pls_integer := null) is
t_ind pls_integer;
t_sheet pls_integer := nvl(p_sheet, workbook.sheets.count());
begin
t_ind := workbook.sheets(t_sheet).validations.count() + 1;
workbook.sheets(t_sheet).validations(t_ind).type := p_type;
workbook.sheets(t_sheet).validations(t_ind).errorstyle := p_style;
workbook.sheets(t_sheet).validations(t_ind).sqref := p_sqref;
workbook.sheets(t_sheet).validations(t_ind).formula1 := p_formula1;
workbook.sheets(t_sheet).validations(t_ind).error_title := p_error_title;
workbook.sheets(t_sheet).validations(t_ind).error_txt := p_error_txt;
workbook.sheets(t_sheet).validations(t_ind).title := p_title;
workbook.sheets(t_sheet).validations(t_ind).prompt := p_prompt;
workbook.sheets(t_sheet).validations(t_ind).showerrormessage := p_show_error;
end;
--
procedure list_validation(p_sqref_col pls_integer,
p_sqref_row pls_integer,
p_tl_col pls_integer -- top left
,
p_tl_row pls_integer,
p_br_col pls_integer -- bottom right
,
p_br_row pls_integer,
p_style varchar2 := 'stop' -- stop, warning, information
,
p_title varchar2 := null,
p_prompt varchar := null,
p_show_error boolean := false,
p_error_title varchar2 := null,
p_error_txt varchar2 := null,
p_sheet pls_integer := null) is
begin
add_validation('list',
alfan_col(p_sqref_col) || p_sqref_row,
p_style => lower(p_style),
p_formula1 => '$' || alfan_col(p_tl_col) || '$' ||
p_tl_row || ':$' || alfan_col(p_br_col) || '$' ||
p_br_row,
p_title => p_title,
p_prompt => p_prompt,
p_show_error => p_show_error,
p_error_title => p_error_title,
p_error_txt => p_error_txt,
p_sheet => p_sheet);
end;
--
procedure list_validation(p_sqref_col pls_integer,
p_sqref_row pls_integer,
p_defined_name varchar2,
p_style varchar2 := 'stop' -- stop, warning, information
,
p_title varchar2 := null,
p_prompt varchar := null,
p_show_error boolean := false,
p_error_title varchar2 := null,
p_error_txt varchar2 := null,
p_sheet pls_integer := null) is
begin
add_validation('list',
alfan_col(p_sqref_col) || p_sqref_row,
p_style => lower(p_style),
p_formula1 => p_defined_name,
p_title => p_title,
p_prompt => p_prompt,
p_show_error => p_show_error,
p_error_title => p_error_title,
p_error_txt => p_error_txt,
p_sheet => p_sheet);
end;
--
procedure defined_name(p_tl_col pls_integer -- top left
,
p_tl_row pls_integer,
p_br_col pls_integer -- bottom right
,
p_br_row pls_integer,
p_name varchar2,
p_sheet pls_integer := null,
p_localsheet pls_integer := null) is
t_ind pls_integer;
t_sheet pls_integer := nvl(p_sheet, workbook.sheets.count());
begin
t_ind := workbook.defined_names.count() + 1;
workbook.defined_names(t_ind).name := p_name;
workbook.defined_names(t_ind).ref := 'Sheet' || t_sheet || '!$' ||
alfan_col(p_tl_col) || '$' ||
p_tl_row || ':$' ||
alfan_col(p_br_col) || '$' ||
p_br_row;
workbook.defined_names(t_ind).sheet := p_localsheet;
end;
--
procedure set_column_width(p_col pls_integer,
p_width number,
p_sheet pls_integer := null) is
begin
workbook.sheets(nvl(p_sheet, workbook.sheets.count())).widths(p_col) := p_width;
end;
--
procedure set_column(p_col pls_integer,
p_numfmtid pls_integer := null,
p_fontid pls_integer := null,
p_fillid pls_integer := null,
p_borderid pls_integer := null,
p_alignment tp_alignment := null,
p_sheet pls_integer := null) is
t_sheet pls_integer := nvl(p_sheet, workbook.sheets.count());
begin
workbook.sheets(t_sheet).col_fmts(p_col).numfmtid := p_numfmtid;
workbook.sheets(t_sheet).col_fmts(p_col).fontid := p_fontid;
workbook.sheets(t_sheet).col_fmts(p_col).fillid := p_fillid;
workbook.sheets(t_sheet).col_fmts(p_col).borderid := p_borderid;
workbook.sheets(t_sheet).col_fmts(p_col).alignment := p_alignment;
end;
--
procedure set_row(p_row pls_integer,
p_numfmtid pls_integer := null,
p_fontid pls_integer := null,
p_fillid pls_integer := null,
p_borderid pls_integer := null,
p_alignment tp_alignment := null,
p_sheet pls_integer := null) is
t_sheet pls_integer := nvl(p_sheet, workbook.sheets.count());
begin
workbook.sheets(t_sheet).row_fmts(p_row).numfmtid := p_numfmtid;
workbook.sheets(t_sheet).row_fmts(p_row).fontid := p_fontid;
workbook.sheets(t_sheet).row_fmts(p_row).fillid := p_fillid;
workbook.sheets(t_sheet).row_fmts(p_row).borderid := p_borderid;
workbook.sheets(t_sheet).row_fmts(p_row).alignment := p_alignment;
end;
--
procedure freeze_rows(p_nr_rows pls_integer := 1,
p_sheet pls_integer := null) is
t_sheet pls_integer := nvl(p_sheet, workbook.sheets.count());
begin
workbook.sheets(t_sheet).freeze_cols := null;
workbook.sheets(t_sheet).freeze_rows := p_nr_rows;
end;
--
procedure freeze_cols(p_nr_cols pls_integer := 1,
p_sheet pls_integer := null) is
t_sheet pls_integer := nvl(p_sheet, workbook.sheets.count());
begin
workbook.sheets(t_sheet).freeze_rows := null;
workbook.sheets(t_sheet).freeze_cols := p_nr_cols;
end;
--
procedure freeze_pane(p_col pls_integer,
p_row pls_integer,
p_sheet pls_integer := null) is
t_sheet pls_integer := nvl(p_sheet, workbook.sheets.count());
begin
workbook.sheets(t_sheet).freeze_rows := p_row;
workbook.sheets(t_sheet).freeze_cols := p_col;
end;
--
procedure set_autofilter(p_column_start pls_integer := null,
p_column_end pls_integer := null,
p_row_start pls_integer := null,
p_row_end pls_integer := null,
p_sheet pls_integer := null) is
t_ind pls_integer;
t_sheet pls_integer := nvl(p_sheet, workbook.sheets.count());
begin
t_ind := 1;
workbook.sheets(t_sheet).autofilters(t_ind).column_start := p_column_start;
workbook.sheets(t_sheet).autofilters(t_ind).column_end := p_column_end;
workbook.sheets(t_sheet).autofilters(t_ind).row_start := p_row_start;
workbook.sheets(t_sheet).autofilters(t_ind).row_end := p_row_end;
defined_name(p_column_start,
p_row_start,
p_column_end,
p_row_end,
'_xlnm._FilterDatabase',
t_sheet,
t_sheet - 1);
end;
--
/*
procedure add1xml
( p_excel in out nocopy blob
, p_filename varchar2
, p_xml clob
)
is
t_tmp blob;
c_step constant number := 24396;
begin
dbms_lob.createtemporary( t_tmp, true );
for i in 0 .. trunc( length( p_xml ) / c_step )
loop
dbms_lob.append( t_tmp, utl_i18n.string_to_raw( substr( p_xml, i * c_step + 1, c_step ), 'AL32UTF8' ) );
end loop;
add1file( p_excel, p_filename, t_tmp );
dbms_lob.freetemporary( t_tmp );
end;
*/
--
procedure add1xml(p_excel in out nocopy blob,
p_filename varchar2,
p_xml clob) is
t_tmp blob;
dest_offset integer := 1;
src_offset integer := 1;
lang_context integer;
warning integer;
begin
lang_context := dbms_lob.default_lang_ctx;
dbms_lob.createtemporary(t_tmp, true);
dbms_lob.converttoblob(t_tmp,
p_xml,
dbms_lob.lobmaxsize,
dest_offset,
src_offset,
nls_charset_id('AL32UTF8'),
lang_context,
warning);
add1file(p_excel, p_filename, t_tmp);
dbms_lob.freetemporary(t_tmp);
end;
--
function finish return blob is
t_excel blob;
t_xxx clob;
t_tmp varchar2(32767 char);
--t_tmp clob;
t_str varchar2(32767 char);
t_c number;
t_h number;
t_w number;
t_cw number;
t_cell varchar2(1000 char);
t_row_ind pls_integer;
t_col_min pls_integer;
t_col_max pls_integer;
t_col_ind pls_integer;
t_len pls_integer;
ts timestamp := systimestamp;
---
l_debug_time date;
begin
if g_debug_mode then
debuglog('finish(+)');
l_debug_time := sysdate;
end if;
dbms_lob.createtemporary(t_excel, true);
t_xxx := '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types">
<Default Extension="rels" ContentType="application/vnd.openxmlformats-package.relationships+xml"/>
<Default Extension="xml" ContentType="application/xml"/>
<Default Extension="vml" ContentType="application/vnd.openxmlformats-officedocument.vmlDrawing"/>
<Override PartName="/xl/workbook.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml"/>';
for s in 1 .. workbook.sheets.count() loop
t_xxx := t_xxx || '
<Override PartName="/xl/worksheets/sheet' || s ||
'.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"/>';
end loop;
t_xxx := t_xxx || '
<Override PartName="/xl/theme/theme1.xml" ContentType="application/vnd.openxmlformats-officedocument.theme+xml"/>
<Override PartName="/xl/styles.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml"/>
<Override PartName="/xl/sharedStrings.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml"/>
<Override PartName="/docProps/core.xml" ContentType="application/vnd.openxmlformats-package.core-properties+xml"/>
<Override PartName="/docProps/app.xml" ContentType="application/vnd.openxmlformats-officedocument.extended-properties+xml"/>';
for s in 1 .. workbook.sheets.count() loop
if workbook.sheets(s).comments.count() > 0 then
t_xxx := t_xxx || '
<Override PartName="/xl/comments' || s ||
'.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml"/>';
end if;
end loop;
t_xxx := t_xxx || '
</Types>';
add1xml(t_excel, '[Content_Types].xml', t_xxx);
t_xxx := '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<cp:coreProperties xmlns:cp="http://schemas.openxmlformats.org/package/2006/metadata/core-properties" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:dcmitype="http://purl.org/dc/dcmitype/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<dc:creator>' || sys_context('userenv', 'os_user') ||
'</dc:creator>
<cp:lastModifiedBy>' || sys_context('userenv', 'os_user') ||
'</cp:lastModifiedBy>
<dcterms:created xsi:type="dcterms:W3CDTF">' ||
to_char(current_timestamp, 'yyyy-mm-dd"T"hh24:mi:ssTZH:TZM') ||
'</dcterms:created>
<dcterms:modified xsi:type="dcterms:W3CDTF">' ||
to_char(current_timestamp, 'yyyy-mm-dd"T"hh24:mi:ssTZH:TZM') ||
'</dcterms:modified>
</cp:coreProperties>';
add1xml(t_excel, 'docProps/core.xml', t_xxx);
t_xxx := '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Properties xmlns="http://schemas.openxmlformats.org/officeDocument/2006/extended-properties" xmlns:vt="http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes">
<Application>Microsoft Excel</Application>
<DocSecurity>0</DocSecurity>
<ScaleCrop>false</ScaleCrop>
<HeadingPairs>
<vt:vector size="2" baseType="variant">
<vt:variant>
<vt:lpstr>Worksheets</vt:lpstr>
</vt:variant>
<vt:variant>
<vt:i4>' || workbook.sheets.count() || '</vt:i4>
</vt:variant>
</vt:vector>
</HeadingPairs>
<TitlesOfParts>
<vt:vector size="' || workbook.sheets.count() ||
'" baseType="lpstr">';
for s in 1 .. workbook.sheets.count() loop
t_xxx := t_xxx || '
<vt:lpstr>' || workbook.sheets(s).name || '</vt:lpstr>';
end loop;
t_xxx := t_xxx || '</vt:vector>
</TitlesOfParts>
<LinksUpToDate>false</LinksUpToDate>
<SharedDoc>false</SharedDoc>
<HyperlinksChanged>false</HyperlinksChanged>
<AppVersion>14.0300</AppVersion>
</Properties>';
add1xml(t_excel, 'docProps/app.xml', t_xxx);
t_xxx := '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
<Relationship Id="rId3" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties" Target="docProps/app.xml"/>
<Relationship Id="rId2" Type="http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties" Target="docProps/core.xml"/>
<Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="xl/workbook.xml"/>
</Relationships>';
add1xml(t_excel, '_rels/.rels', t_xxx);
t_xxx := '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<styleSheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="x14ac" xmlns:x14ac="http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac">';
if workbook.numfmts.count() > 0 then
t_xxx := t_xxx || '<numFmts count="' || workbook.numfmts.count() || '">';
for n in 1 .. workbook.numfmts.count() loop
t_xxx := t_xxx || '<numFmt numFmtId="' || workbook.numfmts(n)
.numfmtid || '" formatCode="' || workbook.numfmts(n)
.formatcode || '"/>';
end loop;
t_xxx := t_xxx || '</numFmts>';
end if;
t_xxx := t_xxx || '<fonts count="' || workbook.fonts.count() ||
'" x14ac:knownFonts="1">';
for f in 0 .. workbook.fonts.count() - 1 loop
t_xxx := t_xxx || '<font>' || case
when workbook.fonts(f).bold then
'<b/>'
end || case
when workbook.fonts(f).italic then
'<i/>'
end || case
when workbook.fonts(f).underline then
'<u/>'
end || '<sz val="' ||
to_char(workbook.fonts(f).fontsize,
'TM9',
'NLS_NUMERIC_CHARACTERS=.,') || '"/>
<color ' || case
when workbook.fonts(f).rgb is not null then
'rgb="' || workbook.fonts(f).rgb
else
'theme="' || workbook.fonts(f).theme
end || '"/>
<name val="' || workbook.fonts(f).name || '"/>
<family val="' || workbook.fonts(f).family || '"/>
<scheme val="none"/>
</font>';
end loop;
t_xxx := t_xxx || '</fonts>
<fills count="' || workbook.fills.count() || '">';
for f in 0 .. workbook.fills.count() - 1 loop
t_xxx := t_xxx || '<fill><patternFill patternType="' || workbook.fills(f)
.patterntype || '">' || case
when workbook.fills(f).fgrgb is not null then
'<fgColor rgb="' || workbook.fills(f).fgrgb || '"/>'
end || '</patternFill></fill>';
end loop;
t_xxx := t_xxx || '</fills>
<borders count="' || workbook.borders.count() || '">';
for b in 0 .. workbook.borders.count() - 1 loop
t_xxx := t_xxx || '<border>' || case
when workbook.borders(b).left is null then
'<left/>'
else
'<left style="' || workbook.borders(b).left || '"/>'
end || case
when workbook.borders(b).right is null then
'<right/>'
else
'<right style="' || workbook.borders(b).right || '"/>'
end || case
when workbook.borders(b).top is null then
'<top/>'
else
'<top style="' || workbook.borders(b).top || '"/>'
end || case
when workbook.borders(b).bottom is null then
'<bottom/>'
else
'<bottom style="' || workbook.borders(b).bottom || '"/>'
end || '</border>';
end loop;
t_xxx := t_xxx || '</borders>
<cellStyleXfs count="1">
<xf numFmtId="0" fontId="0" fillId="0" borderId="0"/>
</cellStyleXfs>
<cellXfs count="' || (workbook.cellxfs.count() + 1) || '">
<xf numFmtId="0" fontId="0" fillId="0" borderId="0" xfId="0"/>';
for x in 1 .. workbook.cellxfs.count() loop
t_xxx := t_xxx || '<xf numFmtId="' || workbook.cellxfs(x).numfmtid ||
'" fontId="' || workbook.cellxfs(x).fontid || '" fillId="' || workbook.cellxfs(x)
.fillid || '" borderId="' || workbook.cellxfs(x).borderid || '">';
if (workbook.cellxfs(x).alignment.horizontal is not null or workbook.cellxfs(x)
.alignment.vertical is not null or workbook.cellxfs(x)
.alignment.wraptext) then
t_xxx := t_xxx || '<alignment' || case
when workbook.cellxfs(x).alignment.horizontal is not null then
' horizontal="' || workbook.cellxfs(x).alignment.horizontal || '"'
end || case
when workbook.cellxfs(x).alignment.vertical is not null then
' vertical="' || workbook.cellxfs(x).alignment.vertical || '"'
end || case
when workbook.cellxfs(x).alignment.wraptext then
' wrapText="true"'
end || '/>';
end if;
t_xxx := t_xxx || '</xf>';
end loop;
t_xxx := t_xxx || '</cellXfs>
<cellStyles count="1">
<cellStyle name="Normal" xfId="0" builtinId="0"/>
</cellStyles>
<dxfs count="0"/>
<tableStyles count="0" defaultTableStyle="TableStyleMedium2" defaultPivotStyle="PivotStyleLight16"/>
<extLst>
<ext uri="{EB79DEF2-80B8-43e5-95BD-54CBDDF9020C}" xmlns:x14="http://schemas.microsoft.com/office/spreadsheetml/2009/9/main">
<x14:slicerStyles defaultSlicerStyle="SlicerStyleLight1"/>
</ext>
</extLst>
</styleSheet>';
add1xml(t_excel, 'xl/styles.xml', t_xxx);
--<workbookPr date1904="true" defaultThemeVersion="124226"/>
t_xxx := '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<workbook xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships">
<fileVersion appName="xl" lastEdited="5" lowestEdited="5" rupBuild="9302"/>
<workbookPr date1904="false" defaultThemeVersion="124226"/>
<bookViews>
<workbookView xWindow="120" yWindow="45" windowWidth="19155" windowHeight="4935"/>
</bookViews>
<sheets>';
for s in 1 .. workbook.sheets.count() loop
t_xxx := t_xxx || '
<sheet name="' || workbook.sheets(s).name || '" sheetId="' || s ||
'" r:id="rId' || (9 + s) || '"/>';
end loop;
t_xxx := t_xxx || '</sheets>';
if workbook.defined_names.count() > 0 then
t_xxx := t_xxx || '<definedNames>';
for s in 1 .. workbook.defined_names.count() loop
t_xxx := t_xxx || '
<definedName name="' || workbook.defined_names(s).name || '"' || case
when workbook.defined_names(s).sheet is not null then
' localSheetId="' || to_char(workbook.defined_names(s).sheet) || '"'
end || '>' || workbook.defined_names(s).ref ||
'</definedName>';
end loop;
t_xxx := t_xxx || '</definedNames>';
end if;
t_xxx := t_xxx || '<calcPr calcId="144525"/></workbook>';
add1xml(t_excel, 'xl/workbook.xml', t_xxx);
t_xxx := '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<a:theme xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" name="Office Theme">
<a:themeElements>
<a:clrScheme name="Office">
<a:dk1>
<a:sysClr val="windowText" lastClr="000000"/>
</a:dk1>
<a:lt1>
<a:sysClr val="window" lastClr="FFFFFF"/>
</a:lt1>
<a:dk2>
<a:srgbClr val="1F497D"/>
</a:dk2>
<a:lt2>
<a:srgbClr val="EEECE1"/>
</a:lt2>
<a:accent1>
<a:srgbClr val="4F81BD"/>
</a:accent1>
<a:accent2>
<a:srgbClr val="C0504D"/>
</a:accent2>
<a:accent3>
<a:srgbClr val="9BBB59"/>
</a:accent3>
<a:accent4>
<a:srgbClr val="8064A2"/>
</a:accent4>
<a:accent5>
<a:srgbClr val="4BACC6"/>
</a:accent5>
<a:accent6>
<a:srgbClr val="F79646"/>
</a:accent6>
<a:hlink>
<a:srgbClr val="0000FF"/>
</a:hlink>
<a:folHlink>
<a:srgbClr val="800080"/>
</a:folHlink>
</a:clrScheme>
<a:fontScheme name="Office">
<a:majorFont>
<a:latin typeface="Cambria"/>
<a:ea typeface=""/>
<a:cs typeface=""/>
<a:font script="Jpan" typeface="MS P????"/>
<a:font script="Hang" typeface="?? ??"/>
<a:font script="Hans" typeface="??"/>
<a:font script="Hant" typeface="????"/>
<a:font script="Arab" typeface="Times New Roman"/>
<a:font script="Hebr" typeface="Times New Roman"/>
<a:font script="Thai" typeface="Tahoma"/>
<a:font script="Ethi" typeface="Nyala"/>
<a:font script="Beng" typeface="Vrinda"/>
<a:font script="Gujr" typeface="Shruti"/>
<a:font script="Khmr" typeface="MoolBoran"/>
<a:font script="Knda" typeface="Tunga"/>
<a:font script="Guru" typeface="Raavi"/>
<a:font script="Cans" typeface="Euphemia"/>
<a:font script="Cher" typeface="Plantagenet Cherokee"/>
<a:font script="Yiii" typeface="Microsoft Yi Baiti"/>
<a:font script="Tibt" typeface="Microsoft Himalaya"/>
<a:font script="Thaa" typeface="MV Boli"/>
<a:font script="Deva" typeface="Mangal"/>
<a:font script="Telu" typeface="Gautami"/>
<a:font script="Taml" typeface="Latha"/>
<a:font script="Syrc" typeface="Estrangelo Edessa"/>
<a:font script="Orya" typeface="Kalinga"/>
<a:font script="Mlym" typeface="Kartika"/>
<a:font script="Laoo" typeface="DokChampa"/>
<a:font script="Sinh" typeface="Iskoola Pota"/>
<a:font script="Mong" typeface="Mongolian Baiti"/>
<a:font script="Viet" typeface="Times New Roman"/>
<a:font script="Uigh" typeface="Microsoft Uighur"/>
<a:font script="Geor" typeface="Sylfaen"/>
</a:majorFont>
<a:minorFont>
<a:latin typeface="Calibri"/>
<a:ea typeface=""/>
<a:cs typeface=""/>
<a:font script="Jpan" typeface="MS P????"/>
<a:font script="Hang" typeface="?? ??"/>
<a:font script="Hans" typeface="??"/>
<a:font script="Hant" typeface="????"/>
<a:font script="Arab" typeface="Arial"/>
<a:font script="Hebr" typeface="Arial"/>
<a:font script="Thai" typeface="Tahoma"/>
<a:font script="Ethi" typeface="Nyala"/>
<a:font script="Beng" typeface="Vrinda"/>
<a:font script="Gujr" typeface="Shruti"/>
<a:font script="Khmr" typeface="DaunPenh"/>
<a:font script="Knda" typeface="Tunga"/>
<a:font script="Guru" typeface="Raavi"/>
<a:font script="Cans" typeface="Euphemia"/>
<a:font script="Cher" typeface="Plantagenet Cherokee"/>
<a:font script="Yiii" typeface="Microsoft Yi Baiti"/>
<a:font script="Tibt" typeface="Microsoft Himalaya"/>
<a:font script="Thaa" typeface="MV Boli"/>
<a:font script="Deva" typeface="Mangal"/>
<a:font script="Telu" typeface="Gautami"/>
<a:font script="Taml" typeface="Latha"/>
<a:font script="Syrc" typeface="Estrangelo Edessa"/>
<a:font script="Orya" typeface="Kalinga"/>
<a:font script="Mlym" typeface="Kartika"/>
<a:font script="Laoo" typeface="DokChampa"/>
<a:font script="Sinh" typeface="Iskoola Pota"/>
<a:font script="Mong" typeface="Mongolian Baiti"/>
<a:font script="Viet" typeface="Arial"/>
<a:font script="Uigh" typeface="Microsoft Uighur"/>
<a:font script="Geor" typeface="Sylfaen"/>
</a:minorFont>
</a:fontScheme>
<a:fmtScheme name="Office">
<a:fillStyleLst>
<a:solidFill>
<a:schemeClr val="phClr"/>
</a:solidFill>
<a:gradFill rotWithShape="1">
<a:gsLst>
<a:gs pos="0">
<a:schemeClr val="phClr">
<a:tint val="50000"/>
<a:satMod val="300000"/>
</a:schemeClr>
</a:gs>
<a:gs pos="35000">
<a:schemeClr val="phClr">
<a:tint val="37000"/>
<a:satMod val="300000"/>
</a:schemeClr>
</a:gs>
<a:gs pos="100000">
<a:schemeClr val="phClr">
<a:tint val="15000"/>
<a:satMod val="350000"/>
</a:schemeClr>
</a:gs>
</a:gsLst>
<a:lin ang="16200000" scaled="1"/>
</a:gradFill>
<a:gradFill rotWithShape="1">
<a:gsLst>
<a:gs pos="0">
<a:schemeClr val="phClr">
<a:shade val="51000"/>
<a:satMod val="130000"/>
</a:schemeClr>
</a:gs>
<a:gs pos="80000">
<a:schemeClr val="phClr">
<a:shade val="93000"/>
<a:satMod val="130000"/>
</a:schemeClr>
</a:gs>
<a:gs pos="100000">
<a:schemeClr val="phClr">
<a:shade val="94000"/>
<a:satMod val="135000"/>
</a:schemeClr>
</a:gs>
</a:gsLst>
<a:lin ang="16200000" scaled="0"/>
</a:gradFill>
</a:fillStyleLst>
<a:lnStyleLst>
<a:ln w="9525" cap="flat" cmpd="sng" algn="ctr">
<a:solidFill>
<a:schemeClr val="phClr">
<a:shade val="95000"/>
<a:satMod val="105000"/>
</a:schemeClr>
</a:solidFill>
<a:prstDash val="solid"/>
</a:ln>
<a:ln w="25400" cap="flat" cmpd="sng" algn="ctr">
<a:solidFill>
<a:schemeClr val="phClr"/>
</a:solidFill>
<a:prstDash val="solid"/>
</a:ln>
<a:ln w="38100" cap="flat" cmpd="sng" algn="ctr">
<a:solidFill>
<a:schemeClr val="phClr"/>
</a:solidFill>
<a:prstDash val="solid"/>
</a:ln>
</a:lnStyleLst>
<a:effectStyleLst>
<a:effectStyle>
<a:effectLst>
<a:outerShdw blurRad="40000" dist="20000" dir="5400000" rotWithShape="0">
<a:srgbClr val="000000">
<a:alpha val="38000"/>
</a:srgbClr>
</a:outerShdw>
</a:effectLst>
</a:effectStyle>
<a:effectStyle>
<a:effectLst>
<a:outerShdw blurRad="40000" dist="23000" dir="5400000" rotWithShape="0">
<a:srgbClr val="000000">
<a:alpha val="35000"/>
</a:srgbClr>
</a:outerShdw>
</a:effectLst>
</a:effectStyle>
<a:effectStyle>
<a:effectLst>
<a:outerShdw blurRad="40000" dist="23000" dir="5400000" rotWithShape="0">
<a:srgbClr val="000000">
<a:alpha val="35000"/>
</a:srgbClr>
</a:outerShdw>
</a:effectLst>
<a:scene3d>
<a:camera prst="orthographicFront">
<a:rot lat="0" lon="0" rev="0"/>
</a:camera>
<a:lightRig rig="threePt" dir="t">
<a:rot lat="0" lon="0" rev="1200000"/>
</a:lightRig>
</a:scene3d>
<a:sp3d>
<a:bevelT w="63500" h="25400"/>
</a:sp3d>
</a:effectStyle>
</a:effectStyleLst>
<a:bgFillStyleLst>
<a:solidFill>
<a:schemeClr val="phClr"/>
</a:solidFill>
<a:gradFill rotWithShape="1">
<a:gsLst>
<a:gs pos="0">
<a:schemeClr val="phClr">
<a:tint val="40000"/>
<a:satMod val="350000"/>
</a:schemeClr>
</a:gs>
<a:gs pos="40000">
<a:schemeClr val="phClr">
<a:tint val="45000"/>
<a:shade val="99000"/>
<a:satMod val="350000"/>
</a:schemeClr>
</a:gs>
<a:gs pos="100000">
<a:schemeClr val="phClr">
<a:shade val="20000"/>
<a:satMod val="255000"/>
</a:schemeClr>
</a:gs>
</a:gsLst>
<a:path path="circle">
<a:fillToRect l="50000" t="-80000" r="50000" b="180000"/>
</a:path>
</a:gradFill>
<a:gradFill rotWithShape="1">
<a:gsLst>
<a:gs pos="0">
<a:schemeClr val="phClr">
<a:tint val="80000"/>
<a:satMod val="300000"/>
</a:schemeClr>
</a:gs>
<a:gs pos="100000">
<a:schemeClr val="phClr">
<a:shade val="30000"/>
<a:satMod val="200000"/>
</a:schemeClr>
</a:gs>
</a:gsLst>
<a:path path="circle">
<a:fillToRect l="50000" t="50000" r="50000" b="50000"/>
</a:path>
</a:gradFill>
</a:bgFillStyleLst>
</a:fmtScheme>
</a:themeElements>
<a:objectDefaults/>
<a:extraClrSchemeLst/>
</a:theme>';
add1xml(t_excel, 'xl/theme/theme1.xml', t_xxx);
if g_debug_mode then
debuglog('Stp1 run time(sec):' ||
round((sysdate - l_debug_time) * 24 * 60 * 60, 2));
l_debug_time := sysdate;
end if;
for s in 1 .. workbook.sheets.count() loop
t_col_min := 16384;
t_col_max := 1;
---CHANGE 2015.5.27 BY SAM.T
/*
t_row_ind := workbook.sheets( s ).rows.first();
while t_row_ind is not null
loop
t_col_min := least( t_col_min, workbook.sheets( s ).rows( t_row_ind ).first() );
t_col_max := greatest( t_col_max, workbook.sheets( s ).rows( t_row_ind ).last() );
t_row_ind := workbook.sheets( s ).rows.next( t_row_ind );
end loop;
*/
lc_rows := workbook.sheets(s).rows;
t_row_ind := lc_rows.first();
loop
exit when t_row_ind is null;
t_col_min := least(t_col_min, lc_rows(t_row_ind).first());
t_col_max := greatest(t_col_max, lc_rows(t_row_ind).last());
t_row_ind := lc_rows.next(t_row_ind);
end loop;
---
t_xxx := '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:xdr="http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing" xmlns:x14="http://schemas.microsoft.com/office/spreadsheetml/2009/9/main" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="x14ac" xmlns:x14ac="http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac">
<dimension ref="' || alfan_col(t_col_min) || workbook.sheets(s)
.rows.first() || ':' || alfan_col(t_col_max) || workbook.sheets(s)
.rows.last() || '"/>
<sheetViews>
<sheetView' || case
when s = 1 then
' tabSelected="1"'
end || ' workbookViewId="0">';
if workbook.sheets(s)
.freeze_rows > 0 and workbook.sheets(s).freeze_cols > 0 then
t_xxx := t_xxx || ('<pane xSplit="' || workbook.sheets(s)
.freeze_cols || '" ' || 'ySplit="' || workbook.sheets(s)
.freeze_rows || '" ' || 'topLeftCell="' ||
alfan_col(workbook.sheets(s).freeze_cols + 1) ||
(workbook.sheets(s).freeze_rows + 1) || '" ' ||
'activePane="bottomLeft" state="frozen"/>');
else
if workbook.sheets(s).freeze_rows > 0 then
t_xxx := t_xxx || '<pane ySplit="' || workbook.sheets(s)
.freeze_rows || '" topLeftCell="A' ||
(workbook.sheets(s).freeze_rows + 1) ||
'" activePane="bottomLeft" state="frozen"/>';
end if;
if workbook.sheets(s).freeze_cols > 0 then
t_xxx := t_xxx || '<pane xSplit="' || workbook.sheets(s)
.freeze_cols || '" topLeftCell="' ||
alfan_col(workbook.sheets(s).freeze_cols + 1) ||
'1" activePane="bottomLeft" state="frozen"/>';
end if;
end if;
t_xxx := t_xxx ||
'</sheetView>
</sheetViews>
<sheetFormatPr defaultRowHeight="15" x14ac:dyDescent="0.25"/>';
if workbook.sheets(s).widths.count() > 0 then
t_xxx := t_xxx || '<cols>';
t_col_ind := workbook.sheets(s).widths.first();
while t_col_ind is not null loop
t_xxx := t_xxx || '<col min="' || t_col_ind || '" max="' ||
t_col_ind || '" width="' ||
to_char(workbook.sheets(s).widths(t_col_ind),
'TM9',
'NLS_NUMERIC_CHARACTERS=.,') ||
'" customWidth="1"/>';
t_col_ind := workbook.sheets(s).widths.next(t_col_ind);
end loop;
t_xxx := t_xxx || '</cols>';
end if;
t_xxx := t_xxx || '<sheetData>';
---CHANGE 2015.5.27 BY SAM.T
/*
t_row_ind := workbook.sheets( s ).rows.first();
t_tmp := null;
while t_row_ind is not null
loop
t_tmp := t_tmp || '<row r="' || t_row_ind || '" spans="' || t_col_min || ':' || t_col_max || '">';
t_len := length( t_tmp );
t_col_ind := workbook.sheets( s ).rows( t_row_ind ).first();
while t_col_ind is not null
loop
t_cell := '<c r="' || alfan_col( t_col_ind ) || t_row_ind || '"'
|| ' ' || workbook.sheets( s ).rows( t_row_ind )( t_col_ind ).style
|| '><v>'
|| to_char( workbook.sheets( s ).rows( t_row_ind )( t_col_ind ).value, 'TM9', 'NLS_NUMERIC_CHARACTERS=.,' )
|| '</v></c>';
if t_len > 32000
then
dbms_lob.writeappend( t_xxx, t_len, t_tmp );
t_tmp := null;
t_len := 0;
end if;
t_tmp := t_tmp || t_cell;
t_len := t_len + length( t_cell );
t_col_ind := workbook.sheets( s ).rows( t_row_ind ).next( t_col_ind );
end loop;
t_tmp := t_tmp || '</row>';
t_row_ind := workbook.sheets( s ).rows.next( t_row_ind );
end loop;
*/
t_row_ind := lc_rows.first();
t_tmp := null;
while t_row_ind is not null loop
t_tmp := t_tmp || '<row r="' || t_row_ind || '" spans="' ||
t_col_min || ':' || t_col_max || '">';
t_len := length(t_tmp);
t_col_ind := lc_rows(t_row_ind).first();
while t_col_ind is not null loop
t_cell := '<c r="' || alfan_col(t_col_ind) || t_row_ind || '"' || ' ' || workbook.sheets(s)
.rows(t_row_ind)(t_col_ind)
.style || '><v>' ||
to_char(lc_rows(t_row_ind)(t_col_ind).value,
'TM9',
'NLS_NUMERIC_CHARACTERS=.,') || q'[</v></c>]';
if t_len > 32000 then
--modified by jinzhao writeappend->append 
--dbms_lob.writeappend( t_xxx, t_len, t_tmp );
dbms_lob.append(t_xxx, t_tmp);
t_tmp := null;
t_len := 0;
end if;
t_tmp := t_tmp || t_cell;
t_len := t_len + length(t_cell);
t_col_ind := lc_rows(t_row_ind).next(t_col_ind);
end loop;
t_tmp := t_tmp || '</row>';
t_row_ind := lc_rows.next(t_row_ind);
end loop;
------------
t_tmp := t_tmp || '</sheetData>';
t_len := length(t_tmp);
--modified by jinzhao writeappend->append 
--dbms_lob.writeappend( t_xxx, t_len, t_tmp );
dbms_lob.append(t_xxx, t_tmp);
for a in 1 .. workbook.sheets(s).autofilters.count() loop
t_xxx := t_xxx || '<autoFilter ref="' ||
alfan_col(nvl(workbook.sheets(s).autofilters(a)
.column_start,
t_col_min)) ||
nvl(workbook.sheets(s).autofilters(a).row_start,
workbook.sheets(s).rows.first()) || ':' ||
alfan_col(coalesce(workbook.sheets(s).autofilters(a)
.column_end,
workbook.sheets(s).autofilters(a)
.column_start,
t_col_max)) ||
nvl(workbook.sheets(s).autofilters(a).row_end,
workbook.sheets(s).rows.last()) || '"/>';
end loop;
if workbook.sheets(s).mergecells.count() > 0 then
t_xxx := t_xxx || '<mergeCells count="' ||
to_char(workbook.sheets(s).mergecells.count()) || '">';
for m in 1 .. workbook.sheets(s).mergecells.count() loop
t_xxx := t_xxx || '<mergeCell ref="' || workbook.sheets(s)
.mergecells(m) || '"/>';
end loop;
t_xxx := t_xxx || '</mergeCells>';
end if;
--
if workbook.sheets(s).validations.count() > 0 then
t_xxx := t_xxx || '<dataValidations count="' ||
to_char(workbook.sheets(s).validations.count()) || '">';
for m in 1 .. workbook.sheets(s).validations.count() loop
t_xxx := t_xxx || '<dataValidation' || ' type="' || workbook.sheets(s).validations(m).type || '"' ||
' errorStyle="' || workbook.sheets(s).validations(m)
.errorstyle || '"' || ' allowBlank="' || case
when nvl(workbook.sheets(s).validations(m).allowblank, true) then
'1'
else
'0'
end || '"' || ' sqref="' || workbook.sheets(s).validations(m)
.sqref || '"';
if workbook.sheets(s).validations(m).prompt is not null then
t_xxx := t_xxx || ' showInputMessage="1" prompt="' || workbook.sheets(s).validations(m)
.prompt || '"';
if workbook.sheets(s).validations(m).title is not null then
t_xxx := t_xxx || ' promptTitle="' || workbook.sheets(s).validations(m)
.title || '"';
end if;
end if;
if workbook.sheets(s).validations(m).showerrormessage then
t_xxx := t_xxx || ' showErrorMessage="1"';
if workbook.sheets(s).validations(m).error_title is not null then
t_xxx := t_xxx || ' errorTitle="' || workbook.sheets(s).validations(m)
.error_title || '"';
end if;
if workbook.sheets(s).validations(m).error_txt is not null then
t_xxx := t_xxx || ' error="' || workbook.sheets(s).validations(m)
.error_txt || '"';
end if;
end if;
t_xxx := t_xxx || '>';
if workbook.sheets(s).validations(m).formula1 is not null then
t_xxx := t_xxx || '<formula1>' || workbook.sheets(s).validations(m)
.formula1 || '</formula1>';
end if;
if workbook.sheets(s).validations(m).formula2 is not null then
t_xxx := t_xxx || '<formula2>' || workbook.sheets(s).validations(m)
.formula2 || '</formula2>';
end if;
t_xxx := t_xxx || '</dataValidation>';
end loop;
t_xxx := t_xxx || '</dataValidations>';
end if;
--
if workbook.sheets(s).hyperlinks.count() > 0 then
t_xxx := t_xxx || '<hyperlinks>';
for h in 1 .. workbook.sheets(s).hyperlinks.count() loop
t_xxx := t_xxx || '<hyperlink ref="' || workbook.sheets(s).hyperlinks(h).cell ||
'" r:id="rId' || h || '"/>';
end loop;
t_xxx := t_xxx || '</hyperlinks>';
end if;
t_xxx := t_xxx ||
'<pageMargins left="0.7" right="0.7" top="0.75" bottom="0.75" header="0.3" footer="0.3"/>';
if workbook.sheets(s).comments.count() > 0 then
t_xxx := t_xxx || '<legacyDrawing r:id="rId' ||
(workbook.sheets(s).hyperlinks.count() + 1) || '"/>';
end if;
--
t_xxx := t_xxx || '</worksheet>';
add1xml(t_excel, 'xl/worksheets/sheet' || s || '.xml', t_xxx);
if workbook.sheets(s)
.hyperlinks.count() > 0 or workbook.sheets(s).comments.count() > 0 then
t_xxx := '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">';
if workbook.sheets(s).comments.count() > 0 then
t_xxx := t_xxx || '<Relationship Id="rId' ||
(workbook.sheets(s).hyperlinks.count() + 2) ||
'" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments" Target="../comments' || s ||
'.xml"/>';
t_xxx := t_xxx || '<Relationship Id="rId' ||
(workbook.sheets(s).hyperlinks.count() + 1) ||
'" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/vmlDrawing" Target="../drawings/vmlDrawing' || s ||
'.vml"/>';
end if;
for h in 1 .. workbook.sheets(s).hyperlinks.count() loop
t_xxx := t_xxx || '<Relationship Id="rId' || h ||
'" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink" Target="' || workbook.sheets(s).hyperlinks(h).url ||
'" TargetMode="External"/>';
end loop;
t_xxx := t_xxx || '</Relationships>';
add1xml(t_excel,
'xl/worksheets/_rels/sheet' || s || '.xml.rels',
t_xxx);
end if;
--
if workbook.sheets(s).comments.count() > 0 then
declare
cnt pls_integer;
author_ind tp_author;
-- t_col_ind := workbook.sheets( s ).widths.next( t_col_ind );
begin
authors.delete();
for c in 1 .. workbook.sheets(s).comments.count() loop
authors(workbook.sheets(s).comments(c).author) := 0;
end loop;
t_xxx := '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<comments xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main">
<authors>';
cnt := 0;
author_ind := authors.first();
while author_ind is not null or
authors.next(author_ind) is not null loop
authors(author_ind) := cnt;
t_xxx := t_xxx || '<author>' || author_ind || '</author>';
cnt := cnt + 1;
author_ind := authors.next(author_ind);
end loop;
end;
t_xxx := t_xxx || '</authors><commentList>';
for c in 1 .. workbook.sheets(s).comments.count() loop
t_xxx := t_xxx || '<comment ref="' ||
alfan_col(workbook.sheets(s).comments(c).column) ||
to_char(workbook.sheets(s).comments(c)
.row || '" authorId="' ||
authors(workbook.sheets(s).comments(c).author)) || '">
<text>';
if workbook.sheets(s).comments(c).author is not null then
t_xxx := t_xxx ||
'<r><rPr><b/><sz val="9"/><color indexed="81"/><rFont val="Tahoma"/><charset val="1"/></rPr><t xml:space="preserve">' || workbook.sheets(s).comments(c)
.author || ':</t></r>';
end if;
t_xxx := t_xxx ||
'<r><rPr><sz val="9"/><color indexed="81"/><rFont val="Tahoma"/><charset val="1"/></rPr><t xml:space="preserve">' || case
when workbook.sheets(s).comments(c).author is not null then
'
'
end || workbook.sheets(s).comments(c).text ||
'</t></r></text></comment>';
end loop;
t_xxx := t_xxx || '</commentList></comments>';
add1xml(t_excel, 'xl/comments' || s || '.xml', t_xxx);
t_xxx := '<xml xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel">
<o:shapelayout v:ext="edit"><o:idmap v:ext="edit" data="2"/></o:shapelayout>
<v:shapetype id="_x0000_t202" coordsize="21600,21600" o:spt="202" path="m,l,21600r21600,l21600,xe"><v:stroke joinstyle="miter"/><v:path gradientshapeok="t" o:connecttype="rect"/></v:shapetype>';
for c in 1 .. workbook.sheets(s).comments.count() loop
t_xxx := t_xxx || '<v:shape id="_x0000_s' || to_char(c) ||
'" type="#_x0000_t202"
style="position:absolute;margin-left:35.25pt;margin-top:3pt;z-index:' ||
to_char(c) ||
';visibility:hidden;" fillcolor="#ffffe1" o:insetmode="auto">
<v:fill color2="#ffffe1"/><v:shadow on="t" color="black" obscured="t"/><v:path o:connecttype="none"/>
<v:textbox style="mso-direction-alt:auto"><div style="text-align:left"></div></v:textbox>
<x:ClientData ObjectType="Note"><x:MoveWithCells/><x:SizeWithCells/>';
t_w := workbook.sheets(s).comments(c).width;
t_c := 1;
loop
if workbook.sheets(s)
.widths.exists(workbook.sheets(s).comments(c).column + t_c) then
t_cw := 256 * workbook.sheets(s)
.widths(workbook.sheets(s).comments(c).column + t_c);
t_cw := trunc((t_cw + 18) / 256 * 7); -- assume default 11 point Calibri
else
t_cw := 64;
end if;
exit when t_w < t_cw;
t_c := t_c + 1;
t_w := t_w - t_cw;
end loop;
t_h := workbook.sheets(s).comments(c).height;
t_xxx := t_xxx || to_char('<x:Anchor>' || workbook.sheets(s).comments(c)
.column || ',15,' || workbook.sheets(s).comments(c).row ||
',30,' || (workbook.sheets(s).comments(c)
.column + t_c - 1) || ',' || round(t_w) || ',' ||
(workbook.sheets(s).comments(c)
.row + 1 + trunc(t_h / 20)) || ',' ||
mod(t_h, 20) || '</x:Anchor>');
t_xxx := t_xxx ||
to_char('<x:AutoFill>False</x:AutoFill><x:Row>' ||
(workbook.sheets(s).comments(c).row - 1) ||
'</x:Row><x:Column>' ||
(workbook.sheets(s).comments(c).column - 1) ||
'</x:Column></x:ClientData></v:shape>');
end loop;
t_xxx := t_xxx || '</xml>';
add1xml(t_excel, 'xl/drawings/vmlDrawing' || s || '.vml', t_xxx);
end if;
--
end loop;
t_xxx := '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
<Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings" Target="sharedStrings.xml"/>
<Relationship Id="rId2" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles" Target="styles.xml"/>
<Relationship Id="rId3" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme" Target="theme/theme1.xml"/>';
for s in 1 .. workbook.sheets.count() loop
t_xxx := t_xxx || '
<Relationship Id="rId' || (9 + s) ||
'" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet" Target="worksheets/sheet' || s ||
'.xml"/>';
end loop;
t_xxx := t_xxx || '</Relationships>';
add1xml(t_excel, 'xl/_rels/workbook.xml.rels', t_xxx);
t_xxx := '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<sst xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" count="' ||
workbook.str_cnt || '" uniqueCount="' ||
workbook.strings.count() || '">';
t_tmp := null;
for i in 0 .. workbook.str_ind.count() - 1 loop
t_str := '<si><t>' ||
dbms_xmlgen.convert(substr(workbook.str_ind(i), 1, 32000)) ||
'</t></si>';
if lengthb(t_tmp) + lengthb(t_str) > 32000 then
t_xxx := t_xxx || t_tmp;
t_tmp := null;
end if;
t_tmp := t_tmp || t_str;
end loop;
t_xxx := t_xxx || t_tmp || '</sst>';
add1xml(t_excel, 'xl/sharedStrings.xml', t_xxx);
if g_debug_mode then
debuglog('Stp2 run time(sec):' ||
round((sysdate - l_debug_time) * 24 * 60 * 60, 2));
l_debug_time := sysdate;
end if;
finish_zip(t_excel);
if g_debug_mode then
debuglog('Stp3 run time(sec):' ||
round((sysdate - l_debug_time) * 24 * 60 * 60, 2));
l_debug_time := sysdate;
end if;
clear_workbook;
if g_debug_mode then
debuglog('Stp4 run time(sec):' ||
round((sysdate - l_debug_time) * 24 * 60 * 60, 2));
l_debug_time := sysdate;
debuglog('finish(-)');
end if;
return t_excel;
end;
--
procedure save(p_directory varchar2, p_filename varchar2) is
begin
blob2file(finish, p_directory, p_filename);
end;
--
procedure query2sheet(p_sql varchar2,
p_col_value_tab smt_xlsx_maker_pkg.tab_col_value ---運行的動態(tài)SQL的綁定變量
,
p_column_headers boolean := true,
p_directory varchar2 := null,
p_filename varchar2 := null,
p_sheet pls_integer := null,
p_footer boolean := true,
x_retcode out number ---0:成功 非0:失敗( 或者:0:成功 1:警告 2:錯誤 ----注意:確定警告的時候要做什么動作)
,
x_errbuf out varchar2 ---具體的錯誤信息
) is
l_process_phase number; --標(biāo)識程序的進度
t_sheet pls_integer;
t_c integer;
t_col_cnt integer;
t_desc_tab dbms_sql.desc_tab2;
d_tab dbms_sql.date_table;
n_tab dbms_sql.number_table;
v_tab dbms_sql.varchar2_table;
t_bulk_size pls_integer := 200;
t_r integer;
t_cur_row pls_integer;
---
l_debug_time date;
begin
x_retcode := 0;
x_errbuf := null;
l_process_phase := 0;
if g_debug_mode then
debuglog('query2sheet(+)');
l_debug_time := sysdate;
end if;
if p_sql is null then
x_errbuf := '調(diào)用query2sheet的時候,必要的參數(shù)不存在,請檢查參數(shù)!';
x_retcode := 2;
return;
end if;
if p_sheet is null then
new_sheet;
end if;
l_process_phase := 1;
t_c := dbms_sql.open_cursor;
dbms_sql.parse(t_c, p_sql, dbms_sql.native);
l_process_phase := 2;
if p_col_value_tab.count > 0 then
for i in 1 .. p_col_value_tab.last loop
if p_col_value_tab.exists(i) then
dbms_sql.bind_variable(t_c,
':' || i,
p_col_value_tab(i).col_value);
if g_debug_mode then
debuglog('綁定變量--' || i || ':' || p_col_value_tab(i).col_value);
end if;
end if;
end loop;
end if;
l_process_phase := 3;
dbms_sql.describe_columns2(t_c, t_col_cnt, t_desc_tab);
for c in 1 .. t_col_cnt loop
if p_column_headers then
cell(c,
1,
t_desc_tab(c).col_name,
p_fontid => get_font('Calibri', p_bold => true),
p_sheet => t_sheet,
p_fillid => get_fill('solid', 'cccccc'));
end if;
-- dbms_output.put_line( t_desc_tab( c ).col_name || ' ' || t_desc_tab( c ).col_type );
case
when t_desc_tab(c).col_type in (2, 100, 101) then
dbms_sql.define_array(t_c, c, n_tab, t_bulk_size, 1);
when t_desc_tab(c).col_type in (12, 178, 179, 180, 181, 231) then
dbms_sql.define_array(t_c, c, d_tab, t_bulk_size, 1);
when t_desc_tab(c).col_type in (1, 8, 9, 96, 112) then
dbms_sql.define_array(t_c, c, v_tab, t_bulk_size, 1);
else
null;
end case;
end loop;
l_process_phase := 4;
--
t_cur_row := case
when p_column_headers then
2
else
1
end;
t_sheet := nvl(p_sheet, workbook.sheets.count());
l_process_phase := 5;
--
t_r := dbms_sql.execute(t_c);
loop
t_r := dbms_sql.fetch_rows(t_c);
if t_r > 0 then
for c in 1 .. t_col_cnt loop
case
when t_desc_tab(c).col_type in (2, 100, 101) then
dbms_sql.column_value(t_c, c, n_tab);
for i in 0 .. t_r - 1 loop
if n_tab(i + n_tab.first()) is not null then
cell(c,
t_cur_row + i,
n_tab(i + n_tab.first()),
p_sheet => t_sheet);
end if;
end loop;
n_tab.delete;
when t_desc_tab(c).col_type in (12, 178, 179, 180, 181, 231) then
dbms_sql.column_value(t_c, c, d_tab);
for i in 0 .. t_r - 1 loop
if d_tab(i + d_tab.first()) is not null then
cell(c,
t_cur_row + i,
d_tab(i + d_tab.first()),
p_sheet => t_sheet);
end if;
end loop;
d_tab.delete;
when t_desc_tab(c).col_type in (1, 8, 9, 96, 112) then
dbms_sql.column_value(t_c, c, v_tab);
for i in 0 .. t_r - 1 loop
if v_tab(i + v_tab.first()) is not null then
cell(c,
t_cur_row + i,
v_tab(i + v_tab.first()),
p_sheet => t_sheet);
end if;
end loop;
v_tab.delete;
else
null;
end case;
end loop;
end if;
if t_r != t_bulk_size then
t_cur_row := t_cur_row + t_r;
end if;
exit when t_r != t_bulk_size;
t_cur_row := t_cur_row + t_r;
end loop;
g_query2sheet_rows := t_cur_row - case
when p_column_headers then
2
else
1
end;
l_process_phase := 6;
dbms_sql.close_cursor(t_c);
if g_debug_mode then
debuglog('Stp1 run time(sec):' ||
round((sysdate - l_debug_time) * 24 * 60 * 60, 2));
l_debug_time := sysdate;
end if;
l_process_phase := 7;
if p_footer then
-- set footer
if g_query2sheet_footer is null then
cell(1,
t_cur_row + 2,
'Generated ' || to_char(sysdate, 'yyyy/mm/dd hh24:mi:ss') ||
' by ' || user || ', rows:' || g_query2sheet_rows,
p_sheet => t_sheet);
else
cell(1,
t_cur_row + 2,
replace(g_query2sheet_footer, '&ROWS', g_query2sheet_rows),
p_sheet => t_sheet);
end if;
end if;
l_process_phase := 8;
if (p_directory is not null and p_filename is not null) then
save(p_directory, p_filename);
end if;
if g_debug_mode then
debuglog('Stp2 run time(sec):' ||
round((sysdate - l_debug_time) * 24 * 60 * 60, 2));
l_debug_time := sysdate;
debuglog('query2sheet(-)');
end if;
l_process_phase := 99;
exception
when others then
if dbms_sql.is_open(t_c) then
dbms_sql.close_cursor(t_c);
end if;
clear_workbook;
x_retcode := 2;
x_errbuf := 'p_sql:' || substr(p_sql, 1, 20) ||
' 做自動輸出XLSX文件的時候有異常錯誤!' || chr(10) || '錯誤信息:' ||
to_char(sqlcode) || '-' || sqlerrm || chr(10) || '程序進度:' ||
l_process_phase;
end;
procedure query2sheet(p_sql varchar2,
p_column_headers boolean := true,
p_directory varchar2 := null,
p_filename varchar2 := null,
p_sheet pls_integer := null,
p_footer boolean := true,
x_retcode out number ---0:成功 非0:失敗( 或者:0:成功 1:警告 2:錯誤 ----注意:確定警告的時候要做什么動作)
,
x_errbuf out varchar2 ---具體的錯誤信息
) is
l_sql_statement varchar2(32767);
l_sql_statement_bv varchar2(32767);
l_col_value_tab smt_xlsx_maker_pkg.tab_col_value;
begin
if g_debug_mode then
debuglog('query2sheetII(+)');
end if;
---SQL自動轉(zhuǎn)換,用上傳說中的綁定變量!
l_sql_statement := p_sql;
----
l_sql_statement_bv := p_sql;
/*--這個要額外的開發(fā),這里先備注掉。
XYG_FND_COMMON_PKG.SQL_BIND_VARIABLE_CHANGE (
L_SQL_STATEMENT--P_SQL_STATEMENT IN VARCHAR2 ---要改變的SQL語句
,L_SQL_STATEMENT_BV--X_SQL_STATEMENT_BV OUT VARCHAR2--變化之后的SQL語句
,L_COL_VALUE_TAB--X_COL_VALUE_TAB OUT T_COL_VALUE ---綁定參數(shù)的輸出
,x_retcode--x_retcode OUT NUMBER ---0:成功 非0:失敗( 或者:0:成功 1:警告 2:錯誤 ----注意:確定警告的時候要做什么動作)
,x_errbuf--x_errbuf OUT VARCHAR2 ---具體的錯誤信息
);
*/
x_retcode := 0;
if x_retcode <> 0 then
x_errbuf := '產(chǎn)生綁定變量的動態(tài)SQL有異常錯誤!錯誤信息:' || x_errbuf;
if g_debug_mode then
debuglog('x_errbuf:' || x_errbuf);
end if;
return;
else
if g_debug_mode then
if l_col_value_tab.count > 0 then
debuglog('LAST綁定變量:' || l_col_value_tab.last);
for i in 1 .. l_col_value_tab.last loop
if l_col_value_tab.exists(i) then
debuglog('綁定變量:' || i || '--' || l_col_value_tab(i)
.col_value);
end if;
end loop;
end if;
debuglog('L_SQL_STATEMENT_BV:' || chr(10) || l_sql_statement_bv);
end if;
end if;
query2sheet(l_sql_statement_bv,
l_col_value_tab ---運行的動態(tài)SQL的綁定變量
,
p_column_headers,
p_directory,
p_filename,
p_sheet,
p_footer,
x_retcode,
x_errbuf);
if g_debug_mode then
debuglog('query2sheetII(-)');
end if;
end;
procedure query2sheet(p_sql varchar2,
p_column_headers boolean := true,
p_directory varchar2 := null,
p_filename varchar2 := null,
p_sheet pls_integer := null,
p_footer boolean := true) is
l_retcode number;
l_errbuf varchar2(4000);
begin
query2sheet(p_sql,
p_column_headers,
p_directory,
p_filename,
p_sheet,
p_footer,
l_retcode,
l_errbuf);
if l_retcode <> 0 then
raise_application_error(-20008, l_errbuf, true);
end if;
end;
procedure cursor2sheet(p_sql in sys_refcursor,
p_column_headers boolean := true,
p_directory varchar2 := null,
p_filename varchar2 := null,
p_sheet pls_integer := null,
p_footer boolean := true) is
ctx dbms_xmlgen.ctxhandle;
tmpxml xmltype;
cursor cdata is
select t2.column_value.getrootelement() colname,
extractvalue(t2.column_value, 'node()') value
from table(xmlsequence(tmpxml)) t,
table(xmlsequence(extract(t.column_value, '/ROWSET/ROW/node()'))) t2
order by rownum;
tscolheaders sys.dbms_debug_vc2coll := sys.dbms_debug_vc2coll();
tsvalues sys.dbms_debug_vc2coll := sys.dbms_debug_vc2coll();
t_sheet pls_integer := 1;
t_cur_row pls_integer := 1;
colid pls_integer := 1;
ncolnumber pls_integer;
n pls_integer;
atmpval sys.anydata;
nnumval number;
ttsval timestamp;
ddateval date;
svarcharval varchar2(4000);
bgottype boolean;
etypeconvert exception;
etypedateformat exception;
etypenonnumeric exception;
etypenotdefined exception;
pragma exception_init(etypeconvert, -6502);
pragma exception_init(etypedateformat, -1830);
pragma exception_init(etypenonnumeric, -1858);
begin
-- XML Creation from the sys_refcursor
ctx := dbms_xmlgen.newcontext(p_sql);
-- this is important in order to get all the column headers, even if all data are null
dbms_xmlgen.setnullhandling(ctx, dbms_xmlgen.empty_tag);
dbms_xmlgen.getxmltype(ctx, tmpxml);
if p_sheet is null then
new_sheet;
end if;
-- Load Columns and Values into Arrays
open cdata;
fetch cdata bulk collect
into tscolheaders, tsvalues;
close cdata;
-- get distinct headers
tscolheaders := set(tscolheaders);
-- get number of headers (of columns)
ncolnumber := tscolheaders.count;
-- Create column headers if wanted
if p_column_headers then
-- set headers into sheet
for i in tscolheaders.first .. tscolheaders.last loop
cell(i,
t_cur_row,
tscolheaders(i),
p_fontid => get_font('Calibri', p_bold => true),
p_sheet => t_sheet);
end loop;
t_cur_row := 2;
end if;
t_sheet := nvl(p_sheet, workbook.sheets.count());
-- fill cells
for i in tsvalues.first .. tsvalues.last loop
-- check if we must reset col to 1 and go to next line
if i > ncolnumber and mod(i, ncolnumber) = 1 then
-- reset colId to 1 and go to next line
colid := 1;
t_cur_row := t_cur_row + 1;
end if;
-- find the good type and insert into Cell
-- initialize “checker”
bgottype := false;
-- Number ?
if not bgottype then
begin
atmpval := sys.anydata.convertnumber(tsvalues(i));
bgottype := true;
n := atmpval.getnumber(nnumval);
-- load data into cell
cell(colid, t_cur_row, nnumval, p_sheet => t_sheet);
-- if conversion fails
exception
when etypeconvert or etypedateformat or etypenonnumeric then
bgottype := false;
end;
end if;
-- TimeStamp ?
if not bgottype then
begin
atmpval := sys.anydata.converttimestamp(tsvalues(i));
bgottype := true;
n := atmpval.gettimestamp(ttsval);
-- load data into cell
cell(colid, t_cur_row, to_date(ttsval), p_sheet => t_sheet);
-- if conversion fails
exception
when etypeconvert or etypedateformat or etypenonnumeric then
bgottype := false;
end;
end if;
-- Date ?
if not bgottype then
begin
atmpval := sys.anydata.convertdate(tsvalues(i));
bgottype := true;
n := atmpval.getdate(ddateval);
-- load data into cell
cell(colid, t_cur_row, ddateval, p_sheet => t_sheet);
-- if conversion fails
exception
when etypeconvert or etypedateformat or etypenonnumeric then
bgottype := false;
end;
end if;
-- Varchar2 ?
if not bgottype then
begin
atmpval := sys.anydata.convertvarchar2(tsvalues(i));
bgottype := true;
n := atmpval.getvarchar2(svarcharval);
-- load data into cell
cell(colid, t_cur_row, svarcharval, p_sheet => t_sheet);
-- if conversion fails
exception
when etypeconvert or etypedateformat or etypenonnumeric then
bgottype := false;
end;
end if;
-- unsupported type
if not bgottype then
raise etypenotdefined;
end if;
-- go to next col
colid := colid + 1;
end loop;
if p_footer then
-- set footer
cell(1,
t_cur_row + 2,
'Generated ' || sysdate || ' by ' || user,
p_sheet => t_sheet);
end if;
if (p_directory is not null and p_filename is not null) then
save(p_directory, p_filename);
end if;
exception
when etypenotdefined then
raise_application_error(-20999,
'one data has an unsupported type',
false);
raise;
when others then
raise_application_error(-20999, 'Export to XLSX failed', true);
end;
end;

使用方法:

declare
l_sql varchar2(30000);
begin
l_sql := 'select * from all_objects';
smt_xlsx_maker_pkg.query2sheet(l_sql,
true,
'XLS_DIR',
'Export2.xlsx');
end;

除此之外,基本上Excel 中有的效果它都可以生成。

以下一個例子,包括居中,合并單元格,底色,新增工作表等:

begin

smt_xlsx_maker_pkg.clear_workbook;
smt_xlsx_maker_pkg.new_sheet;
smt_xlsx_maker_pkg.cell(5, 1, 5);
smt_xlsx_maker_pkg.cell(3, 1, 3);
smt_xlsx_maker_pkg.cell(2, 2, 45);
smt_xlsx_maker_pkg.cell(3,
2,
'Anton Scheffer',
p_alignment => smt_xlsx_maker_pkg.get_alignment(p_wraptext => true));
smt_xlsx_maker_pkg.cell(1,
4,
sysdate,
p_fontid => smt_xlsx_maker_pkg.get_font('Calibri',
p_rgb => 'FFFF0000'));
smt_xlsx_maker_pkg.cell(2,
4,
sysdate,
p_numfmtid => smt_xlsx_maker_pkg.get_numfmt('dd/mm/yyyy h:mm'));
smt_xlsx_maker_pkg.cell(3,
4,
sysdate,
p_numfmtid => smt_xlsx_maker_pkg.get_numfmt(smt_xlsx_maker_pkg.orafmt2excel('dd/mon/yyyy')));
smt_xlsx_maker_pkg.cell(5,
5,
75,
p_borderid => smt_xlsx_maker_pkg.get_border('double',
'double',
'double',
'double'));
smt_xlsx_maker_pkg.cell(2, 3, 33);
smt_xlsx_maker_pkg.hyperlink(1,
6,
'http://www.cnblogs.com/mellowsmile',
'jinzhao site');
smt_xlsx_maker_pkg.cell(1,
7,
'Some merged cells',
p_alignment => smt_xlsx_maker_pkg.get_alignment(p_horizontal => 'center'));
smt_xlsx_maker_pkg.mergecells(1, 7, 3, 7);
for i in 1 .. 5 loop
smt_xlsx_maker_pkg.comment(3, i + 3, 'Row ' || (i + 3), 'Anton');
end loop;
smt_xlsx_maker_pkg.new_sheet;
smt_xlsx_maker_pkg.set_row(1,
p_fillid => smt_xlsx_maker_pkg.get_fill('solid',
'FFFF0000'));
for i in 1 .. 5 loop
smt_xlsx_maker_pkg.cell(1, i, i);
smt_xlsx_maker_pkg.cell(2, i, i * 3);
smt_xlsx_maker_pkg.cell(3, i, 'x ' || i * 3);
end loop;
smt_xlsx_maker_pkg.query2sheet('select rownum, x.*
, case when mod( rownum, 2 ) = 0 then rownum * 3 end demo
, case when mod( rownum, 2 ) = 1 then ''demo '' || rownum end demo2 from dual x connect by rownum <= 5');
smt_xlsx_maker_pkg.save('XLS_DIR', 'Export3.xlsx');
end; 

對比兩種導(dǎo)出excel的方法,第一種方法實際上導(dǎo)出的是html文件格式,且注意set pagesize 最大為50000,超過50000行數(shù)據(jù)后會自動分頁重新打印出一行標(biāo)題,不需要創(chuàng)建oracle directory可以導(dǎo)出excel到客戶機但是單元格合并、批注等不可以個性化設(shè)置,第二種可設(shè)置單元格樣式但是需要創(chuàng)建directory且文件最終在服務(wù)器端生成。

以上所述是小編給大家介紹的oracle導(dǎo)出excel數(shù)據(jù)的相關(guān)知識,希望對大家有所幫助!

相關(guān)文章

最新評論

免费在线观看视频啪啪| 亚洲一区二区三区久久受| 人人超碰国字幕观看97| 人妻熟女中文字幕aⅴ在线| 国产精品人久久久久久| 欧美亚洲一二三区蜜臀| 3344免费偷拍视频| 成年美女黄网站18禁久久| 黑人借宿ntr人妻的沦陷2| 香港三日本三韩国三欧美三级| 清纯美女在线观看国产| av中文字幕网址在线| 粉嫩av懂色av蜜臀av| 欧美一级片免费在线成人观看| 亚洲国产第一页在线观看| 一区二区三区久久久91| 天堂中文字幕翔田av| 亚洲1卡2卡三卡4卡在线观看 | 久久永久免费精品人妻专区| 亚洲精品 欧美日韩| 1024久久国产精品| 亚洲图库另类图片区| 精品乱子伦一区二区三区免费播| 一色桃子人妻一区二区三区| 黄色无码鸡吧操逼视频| 国产美女午夜福利久久| 国产精品亚洲在线观看| 欧美 亚洲 另类综合| 高潮视频在线快速观看国家快速| av天堂中文字幕最新| 亚洲欧洲一区二区在线观看| 午夜福利人人妻人人澡人人爽| 亚洲精品无码久久久久不卡| 日本免费视频午夜福利视频| 丝袜美腿视频诱惑亚洲无| 成人av电影免费版| 中国把吊插入阴蒂的视频| 国产精品久久久久久久女人18| 亚洲欧美一区二区三区电影| 青青青视频手机在线观看| 在线免费观看亚洲精品电影| 强行扒开双腿猛烈进入免费版| 午夜毛片不卡在线看| 91精品资源免费观看| 99久久成人日韩欧美精品| 一色桃子久久精品亚洲| 色爱av一区二区三区| 蜜桃视频17c在线一区二区| 成人网18免费视频版国产| 黄色无码鸡吧操逼视频| okirakuhuhu在线观看| 97超碰免费在线视频| 日本人妻欲求不满中文字幕| 伊人情人综合成人久久网小说| 亚洲国产在线精品国偷产拍| 日本熟妇丰满厨房55| 男大肉棒猛烈插女免费视频| 晚上一个人看操B片| 亚洲综合在线观看免费| 天美传媒mv视频在线观看| 国产在线自在拍91国语自产精品| 精品久久久久久久久久久a√国产| 国产av自拍偷拍盛宴| 清纯美女在线观看国产| 国产精品精品精品999| 91老师蜜桃臀大屁股| 成人30分钟免费视频| 中文字幕日韩人妻在线三区| 不卡一区一区三区在线| 中国把吊插入阴蒂的视频| 熟妇一区二区三区高清版| 激情小视频国产在线| 亚洲av自拍天堂网| 91色老99久久九九爱精品| 美女福利视频网址导航| 亚洲成高清a人片在线观看| 亚洲av日韩精品久久久| av黄色成人在线观看| 人妻少妇亚洲精品中文字幕| 国产清纯美女al在线| 91啪国自产中文字幕在线| 成人性黑人一级av| 老司机99精品视频在线观看| 亚洲无码一区在线影院| 99国内小视频在现欢看| 一区二区三区视频,福利一区二区| 日本午夜爽爽爽爽爽视频在线观看| 最近中文字幕国产在线| 青青青艹视频在线观看| 国产精品国产三级国产精东| 啪啪啪啪啪啪啪啪av| 中文字幕一区二区三区蜜月| 57pao国产一区二区| 欧美精品国产综合久久| 免费观看成年人视频在线观看| 黄色在线观看免费观看在线| 日视频免费在线观看| 青青青青青免费视频| 护士小嫩嫩又紧又爽20p| 国产精品国色综合久久| 一区二区熟女人妻视频| 综合色区亚洲熟妇shxstz| 日韩美女福利视频网| asmr福利视频在线观看| 国产午夜男女爽爽爽爽爽视频| 精品久久久久久久久久久99| 少妇高潮一区二区三区| 国产高清精品极品美女| 大香蕉大香蕉在线有码 av| 欧美日韩精品永久免费网址| 男人天堂最新地址av| 国产91精品拍在线观看| 天天操天天干天天艹| 国产一区成人在线观看视频| 久久精品久久精品亚洲人| 亚洲午夜电影在线观看| 55夜色66夜色国产精品站| 一区二区三区另类在线| 99精品免费久久久久久久久a| 日本在线不卡免费视频| 亚洲欧美久久久久久久久| 女人精品内射国产99| 快点插进来操我逼啊视频| 黄网十四区丁香社区激情五月天| 最近中文2019年在线看| 抽查舔水白紧大视频| 动漫精品视频在线观看| 日韩一区二区电国产精品| av手机免费在线观看高潮| 人妻丝袜榨强中文字幕| 亚洲国产免费av一区二区三区| 55夜色66夜色国产精品站| 成人18禁网站在线播放| 欧美viboss性丰满| 免费看高清av的网站| 国产黄色片在线收看| 亚洲午夜精品小视频| 天天干天天操天天插天天日| 免费黄页网站4188| free性日本少妇| 国产揄拍高清国内精品对白| 88成人免费av网站| 欧美成人猛片aaaaaaa| 国产伊人免费在线播放| 亚洲第一伊人天堂网| 大鸡八强奸视频在线观看| 亚洲国产欧美一区二区三区…| 亚洲熟女女同志女同| 超鹏97历史在线观看| 日韩美在线观看视频黄| 岛国黄色大片在线观看| 人妻熟女中文字幕aⅴ在线| 欧美精品资源在线观看| 免费手机黄页网址大全| 中文字幕一区二区人妻电影冢本| 亚洲一区制服丝袜美腿| 18禁无翼鸟成人在线| 欧美一区二区三区高清不卡tv| 特级欧美插插插插插bbbbb| 男生用鸡操女生视频动漫 | 日韩欧美中文国产在线| 天天操天天污天天射| 又粗又长 明星操逼小视频| 亚洲精品国产综合久久久久久久久| 亚洲av无码成人精品区辽| 国产精品视频资源在线播放| 男女啪啪视频免费在线观看| 久久精品久久精品亚洲人| 六月婷婷激情一区二区三区| 激情国产小视频在线| 51精品视频免费在线观看| 91免费福利网91麻豆国产精品| 中文字幕一区二区亚洲一区| 日韩欧美一级精品在线观看| 天堂v男人视频在线观看| 伊人成人综合开心网| 啪啪啪啪啪啪啪免费视频| 亚洲天堂有码中文字幕视频| 动漫黑丝美女的鸡巴| 久久久久久久99精品| 成人福利视频免费在线| 97国产福利小视频合集| 一区二区三区 自拍偷拍| 国产亚洲四十路五十路| 阿v天堂2014 一区亚洲| 蜜臀av久久久久久久| 黑人巨大精品欧美视频| 99精品视频之69精品视频| 亚洲黄色av网站免费播放| 天天摸天天日天天操| 亚洲高清国产一区二区三区| 九九视频在线精品播放| 91亚洲国产成人精品性色| 婷婷五月亚洲综合在线| 93人妻人人揉人人澡人人| 亚洲人妻视频在线网| 国产精品一区二区三区蜜臀av| 鸡巴操逼一级黄色气| 红桃av成人在线观看| 男人在床上插女人视频| 男人天堂色男人av| 懂色av蜜桃a v| 亚洲另类伦春色综合小| 成人av中文字幕一区| 中文字幕第一页国产在线| 老司机福利精品免费视频一区二区| 欧美一级片免费在线成人观看| 精品亚洲国产中文自在线| 欧亚乱色一区二区三区| 久久精品在线观看一区二区| 亚洲精品中文字幕下载| 亚洲熟女女同志女同| 亚洲最大黄了色网站| 国产V亚洲V天堂无码欠欠| 日本韩国免费一区二区三区视频| 青青草亚洲国产精品视频| 午夜91一区二区三区| 视频一区二区综合精品| 在线免费视频 自拍| 中文字幕 人妻精品| 日日夜夜大香蕉伊人| 午夜毛片不卡免费观看视频 | 亚洲成人av一区在线| av久久精品北条麻妃av观看| 日本三极片中文字幕| 天天日天天干天天搡| 91av中文视频在线| 国产极品精品免费视频| 成人高潮aa毛片免费| gay gay男男瑟瑟在线网站| 91中文字幕最新合集| 国产精品欧美日韩区二区| 888亚洲欧美国产va在线播放| 日本18禁久久久久久| 黄色大片免费观看网站| 直接观看免费黄网站| 欧美日韩一级黄片免费观看| 在线观看免费岛国av| 狠狠地躁夜夜躁日日躁| 精品人妻一二三区久久| 日本精品视频不卡一二三| 精品美女福利在线观看| 欧美特色aaa大片| 中国把吊插入阴蒂的视频| 日本啪啪啪啪啪啪啪| 2020中文字幕在线播放| 九一传媒制片厂视频在线免费观看| 日本熟妇喷水xxx| 欧美男人大鸡吧插女人视频 | 天天干天天插天天谢| 国产精品久久久久国产三级试频| 青青草亚洲国产精品视频| 天天日天天爽天天干| 日韩欧美在线观看不卡一区二区| 18禁美女无遮挡免费| 亚洲精品三级av在线免费观看| 成人精品在线观看视频| 人妻久久久精品69系列| 亚洲成人激情av在线| 丰满少妇人妻xxxxx| 欧美80老妇人性视频| 色av色婷婷人妻久久久精品高清 | 黑人乱偷人妻中文字幕| 亚洲国产精品美女在线观看| 国产中文字幕四区在线观看| 无码国产精品一区二区高潮久久4| 国产精品女邻居小骚货| 蜜桃视频在线欧美一区| 91麻豆精品秘密入口在线观看| 中文字幕在线永久免费播放| 91精品啪在线免费| 青草青永久在线视频18| 欧美亚洲牲夜夜综合久久| 久久久久久性虐视频| 久久久久只精品国产三级| 亚洲av无码成人精品区辽| 成人高清在线观看视频| 风流唐伯虎电视剧在线观看| 在线播放一区二区三区Av无码| 亚洲免费视频欧洲免费视频| 亚洲高清国产自产av| 亚洲欧美精品综合图片小说| 国产视频网站一区二区三区| av成人在线观看一区| 亚洲一区二区三区久久午夜 | 亚洲综合在线观看免费| 一级黄色片夫妻性生活| 大陆av手机在线观看| 桃色视频在线观看一区二区 | av乱码一区二区三区| 把腿张开让我插进去视频 | 中文字幕在线欧美精品| 99一区二区在线观看| 亚洲蜜臀av一区二区三区九色| 人人在线视频一区二区| av资源中文字幕在线观看| 日本免费视频午夜福利视频| 天天插天天狠天天操| 少妇人妻100系列| 欧美在线一二三视频| 自拍偷拍vs一区二区三区| 2022国产精品视频| 亚洲2021av天堂| 密臀av一区在线观看| 三上悠亚和黑人665番号| 欧美视频综合第一页| 欧美黄色录像免费看的| 国产精品中文av在线播放| 亚洲另类伦春色综合小| 国产女人露脸高潮对白视频| 狠狠躁夜夜躁人人爽天天天天97| 亚洲男人让女人爽的视频| 日本一二三区不卡无| 亚洲 国产 成人 在线| 大香蕉伊人中文字幕| 四川乱子伦视频国产vip| 青青草亚洲国产精品视频| 人人爱人人妻人人澡39| 国产黄色片蝌蚪九色91| 绝色少妇高潮3在线观看| 超鹏97历史在线观看| 这里只有精品双飞在线播放| 国产 在线 免费 精品| 高清一区二区欧美系列| 日韩三级电影华丽的外出 | 日本精品美女在线观看| 精品一区二区三区三区色爱| 在线观看av亚洲情色| 精品一区二区亚洲欧美| 亚洲一区久久免费视频| 国产午夜男女爽爽爽爽爽视频| 女同久久精品秋霞网| 麻豆精品成人免费视频| 日韩精品啪啪视频一道免费| 日本一道二三区视频久久 | 瑟瑟视频在线观看免费视频| 99一区二区在线观看| 中文字幕国产专区欧美激情| 97色视频在线观看| 久久尻中国美女视频| 亚洲av色香蕉一区二区三区| 国产精品成人xxxx| 男人和女人激情视频| 天天日夜夜操天天摸| 成人性黑人一级av| 日本少妇人妻xxxxxhd| 国产精品一二三不卡带免费视频| 福利视频广场一区二区| 动漫黑丝美女的鸡巴| av在线shipin| 国产无遮挡裸体免费直播视频| 又粗又长 明星操逼小视频| 国产精品熟女久久久久浪潮| 岛国青草视频在线观看| 天天想要天天操天天干| 欧美一区二区三区乱码在线播放| 四川五十路熟女av| 国产一区成人在线观看视频| 老师让我插进去69AV| 亚洲av成人免费网站| 免费av岛国天堂网站| 欧美黑人巨大性xxxxx猛交| 日本少妇人妻xxxxxhd| 人妻丝袜榨强中文字幕| 国产精品黄页网站视频| 2022天天干天天操| 亚洲变态另类色图天堂网| 国产精品黄片免费在线观看| 亚洲中文字幕综合小综合| 女同性ⅹxx女同h偷拍| 人妻丝袜精品中文字幕| 美女大bxxxx内射| 91色秘乱一区二区三区| 不卡一区一区三区在线| 2018在线福利视频| 黄色片年轻人在线观看| 91麻豆精品传媒国产黄色片| 天天躁日日躁狠狠躁av麻豆| 在线观看日韩激情视频| 老有所依在线观看完整版 | 国语对白xxxx乱大交| 日韩国产乱码中文字幕| 天天日天天舔天天射进去| 亚洲精品高清自拍av| av新中文天堂在线网址| av一区二区三区人妻| 曰本无码人妻丰满熟妇啪啪| 91精品综合久久久久3d动漫| 视频 一区二区在线观看| 国产普通话插插视频| 午夜大尺度无码福利视频| 精品国产在线手机在线| 中文亚洲欧美日韩无线码| 蜜桃精品久久久一区二区| av中文字幕网址在线| 亚洲一区二区久久久人妻| 少妇一区二区三区久久久| 免费人成黄页网站在线观看国产| 99亚洲美女一区二区三区| 偷拍自拍 中文字幕| 视频久久久久久久人妻| 人人爱人人妻人人澡39| 三级黄色亚洲成人av| 91九色porny国产在线| 中文字幕+中文字幕| 国产精品亚洲在线观看| 日韩a级精品一区二区| 不卡日韩av在线观看| 亚洲成人精品女人久久久| 久久99久久99精品影院| 最新国产亚洲精品中文在线| 久碰精品少妇中文字幕av | 狠狠操操操操操操操操操| 天天射,天天操,天天说| 青青青青青青青青青国产精品视频| 婷婷六月天中文字幕| 婷婷五月亚洲综合在线| 真实国产乱子伦一区二区| 自拍偷拍vs一区二区三区| 北条麻妃肉色丝袜视频| www日韩a级s片av| 亚洲国产在线精品国偷产拍| 亚洲国产第一页在线观看| 欧美黄片精彩在线免费观看| 欧亚乱色一区二区三区| 在线不卡成人黄色精品| 大鸡吧插逼逼视频免费看| 韩国一级特黄大片做受| 国产卡一卡二卡三乱码手机| 偷拍自拍视频图片免费| 插逼视频双插洞国产操逼插洞| 91免费观看国产免费| 亚洲中文精品人人免费| av一区二区三区人妻| 亚洲午夜电影之麻豆 | 一区二区三区的久久的蜜桃的视频 | 黄色成人在线中文字幕| 成人性黑人一级av| 97欧洲一区二区精品免费| 黄色成年网站午夜在线观看| 天天日天天干天天爱| 亚洲一区av中文字幕在线观看| 免费国产性生活视频| 日韩北条麻妃一区在线| 午夜精品福利一区二区三区p | ka0ri在线视频| 欧美男人大鸡吧插女人视频| 一区二区三区av高清免费| 日本女人一级免费片| 亚洲 国产 成人 在线| 蜜臀成人av在线播放| 亚洲国产香蕉视频在线播放| 国产白嫩美女一区二区| 韩国男女黄色在线观看| 日本乱人一区二区三区| 国产三级片久久久久久久| 精品老妇女久久9g国产| 亚洲一区二区三区在线高清 | 岛国毛片视频免费在线观看| 天天干天天操天天插天天日| h国产小视频福利在线观看| ka0ri在线视频| 桃色视频在线观看一区二区| 久久www免费人成一看片| 日本一二三区不卡无| 国产一区二区三免费视频| 亚洲一级美女啪啪啪| 适合午夜一个人看的视频| 中文字幕av第1页中文字幕| 亚洲成人av一区在线| 久青青草视频手机在线免费观看| 人妻无码色噜噜狠狠狠狠色| 亚洲国产精品久久久久蜜桃| 欧美成人精品在线观看| 男人天堂色男人av| aⅴ精产国品一二三产品| 亚洲国产美女一区二区三区软件| 91免费放福利在线观看| 色噜噜噜噜18禁止观看| 亚洲欧美一区二区三区爱爱动图| 亚洲国产在人线放午夜| 国产 在线 免费 精品| 一区二区三区的久久的蜜桃的视频| 天码人妻一区二区三区在线看| 偷拍自拍亚洲美腿丝袜| 91免费福利网91麻豆国产精品 | 人妻素人精油按摩中出| 久久尻中国美女视频| 桃色视频在线观看一区二区| 国产欧美日韩在线观看不卡| 天天摸天天干天天操科普| 亚洲最大黄了色网站| 欧美偷拍亚洲一区二区| 亚洲av自拍天堂网| 在线新三级黄伊人网| 888亚洲欧美国产va在线播放| 成年人的在线免费视频| 99久久成人日韩欧美精品| 国产日韩精品电影7777| 亚洲激情av一区二区| 午夜在线观看岛国av,com| 深田咏美亚洲一区二区| 日韩熟女av天堂系列| 欧美 亚洲 另类综合| 美女吃鸡巴操逼高潮视频| 青青青青青青青青青青草青青| 亚洲变态另类色图天堂网| 亚洲1069综合男同| 中文 成人 在线 视频| 夜女神免费福利视频| 青青热久免费精品视频在线观看| 又色又爽又黄的美女裸体| 成年人中文字幕在线观看| 97小视频人妻一区二区| 3337p日本欧洲大胆色噜噜| 欧美日韩国产一区二区三区三州| 欧美黄色录像免费看的| 91极品新人『兔兔』精品新作| 天天操天天操天天碰| 日韩写真福利视频在线观看| 适合午夜一个人看的视频| 5528327男人天堂| 91小伙伴中女熟女高潮| 91免费观看国产免费| 欧美视频中文一区二区三区| 久草视频在线免播放| 2o22av在线视频| 亚洲天堂成人在线观看视频网站| 四虎永久在线精品免费区二区| 久久h视频在线观看| 成年女人免费播放视频| 色综合久久五月色婷婷综合| 国产刺激激情美女网站| 亚洲1卡2卡三卡4卡在线观看| 成人性爱在线看四区| 亚洲少妇高潮免费观看| 国产乱子伦精品视频潮优女| 97人人模人人爽人人喊| 欧美区一区二区三视频| 在线免费观看99视频| 99久久99一区二区三区| 一区二区三区日韩久久| 欧美精品欧美极品欧美视频| 日韩激情文学在线视频| 亚国产成人精品久久久| 国产一区二区火爆视频 | 免费在线福利小视频| 国产污污污污网站在线| 亚洲熟女久久久36d| 激情小视频国产在线| 亚洲区欧美区另类最新章节| 97青青青手机在线视频 | 新婚人妻聚会被中出| 欧美国产亚洲中英文字幕| 午夜的视频在线观看| 91小伙伴中女熟女高潮| 久久久91蜜桃精品ad| 亚洲 人妻 激情 中文| 神马午夜在线观看视频| 成年人免费看在线视频| 国产精品久久久久久久久福交 | 日韩a级黄色小视频| 馒头大胆亚洲一区二区| 888亚洲欧美国产va在线播放| 性感美女福利视频网站| 欧美偷拍亚洲一区二区| 日韩a级黄色小视频| 午夜美女少妇福利视频| 一区二区三区视频,福利一区二区| 国产精品久久久黄网站| 国产日韩精品免费在线| 日本三极片中文字幕| 日本一二三中文字幕| 偷拍自拍亚洲美腿丝袜| 亚洲国产中文字幕啊啊啊不行了| 春色激情网欧美成人| 亚洲va国产va欧美精品88| 亚洲 国产 成人 在线| heyzo蜜桃熟女人妻| 自拍偷拍日韩欧美亚洲| 五十路老熟女码av| 97色视频在线观看| 老司机午夜精品视频资源 | 五月精品丁香久久久久福利社| 精品一区二区三区三区88| 亚洲色偷偷综合亚洲AV伊人| 老师啊太大了啊啊啊尻视频| 91传媒一区二区三区| 天天操夜夜骑日日摸| 亚洲欧美综合另类13p| av在线免费中文字幕| 亚洲男人让女人爽的视频| 久久99久久99精品影院| h国产小视频福利在线观看| 中文字幕免费福利视频6| 天天摸天天干天天操科普| 黄片色呦呦视频免费看| 亚洲一区av中文字幕在线观看| 在线国产日韩欧美视频| 中文字母永久播放1区2区3区| 九色porny九色9l自拍视频| 老司机深夜免费福利视频在线观看| 日本免费午夜视频网站| 任你操任你干精品在线视频| 人妻丝袜诱惑我操她视频| 小泽玛利亚视频在线观看| 亚洲 欧美 精品 激情 偷拍| 亚洲免费国产在线日韩| 漂亮 人妻被中出中文| 女蜜桃臀紧身瑜伽裤| 91在线视频在线精品3| 亚洲的电影一区二区三区 | 激情图片日韩欧美人妻| 人人爱人人妻人人澡39| 91久久人澡人人添人人爽乱| jiuse91九色视频| 亚洲人妻国产精品综合| 91高清成人在线视频| 懂色av蜜桃a v| 亚洲男人让女人爽的视频| av完全免费在线观看av| 超pen在线观看视频公开97| 国产熟妇一区二区三区av| 韩国女主播精品视频网站| 日本成人不卡一区二区| 亚洲一区二区三区久久午夜| 懂色av之国产精品| 黄色av网站免费在线| 蜜桃视频入口久久久| 日本免费视频午夜福利视频| 国产女孩喷水在线观看| 天堂av在线播放免费| 亚洲成人av在线一区二区| 国产黄色大片在线免费播放| 蜜桃视频入口久久久| 在线 中文字幕 一区| 亚洲欧美综合在线探花| 亚洲成人情色电影在线观看| 99久久超碰人妻国产| 91精品综合久久久久3d动漫| 国产麻豆91在线视频| 欧美地区一二三专区| 亚洲精品午夜久久久久| 青青青青爽手机在线| 中文字日产幕乱六区蜜桃| 欧美成人小视频在线免费看| 红杏久久av人妻一区| 天天日天天天天天天天天天天| 亚洲国产精品黑丝美女| 在线观看免费岛国av| 啪啪啪操人视频在线播放| 日本a级视频老女人| 成年午夜影片国产片| 精品美女久久久久久| 夜女神免费福利视频| 国产不卡av在线免费| 天天日天天透天天操| 污污小视频91在线观看| 国产高清精品极品美女| 亚洲av色香蕉一区二区三区 | 99国产精品窥熟女精品| 馒头大胆亚洲一区二区| 久久精品亚洲国产av香蕉| 午夜场射精嗯嗯啊啊视频| 在线观看911精品国产| 91人妻精品久久久久久久网站| 久久综合老鸭窝色综合久久| 久草视频 久草视频2| 午夜免费体验区在线观看| 护士特殊服务久久久久久久| caoporn蜜桃视频| 大香蕉大香蕉大香蕉大香蕉大香蕉| 亚洲最大免费在线观看| 青青青aaaa免费| 91国产在线视频免费观看| av日韩在线观看大全| 国产精品3p和黑人大战| 中文字幕一区的人妻欧美日韩| 91精品资源免费观看| 国产成人精品福利短视频| 亚洲一区二区久久久人妻| lutube在线成人免费看| 精品美女久久久久久| 一区二区三区四区五区性感视频| 大鸡巴操娇小玲珑的女孩逼| 成人午夜电影在线观看 久久| 国产高清精品一区二区三区| 亚洲欧美久久久久久久久| 色吉吉影音天天干天天操| 性感美女高潮视频久久久 | 日本人妻少妇18—xx| 天天做天天爽夜夜做少妇| 在线观看免费视频色97| 麻豆性色视频在线观看| 三级黄色亚洲成人av| 亚洲自拍偷拍综合色| 国产精品成久久久久三级蜜臀av | 天天日天天干天天舔天天射| 久久精品亚洲国产av香蕉| 精产国品久久一二三产区区别| 欧美在线一二三视频| 九色porny九色9l自拍视频| 精品国产污污免费网站入口自| 欧亚乱色一区二区三区| 插小穴高清无码中文字幕| 在线观看一区二区三级| 欧美日韩熟女一区二区三区| 国产麻豆剧传媒精品国产av蜜桃| 综合激情网激情五月天| 亚洲欧美人精品高清| 亚洲精品国品乱码久久久久| 人人在线视频一区二区| av久久精品北条麻妃av观看| 国产janese在线播放| 亚洲欧美一区二区三区爱爱动图 | 亚洲精品欧美日韩在线播放| 免费观看理论片完整版| 2o22av在线视频| 玖玖一区二区在线观看| 黄色三级网站免费下载| 天天日天天爽天天干| 成人免费公开视频无毒| 啪啪啪18禁一区二区三区| 日本人妻欲求不满中文字幕| 欧美激情精品在线观看| 日韩三级电影华丽的外出| 91亚洲手机在线视频播放| 日韩欧美亚洲熟女人妻| 日本真人性生活视频免费看| 在线免费91激情四射 | 自拍偷拍日韩欧美一区二区| 成人亚洲精品国产精品| 亚洲免费福利一区二区三区| 日韩精品中文字幕在线| 激情小视频国产在线| 国产一线二线三线的区别在哪| 涩涩的视频在线观看视频| 福利在线视频网址导航| 国产精品黄色的av| 青青青国产片免费观看视频| 动漫美女的小穴视频| 亚洲成人av在线一区二区| 狠狠的往里顶撞h百合| 中文字幕欧美日韩射射一| 亚洲国产中文字幕啊啊啊不行了 | 午夜大尺度无码福利视频| 久久永久免费精品人妻专区| 绯色av蜜臀vs少妇| 精品一区二区三四区| 天天操天天爽天天干| 国产自拍黄片在线观看| 欧美偷拍亚洲一区二区| 超碰97免费人妻麻豆| 青青尤物在线观看视频网站| 欧美一区二区三区四区性视频| 亚洲国产香蕉视频在线播放| 熟女人妻一区二区精品视频| 亚洲区欧美区另类最新章节| 美女骚逼日出水来了| 日韩影片一区二区三区不卡免费| 天天日天天添天天爽| 噜噜色噜噜噜久色超碰| 日本美女成人在线视频| 亚洲一级美女啪啪啪| 久久这里只有精彩视频免费| 国产视频网站国产视频| 国产一区成人在线观看视频 | 老熟妇xxxhd老熟女| 亚洲欧美激情中文字幕| 男人天堂最新地址av| 国产麻豆国语对白露脸剧情 | 93精品视频在线观看| 亚洲图片欧美校园春色| 福利视频一区二区三区筱慧| 久久久久五月天丁香社区| 91久久国产成人免费网站| 丝袜美腿欧美另类 中文字幕| 日韩国产乱码中文字幕| 成年人免费看在线视频| 亚洲 欧美 自拍 偷拍 在线| 青青青青青青青在线播放视频| 特一级特级黄色网片| 日本女大学生的黄色小视频| 欧美老妇精品另类不卡片| 欧美日韩高清午夜蜜桃大香蕉| 性色蜜臀av一区二区三区| 韩国女主播精品视频网站| 97年大学生大白天操逼| 亚洲欧美另类手机在线| 亚洲综合一区成人在线| 中文字幕1卡1区2区3区| 一级A一级a爰片免费免会员| 久久这里有免费精品| 一区二区三区视频,福利一区二区| 91九色porny国产在线| 亚洲 国产 成人 在线| 视频在线亚洲一区二区| 亚洲精品一线二线在线观看| 国产日韩av一区二区在线| 亚洲av极品精品在线观看| av手机免费在线观看高潮| 中文字母永久播放1区2区3区| 色狠狠av线不卡香蕉一区二区| 亚洲国产欧美国产综合在线| 国产高潮无码喷水AV片在线观看| 偷拍自拍 中文字幕| 福利午夜视频在线观看| 国产午夜福利av导航| 国产精品污污污久久| 中文字幕第1页av一天堂网| 久久永久免费精品人妻专区| 黄工厂精品视频在线观看| 亚洲中文字幕乱码区| 91久久精品色伊人6882| 成人高潮aa毛片免费| 欧美一级视频一区二区| 91免费福利网91麻豆国产精品| 国产精品久久久久国产三级试频| 婷婷午夜国产精品久久久| 亚洲人妻av毛片在线| 韩国黄色一级二级三级| 国产精品大陆在线2019不卡| 欧美一区二区三区在线资源| 在线不卡成人黄色精品| 国产三级精品三级在线不卡| 69精品视频一区二区在线观看| 成人乱码一区二区三区av| 亚洲综合另类欧美久久| 自拍 日韩 欧美激情| 欧美爆乳肉感大码在线观看| 日本一道二三区视频久久| 2022国产综合在线干| 91免费黄片可看视频| 亚洲av色香蕉一区二区三区| 青青社区2国产视频| 热久久只有这里有精品| 日日夜夜精品一二三| av天堂中文字幕最新| 大香蕉日本伊人中文在线| 国产密臀av一区二区三| 91极品新人『兔兔』精品新作| 亚洲精品国产在线电影| 天美传媒mv视频在线观看| av欧美网站在线观看| 蜜臀成人av在线播放| 亚洲 中文 自拍 另类 欧美| 韩国男女黄色在线观看| 青草亚洲视频在线观看| 99热久久极品热亚洲| 国产一区二区神马久久| 亚洲av色图18p| 一区二区三区四区视频| 二区中出在线观看老师| 欧美特级特黄a大片免费| 三级av中文字幕在线观看| 久久这里只有精彩视频免费| 97超碰免费在线视频| www日韩a级s片av| 99人妻视频免费在线| 99婷婷在线观看视频| 丰满熟女午夜福利视频| 成人24小时免费视频| 国内资源最丰富的网站| 中文字幕—97超碰网| 国产亚洲精品视频合集| 精品国产污污免费网站入口自| 成人色综合中文字幕| 亚洲 欧美 精品 激情 偷拍| 欧美特级特黄a大片免费| 大香蕉大香蕉在线看| asmr福利视频在线观看| 不卡一区一区三区在线| 国产九色91在线视频| 亚洲精品精品国产综合| 一级黄片久久久久久久久| 亚洲福利精品视频在线免费观看| 91国产在线视频免费观看| 日韩亚国产欧美三级涩爱| 成人精品在线观看视频| 韩国女主播精品视频网站| 亚洲一区二区三区久久午夜| 家庭女教师中文字幕在线播放| 免费福利av在线一区二区三区| 极品粉嫩小泬白浆20p主播| 久久久久只精品国产三级| 亚洲精品午夜aaa久久| 精产国品久久一二三产区区别| 大尺度激情四射网站| 久久久制服丝袜中文字幕| 午夜精品一区二区三区福利视频| 天天射夜夜操综合网| 都市家庭人妻激情自拍视频| 80电影天堂网官网| aⅴ精产国品一二三产品| 人妻熟女在线一区二区| 91精品国产麻豆国产| 欧美日本aⅴ免费视频| 亚洲一区av中文字幕在线观看| 美女大bxxxx内射| 天天日天天干天天干天天日| 亚洲精品无码久久久久不卡| 久精品人妻一区二区三区| 夜色撩人久久7777| 真实国模和老外性视频| 日本熟妇色熟妇在线观看| 91国内精品自线在拍白富美| 日韩三级电影华丽的外出| 日本午夜福利免费视频| 99国内精品永久免费视频| 亚洲国产中文字幕啊啊啊不行了 | 日本裸体熟妇区二区欧美| 亚洲欧美清纯唯美另类| 国产成人精品av网站| 日本美女成人在线视频| 国产亚洲成人免费在线观看| 国产又粗又猛又爽又黄的视频美国| 精品视频一区二区三区四区五区| 国产精品久久久久网| 成人在线欧美日韩国产| 视频一区二区在线免费播放| 91九色porny国产在线| 国产精品久久9999| 亚洲国际青青操综合网站| 97瑟瑟超碰在线香蕉| 1769国产精品视频免费观看| 亚洲 人妻 激情 中文| 爆乳骚货内射骚货内射在线| 一区二区久久成人网| 三级等保密码要求条款| 91国内精品久久久久精品一| 久久久超爽一二三av| 丝袜肉丝一区二区三区四区在线 | 操的小逼流水的文章| 久草福利电影在线观看| 日日爽天天干夜夜操| 国产精品自偷自拍啪啪啪| 沙月文乃人妻侵犯中文字幕在线| 国产亚洲视频在线二区| 精品国产成人亚洲午夜| 中文字幕在线欧美精品| 亚洲一区二区三区五区| 婷婷午夜国产精品久久久| 国产九色91在线视频| 91久久综合男人天堂| 亚洲国产美女一区二区三区软件 | 国产精品国产精品一区二区| 天天日天天舔天天射进去| 99国产精品窥熟女精品| 成人色综合中文字幕| 一区二区三区蜜臀在线| 日本福利午夜电影在线观看| 亚洲天天干 夜夜操| 影音先锋女人av噜噜色| 黑人乱偷人妻中文字幕| 97国产福利小视频合集| 亚欧在线视频你懂的| 中文字幕人妻三级在线观看| 国产大学生援交正在播放| 69精品视频一区二区在线观看| 男人在床上插女人视频| 黑人3p华裔熟女普通话| 新97超碰在线观看| 久久精品久久精品亚洲人| 2018最新中文字幕在线观看| 天天干天天搞天天摸| 天天操天天干天天日狠狠插| 中文人妻AV久久人妻水| 日辽宁老肥女在线观看视频| 骚逼被大屌狂草视频免费看| 国产高清在线在线视频| 久久99久久99精品影院| 男女第一次视频在线观看| 美日韩在线视频免费看| 午夜精品福利一区二区三区p| 久久久久五月天丁香社区| 国产美女一区在线观看| 狠狠操操操操操操操操操| 521精品视频在线观看| 国产刺激激情美女网站| 国产精品一区二区三区蜜臀av| 天天干天天操天天玩天天射| 中文字幕+中文字幕| 三级av中文字幕在线观看| 亚洲 人妻 激情 中文| 亚洲综合另类精品小说| 一区二区三区久久久91| 全国亚洲男人的天堂| 91亚洲国产成人精品性色| 好男人视频在线免费观看网站| 精内国产乱码久久久久久| 日韩欧美国产精品91| 中文字幕在线第一页成人| 免费在线福利小视频| 日日日日日日日日夜夜夜夜夜夜| 97人人模人人爽人人喊| 亚洲一区二区三区偷拍女厕91 | 欧美视频综合第一页| 99精品一区二区三区的区| 喷水视频在线观看这里只有精品| 91色九色porny| 国产福利小视频大全| 五月激情婷婷久久综合网| 极品丝袜一区二区三区| 男生用鸡操女生视频动漫| 自拍偷区二区三区麻豆| 91极品新人『兔兔』精品新作| 国产亚洲国产av网站在线| 麻豆精品成人免费视频| 污污小视频91在线观看| 亚洲欧美激情国产综合久久久 | 国产美女一区在线观看| 一区二区视频在线观看视频在线| 91高清成人在线视频| 欧美日韩高清午夜蜜桃大香蕉| 99精品国自产在线人| 国产97在线视频观看| 日韩一个色综合导航| 欲满人妻中文字幕在线| 欧美精品黑人性xxxx| 大香蕉大香蕉在线看| 亚洲女人的天堂av| 一区二区三区四区五区性感视频| 欧美xxx成人在线| 欧美久久久久久三级网| 中文乱理伦片在线观看| 18禁美女无遮挡免费| 色在线观看视频免费的| 熟妇一区二区三区高清版| 免费观看国产综合视频| 日韩影片一区二区三区不卡免费 | 国产精品三级三级三级| 日韩剧情片电影在线收看| 日韩视频一区二区免费观看| 亚洲偷自拍高清视频| 亚洲一区自拍高清免费视频| 动色av一区二区三区| 成人福利视频免费在线| 精品成人啪啪18免费蜜臀| 东京热男人的av天堂| 亚洲成人线上免费视频观看| 91综合久久亚洲综合| 青草久久视频在线观看| 色97视频在线播放| 国产又色又刺激在线视频| 亚洲精品 日韩电影| 亚洲久久午夜av一区二区| 精品国产亚洲av一淫| 中国熟女一区二区性xx| 日韩黄色片在线观看网站| 顶级尤物粉嫩小尤物网站| 亚洲av日韩av网站| 99精品国产aⅴ在线观看| 揄拍成人国产精品免费看视频| 国产美女午夜福利久久| 国产乱子伦一二三区| 老熟妇xxxhd老熟女| 中文字幕日韩精品就在这里| 中文字幕午夜免费福利视频| 日本熟妇一区二区x x| 熟女视频一区,二区,三区| 婷婷久久久久深爱网| 中文字幕av熟女人妻| 一区二区三区麻豆福利视频| 成人色综合中文字幕| 欧美80老妇人性视频| 一区二区熟女人妻视频| 真实国产乱子伦一区二区| 中文字幕高清资源站| 精品日产卡一卡二卡国色天香| 成年午夜免费无码区| 亚洲精品亚洲人成在线导航| 天天日天天干天天干天天日| 青青青艹视频在线观看| 日噜噜噜夜夜噜噜噜天天噜噜噜 | 美味人妻2在线播放| 亚洲少妇人妻无码精品| 亚洲免费成人a v| 91精品一区二区三区站长推荐| 福利午夜视频在线观看| 欧美男人大鸡吧插女人视频| 美女被肏内射视频网站| 亚洲国产成人在线一区| 快点插进来操我逼啊视频| 黑人巨大的吊bdsm| 男人的天堂av日韩亚洲| 久久久久久久精品成人热| 丝袜肉丝一区二区三区四区在线| 成人乱码一区二区三区av| 国产三级精品三级在线不卡| 亚洲国产精品黑丝美女| 亚洲精品国产久久久久久| 五十路熟女人妻一区二| 天天通天天透天天插| 制服丝袜在线人妻中文字幕| 少妇与子乱在线观看| 日韩欧美一级aa大片| 天天日天天摸天天爱| 天天干天天日天天谢综合156| 日本丰满熟妇BBXBBXHD| 亚洲 中文字幕在线 日韩| 老司机在线精品福利视频| 中文乱理伦片在线观看| 青青草视频手机免费在线观看| 日本后入视频在线观看| 被大鸡吧操的好舒服视频免费| 老司机免费视频网站在线看| 狠狠地躁夜夜躁日日躁| 日韩三级电影华丽的外出| 亚洲2021av天堂| 69精品视频一区二区在线观看| 五十路在线观看完整版| 欧美亚洲自偷自拍 在线| 欧美日韩亚洲国产无线码| 99婷婷在线观看视频| 亚洲综合一区成人在线| 亚洲精品乱码久久久本| 成年美女黄网站18禁久久| 亚洲狠狠婷婷综合久久app| 黄工厂精品视频在线观看| 综合色区亚洲熟妇shxstz| 日本美女性生活一级片| 欧美女同性恋免费a| av手机在线免费观看日韩av| 亚洲av黄色在线网站| 日韩成人综艺在线播放| 又色又爽又黄的美女裸体| 任你操视频免费在线观看| 毛片一级完整版免费| 午夜精品福利一区二区三区p| 亚洲偷自拍高清视频| 亚洲1卡2卡三卡4卡在线观看| 成人资源在线观看免费官网| 五十路在线观看完整版| 人人人妻人人澡人人| v888av在线观看视频| 精品国产乱码一区二区三区乱| 又色又爽又黄的美女裸体| 欧美 亚洲 另类综合| 新婚人妻聚会被中出| 成年女人免费播放视频| 天天干天天爱天天色| 东游记中文字幕版哪里可以看到| 初美沙希中文字幕在线| 成人国产激情自拍三区| 男人天堂最新地址av| 97青青青手机在线视频| 97欧洲一区二区精品免费| 欧美精品黑人性xxxx| 一级黄片久久久久久久久| 欧美日韩一级黄片免费观看| 77久久久久国产精产品| 欧美激情精品在线观看| 国产亚洲精品品视频在线| 亚洲av日韩精品久久久| 中文字幕第一页国产在线| 日本高清撒尿pissing| AV天堂一区二区免费试看| 人人超碰国字幕观看97| 蜜桃色婷婷久久久福利在线| 中文字幕国产专区欧美激情| 成人高清在线观看视频| 国产精品探花熟女在线观看| 成人精品视频99第一页| 亚洲黄色av网站免费播放| av黄色成人在线观看| 午夜福利资源综合激情午夜福利资| 一区二区三区欧美日韩高清播放 | 青娱乐最新视频在线| 亚洲精品亚洲人成在线导航| 特黄老太婆aa毛毛片| 青草久久视频在线观看| 天天日夜夜干天天操| 专门看国产熟妇的网站| 欧美精品 日韩国产| 日本性感美女三级视频| 天天日天天爽天天爽| 在线视频这里只有精品自拍| 午夜精品一区二区三区4| 青草久久视频在线观看| 亚洲护士一区二区三区| 9l人妻人人爽人人爽| 久久久久久久久久一区二区三区| 欧美成一区二区三区四区| 中文字幕国产专区欧美激情| 97精品视频在线观看| 五十路av熟女松本翔子| 白白操白白色在线免费视频| 欧美专区日韩专区国产专区| 成人伊人精品色xxxx视频| 日本韩国在线观看一区二区| 在线视频这里只有精品自拍| 亚洲 自拍 色综合图| 精品乱子伦一区二区三区免费播| 久草视频福利在线首页| 清纯美女在线观看国产| 青青草精品在线视频观看| 自拍偷区二区三区麻豆| 一级黄色片夫妻性生活| jiuse91九色视频| 国产刺激激情美女网站| 在线免费观看国产精品黄色| 国产精品久久综合久久| 一级黄片大鸡巴插入美女| 午夜极品美女福利视频| 黄片色呦呦视频免费看| 高清成人av一区三区| 欧美成人黄片一区二区三区| 免费看美女脱光衣服的视频| 在线免费观看日本伦理| 午夜精品一区二区三区城中村| 无码国产精品一区二区高潮久久4 日韩欧美一级精品在线观看 | 日本一二三区不卡无| 黑人性生活视频免费看| 在线视频国产欧美日韩| 激情图片日韩欧美人妻| 成人伊人精品色xxxx视频| 在线视频国产欧美日韩| 动色av一区二区三区| av在线shipin| 亚洲成a人片777777| 999热精品视频在线| 绝顶痉挛大潮喷高潮无码| 欧美第一页在线免费观看视频| 精品久久久久久久久久久久人妻| 人妻凌辱欧美丰满熟妇| 国产极品精品免费视频| 亚洲成人激情av在线| 色婷婷综合激情五月免费观看| 经典国语激情内射视频| 97国产在线av精品| 成人精品在线观看视频| 操日韩美女视频在线免费看| 亚洲卡1卡2卡三卡四老狼| 欧美亚洲国产成人免费在线| 黄色大片男人操女人逼| 黄色男人的天堂视频| 成人高清在线观看视频| 日本最新一二三区不卡在线| 精品国产亚洲av一淫| 国产在线拍揄自揄视频网站| 福利视频网久久91| 天天摸天天亲天天舔天天操天天爽| 天天色天天爱天天爽| 亚洲国产40页第21页| 777奇米久久精品一区| 无码国产精品一区二区高潮久久4| jul—619中文字幕在线| 91精品综合久久久久3d动漫| 啪啪啪啪啪啪啪免费视频| 一区二区视频视频视频| 91中文字幕免费在线观看| 国产精品大陆在线2019不卡| 男女之间激情网午夜在线| 欧美精品中文字幕久久二区| 人妻丝袜榨强中文字幕| 色哟哟在线网站入口| 激情色图一区二区三区| 成人网18免费视频版国产| 精品一区二区三区三区88| 中文字幕人妻熟女在线电影| 午夜精品在线视频一区| 亚洲中文字字幕乱码| 国产精品免费不卡av| 亚洲 国产 成人 在线| 中文字幕成人日韩欧美| chinese国产盗摄一区二区| 懂色av之国产精品| 福利视频网久久91| 初美沙希中文字幕在线| 蜜臀av久久久久久久| aⅴ五十路av熟女中出| 亚洲福利精品视频在线免费观看| 999九九久久久精品| 久久久久久97三级| 精品欧美一区二区vr在线观看 | 久久丁香婷婷六月天| 插逼视频双插洞国产操逼插洞| 国产精品视频一区在线播放| 搡老熟女一区二区在线观看| 一区二区熟女人妻视频| 国产麻豆国语对白露脸剧情 | 黄色成人在线中文字幕| 视频在线亚洲一区二区| 亚洲成人av一区久久| 精品人人人妻人人玩日产欧| 亚洲熟女综合色一区二区三区四区| 日韩一区二区三区三州| 亚洲公开视频在线观看| 午夜激情久久不卡一区二区| 国产精品自拍在线视频| 黄页网视频在线免费观看| 天天干天天日天天谢综合156| av亚洲中文天堂字幕网| 三级等保密码要求条款| 黄色三级网站免费下载| 国产精品入口麻豆啊啊啊| 99热这里只有国产精品6| 天天干天天操天天摸天天射| av天堂资源最新版在线看| 青青青爽视频在线播放| 一区二区三区蜜臀在线| 亚洲欧美一卡二卡三卡| 国产a级毛久久久久精品| 2021国产一区二区| 80电影天堂网官网| 亚洲无码一区在线影院| 成人福利视频免费在线| 精品久久久久久高潮| 1769国产精品视频免费观看| 欧美成人猛片aaaaaaa| 色婷婷综合激情五月免费观看| 国产精品中文av在线播放| 搡老熟女一区二区在线观看| 91久久人澡人人添人人爽乱| 日韩人妻xxxxx| 久久久久久久精品成人热| 免费在线观看视频啪啪| 日韩av熟妇在线观看| 色爱av一区二区三区| 中文字幕人妻av在线观看| 性色蜜臀av一区二区三区| 91亚洲手机在线视频播放| 欧美麻豆av在线播放| 亚洲精品乱码久久久久久密桃明| 五月天色婷婷在线观看视频免费| 天天操天天干天天插| 久久热久久视频在线观看| 夜夜嗨av蜜臀av| 亚洲av黄色在线网站| free性日本少妇| 天天草天天色天天干| 午夜婷婷在线观看视频| 国产又色又刺激在线视频| 成人av在线资源网站| 亚洲护士一区二区三区| 999热精品视频在线| 女同性ⅹxx女同hd| 不卡一不卡二不卡三| 做爰视频毛片下载蜜桃视频1| 激情国产小视频在线| 中文字幕一区二 区二三区四区| 黄色视频在线观看高清无码| 亚洲少妇人妻无码精品| 开心 色 六月 婷婷| 国产揄拍高清国内精品对白| 久久久精品精品视频视频| 日曰摸日日碰夜夜爽歪歪| 欧美日本国产自视大全| 婷婷久久久综合中文字幕| 夜夜嗨av蜜臀av| 欧美va亚洲va天堂va| 国产黑丝高跟鞋视频在线播放| 在线 中文字幕 一区| 国产高清精品极品美女| 最新91精品视频在线| 午夜久久久久久久99| 少妇与子乱在线观看| 欧美3p在线观看一区二区三区| 2018在线福利视频| av手机免费在线观看高潮| 欧美偷拍自拍色图片| 欧美麻豆av在线播放| 欧美区一区二区三视频| 欧洲国产成人精品91铁牛tv| 香港一级特黄大片在线播放| 51国产偷自视频在线播放 | 青青青青青操视频在线观看| 中文字幕在线一区精品| 女同互舔一区二区三区| jiuse91九色视频| 国产高清精品极品美女| 香港三日本三韩国三欧美三级| 日本午夜久久女同精女女| 五十路息与子猛烈交尾视频| 一区二区三区日本伦理| 美女在线观看日本亚洲一区| 久久久久久cao我的性感人妻| 中文字幕一区二 区二三区四区| 狠狠躁狠狠爱网站视频| 自拍偷拍,中文字幕| 粉嫩欧美美人妻小视频| 91试看福利一分钟| 日韩美女精品视频在线观看网站| 插逼视频双插洞国产操逼插洞| 久久机热/这里只有| 粉嫩av蜜乳av蜜臀| 精品久久久久久久久久久a√国产 日本女大学生的黄色小视频 | 成熟熟女国产精品一区| 在线免费观看日本片| 一个人免费在线观看ww视频| 日本性感美女三级视频| 国产视频网站国产视频| 久久综合老鸭窝色综合久久| av手机免费在线观看高潮| av大全在线播放免费| 成年人免费看在线视频| 插逼视频双插洞国产操逼插洞| 亚洲欧美综合另类13p| 热久久只有这里有精品| 午夜毛片不卡免费观看视频| 熟女人妻在线观看视频| 激情国产小视频在线| 亚洲护士一区二区三区| 青青尤物在线观看视频网站| 少妇人妻久久久久视频黄片| 97资源人妻免费在线视频| 亚洲成人免费看电影| 国产超码片内射在线| 国产中文字幕四区在线观看| 香蕉91一区二区三区| 日日日日日日日日夜夜夜夜夜夜| 亚洲另类综合一区小说| 国产一区二区火爆视频| 97小视频人妻一区二区| 免费高清自慰一区二区三区网站 | 一区二区三区四区五区性感视频| 久久久久久久久久久久久97| 免费高清自慰一区二区三区网站| 不卡精品视频在线观看| 激情啪啪啪啪一区二区三区 | 噜噜色噜噜噜久色超碰| 人妻3p真实偷拍一二区| 丝袜美腿视频诱惑亚洲无| 老司机欧美视频在线看| 国产精品sm调教视频| 精品人人人妻人人玩日产欧| 白白操白白色在线免费视频| 女同性ⅹxx女同h偷拍| 久久精品美女免费视频| 亚洲国产在人线放午夜| 一本久久精品一区二区| 婷婷久久久综合中文字幕| 亚洲 欧美 精品 激情 偷拍| 国产在线拍揄自揄视频网站| 中文字幕中文字幕 亚洲国产| 一区二区三区欧美日韩高清播放| 青青青青青青草国产| 一区二区三区久久久91| 成人免费毛片aaaa| 亚洲av日韩高清hd| 偷拍自拍 中文字幕| 亚洲精品中文字幕下载| 日本最新一二三区不卡在线| 中文字幕日本人妻中出| 可以在线观看的av中文字幕| 日韩美在线观看视频黄| 97超碰免费在线视频| 自拍偷拍亚洲欧美在线视频| 性色蜜臀av一区二区三区| avjpm亚洲伊人久久| 日本精品视频不卡一二三| 成人影片高清在线观看| 国产av福利网址大全| 亚洲精品 欧美日韩| 国产又色又刺激在线视频| 中文字幕无码日韩专区免费| 亚洲高清国产拍青青草原| 特级欧美插插插插插bbbbb| 在线免费视频 自拍| 大鸡八强奸视频在线观看| 精产国品久久一二三产区区别| 播放日本一区二区三区电影| 久久精品视频一区二区三区四区 | 亚洲天天干 夜夜操| 久久久制服丝袜中文字幕| 亚洲国产欧美一区二区丝袜黑人| 亚洲人一区二区中文字幕| 天天日天天干天天搡| 日辽宁老肥女在线观看视频| 老司机在线精品福利视频| 国产视频一区二区午夜| 边摸边做超爽毛片18禁色戒| 成人蜜臀午夜久久一区| 晚上一个人看操B片| 中文字幕在线视频一区二区三区| 欧美视频一区免费在线| 大白屁股精品视频国产| 中国产一级黄片免费视频播放| 99精品免费观看视频| 国产伊人免费在线播放| 91人妻精品久久久久久久网站| 欧美性受xx黑人性猛交| 人妻激情图片视频小说| 3337p日本欧洲大胆色噜噜| 国产视频网站一区二区三区| 黑人变态深video特大巨大| 日韩美在线观看视频黄| 亚洲欧美精品综合图片小说| 亚洲色偷偷综合亚洲AV伊人| 久久亚洲天堂中文对白| 欧美一区二区三区乱码在线播放| 精品91自产拍在线观看一区| 91精品国产黑色丝袜| 小泽玛利亚视频在线观看| 久草视频在线免播放| 97青青青手机在线视频| 欧美视频中文一区二区三区| 偷青青国产精品青青在线观看| 国产在线自在拍91国语自产精品 | 91国产资源在线视频| 亚洲熟妇x久久av久久| 成人免费毛片aaaa| 国产一区二区三免费视频| 国产精选一区在线播放| 亚洲欧美激情中文字幕| 在线观看免费视频网| 深夜男人福利在线观看| 91超碰青青中文字幕| 国产精品黄大片在线播放| 亚洲国产第一页在线观看| 亚洲图片欧美校园春色| 夜夜嗨av蜜臀av| av破解版在线观看| 午夜精彩视频免费一区| 91国内精品自线在拍白富美| 999久久久久999| 精品av久久久久久久| 欧美天堂av无线av欧美| 91天堂天天日天天操| 成人乱码一区二区三区av| 精品国产午夜视频一区二区| 2020久久躁狠狠躁夜夜躁| 年轻的人妻被夫上司侵犯| 欧美韩国日本国产亚洲| 日韩熟女av天堂系列| 婷婷午夜国产精品久久久| 很黄很污很色的午夜网站在线观看| 欧美精品欧美极品欧美视频 | 色伦色伦777国产精品| 丰满的继坶3中文在线观看| 亚洲粉嫩av一区二区三区| 免费看高清av的网站| 六月婷婷激情一区二区三区| 日韩欧美亚洲熟女人妻| 天天日天天操天天摸天天舔| 国产精品女邻居小骚货| 欧美偷拍自拍色图片| 99热色原网这里只有精品| 天天干天天日天天谢综合156| 久久久久久久久久久久久97| 91精品激情五月婷婷在线| 99精品国产自在现线观看| 91免费放福利在线观看| 99热久久这里只有精品8| 在线观看的黄色免费网站| 啊啊啊想要被插进去视频| 久久久久久久久久久久久97| 美洲精品一二三产区区别| 久久久久久久久久一区二区三区| 青青青激情在线观看视频| 中文字幕AV在线免费看 | 青娱乐在线免费视频盛宴| 自拍偷拍亚洲欧美在线视频| 97精品人妻一区二区三区精品| 亚洲另类伦春色综合小| 小穴多水久久精品免费看| 天天干狠狠干天天操| 天天日夜夜干天天操| 日韩av免费观看一区| 操操网操操伊剧情片中文字幕网| 92福利视频午夜1000看| 欧美久久久久久三级网| 年轻的人妻被夫上司侵犯| 亚洲av成人免费网站| 天美传媒mv视频在线观看| 人妻熟女中文字幕aⅴ在线| 免费成人av中文字幕| 中文人妻AV久久人妻水| 男女啪啪啪啪啪的网站| 2018在线福利视频| 亚洲色偷偷综合亚洲AV伊人| 国产精品女邻居小骚货| 日韩av有码中文字幕| 国产a级毛久久久久精品| 玩弄人妻熟妇性色av少妇| 人妻最新视频在线免费观看| 99热久久极品热亚洲| 大尺度激情四射网站| 插逼视频双插洞国产操逼插洞| 亚洲护士一区二区三区| 国产精品中文av在线播放| 中文字幕在线观看极品视频| 亚洲熟色妇av日韩熟色妇在线| 久久免费看少妇高潮完整版| 亚洲美女自偷自拍11页| 青青青青视频在线播放| 成人蜜臀午夜久久一区| 日本精品美女在线观看| 97人妻人人澡爽人人精品| 欧美另类重口味极品在线观看| 午夜久久久久久久精品熟女| 亚洲欧美综合另类13p| 中文字幕视频一区二区在线观看| 欧美视频中文一区二区三区| 亚洲成人激情视频免费观看了| 亚洲中文精品字幕在线观看| 综合国产成人在线观看| 传媒在线播放国产精品一区| 午夜精品一区二区三区福利视频| 亚洲卡1卡2卡三卡四老狼| 青青操免费日综合视频观看| 美女福利视频网址导航| av欧美网站在线观看| 99精品国产自在现线观看| 五月精品丁香久久久久福利社| 大鸡巴后入爆操大屁股美女| 极品丝袜一区二区三区| 中文字幕人妻三级在线观看| 国产黄色高清资源在线免费观看| 天码人妻一区二区三区在线看| 93人妻人人揉人人澡人人| 日本最新一二三区不卡在线| 顶级尤物粉嫩小尤物网站| eeuss鲁片一区二区三区| 无码国产精品一区二区高潮久久4| av在线shipin| 免费国产性生活视频| 首之国产AV医生和护士小芳| 日本福利午夜电影在线观看| 欧美精品国产综合久久| 免费费一级特黄真人片| 啪啪啪18禁一区二区三区| 天堂女人av一区二区| 在线播放 日韩 av| 久久热久久视频在线观看| 性感美女诱惑福利视频| 一个人免费在线观看ww视频| 密臀av一区在线观看| 国产性色生活片毛片春晓精品| 黑人借宿ntr人妻的沦陷2| 自拍偷拍vs一区二区三区| 亚洲一区自拍高清免费视频| 亚洲人妻av毛片在线| 成人sm视频在线观看| 新婚人妻聚会被中出| 一级a看免费观看网站| 久久久制服丝袜中文字幕| 福利视频网久久91| 97人人模人人爽人人喊| 在线播放国产黄色av| 涩涩的视频在线观看视频| 在线网站你懂得老司机| 欧美一区二区中文字幕电影| 天天射,天天操,天天说| 日本韩国亚洲综合日韩欧美国产| 视频一区二区在线免费播放| xxx日本hd高清| 欧美一级色视频美日韩| 初美沙希中文字幕在线| 国产精品国产精品一区二区| 色哟哟国产精品入口| 国产老熟女伦老熟妇ⅹ| 日本少妇在线视频大香蕉在线观看| 青青草原网站在线观看| 成年人中文字幕在线观看| 喷水视频在线观看这里只有精品| 91亚洲国产成人精品性色| 中文字幕一区二区自拍| 夜夜嗨av一区二区三区中文字幕| 欧美一区二区三区乱码在线播放 | 天天日天天干天天爱| 污污小视频91在线观看| 曰本无码人妻丰满熟妇啪啪| 绝顶痉挛大潮喷高潮无码| 91国内精品久久久久精品一| huangse网站在线观看| 日韩熟女av天堂系列| 超碰97人人澡人人| 免费一级特黄特色大片在线观看 | 欧美亚洲牲夜夜综合久久| 青娱乐在线免费视频盛宴| 亚洲午夜精品小视频| 偷拍自拍福利视频在线观看| 色婷婷久久久久swag精品| 99精品一区二区三区的区| av中文字幕电影在线看| av乱码一区二区三区| 国产精品视频欧美一区二区| 日本精品一区二区三区在线视频。 | 黄色片黄色片wyaa| 红杏久久av人妻一区| 女同久久精品秋霞网| 欧美日韩亚洲国产无线码| 国产三级精品三级在线不卡| 亚洲美女美妇久久字幕组| 天天干天天啪天天舔| 亚洲图库另类图片区| 三级av中文字幕在线观看| 欧美一级视频一区二区| 亚洲 色图 偷拍 欧美| 欧美va亚洲va天堂va| 青青草亚洲国产精品视频| 天天射夜夜操狠狠干| nagger可以指黑人吗| 韩国黄色一级二级三级| 日本熟妇一区二区x x| 久草福利电影在线观看| 免费观看丰满少妇做受| 亚洲av第国产精品| 人人在线视频一区二区| 中文字幕人妻三级在线观看| 国产精品伦理片一区二区| 91老师蜜桃臀大屁股| 岛国av高清在线成人在线| 免费在线播放a级片| 激情图片日韩欧美人妻| 五月激情婷婷久久综合网| 亚洲一级av无码一级久久精品| 亚洲欧美激情中文字幕| 日本在线一区二区不卡视频| 欧美日韩一级黄片免费观看| 日本午夜久久女同精女女| 青春草视频在线免费播放| 91亚洲国产成人精品性色| 一个人免费在线观看ww视频| 98视频精品在线观看| 欧美 亚洲 另类综合| 国产免费高清视频视频| 视频啪啪啪免费观看| 大胸性感美女羞爽操逼毛片| 国产之丝袜脚在线一区二区三区| 清纯美女在线观看国产| 国产高清97在线观看视频| jiujiure精品视频在线| 日本三极片中文字幕| 亚洲一区二区三区五区| 成人在线欧美日韩国产| 欧美日韩精品永久免费网址| av一本二本在线观看| 老司机午夜精品视频资源| 岛国黄色大片在线观看| 亚洲av香蕉一区区二区三区犇| 岛国一区二区三区视频在线| 亚洲天堂av最新网址| av高潮迭起在线观看| 国产精品亚洲а∨天堂免| 精品成人啪啪18免费蜜臀| 日本一区精品视频在线观看| 亚洲人成精品久久久久久久| 激情五月婷婷免费视频| 丝袜美腿欧美另类 中文字幕| 久草极品美女视频在线观看| 欧美性受xx黑人性猛交| 在线 中文字幕 一区| 色天天天天射天天舔| 精品黑人巨大在线一区| 在线国产中文字幕视频| 粉嫩av蜜乳av蜜臀| 人妻少妇精品久久久久久| 九色精品视频在线播放| sejizz在线视频| 91p0rny九色露脸熟女| 中文字幕无码一区二区免费| 亚洲成人三级在线播放| 欧美偷拍亚洲一区二区| 亚洲精品亚洲人成在线导航| av一区二区三区人妻| 中文字幕乱码人妻电影| 国产欧美精品一区二区高清| 伊人网中文字幕在线视频| 大学生A级毛片免费视频| 人人妻人人爱人人草| 中文字幕在线第一页成人| 亚洲欧美另类手机在线| 黄色录像鸡巴插进去| 青青草人人妻人人妻| 亚洲激情偷拍一区二区| 国产刺激激情美女网站| 青草久久视频在线观看| 久草电影免费在线观看| 成人av久久精品一区二区| 天天日天天鲁天天操| 91国内精品久久久久精品一| 亚洲美女自偷自拍11页| 偷拍自拍亚洲美腿丝袜| 新婚人妻聚会被中出| 日韩北条麻妃一区在线| 精品久久久久久久久久久久人妻| 熟女少妇激情五十路| 国产成人小视频在线观看无遮挡| 啪啪啪操人视频在线播放| 久草视频福利在线首页| 中文字幕之无码色多多| 狠狠鲁狠狠操天天晚上干干| 男人操女人的逼免费视频| 欧美成人综合视频一区二区| 女生自摸在线观看一区二区三区| 天天色天天舔天天射天天爽| 年轻的人妻被夫上司侵犯| 人妻少妇av在线观看| 黄页网视频在线免费观看| av在线观看网址av| 在线观看911精品国产 | 国产精品人妻熟女毛片av久| 亚洲高清国产自产av| 免费无毒热热热热热热久| 一区二区三区日韩久久| 操日韩美女视频在线免费看| 青青青青青操视频在线观看| 精品高潮呻吟久久av| 女人精品内射国产99| 91高清成人在线视频| 水蜜桃一区二区三区在线观看视频| 亚洲精品国品乱码久久久久| 18禁美女黄网站色大片下载| 老熟妇凹凸淫老妇女av在线观看| www久久久久久久久久久| 阿v天堂2014 一区亚洲| 亚洲视频在线观看高清| 亚洲自拍偷拍精品网| 亚洲国产精品久久久久久6| 亚洲中文字字幕乱码| 日本性感美女写真视频| 插小穴高清无码中文字幕| 38av一区二区三区| 毛茸茸的大外阴中国视频| 岛国黄色大片在线观看| 在线亚洲天堂色播av电影| 国产综合精品久久久久蜜臀| 精品高跟鞋丝袜一区二区| 国产美女午夜福利久久| 日本a级视频老女人| 中文字幕,亚洲人妻| 欧美一区二区三区啪啪同性| 天天日夜夜干天天操| 97香蕉碰碰人妻国产樱花| 欧美日本国产自视大全| 91极品大一女神正在播放 | 亚洲成av人无码不卡影片一| 少妇露脸深喉口爆吞精| 888欧美视频在线| 伊人情人综合成人久久网小说 | 四川乱子伦视频国产vip| 久草福利电影在线观看| 98精产国品一二三产区区别| 久久久久久久久久一区二区三区| 欧美在线一二三视频| 国产精品中文av在线播放| av高潮迭起在线观看| 一区二区三区视频,福利一区二区| 97人妻总资源视频| 午夜在线精品偷拍一区二| 欧美视频不卡一区四区| 日韩美女精品视频在线观看网站| 亚洲 清纯 国产com| 91福利在线视频免费观看| 中文字幕亚洲久久久| 欧美日韩高清午夜蜜桃大香蕉| 久久美欧人妻少妇一区二区三区| 自拍偷拍亚洲精品第2页| 亚洲熟女女同志女同| 日日操夜夜撸天天干| 一区二区三区日本伦理| 青青青青青青草国产| 二区中出在线观看老师| 一区二区三区久久中文字幕| 国产日本欧美亚洲精品视| huangse网站在线观看| 欧美成人综合视频一区二区 | 国产在线观看免费人成短视频| 熟妇一区二区三区高清版| 国产精品久久久黄网站| 黄网十四区丁香社区激情五月天| 99精品久久久久久久91蜜桃| 在线免费观看欧美小视频| 四川五十路熟女av| 欧美偷拍亚洲一区二区| 亚洲国产精品久久久久久6| 福利午夜视频在线合集| 91精品啪在线免费| 日韩在线视频观看有码在线| 高潮视频在线快速观看国家快速| av在线观看网址av| 美女大bxxxx内射| 在线观看的a站 最新| 欧美交性又色又爽又黄麻豆| 婷婷综合亚洲爱久久| 亚洲av琪琪男人的天堂| 亚洲国产美女一区二区三区软件| 久久久久久97三级| 大香蕉伊人国产在线| 亚洲成人三级在线播放 | 国产午夜无码福利在线看| 日韩美女综合中文字幕pp| 欧美一区二区中文字幕电影| 深田咏美亚洲一区二区| 亚洲最大免费在线观看| 色婷婷综合激情五月免费观看 | 国产精品成久久久久三级蜜臀av | 亚洲熟女久久久36d| 亚洲av第国产精品| 天天爽夜夜爽人人爽QC| 东京干手机福利视频| 98视频精品在线观看| 成年午夜免费无码区| 视频一区二区综合精品| 成人免费公开视频无毒| 人妻丰满熟妇综合网| 中文亚洲欧美日韩无线码| 99国内小视频在现欢看| 日本美女性生活一级片| 国产精品久久久久久美女校花| 国产精品三级三级三级| 国产精品视频资源在线播放| 国产一区二区火爆视频| 天天躁日日躁狠狠躁躁欧美av| 美洲精品一二三产区区别| 一区二区三区四区视频| 一区二区三区四区中文| 精品少妇一二三视频在线| 天天日天天爽天天爽| 亚洲图片偷拍自拍区| 人妻3p真实偷拍一二区| 欧美日韩人妻久久精品高清国产| 偷拍自拍 中文字幕| 97国产精品97久久| 日本美女性生活一级片| 在线观看av观看av| 国产精品免费不卡av| 福利午夜视频在线观看| 午夜激情高清在线观看| 亚洲欧美人精品高清| 国产精品视频一区在线播放| 国产午夜无码福利在线看| 久久这里只有精品热视频 | 中文字幕—97超碰网| 亚洲精品国产在线电影| 九一传媒制片厂视频在线免费观看| 淫秽激情视频免费观看| 一区二区三区的久久的蜜桃的视频| 99国内精品永久免费视频| 女生自摸在线观看一区二区三区 | 可以在线观看的av中文字幕| 亚洲熟妇久久无码精品| 日韩av有码一区二区三区4 | 天天干天天日天天谢综合156| 国产精品sm调教视频| 国产亚洲欧美视频网站| 精彩视频99免费在线| 日韩美女福利视频网| 97精品视频在线观看| 青娱乐蜜桃臀av色| 久久久极品久久蜜桃| 97香蕉碰碰人妻国产樱花| 不卡一不卡二不卡三| 插小穴高清无码中文字幕| 91she九色精品国产| 亚洲另类在线免费观看| 啊啊好大好爽啊啊操我啊啊视频 | 特大黑人巨大xxxx| 亚洲av一妻不如妾| 久久久久久久精品老熟妇| 91极品大一女神正在播放| 性感美女高潮视频久久久| 中文字幕免费福利视频6| 一区二区三区综合视频| 好太好爽好想要免费| 黑人变态深video特大巨大| 人妻久久久精品69系列| 午夜大尺度无码福利视频| 日本熟女50视频免费| 极品丝袜一区二区三区| 1000部国产精品成人观看视频| 日韩特级黄片高清在线看| av手机在线免费观看日韩av| 成年人中文字幕在线观看| 亚洲欧美激情国产综合久久久 | 久久农村老妇乱69系列| 粉嫩欧美美人妻小视频| 欧美男人大鸡吧插女人视频| 岛国黄色大片在线观看| 蜜臀av久久久久久久| 成人av天堂丝袜在线观看| 天天日天天添天天爽| 久草福利电影在线观看| www,久久久,com| 青青青国产片免费观看视频| 好吊视频—区二区三区| 人妻丝袜榨强中文字幕| 99热这里只有国产精品6| 精品亚洲国产中文自在线| 中英文字幕av一区| 1769国产精品视频免费观看| 亚洲码av无色中文| 在线免费观看黄页视频| 天堂av在线播放免费| 91快播视频在线观看| 欧美aa一级一区三区四区| 丝袜国产专区在线观看| 在线视频这里只有精品自拍| 日韩激情文学在线视频| 国产va精品免费观看| 污污小视频91在线观看| 国产精品亚洲а∨天堂免| 亚洲精品色在线观看视频| 在线视频国产欧美日韩| 亚洲av人人澡人人爽人人爱| 国产 在线 免费 精品| 国产精品一区二区久久久av| 青青在线视频性感少妇和隔壁黑丝| 天天操天天操天天碰| 香蕉91一区二区三区| 成人影片高清在线观看| 日比视频老公慢点好舒服啊| 欧美一区二区三区四区性视频| 亚国产成人精品久久久| 无码国产精品一区二区高潮久久4| 五月天色婷婷在线观看视频免费 | 青青青青草手机在线视频免费看| 欧美aa一级一区三区四区| 中文字幕AV在线免费看 | 美女福利视频网址导航| 大屁股熟女一区二区三区| 国产欧美精品免费观看视频| 深田咏美亚洲一区二区| 狠狠的往里顶撞h百合| 久久久制服丝袜中文字幕| 夜夜骑夜夜操夜夜奸| 人妻素人精油按摩中出| av乱码一区二区三区| 国产揄拍高清国内精品对白 | 80电影天堂网官网| 国产午夜福利av导航| xxx日本hd高清| 在线免费观看99视频| 成人免费做爰高潮视频| 在线观看欧美黄片一区二区三区| 天天色天天爱天天爽| 欧美黑人性猛交xxxxⅹooo| 19一区二区三区在线播放| 黄色片黄色片wyaa| 91精品国产91久久自产久强| 欧美亚洲一二三区蜜臀| 国产日韩精品免费在线| 中国视频一区二区三区| 成人国产激情自拍三区| 天天色天天舔天天射天天爽| 少妇一区二区三区久久久| 国产之丝袜脚在线一区二区三区| 老熟妇xxxhd老熟女| 亚洲第一黄色在线观看| 欧美日本在线观看一区二区| 欧美日韩高清午夜蜜桃大香蕉| av天堂中文免费在线| 人妻自拍视频中国大陆| 一区二区三区 自拍偷拍| 亚洲精品福利网站图片| 91精品激情五月婷婷在线| 91天堂天天日天天操| yy6080国产在线视频| av新中文天堂在线网址| 天堂av狠狠操蜜桃| 午夜精品在线视频一区| 18禁美女黄网站色大片下载| 亚洲在线观看中文字幕av| 日韩中文字幕在线播放第二页| 福利午夜视频在线观看| mm131美女午夜爽爽爽| 青青青青爽手机在线| 日本熟妇一区二区x x| 亚洲福利午夜久久久精品电影网| 日韩美女综合中文字幕pp| 国产又大又黄免费观看| 男女之间激情网午夜在线| heyzo蜜桃熟女人妻| 国产va在线观看精品| 91免费黄片可看视频| 啊啊好大好爽啊啊操我啊啊视频 | 人妻少妇一区二区三区蜜桃| 欧美成人精品在线观看| 天天日天天爽天天爽| 日本三极片视频网站观看| 天天干天天插天天谢| 超碰在线中文字幕一区二区| 欧美亚洲中文字幕一区二区三区| 国产中文精品在线观看| 欧美成人一二三在线网| 亚洲成人午夜电影在线观看| 国产精品国产三级麻豆| 婷婷色国产黑丝少妇勾搭AV | 中文字幕—97超碰网| 色哟哟国产精品入口| 2020国产在线不卡视频| 天天日天天透天天操| 午夜国产免费福利av| 成人免费公开视频无毒| 天天日天天操天天摸天天舔| 久久久久久久99精品| 亚洲高清视频在线不卡| 免费无毒热热热热热热久| 18禁无翼鸟成人在线| 亚洲精品乱码久久久久久密桃明| 成人蜜桃美臀九一一区二区三区| 精品一区二区亚洲欧美| 午夜精彩视频免费一区| 国产精品成人xxxx| 天堂女人av一区二区| 99视频精品全部15| 大屁股肉感人妻中文字幕在线| 亚洲av黄色在线网站| 不戴胸罩引我诱的隔壁的人妻| 亚洲va天堂va国产va久| 在线视频免费观看网| 中文字幕中文字幕人妻| 天天色天天舔天天射天天爽| 青青青爽视频在线播放| 久久久麻豆精亚洲av麻花| 天天日天天爽天天爽| 99精品久久久久久久91蜜桃| 久草极品美女视频在线观看| 91欧美在线免费观看| 中文字幕午夜免费福利视频| 狠狠躁狠狠爱网站视频| 国产精品国产三级麻豆| 2020中文字幕在线播放| 亚洲欧美成人综合视频| 3D动漫精品啪啪一区二区下载| 国产精品视频资源在线播放| 亚洲精品午夜aaa久久| 日曰摸日日碰夜夜爽歪歪| 成人亚洲国产综合精品| 一区二区三区日本伦理| 综合色区亚洲熟妇shxstz| 亚洲1069综合男同| 1000小视频在线| 国产伦精品一区二区三区竹菊| 日本少妇在线视频大香蕉在线观看| 国产 在线 免费 精品| 最新激情中文字幕视频| 97国产精品97久久| huangse网站在线观看| 日本高清在线不卡一区二区| 51精品视频免费在线观看| 狠狠地躁夜夜躁日日躁| 视频一区二区在线免费播放| 日韩中文字幕在线播放第二页| 亚洲推理片免费看网站| 午夜dv内射一区区| 在线免费91激情四射| 女蜜桃臀紧身瑜伽裤| 4个黑人操素人视频网站精品91| 色吉吉影音天天干天天操| 成人福利视频免费在线| 91亚洲手机在线视频播放| 日韩中文字幕精品淫| 日韩av免费观看一区| 国产黄色片蝌蚪九色91| 中文字幕av熟女人妻| 不卡精品视频在线观看| 天天操天天射天天操天天天| 天天艹天天干天天操| 51国产成人精品视频| 五十路人妻熟女av一区二区| 在线观看国产免费麻豆| 色伦色伦777国产精品| 非洲黑人一级特黄片| 国产美女午夜福利久久| 涩涩的视频在线观看视频| av成人在线观看一区| 十八禁在线观看地址免费| 人妻丝袜av在线播放网址| 人妻少妇性色欲欧美日韩| 中文字幕一区二区亚洲一区| 亚洲天堂精品久久久| 国产精品亚洲а∨天堂免| 午夜蜜桃一区二区三区| 老熟妇xxxhd老熟女| 亚国产成人精品久久久| 国产高清在线观看1区2区| 久久免费看少妇高潮完整版| 黄色无码鸡吧操逼视频| 99久久超碰人妻国产| av天堂中文免费在线| 最新的中文字幕 亚洲| 岛国黄色大片在线观看| 国产精彩对白一区二区三区| 人妻激情图片视频小说| 北条麻妃av在线免费观看| 亚洲国产40页第21页| 人妻素人精油按摩中出| 91香蕉成人app下载| 亚洲av无乱一区二区三区性色| 国产欧美日韩第三页| 黄色资源视频网站日韩| 欧美成人精品欧美一级黄色| 欧美亚洲国产成人免费在线| 女警官打开双腿沦为性奴| 午夜福利人人妻人人澡人人爽| 无码中文字幕波多野不卡| 91桃色成人网络在线观看| 欧美成人综合色在线噜噜| 成人av久久精品一区二区| 黑人巨大的吊bdsm| 天天日天天舔天天射进去| 一区二区三区蜜臀在线| 黄色录像鸡巴插进去| 天天摸天天干天天操科普| 在线观看视频网站麻豆| 国产乱弄免费视频观看| av网站色偷偷婷婷网男人的天堂| 91精品国产综合久久久蜜 | 国产高清精品极品美女| 精品人人人妻人人玩日产欧| 91国语爽死我了不卡| 成人高潮aa毛片免费| 午夜国产福利在线观看| 人人爽亚洲av人人爽av| 国产高清精品一区二区三区| 国产精品大陆在线2019不卡| 免费无毒热热热热热热久| 最后99天全集在线观看| 日韩二区视频一线天婷婷五| 新婚人妻聚会被中出| 蜜臀成人av在线播放| 99热这里只有国产精品6| 97国产在线av精品| 岛国黄色大片在线观看| 国产又粗又黄又硬又爽| 久久精品视频一区二区三区四区| 摧残蹂躏av一二三区| 亚洲精品精品国产综合| 国产伊人免费在线播放| 亚洲伊人久久精品影院一美女洗澡 | 人人妻人人爱人人草| 亚洲高清国产一区二区三区| 五月天久久激情视频| 亚洲欧美福利在线观看| 中文字幕在线永久免费播放| 1000部国产精品成人观看视频| 大鸡巴操b视频在线| 四川乱子伦视频国产vip| 黄色男人的天堂视频| 伊人成人综合开心网| 91免费放福利在线观看| 亚洲最大免费在线观看| rct470中文字幕在线| 2020韩国午夜女主播在线| av老司机精品在线观看| 婷婷五月亚洲综合在线| 超碰97免费人妻麻豆| 亚洲精品一线二线在线观看| 欧美专区第八页一区在线播放| 午夜精品福利一区二区三区p| 亚洲精品乱码久久久本| 看一级特黄a大片日本片黑人| 老司机在线精品福利视频| 一区二区免费高清黄色视频| 欧美成一区二区三区四区| 午夜精品九一唐人麻豆嫩草成人| 少妇人妻二三区视频 | 久草视频在线免播放| 97超碰免费在线视频| 97青青青手机在线视频| 亚洲免费在线视频网站| 日本黄在免费看视频| 男人的天堂av日韩亚洲| 国产黄色高清资源在线免费观看| 亚洲色偷偷综合亚洲AV伊人| 国产黄网站在线观看播放| av俺也去在线播放| 久久综合老鸭窝色综合久久| 动漫美女的小穴视频| 班长撕开乳罩揉我胸好爽| 一区二区三区四区视频| 最新91精品视频在线| 一区二区视频在线观看免费观看 | 五十路丰满人妻熟妇| 99热久久这里只有精品8| 精品乱子伦一区二区三区免费播| 亚洲国产精品久久久久久6| 最新中文字幕乱码在线| 青草久久视频在线观看| 91麻豆精品秘密入口在线观看| 91小伙伴中女熟女高潮| 91精品免费久久久久久| 日本性感美女三级视频| 欧美日韩熟女一区二区三区| 久久这里有免费精品| 91国内精品自线在拍白富美| 人妻av无码专区久久绿巨人| aaa久久久久久久久| 日本韩国免费福利精品| 亚洲av男人天堂久久| 91免费黄片可看视频| 亚洲一区二区久久久人妻| 2022中文字幕在线| 亚洲男人的天堂a在线| 欧美黑人巨大性xxxxx猛交| 人妻少妇性色欲欧美日韩| 亚洲护士一区二区三区| 日韩熟女系列一区二区三区| 2020国产在线不卡视频| 亚洲欧美激情国产综合久久久| 欧美区一区二区三视频| 天天干狠狠干天天操| 亚洲在线观看中文字幕av| 欧美日韩亚洲国产无线码| 少妇人妻真实精品视频| 国产成人自拍视频播放| 亚洲男人的天堂a在线| 99久久超碰人妻国产| 亚洲欧美另类自拍偷拍色图| 欧美va亚洲va天堂va| 久久久久久久久久性潮| 高潮视频在线快速观看国家快速| 中文字幕在线乱码一区二区| 人人妻人人爽人人添夜| gav成人免费播放| 又大又湿又爽又紧A视频| 人妻最新视频在线免费观看| 成人av电影免费版| 国内精品在线播放第一页| 男生用鸡操女生视频动漫| 天天干夜夜操天天舔| 97色视频在线观看| 日本人妻少妇18—xx| 粉嫩小穴流水视频在线观看| 大香蕉玖玖一区2区| 欧美一区二区三区高清不卡tv | 午夜美女福利小视频| 中文字幕在线观看极品视频| 蜜桃视频在线欧美一区| 好吊操视频这里只有精品| 国产日韩欧美美利坚蜜臀懂色| 超碰公开大香蕉97| 免费看高清av的网站| 亚洲免费国产在线日韩| 国产变态另类在线观看| 国际av大片在线免费观看| 日韩成人性色生活片| 免费大片在线观看视频网站| 最新中文字幕免费视频| 在线观看av观看av| 男生用鸡操女生视频动漫 | 中文字幕乱码人妻电影| 日本性感美女写真视频| 日韩成人免费电影二区| 绝色少妇高潮3在线观看| 美女骚逼日出水来了| 国产熟妇一区二区三区av| 阴茎插到阴道里面的视频| 国产在线91观看免费观看| 国产密臀av一区二区三| 欧美专区第八页一区在线播放| 91麻豆精品久久久久| 97成人免费在线观看网站| 大肉大捧一进一出好爽在线视频| 国产精品探花熟女在线观看| 97超碰人人搞人人| 青青青青青手机视频| caoporn蜜桃视频| 中文字幕av第1页中文字幕| 亚洲 欧美 精品 激情 偷拍| 亚洲国产欧美一区二区丝袜黑人| 中文字幕+中文字幕| 中字幕人妻熟女人妻a62v网| 1769国产精品视频免费观看| 国产日韩一区二区在线看| 国产精品视频男人的天堂| 日本美女性生活一级片| 婷婷久久久久深爱网| 熟女妇女老妇一二三区| 成人免费做爰高潮视频| 国产精品人妻66p| 欧洲日韩亚洲一区二区三区| 亚洲免费va在线播放| 女同互舔一区二区三区| 欧美日韩高清午夜蜜桃大香蕉| 国产伦精品一区二区三区竹菊| 亚洲国产最大av综合| 亚洲自拍偷拍精品网| 丝袜美腿视频诱惑亚洲无| 国产在线免费观看成人| 亚洲av色图18p| 三上悠亚和黑人665番号| 亚洲偷自拍高清视频| 大白屁股精品视频国产| 成人24小时免费视频| 日本福利午夜电影在线观看| 一区二区在线视频中文字幕| 天天色天天操天天透| 瑟瑟视频在线观看免费视频| 动漫av网站18禁| 午夜精品福利一区二区三区p| 成人免费公开视频无毒 | 特级无码毛片免费视频播放| 美女吃鸡巴操逼高潮视频| 久草电影免费在线观看| 亚洲午夜电影在线观看| 亚洲精品国产综合久久久久久久久| 中文字幕一区二区亚洲一区| 韩国女主播精品视频网站| 护士特殊服务久久久久久久| 日曰摸日日碰夜夜爽歪歪| 国产午夜男女爽爽爽爽爽视频| 在线视频这里只有精品自拍| 特大黑人巨大xxxx| 婷婷六月天中文字幕| av破解版在线观看| 在线观看成人国产电影| 国产自拍在线观看成人| 久久精品国产亚洲精品166m| 97色视频在线观看| 91综合久久亚洲综合| 狠狠操狠狠操免费视频| free性日本少妇| 欧洲国产成人精品91铁牛tv| 伊人开心婷婷国产av| 日韩午夜福利精品试看| 晚上一个人看操B片| 欧美日韩在线精品一区二区三| 成人免费毛片aaaa| 女同性ⅹxx女同hd| 99精品视频在线观看婷婷| 1区2区3区不卡视频| 午夜成午夜成年片在线观看| 亚洲va国产va欧美精品88| 一区二区三区 自拍偷拍| 日韩中文字幕在线播放第二页| 成人av久久精品一区二区| 国产普通话插插视频| heyzo蜜桃熟女人妻| 亚洲图库另类图片区| 午夜影院在线观看视频羞羞羞| 亚洲天堂有码中文字幕视频| 日韩写真福利视频在线观看| 欧美日韩国产一区二区三区三州| 超级碰碰在线视频免费观看| 又粗又硬又猛又黄免费30|