国产无遮挡裸体免费直播视频,久久精品国产蜜臀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)文章

最新評論

国产乱弄免费视频观看| 亚洲精品一区二区三区老狼| 亚洲激情,偷拍视频| 久久艹在线观看视频| 经典国语激情内射视频| 国产 在线 免费 精品| 狠狠躁狠狠爱网站视频| 久久久精品999精品日本| 天天干夜夜操啊啊啊| 亚洲av无硬久久精品蜜桃| 亚洲精品av在线观看| 成年美女黄网站18禁久久| 亚洲精品国偷自产在线观看蜜桃| 美日韩在线视频免费看| 亚洲在线观看中文字幕av| 九色porny九色9l自拍视频| 美女 午夜 在线视频| 天天做天天爽夜夜做少妇| 99热色原网这里只有精品| 亚洲欧美人精品高清| 538精品在线观看视频| 久久美欧人妻少妇一区二区三区| 绝顶痉挛大潮喷高潮无码| 在线观看免费岛国av| 999九九久久久精品| 精品视频中文字幕在线播放| 青青草亚洲国产精品视频| 高潮视频在线快速观看国家快速| 成年人免费看在线视频| 国产精品一二三不卡带免费视频 | 1区2区3区不卡视频| 久久久久只精品国产三级| 国产精品久久久久国产三级试频 | 51精品视频免费在线观看| 亚洲一区二区激情在线| 国产成人精品亚洲男人的天堂| 国产亚州色婷婷久久99精品| 99精品一区二区三区的区| 国产精品视频资源在线播放| 成人国产小视频在线观看| 日韩特级黄片高清在线看| 婷婷五月亚洲综合在线| 一区二区三区的久久的蜜桃的视频| 欧美aa一级一区三区四区| 国产精品自拍在线视频| 中国把吊插入阴蒂的视频| 日本后入视频在线观看| 少妇人妻100系列| 999热精品视频在线| www天堂在线久久| 成人性黑人一级av| 日本一二三中文字幕| tube69日本少妇| 边摸边做超爽毛片18禁色戒| 熟女视频一区,二区,三区| 天天草天天色天天干| 国产精品免费不卡av| 久草视频在线看免费| 大鸡巴插入美女黑黑的阴毛| 91极品大一女神正在播放| 中文字幕在线观看极品视频| 日本裸体熟妇区二区欧美| 成人网18免费视频版国产| 日日爽天天干夜夜操| 亚洲成人精品女人久久久| 91九色porny蝌蚪国产成人| 青青操免费日综合视频观看| 成年人啪啪视频在线观看| 天天射夜夜操综合网| av天堂中文字幕最新| 欧美精品久久久久久影院| 在线观看国产网站资源| 国产一区二区神马久久| 午夜精品在线视频一区| 老司机免费视频网站在线看| 中文字幕在线观看国产片| 啊啊啊想要被插进去视频| 天天操天天爽天天干| 亚洲一级 片内射视正片| 91免费观看在线网站| 视频一区 视频二区 视频| 成人av免费不卡在线观看| 都市激情校园春色狠狠| 亚洲av在线观看尤物| 亚洲国产欧美一区二区丝袜黑人| 97年大学生大白天操逼| 亚洲av日韩av第一区二区三区| 最新激情中文字幕视频| 亚洲欧美激情人妻偷拍| 涩涩的视频在线观看视频| 欧美日韩人妻久久精品高清国产| 国产卡一卡二卡三乱码手机| 91国产在线视频免费观看| 大尺度激情四射网站| 亚洲成人黄色一区二区三区| 亚洲成人激情av在线| 欧美亚洲中文字幕一区二区三区| 亚洲2021av天堂| 欧美 亚洲 另类综合| sspd152中文字幕在线| 免费看国产av网站| 婷婷六月天中文字幕| 插小穴高清无码中文字幕| 岛国一区二区三区视频在线| 亚洲无码一区在线影院| 福利在线视频网址导航| www久久久久久久久久久| 韩国男女黄色在线观看| 女生自摸在线观看一区二区三区| 色噜噜噜噜18禁止观看| 亚洲av色图18p| 亚洲伊人av天堂有码在线| 久久久极品久久蜜桃| 在线视频国产欧美日韩| 亚洲一区自拍高清免费视频| 亚洲老熟妇日本老妇| 人妻久久无码中文成人| 中文字幕在线永久免费播放| 超污视频在线观看污污污 | 亚洲第一伊人天堂网| 久久久久久久一区二区三| 黄色无码鸡吧操逼视频| 久草视频在线看免费| 青青尤物在线观看视频网站| 青娱乐蜜桃臀av色| 国产精品系列在线观看一区二区| 日本一二三中文字幕| 99国产精品窥熟女精品| av新中文天堂在线网址| 污污小视频91在线观看| 亚洲黄色av网站免费播放| 亚洲图库另类图片区| 偷拍自拍 中文字幕| 好男人视频在线免费观看网站| 黄色大片免费观看网站| 天天日天天摸天天爱| 伊人综合aⅴ在线网| av中文字幕电影在线看| 成人av电影免费版| 欧美综合婷婷欧美综合| 久久精品在线观看一区二区| 日韩美av高清在线| 亚洲欧洲一区二区在线观看| 9国产精品久久久久老师| 国产亚洲视频在线观看| 亚洲中文字字幕乱码| 欧美交性又色又爽又黄麻豆| 99亚洲美女一区二区三区| 青娱乐蜜桃臀av色| 青青青aaaa免费| 最新国产亚洲精品中文在线| 亚洲精品国品乱码久久久久 | 一区二区三区久久中文字幕| 自拍偷拍,中文字幕| 亚洲免费va在线播放| 制丝袜业一区二区三区| 亚洲变态另类色图天堂网| 青青青青操在线观看免费| 三级av中文字幕在线观看| 亚洲熟女女同志女同| 一区二区三区四区中文| 亚洲青青操骚货在线视频| 国产又粗又硬又大视频| 中文字幕乱码人妻电影| 99精品国产免费久久| 青青青青青手机视频| av天堂资源最新版在线看| 日韩av熟妇在线观看| 亚洲一级美女啪啪啪| 亚洲特黄aaaa片| 天天日天天干天天爱| 久久精品国产999| 青青伊人一精品视频| 天天操夜夜操天天操天天操 | 欧美日韩一区二区电影在线观看| 国产精品久久综合久久| 在线观看成人国产电影| 成人色综合中文字幕| 91一区精品在线观看| av大全在线播放免费| 亚洲欧美综合在线探花| 亚洲码av无色中文| 色在线观看视频免费的| 黑人借宿ntr人妻的沦陷2| 日本一道二三区视频久久| 99热久久极品热亚洲| 久久尻中国美女视频| 国产极品美女久久久久久| 丁香花免费在线观看中文字幕| 福利午夜视频在线合集| 99婷婷在线观看视频| 91精品国产综合久久久蜜 | 欧美天堂av无线av欧美| 久久h视频在线观看| 99热色原网这里只有精品| 99久久超碰人妻国产| 亚洲一区二区三区精品视频在线| huangse网站在线观看| 在线亚洲天堂色播av电影| 国产在线一区二区三区麻酥酥| 亚洲推理片免费看网站| 欧美aa一级一区三区四区| 在线可以看的视频你懂的 | 97精品视频在线观看| 国产极品精品免费视频| 男人的天堂在线黄色| 一区二区视频视频视频| 国产精品国产三级国产精东| 日本在线一区二区不卡视频| 亚洲成高清a人片在线观看| 成人国产小视频在线观看| 免费一级黄色av网站| 国产欧美精品不卡在线| 91免费黄片可看视频 | 亚洲av色图18p| 人妻久久久精品69系列| 欧美精品国产综合久久| 春色激情网欧美成人| aiss午夜免费视频| 天干天天天色天天日天天射| 国产精品亚洲在线观看| 2020中文字幕在线播放| 岛国av高清在线成人在线| 在线观看911精品国产| 中文字幕熟女人妻久久久| 蜜桃专区一区二区在线观看| 毛茸茸的大外阴中国视频| 免费人成黄页网站在线观看国产| 日本一区美女福利视频| 人妻最新视频在线免费观看| 午夜久久香蕉电影网| 在线国产精品一区二区三区| 国产精品大陆在线2019不卡| 成人H精品动漫在线无码播放| 一色桃子人妻一区二区三区| 成人免费公开视频无毒| okirakuhuhu在线观看| 国产V亚洲V天堂无码欠欠| 91九色porny蝌蚪国产成人| 欧美精产国品一二三产品价格| 中文字幕奴隷色的舞台50| 亚洲国产成人无码麻豆艾秋| 人人人妻人人澡人人| 欧美日韩不卡一区不区二区| 男人操女人逼逼视频网站| 一区二区三区国产精选在线播放| 亚洲欧美久久久久久久久| 18禁美女无遮挡免费| 精品黑人巨大在线一区| 亚洲欧美清纯唯美另类 | 天天干天天操天天摸天天射| 中文字幕在线永久免费播放| 中文字日产幕乱六区蜜桃| 日辽宁老肥女在线观看视频| 麻豆性色视频在线观看| 亚洲视频在线视频看视频在线| 自拍 日韩 欧美激情| 国产普通话插插视频| 亚洲成人线上免费视频观看| 色在线观看视频免费的| 9l人妻人人爽人人爽| 成人24小时免费视频| 国产av欧美精品高潮网站| 成人久久精品一区二区三区| 婷婷色国产黑丝少妇勾搭AV| 91九色国产porny蝌蚪| 欧美在线偷拍视频免费看| 黄色视频在线观看高清无码| 91www一区二区三区| 伊人综合免费在线视频| 99国产精品窥熟女精品| 国产不卡av在线免费| 亚洲码av无色中文| 性感美女高潮视频久久久 | 91av精品视频在线| 91在线视频在线精品3| 亚洲国产免费av一区二区三区| 亚洲另类综合一区小说| 黄色录像鸡巴插进去| 99热久久这里只有精品| 91国产在线视频免费观看| 亚洲av自拍天堂网| av老司机精品在线观看| 日韩少妇人妻精品无码专区| 亚洲视频在线观看高清| 亚洲成av人无码不卡影片一| 抽查舔水白紧大视频| 天天艹天天干天天操| 亚洲乱码中文字幕在线| 午夜在线观看岛国av,com| 伊人开心婷婷国产av| 中文字幕一区二区三区蜜月| 大鸡八强奸视频在线观看| 521精品视频在线观看| 无码日韩人妻精品久久| 国产之丝袜脚在线一区二区三区| 人人在线视频一区二区| 天天干夜夜操啊啊啊| 桃色视频在线观看一区二区| 2020久久躁狠狠躁夜夜躁| 国产精品久久久久久久精品视频 | 天堂女人av一区二区| 免费观看丰满少妇做受| 100%美女蜜桃视频| 日本三极片中文字幕| 日本丰满熟妇大屁股久久| 亚洲第一黄色在线观看| 中文字幕乱码人妻电影| 亚洲成人av一区在线| 新97超碰在线观看| 高清一区二区欧美系列| 极品粉嫩小泬白浆20p主播| 成年女人免费播放视频| 日韩欧美亚洲熟女人妻| 一区二区三区蜜臀在线| 在线可以看的视频你懂的| 青青草亚洲国产精品视频| 日本韩国免费一区二区三区视频 | 欧美成人小视频在线免费看| 久久精品亚洲国产av香蕉| 大黑人性xxxxbbbb| 国产精品人妻熟女毛片av久| 91av精品视频在线| 亚洲高清一区二区三区视频在线| 国产a级毛久久久久精品| 小穴多水久久精品免费看| 2017亚洲男人天堂| 国产伊人免费在线播放| 99av国产精品欲麻豆| 91自产国产精品视频| av男人天堂狠狠干| 国产在线免费观看成人| 在线观看av2025| 福利在线视频网址导航 | 欧美亚洲国产成人免费在线| 骚货自慰被发现爆操| 亚洲熟女女同志女同| 欧美va不卡视频在线观看| 超pen在线观看视频公开97| 含骚鸡巴玩逼逼视频| 成人亚洲国产综合精品| 亚洲天堂精品福利成人av| 天天射夜夜操综合网| 成年午夜免费无码区| 欧美精品资源在线观看| 乱亲女秽乱长久久久| 欧美女同性恋免费a| 自拍偷拍一区二区三区图片| 9国产精品久久久久老师| 国产女人叫床高潮大片视频| asmr福利视频在线观看| 亚洲精品高清自拍av| 日韩人妻xxxxx| 一级A一级a爰片免费免会员| 狠狠的往里顶撞h百合| 和邻居少妇愉情中文字幕| 2020久久躁狠狠躁夜夜躁 | 久久丁香婷婷六月天| 青青青青青手机视频| 亚洲成a人片777777| 亚洲欧美另类手机在线| 亚洲少妇人妻无码精品| 亚洲成人熟妇一区二区三区| 精品区一区二区三区四区人妻 | av天堂中文免费在线| 国产精品手机在线看片| 日本免费一级黄色录像| 后入美女人妻高清在线| 香港三日本三韩国三欧美三级| 美女在线观看日本亚洲一区| 日韩熟女系列一区二区三区| 日韩剧情片电影在线收看| 国产精品国色综合久久| yy6080国产在线视频| 91国语爽死我了不卡| 久久国产精品精品美女| 99国内小视频在现欢看| 99一区二区在线观看| 天天夜天天日天天日| 久久久久久久精品老熟妇| 日韩人妻xxxxx| 99婷婷在线观看视频| 天天干天天日天天谢综合156| 蜜臀av久久久久久久| 日本男女操逼视频免费看| free性日本少妇| 好男人视频在线免费观看网站| 丝袜国产专区在线观看| 开心 色 六月 婷婷| 人妻凌辱欧美丰满熟妇| 男人天堂色男人av| 欧美爆乳肉感大码在线观看| 80电影天堂网官网| 午夜影院在线观看视频羞羞羞| 东京干手机福利视频| 新97超碰在线观看| 伊人情人综合成人久久网小说| v888av在线观看视频| 欧美另类一区二区视频| 97人妻总资源视频| 亚洲综合色在线免费观看| 夫妻在线观看视频91| 国产午夜无码福利在线看| 中文字幕av男人天堂| 精内国产乱码久久久久久| 99热色原网这里只有精品| caoporn蜜桃视频| 中文字幕av第1页中文字幕| 75国产综合在线视频| 麻豆性色视频在线观看| 久久久制服丝袜中文字幕| 热99re69精品8在线播放| 2022中文字幕在线| 我想看操逼黄色大片| 91人妻人人做人人爽在线| 超污视频在线观看污污污| 国产精品久久久久久久精品视频| 中文字幕一区二区自拍| 黑人性生活视频免费看| asmr福利视频在线观看| 天堂va蜜桃一区入口| 日韩av中文在线免费观看| 99av国产精品欲麻豆| 欧美日本在线观看一区二区| 午夜美女少妇福利视频| 哥哥姐姐综合激情小说| asmr福利视频在线观看| 都市激情校园春色狠狠| 亚洲成人黄色一区二区三区| 91九色国产熟女一区二区| 日日夜夜狠狠干视频| 丰满少妇翘臀后进式| 丁香花免费在线观看中文字幕| 国产精品欧美日韩区二区| 日本女大学生的黄色小视频| 亚洲精品麻豆免费在线观看| 啪啪啪操人视频在线播放| 在线观看的黄色免费网站| 涩涩的视频在线观看视频| 欧美美女人体视频一区| 亚洲 中文字幕在线 日韩| 午夜在线观看一区视频| 蜜桃视频入口久久久| 久草视频中文字幕在线观看| 中文字幕人妻一区二区视频| 91快播视频在线观看| 一区国内二区日韩三区欧美| 天天日天天透天天操| av中文字幕国产在线观看| 日本美女性生活一级片| 不卡精品视频在线观看| 91传媒一区二区三区| 人妻3p真实偷拍一二区| 女同性ⅹxx女同h偷拍| 亚洲美女美妇久久字幕组| 搡老熟女一区二区在线观看| 操日韩美女视频在线免费看| 亚洲精品麻豆免费在线观看| 亚洲精品无码久久久久不卡| 日本韩国免费一区二区三区视频| 欧美一区二区三区在线资源| 绯色av蜜臀vs少妇| 女同久久精品秋霞网| 欧美爆乳肉感大码在线观看| 视频久久久久久久人妻| 91久久人澡人人添人人爽乱| 色婷婷综合激情五月免费观看| 欧美激情精品在线观看| 欧美黄片精彩在线免费观看| 国产精品免费不卡av| 大香蕉伊人国产在线| 精品区一区二区三区四区人妻| 男人的天堂在线黄色| 含骚鸡巴玩逼逼视频| 2020中文字幕在线播放| 日本www中文字幕| 少妇人妻真实精品视频| 可以免费看的www视频你懂的| 视频 一区二区在线观看| 欧美视频一区免费在线| 亚洲自拍偷拍精品网| 99re久久这里都是精品视频| 北条麻妃av在线免费观看| 女人精品内射国产99| 国产精品探花熟女在线观看| 又粗又硬又猛又爽又黄的| 无码国产精品一区二区高潮久久4| 9久在线视频只有精品| 青青青青爽手机在线| 人妻少妇性色欲欧美日韩| 亚洲天堂成人在线观看视频网站| 熟女国产一区亚洲中文字幕| 亚洲人人妻一区二区三区| 午夜场射精嗯嗯啊啊视频| 班长撕开乳罩揉我胸好爽| 人妻丝袜诱惑我操她视频| av新中文天堂在线网址| 午夜精品福利91av| 亚洲欧美一区二区三区爱爱动图| 精品亚洲在线免费观看| 午夜激情精品福利视频| 日韩美女搞黄视频免费| 综合页自拍视频在线播放| 视频在线亚洲一区二区| 不卡日韩av在线观看| 亚洲 中文 自拍 无码| weyvv5国产成人精品的视频| 粉嫩欧美美人妻小视频| 自拍偷拍亚洲欧美在线视频| 青青尤物在线观看视频网站| 日本午夜福利免费视频| 一色桃子人妻一区二区三区| 久久亚洲天堂中文对白| 久久热这里这里只有精品| 欧美va不卡视频在线观看| 丝袜亚洲另类欧美变态| 中文字幕在线视频一区二区三区 | 精品乱子伦一区二区三区免费播| 欧美日韩精品永久免费网址| 乱亲女秽乱长久久久| 久久这里有免费精品| 蜜桃久久久久久久人妻| av日韩在线观看大全| 久久精品国产亚洲精品166m| 毛茸茸的大外阴中国视频| 直接能看的国产av| 99精品国产aⅴ在线观看| 精品国产污污免费网站入口自| 999九九久久久精品| 国产丰满熟女成人视频| 97瑟瑟超碰在线香蕉| 亚洲码av无色中文| 日本乱人一区二区三区| 一级黄片大鸡巴插入美女| 久草电影免费在线观看| 美女 午夜 在线视频| 亚洲av男人天堂久久| 18禁网站一区二区三区四区| 三级等保密码要求条款| 日本后入视频在线观看| 夫妻在线观看视频91| 偷拍自拍福利视频在线观看| 亚洲熟女久久久36d| 亚洲欧美一区二区三区爱爱动图| 岛国黄色大片在线观看| 亚洲精品在线资源站| 亚洲成人av一区久久| 999久久久久999| 亚洲欧美另类自拍偷拍色图| 特一级特级黄色网片| 婷婷色国产黑丝少妇勾搭AV| japanese日本熟妇另类| 日韩亚洲高清在线观看| 国产精品手机在线看片| 2020国产在线不卡视频| 98精产国品一二三产区区别| 自拍偷拍亚洲欧美在线视频| www骚国产精品视频| 啊啊啊视频试看人妻| 和邻居少妇愉情中文字幕| 国产乱子伦精品视频潮优女| 青青草在观免费国产精品| 精品一区二区三四区| 成年人中文字幕在线观看| 亚洲一区二区人妻av| 91‖亚洲‖国产熟女| 亚洲午夜在线视频福利| 天堂中文字幕翔田av| 色狠狠av线不卡香蕉一区二区 | 欧美亚洲国产成人免费在线 | 五月天中文字幕内射| 国产欧美精品一区二区高清 | 天天日天天干天天插舔舔| 91综合久久亚洲综合| 欧美 亚洲 另类综合| 亚洲国产精品久久久久久6| www日韩毛片av| 视频二区在线视频观看| 超鹏97历史在线观看| 国产九色91在线视频| 日韩在线视频观看有码在线| 久久精品36亚洲精品束缚| 国产熟妇一区二区三区av| 一级黄片久久久久久久久| 激情五月婷婷综合色啪| 亚洲在线免费h观看网站| 亚洲精品精品国产综合| 精品亚洲国产中文自在线| 欧美另类一区二区视频| 自拍偷拍亚洲另类色图| 亚洲精品国产久久久久久| 亚洲国产精品美女在线观看| 韩国爱爱视频中文字幕| 久久午夜夜伦痒痒想咳嗽P| 国产超码片内射在线| 喷水视频在线观看这里只有精品| 亚洲人妻av毛片在线| 中文字幕在线永久免费播放| 在线免费观看亚洲精品电影| 欧美viboss性丰满| 丝袜肉丝一区二区三区四区在线| 午夜dv内射一区区| 100%美女蜜桃视频| 免费费一级特黄真人片| 国产高清在线观看1区2区| av老司机亚洲一区二区| 天堂女人av一区二区| 韩国三级aaaaa高清视频| 亚洲成人黄色一区二区三区| 精品国产污污免费网站入口自| 日本啪啪啪啪啪啪啪| 亚洲av日韩av网站| 美女吃鸡巴操逼高潮视频| 国产白袜脚足J棉袜在线观看| 精品国产在线手机在线| 欧美少妇性一区二区三区| 欧美视频一区免费在线| 日韩欧美制服诱惑一区在线| 粉嫩欧美美人妻小视频| 欧美精品中文字幕久久二区| 视频 一区二区在线观看| 最后99天全集在线观看| 亚洲福利精品视频在线免费观看| 青青青青青青青在线播放视频| 视频一区二区在线免费播放| 国产精品福利小视频a| 在线观看成人国产电影| 黑人借宿ntr人妻的沦陷2| 婷婷色中文亚洲网68| www日韩毛片av| 国产欧美精品免费观看视频| 国产麻豆91在线视频| 亚洲av色香蕉一区二区三区| 亚洲最大黄 嗯色 操 啊| 色哟哟国产精品入口| 在线观看国产免费麻豆| 国产成人精品一区在线观看| 国产精品国色综合久久 | 国产亚洲成人免费在线观看| 啊慢点鸡巴太大了啊舒服视频| 成年人中文字幕在线观看| 春色激情网欧美成人| 日韩人妻xxxxx| 亚洲图片欧美校园春色| 91久久人澡人人添人人爽乱| 成熟丰满熟妇高潮xx×xx | 亚洲老熟妇日本老妇| 日韩中文字幕精品淫| 亚洲综合一区二区精品久久| 国产精品久久综合久久| 久久这里只有精彩视频免费| 欧美性感尤物人妻在线免费看| 成人高清在线观看视频| xxx日本hd高清| 一区二区三区视频,福利一区二区 丰满的子国产在线观看 | 姐姐的朋友2在线观看中文字幕| 免费观看污视频网站| 91极品大一女神正在播放| 日本精品视频不卡一二三| 动漫精品视频在线观看| 欧美日韩亚洲国产无线码| 天天插天天色天天日| 国产片免费观看在线观看| 男女啪啪视频免费在线观看| 97人妻无码AV碰碰视频| 国产免费高清视频视频| 加勒比视频在线免费观看| 国产精品入口麻豆啊啊啊| 大屁股熟女一区二区三区| 适合午夜一个人看的视频| 色综合久久五月色婷婷综合| 黄色片一级美女黄色片| 日韩av有码一区二区三区4| 狠狠躁夜夜躁人人爽天天天天97| 啊啊啊视频试看人妻| 99re6热在线精品| 天天操天天干天天日狠狠插| 在线播放国产黄色av| 国产精品黄片免费在线观看| 人人爽亚洲av人人爽av| 福利在线视频网址导航| 国产自拍在线观看成人| 91色网站免费在线观看| 欲乱人妻少妇在线视频裸| 久久精品久久精品亚洲人| 沙月文乃人妻侵犯中文字幕在线| 久久这里只有精彩视频免费| 任你操视频免费在线观看| 国产成人小视频在线观看无遮挡 | 国产第一美女一区二区三区四区| 国产女人叫床高潮大片视频| 97年大学生大白天操逼| 啊啊好大好爽啊啊操我啊啊视频 | 色婷婷久久久久swag精品| 国产福利在线视频一区| 88成人免费av网站| 中文字幕人妻熟女在线电影| 午夜在线观看岛国av,com| 少妇人妻久久久久视频黄片| 五十路av熟女松本翔子| 人人在线视频一区二区| 午夜大尺度无码福利视频| 黄色视频成年人免费观看| 香蕉91一区二区三区| 中国老熟女偷拍第一页| 97精品综合久久在线| 午夜精品福利91av| 蜜桃精品久久久一区二区| free性日本少妇| 色在线观看视频免费的| 久久这里只有精彩视频免费| 动漫黑丝美女的鸡巴| 久久久麻豆精亚洲av麻花| 91久久国产成人免费网站| 亚洲男人让女人爽的视频| 欧美亚洲免费视频观看| 精品美女在线观看视频在线观看| 亚洲国产最大av综合| 日韩欧美高清免费在线| 国产性生活中老年人视频网站| 国产熟妇乱妇熟色T区| 日韩美av高清在线| av完全免费在线观看av| 国产又粗又黄又硬又爽| 激情小视频国产在线 | 国产高清97在线观看视频| 欧洲黄页网免费观看| 黄页网视频在线免费观看| 中文字幕网站你懂的| 国产麻豆精品人妻av| 风流唐伯虎电视剧在线观看| 四川乱子伦视频国产vip| 丁香花免费在线观看中文字幕| 大香蕉玖玖一区2区| 国产日本精品久久久久久久| 99久久成人日韩欧美精品| 性感美女福利视频网站| 国产精品久久久久久久久福交| 国产麻豆国语对白露脸剧情 | 1区2区3区不卡视频| 在线免费91激情四射| 国产精品3p和黑人大战| 亚洲免费va在线播放| 成人性爱在线看四区| 亚洲国产欧美一区二区丝袜黑人| 99视频精品全部15| 国产janese在线播放| 99精品国产自在现线观看| 欧美一级视频一区二区| 国产高清精品极品美女| 国产又色又刺激在线视频| 色哟哟国产精品入口| 操人妻嗷嗷叫视频一区二区| 日本一区精品视频在线观看| 自拍偷拍日韩欧美亚洲| 夜夜骑夜夜操夜夜奸| 一本一本久久a久久精品综合不卡| 亚洲成人av一区在线| 天天摸天天干天天操科普| 国产欧美精品不卡在线| 自拍偷拍 国产资源| 少妇被强干到高潮视频在线观看| 婷婷久久一区二区字幕网址你懂得 | 最新国产亚洲精品中文在线| 成人色综合中文字幕| 日本少妇的秘密免费视频| heyzo蜜桃熟女人妻| 国产夫妻视频在线观看免费| 91精品一区二区三区站长推荐| 日本少妇高清视频xxxxx| 密臀av一区在线观看| 久久这里只有精品热视频| 欧美国产亚洲中英文字幕| 亚洲综合乱码一区二区| 91国内精品自线在拍白富美| avjpm亚洲伊人久久| 欧美一区二区中文字幕电影| 在线免费视频 自拍| 天堂v男人视频在线观看| 亚洲免费成人a v| 日本啪啪啪啪啪啪啪| 9国产精品久久久久老师| 天天日天天添天天爽| 玖玖一区二区在线观看| 成年美女黄网站18禁久久| 在线亚洲天堂色播av电影| 精品国产高潮中文字幕| 日本男女操逼视频免费看| 亚洲少妇高潮免费观看| 亚洲精品欧美日韩在线播放| 日韩少妇人妻精品无码专区| 青娱乐最新视频在线| 91精品一区二区三区站长推荐| 日曰摸日日碰夜夜爽歪歪| 亚洲免费va在线播放| 91麻豆精品传媒国产黄色片| 最近中文字幕国产在线| 天天干天天操天天扣| 男人和女人激情视频| 黄色片年轻人在线观看| 国产熟妇人妻ⅹxxxx麻豆| 日韩写真福利视频在线观看| 久久精品亚洲成在人线a| 国产V亚洲V天堂无码欠欠| 啊用力插好舒服视频| 欧美区一区二区三视频| 亚洲粉嫩av一区二区三区| 操人妻嗷嗷叫视频一区二区| 美女av色播在线播放| 国产成人自拍视频在线免费观看| 天美传媒mv视频在线观看| 亚洲天堂精品久久久| 自拍偷拍亚洲精品第2页| 亚洲一区二区三区精品乱码| 大陆精品一区二区三区久久| 中文字幕第1页av一天堂网| 亚洲高清国产一区二区三区| 国语对白xxxx乱大交| 亚洲国产40页第21页| av手机免费在线观看高潮| 亚洲中文字幕乱码区| 免费成人av中文字幕| 熟女91pooyn熟女| 视频二区在线视频观看| 黑人进入丰满少妇视频| 一级黄色av在线观看| 97成人免费在线观看网站| 传媒在线播放国产精品一区| 亚洲偷自拍高清视频| 精品国产高潮中文字幕| 女同性ⅹxx女同h偷拍| 成年人午夜黄片视频资源| 久久综合老鸭窝色综合久久| 人人超碰国字幕观看97| 日日操综合成人av| 亚洲激情,偷拍视频| 日本a级视频老女人| 日韩一个色综合导航| 久久久噜噜噜久久熟女av| 最新欧美一二三视频| 国产中文字幕四区在线观看| 适合午夜一个人看的视频| 日韩不卡中文在线视频网站| 91 亚洲视频在线观看| 国产黄色a级三级三级三级| 日韩精品中文字幕福利| 日本黄在免费看视频| 强行扒开双腿猛烈进入免费版| 欧美交性又色又爽又黄麻豆| 1769国产精品视频免费观看| 偷拍自拍 中文字幕| 国产精品污污污久久| 97欧洲一区二区精品免费| 欧美精品欧美极品欧美视频| av天堂中文字幕最新| 欧美综合婷婷欧美综合| 80电影天堂网官网| 青娱乐最新视频在线| 九九视频在线精品播放| 人妻最新视频在线免费观看| 狠狠鲁狠狠操天天晚上干干| 黄色大片免费观看网站| av中文字幕网址在线| 欧美久久久久久三级网| 国产揄拍高清国内精品对白 | 亚洲无码一区在线影院| 97黄网站在线观看| 99精品国产aⅴ在线观看| 很黄很污很色的午夜网站在线观看 | 91 亚洲视频在线观看| 日韩二区视频一线天婷婷五| 大鸡巴插入美女黑黑的阴毛| 粉嫩小穴流水视频在线观看| 一级A一级a爰片免费免会员| 欧美黑人与人妻精品| 国产刺激激情美女网站| 人妻久久久精品69系列| 日本五十路熟新垣里子| 欧美成人猛片aaaaaaa| 91欧美在线免费观看| 日本人妻少妇18—xx| 中文亚洲欧美日韩无线码| 少妇人妻久久久久视频黄片| 欧美成人精品在线观看| 综合色区亚洲熟妇shxstz| 亚洲国产精品美女在线观看| 日本女人一级免费片| 大香蕉福利在线观看| 老师啊太大了啊啊啊尻视频| 日韩美女搞黄视频免费| 中文字幕日韩精品日本| 久久久精品欧洲亚洲av| 老司机午夜精品视频资源| 精品国产污污免费网站入口自| 在线免费观看99视频| 加勒比视频在线免费观看 | 9国产精品久久久久老师| 唐人色亚洲av嫩草| 一区二区三区欧美日韩高清播放 | 中文字幕一区二区自拍| 青青社区2国产视频| 五十路熟女人妻一区二区9933| 亚洲精品ww久久久久久| 韩国一级特黄大片做受| 中文字幕av熟女人妻| 午夜久久香蕉电影网| 国产亚洲欧美另类在线观看| 国产一级麻豆精品免费| 粉嫩欧美美人妻小视频| 亚洲在线一区二区欧美| 91精品国产高清自在线看香蕉网 | 国产中文精品在线观看| 黄色男人的天堂视频| 成人乱码一区二区三区av| 亚洲精品色在线观看视频| 中文字幕av男人天堂| 日本啪啪啪啪啪啪啪| 欧美亚洲牲夜夜综合久久| 美女大bxxxx内射| 日韩伦理短片在线观看| 久久久久五月天丁香社区| 国产大鸡巴大鸡巴操小骚逼小骚逼| 久久久久91精品推荐99| 美女张开腿让男生操在线看| 亚洲精品在线资源站| 狠狠的往里顶撞h百合| 亚洲av香蕉一区区二区三区犇| 中文字幕在线乱码一区二区| 午夜在线观看一区视频| 日韩一个色综合导航| yy96视频在线观看| 99精品国产aⅴ在线观看 | 国产乱子伦一二三区| 久久精品久久精品亚洲人| 日本少妇高清视频xxxxx | 亚洲av黄色在线网站| 久久精品美女免费视频| 婷婷色国产黑丝少妇勾搭AV| 99国产精品窥熟女精品| 成年人的在线免费视频| 久久久超爽一二三av| 午夜精品九一唐人麻豆嫩草成人| 高潮视频在线快速观看国家快速| 亚洲va国产va欧美精品88| 成人动漫大肉棒插进去视频| 国产欧美日韩在线观看不卡| 福利视频广场一区二区| 国产一级精品综合av| 97国产在线观看高清| 啊啊好慢点插舔我逼啊啊啊视频| 加勒比视频在线免费观看| 99av国产精品欲麻豆| 大香蕉日本伊人中文在线| 国产一级麻豆精品免费| 国产精品人妻66p| 亚洲av日韩精品久久久| 粉嫩欧美美人妻小视频| 自拍偷拍亚洲另类色图| 天天日天天玩天天摸| 亚洲国产美女一区二区三区软件 | 老司机在线精品福利视频| 日韩中文字幕精品淫| 亚洲精品成人网久久久久久小说| 成年人中文字幕在线观看| 青青青青视频在线播放| 大鸡巴后入爆操大屁股美女| 粉嫩欧美美人妻小视频| 亚洲人一区二区中文字幕| 国产成人无码精品久久久电影| 国产 在线 免费 精品| 97人人模人人爽人人喊| 女人精品内射国产99| 五十路熟女av天堂| 日本韩国免费一区二区三区视频| 新婚人妻聚会被中出| 夜色撩人久久7777| 小穴多水久久精品免费看| 91九色porny国产在线| 日本女大学生的黄色小视频| www天堂在线久久| 国产高清精品一区二区三区| 亚洲精品欧美日韩在线播放| 亚洲伊人久久精品影院一美女洗澡 | 中文字幕人妻av在线观看| 蜜桃色婷婷久久久福利在线| 亚洲国产精品免费在线观看| 红杏久久av人妻一区| av高潮迭起在线观看| 人人人妻人人澡人人| 超碰中文字幕免费观看| 精品国产乱码一区二区三区乱| 大陆av手机在线观看| 中文字幕在线乱码一区二区| av破解版在线观看| 国产成人小视频在线观看无遮挡| 国产成人精品久久二区91| 久久香蕉国产免费天天| 18禁免费av网站| 久久久久久久久久一区二区三区| 九九热99视频在线观看97| 在线网站你懂得老司机| 制服丝袜在线人妻中文字幕| 一个人免费在线观看ww视频| caoporm超碰国产| 亚洲国产成人在线一区| 不卡一不卡二不卡三| 久草视频在线一区二区三区资源站| 天天干夜夜操啊啊啊| 伊人综合aⅴ在线网| 天天夜天天日天天日| 女同性ⅹxx女同hd| 国产成人精品av网站| 男人操女人逼逼视频网站| 中文字幕人妻被公上司喝醉在线| 又色又爽又黄的美女裸体| 国产白嫩美女一区二区| av中文字幕国产在线观看| 初美沙希中文字幕在线 | 亚洲成人情色电影在线观看| 欧美视频一区免费在线| 婷婷激情四射在线观看视频| xxx日本hd高清| 亚洲成人线上免费视频观看| 亚洲少妇高潮免费观看| 国产又粗又猛又爽又黄的视频在线| 国产在线一区二区三区麻酥酥| 亚洲视频在线观看高清| 沙月文乃人妻侵犯中文字幕在线| 天天做天天爽夜夜做少妇| 欧美专区日韩专区国产专区| 夜女神免费福利视频| 国产麻豆国语对白露脸剧情| 欧美80老妇人性视频| 欧美一级色视频美日韩| 操日韩美女视频在线免费看| 亚洲一区二区三区精品视频在线| 中文字幕日韩人妻在线三区| 97国产在线av精品| 黄色男人的天堂视频| 亚洲激情唯美亚洲激情图片| 国产伊人免费在线播放| 91‖亚洲‖国产熟女| 少妇ww搡性bbb91| 国产精品视频资源在线播放| 黄色大片男人操女人逼| 偷拍自拍视频图片免费| 激情综合治理六月婷婷| 亚洲午夜高清在线观看| 一二三中文乱码亚洲乱码one| 91成人在线观看免费视频| 亚洲福利精品视频在线免费观看| 亚洲嫩模一区二区三区| 2021久久免费视频| 激情色图一区二区三区| 99久久超碰人妻国产| 日日夜夜大香蕉伊人| 蜜臀av久久久久久久| 精品乱子伦一区二区三区免费播| 日本高清在线不卡一区二区| 成人影片高清在线观看| 大鸡巴后入爆操大屁股美女| 少妇人妻真实精品视频| 亚洲欧美另类手机在线| 中文字幕一区二 区二三区四区 | 欧美日韩精品永久免费网址| 97人妻夜夜爽二区欧美极品| 成人性黑人一级av| 国产精品人妻66p| 成人伊人精品色xxxx视频| 日韩近亲视频在线观看| 国产福利小视频免费观看| 久久精品亚洲国产av香蕉| 亚洲嫩模一区二区三区| 黄色大片男人操女人逼| 狠狠操操操操操操操操操| 最新97国产在线视频| 青青青艹视频在线观看| 青娱乐在线免费视频盛宴| 视频 一区二区在线观看| 97人人模人人爽人人喊| 亚洲一区二区三区精品乱码| 欧美交性又色又爽又黄麻豆| 国产精品中文av在线播放| 国产成人午夜精品福利| 国产日韩一区二区在线看| 黑人解禁人妻叶爱071| 夫妻在线观看视频91| 青青操免费日综合视频观看| av中文字幕国产在线观看| 大学生A级毛片免费视频| 久久久久久久99精品| 91久久综合男人天堂| 初美沙希中文字幕在线 | 蜜臀成人av在线播放| 精品国产污污免费网站入口自| 福利一二三在线视频观看| 狍和女人的王色毛片| 熟女视频一区,二区,三区| 精品av久久久久久久| 99热国产精品666| 偷拍自拍福利视频在线观看| 亚洲成人激情av在线| 在线观看一区二区三级| 亚洲综合乱码一区二区| 人妻凌辱欧美丰满熟妇| 欧美亚洲牲夜夜综合久久| 国内资源最丰富的网站| 日韩熟女av天堂系列| 极品粉嫩小泬白浆20p主播| 超黄超污网站在线观看| 可以在线观看的av中文字幕| 韩国AV无码不卡在线播放 | av网址国产在线观看| av天堂中文免费在线| 快插进小逼里大鸡吧视频| 日韩精品中文字幕福利| 天天躁日日躁狠狠躁躁欧美av| 动漫美女的小穴视频| 亚洲视频乱码在线观看| 精品久久久久久久久久久a√国产 日本女大学生的黄色小视频 | 国产91久久精品一区二区字幕| 97成人免费在线观看网站| 激情人妻校园春色亚洲欧美| 在线不卡成人黄色精品| 天天爽夜夜爽人人爽QC| 清纯美女在线观看国产| 亚洲 中文 自拍 另类 欧美| 日韩av有码一区二区三区4 | 天天色天天舔天天射天天爽| avjpm亚洲伊人久久| 一区二区三区四区中文| 日本韩国亚洲综合日韩欧美国产 | 国产成人自拍视频在线免费观看| 人妻少妇亚洲一区二区| 精品国产高潮中文字幕| 天天想要天天操天天干| 国产精品成久久久久三级蜜臀av| av在线免费资源站| 国产精品国产三级国产精东| 亚洲精品av在线观看| 鸡巴操逼一级黄色气| 亚洲免费福利一区二区三区| AV天堂一区二区免费试看| 99热久久极品热亚洲| 国产日本欧美亚洲精品视| 国产高清97在线观看视频| 综合一区二区三区蜜臀| 国产亚洲精品视频合集| 中文字幕午夜免费福利视频| 大香蕉日本伊人中文在线| 熟女人妻一区二区精品视频| 国产又粗又硬又猛的毛片视频| 亚洲av自拍偷拍综合| 青青青国产免费视频| mm131美女午夜爽爽爽| 欧美va亚洲va天堂va| 午夜毛片不卡在线看| 中国黄色av一级片| 无码日韩人妻精品久久| 晚上一个人看操B片| 日韩少妇人妻精品无码专区| 91av中文视频在线| 一区二区三区四区视频| 久久久久久久久久性潮| 亚洲国产欧美一区二区丝袜黑人| 日本裸体熟妇区二区欧美| 中文字幕亚洲中文字幕| 天天日天天干天天搡| 99久久久无码国产精品性出奶水| 美女视频福利免费看| 亚洲成人午夜电影在线观看| 韩国AV无码不卡在线播放| 在线国产中文字幕视频| 天天操天天射天天操天天天| 青草久久视频在线观看| 欧美交性又色又爽又黄麻豆| 成人资源在线观看免费官网| 大屁股肉感人妻中文字幕在线| 国产精品三级三级三级| 亚洲国产精品久久久久久6| 精品视频一区二区三区四区五区 | 色综合久久久久久久久中文| 国产成人精品一区在线观看 | 懂色av之国产精品| 蜜桃视频在线欧美一区| 色天天天天射天天舔| 天天日天天摸天天爱| 欧美日本在线观看一区二区| 午夜在线观看岛国av,com| 天天日天天干天天舔天天射| AV无码一区二区三区不卡| 亚洲久久午夜av一区二区| 国产熟妇一区二区三区av| 动漫av网站18禁| 成人24小时免费视频| 欧亚日韩一区二区三区观看视频 | 中文字幕人妻被公上司喝醉在线| 骚货自慰被发现爆操| av在线免费中文字幕| 国产日韩av一区二区在线| 搡老妇人老女人老熟女| 亚洲自拍偷拍综合色| 亚洲1区2区3区精华液| 亚洲av色图18p| 激情啪啪啪啪一区二区三区| 日韩亚洲高清在线观看| 日韩欧美国产精品91| 日本熟妇丰满厨房55| 顶级尤物粉嫩小尤物网站| 人妻少妇性色欲欧美日韩| 欧美成人综合色在线噜噜| 五月婷婷在线观看视频免费| 国产麻豆国语对白露脸剧情| 97年大学生大白天操逼| 桃色视频在线观看一区二区| 欧美爆乳肉感大码在线观看| 国产乱子伦精品视频潮优女| 99精品国产免费久久| 91社福利《在线观看| 亚洲成人三级在线播放| 乱亲女秽乱长久久久| av一本二本在线观看| 2021最新热播中文字幕| 视频二区在线视频观看| 91快播视频在线观看| 成年人该看的视频黄免费| 人人妻人人爱人人草| 欧美国产亚洲中英文字幕| 51国产成人精品视频| 人人妻人人澡欧美91精品| 午夜精品一区二区三区更新| 少妇与子乱在线观看| 亚洲福利精品福利精品福利| 绝顶痉挛大潮喷高潮无码| 一级黄色av在线观看| 偷拍自拍福利视频在线观看| 色综合色综合色综合色| 一区二区三区蜜臀在线| 国产精品人久久久久久| 日韩写真福利视频在线观看| 喷水视频在线观看这里只有精品| v888av在线观看视频| 五十路在线观看完整版| 亚洲精品三级av在线免费观看| 99精品视频在线观看婷婷| 99热99re在线播放| 青青草人人妻人人妻| 唐人色亚洲av嫩草| 宅男噜噜噜666免费观看| 日韩美女综合中文字幕pp| 天天色天天爱天天爽| 国产精品人久久久久久| 成年人黄色片免费网站| 91人妻人人做人人爽在线| 精品美女福利在线观看| 久久热这里这里只有精品| 亚洲国产40页第21页| 成人av亚洲一区二区| 欧美在线精品一区二区三区视频 | 超鹏97历史在线观看| 国产精品国产三级国产午| 国产麻豆乱子伦午夜视频观看| 中文字幕人妻一区二区视频 | 久久久久五月天丁香社区| 77久久久久国产精产品| 黄色成人在线中文字幕| 黄色成人在线中文字幕| 超pen在线观看视频公开97| 五十路息与子猛烈交尾视频| 亚洲综合一区成人在线| 色哟哟国产精品入口| 日本女人一级免费片| 国产中文精品在线观看| 天天日天天干天天干天天日| 国产精品久久9999| 亚洲一区二区三区五区| 黄色大片免费观看网站| 97精品综合久久在线| 亚洲区欧美区另类最新章节| 一个色综合男人天堂| 极品性荡少妇一区二区色欲| asmr福利视频在线观看| 在线免费观看亚洲精品电影| 直接能看的国产av| 99精品视频之69精品视频| 精品一区二区三区三区色爱| 日本女大学生的黄色小视频| 成人24小时免费视频| 一二三中文乱码亚洲乱码one| 无码精品一区二区三区人| 偷拍美女一区二区三区| 99热这里只有国产精品6| 欧美色呦呦最新网址| 老司机在线精品福利视频| 伊拉克及约旦宣布关闭领空| 在线观看一区二区三级| 又粗又硬又猛又黄免费30| 女生被男生插的视频网站| 日韩美女综合中文字幕pp| 老鸭窝在线观看一区| 五十路人妻熟女av一区二区| 黑人巨大的吊bdsm| 91中文字幕免费在线观看| 国产又粗又猛又爽又黄的视频在线| 国产九色91在线观看精品| 国产变态另类在线观看| 国产一级麻豆精品免费| 欧美成人精品欧美一级黄色| 一级黄色片夫妻性生活| 欧美另类一区二区视频| 欧美日韩一级黄片免费观看| 亚洲男人让女人爽的视频| 91色九色porny| 国产视频网站一区二区三区| av中文字幕国产在线观看| 十八禁在线观看地址免费| 啪啪啪啪啪啪啪免费视频| 日韩午夜福利精品试看| 激情小视频国产在线 | 日韩欧美一级黄片亚洲| 婷婷久久一区二区字幕网址你懂得| 无忧传媒在线观看视频| 女同互舔一区二区三区| 小穴多水久久精品免费看| 人人妻人人爱人人草| 偷青青国产精品青青在线观看| 免费费一级特黄真人片| 93精品视频在线观看| 伊人综合aⅴ在线网| 五十路在线观看完整版| 97人妻色免费视频| 精品日产卡一卡二卡国色天香| 国产在线自在拍91国语自产精品 | 天天草天天色天天干| 在线新三级黄伊人网| 亚洲成人熟妇一区二区三区| 欧美伊人久久大香线蕉综合| 日韩欧美亚洲熟女人妻| 成年人中文字幕在线观看| www,久久久,com| 成人网18免费视频版国产| 丰满熟女午夜福利视频| 黄色成年网站午夜在线观看| 精品欧美一区二区vr在线观看| 国产精品黄片免费在线观看| 一区二区久久成人网| 日本三极片中文字幕| 快插进小逼里大鸡吧视频| 好吊操视频这里只有精品| 中文字幕在线视频一区二区三区| 99人妻视频免费在线| 亚洲精品午夜久久久久| 天天做天天干天天操天天射| 抽查舔水白紧大视频| 在线观看亚洲人成免费网址| 天天做天天爽夜夜做少妇| 婷婷午夜国产精品久久久| tube69日本少妇| av中文字幕在线观看第三页| 91she九色精品国产| 国产熟妇一区二区三区av| 国产精品久久久黄网站| 日本韩国免费一区二区三区视频 | 国产精品自拍在线视频| 亚洲高清国产拍青青草原| 偷青青国产精品青青在线观看| 欧美日韩中文字幕欧美| 欧美亚洲中文字幕一区二区三区| 成人福利视频免费在线| 精品国产乱码一区二区三区乱| 在线免费观看黄页视频| 国产精品精品精品999| 韩国黄色一级二级三级| 中文字幕一区二 区二三区四区| 91自产国产精品视频| 五十路在线观看完整版| 综合国产成人在线观看| 日本成人不卡一区二区| 成人性黑人一级av| 日本少妇在线视频大香蕉在线观看 | 偷拍美女一区二区三区| 在线成人日韩av电影| 亚洲一区二区三区精品视频在线 | 黑人借宿ntr人妻的沦陷2| 久久久超爽一二三av| 精品高跟鞋丝袜一区二区| 91亚洲精品干熟女蜜桃频道| 四川乱子伦视频国产vip| 老司机福利精品免费视频一区二区| 91精品国产黑色丝袜| 懂色av之国产精品| 中字幕人妻熟女人妻a62v网| 大鸡八强奸视频在线观看| 日本人妻精品久久久久久| 中文亚洲欧美日韩无线码| 中国把吊插入阴蒂的视频| 亚洲精品 日韩电影| 亚洲av琪琪男人的天堂| 夜女神免费福利视频| 人妻少妇中文有码精品| 一区二区三区毛片国产一区| 超碰在线中文字幕一区二区| 91啪国自产中文字幕在线| 欧美日韩激情啪啪啪| 综合激情网激情五月天| 成人免费毛片aaaa| 日本黄在免费看视频| 日本www中文字幕| 99av国产精品欲麻豆| 偷拍自拍 中文字幕| 中文字母永久播放1区2区3区| 久久精品国产亚洲精品166m| 黄色片一级美女黄色片| 人妻熟女中文字幕aⅴ在线| 久久久久久国产精品| av老司机亚洲一区二区| 欧美精品黑人性xxxx| 亚洲 人妻 激情 中文| 久久久极品久久蜜桃| 啪啪啪操人视频在线播放| 日韩少妇人妻精品无码专区| 91国产在线免费播放| 日本最新一二三区不卡在线| 国产伊人免费在线播放| free性日本少妇| 亚洲av自拍偷拍综合| 日日操综合成人av| 天天艹天天干天天操| 欧美视频中文一区二区三区| 青青青国产片免费观看视频| 国产91嫩草久久成人在线视频| 青青色国产视频在线| 免费在线播放a级片| 精品成人啪啪18免费蜜臀| 欧美久久久久久三级网| 成年人午夜黄片视频资源| 天天操天天弄天天射| 国产一区二区视频观看| 天天操,天天干,天天射| 福利片区一区二体验区| 日韩欧美一级黄片亚洲| 中出中文字幕在线观看| 国产真实灌醉下药美女av福利| 人妻av无码专区久久绿巨人| 三级黄色亚洲成人av| 密臀av一区在线观看| 在线免费观看av日韩| 男女之间激情网午夜在线| 日韩av中文在线免费观看| 老司机在线精品福利视频| 中文字幕一区二区亚洲一区| 国产精品成人xxxx| 韩国三级aaaaa高清视频| 99精品国自产在线人| 亚洲av日韩精品久久久| 亚洲人一区二区中文字幕| 一区二区三区欧美日韩高清播放| sspd152中文字幕在线| 久久精品国产999| 青青青青视频在线播放| 免费福利av在线一区二区三区| 日本熟妇一区二区x x| 黑人3p华裔熟女普通话| 1024久久国产精品| 成熟丰满熟妇高潮xx×xx| 无码中文字幕波多野不卡| 亚洲成人午夜电影在线观看| 晚上一个人看操B片| 色婷婷久久久久swag精品| 成人资源在线观看免费官网| 精品av国产一区二区三区四区| 亚洲欧美另类手机在线| 国产一区自拍黄视频免费观看| 大骚逼91抽插出水视频| 我想看操逼黄色大片| 国产精品成人xxxx| 亚洲图片欧美校园春色| 一区二区熟女人妻视频| 免费观看成年人视频在线观看| 中国黄色av一级片| 精品一线二线三线日本| 亚洲 自拍 色综合图| 青青青爽视频在线播放| 欧美少妇性一区二区三区| 91福利视频免费在线观看| 色97视频在线播放| 自拍偷区二区三区麻豆| 一本一本久久a久久精品综合不卡| 久久香蕉国产免费天天| 亚洲高清国产一区二区三区| 久久艹在线观看视频| 国产麻豆国语对白露脸剧情| 99久久中文字幕一本人| 免费男阳茎伸入女阳道视频| 欧美日韩精品永久免费网址| 日本一二三区不卡无| 国产一区二区三免费视频| 一色桃子久久精品亚洲| 非洲黑人一级特黄片| 免费69视频在线看| 337p日本大胆欧美人| 亚洲欧美综合另类13p| 特级无码毛片免费视频播放 | 天天躁夜夜躁日日躁a麻豆| 黄工厂精品视频在线观看 | 美女被肏内射视频网站| 欧美一区二区中文字幕电影 | 国产一区二区火爆视频| 国产品国产三级国产普通话三级| 红杏久久av人妻一区| 小泽玛利亚视频在线观看| 天天日天天添天天爽| 青青青青青手机视频| 久久久久久九九99精品| 国产九色91在线视频| 国产av一区2区3区| jiujiure精品视频在线| 久久香蕉国产免费天天| 青青青青青青青青青国产精品视频| 亚洲 图片 欧美 图片| 鸡巴操逼一级黄色气| 熟女国产一区亚洲中文字幕| 少妇ww搡性bbb91| 中文字幕一区二区三区蜜月 | 日韩人妻xxxxx| 亚洲欧美福利在线观看| 精品国产乱码一区二区三区乱| 把腿张开让我插进去视频| 亚洲av无乱一区二区三区性色| 中出中文字幕在线观看| 亚洲美女高潮喷浆视频| 国产福利小视频二区| 小泽玛利亚视频在线观看| 男生舔女生逼逼的视频| 天天操夜夜操天天操天天操 | 在线观看视频污一区| 午夜免费体验区在线观看| 日本韩国免费福利精品| 久久热久久视频在线观看| 日韩影片一区二区三区不卡免费 | 夜色17s精品人妻熟女| 免费国产性生活视频| 93人妻人人揉人人澡人人| 熟女91pooyn熟女| 夜色福利视频在线观看| 91av精品视频在线| 一级黄色片夫妻性生活| 日日操综合成人av| 一区二区三区四区视频| sejizz在线视频| 黄色中文字幕在线播放| 红杏久久av人妻一区| 91超碰青青中文字幕| 免费岛国喷水视频在线观看| 51国产成人精品视频 | 黄色大片免费观看网站| 天天操天天操天天碰| 一级黄片久久久久久久久| 哥哥姐姐综合激情小说| 免费男阳茎伸入女阳道视频| 一区二区三区日韩久久| 国产 在线 免费 精品| 夜女神免费福利视频| 国产女人叫床高潮大片视频| 欧美视频不卡一区四区| 国产黄网站在线观看播放| 超碰97人人澡人人| 四川乱子伦视频国产vip| 久久热久久视频在线观看| 一区二区三区蜜臀在线| 北条麻妃肉色丝袜视频| 老司机福利精品视频在线| 中文字幕熟女人妻久久久| 骚逼被大屌狂草视频免费看| 青青青青青操视频在线观看| 国产精品一区二区av国| 午夜精品在线视频一区| 欧美专区日韩专区国产专区| 黑人借宿ntr人妻的沦陷2| 中文字幕视频一区二区在线观看| 久草视频福利在线首页| 丝袜长腿第一页在线| 摧残蹂躏av一二三区| 最新中文字幕乱码在线| 91av中文视频在线| av老司机精品在线观看| 人妻少妇性色欲欧美日韩| 亚洲推理片免费看网站| 天天操天天爽天天干| 精品国产污污免费网站入口自| 人妻自拍视频中国大陆| 一区二区三区日本伦理| jiuse91九色视频| 精品久久婷婷免费视频| 91九色porny国产蝌蚪视频| 丝袜亚洲另类欧美变态| 久久久久久9999久久久久| 久草极品美女视频在线观看| 日本三极片中文字幕| 免费观看污视频网站| 亚洲美女美妇久久字幕组| 国产精品国产三级国产午| 又粗又硬又猛又爽又黄的| 国产一区av澳门在线观看| 91成人精品亚洲国产| 天堂av在线官网中文| 欧美色呦呦最新网址| 曰本无码人妻丰满熟妇啪啪| 日本午夜爽爽爽爽爽视频在线观看| ka0ri在线视频| 日本av熟女在线视频| 亚洲综合另类欧美久久| 丝袜长腿第一页在线| 男女啪啪视频免费在线观看| 午夜频道成人在线91| 国产中文字幕四区在线观看| 最新97国产在线视频| 日本高清撒尿pissing| 馒头大胆亚洲一区二区| 18禁精品网站久久| 国产精品成人xxxx| 视频久久久久久久人妻| 人妻熟女中文字幕aⅴ在线| 日韩精品二区一区久久| av在线免费观看亚洲天堂| 国产视频精品资源网站| 亚洲av色图18p| 亚洲精品国品乱码久久久久| 中文字幕高清免费在线人妻| 天天日天天干天天要| 一区二区三区久久中文字幕| 一二三中文乱码亚洲乱码one | 日本一区精品视频在线观看| 大尺度激情四射网站| 成人av中文字幕一区| 男人天堂av天天操| 久久久久久性虐视频| aaa久久久久久久久| 亚洲欧美一区二区三区爱爱动图| 中文字幕乱码人妻电影| 欧美久久一区二区伊人| 成人综合亚洲欧美一区| 精品国产污污免费网站入口自| 成年人该看的视频黄免费| 国产精品中文av在线播放| 在线国产日韩欧美视频| 国产美女一区在线观看| 午夜免费体验区在线观看| 性感美女福利视频网站| huangse网站在线观看| 嫩草aⅴ一区二区三区| 亚洲午夜电影之麻豆| 亚洲人成精品久久久久久久| 在线亚洲天堂色播av电影| 在线 中文字幕 一区| 北条麻妃肉色丝袜视频| 人妻av无码专区久久绿巨人| 521精品视频在线观看| 91成人在线观看免费视频| 78色精品一区二区三区| 青青青视频手机在线观看| 成年美女黄网站18禁久久| 一区二区三区日韩久久| 麻豆精品成人免费视频| 老司机在线精品福利视频| 丰满的子国产在线观看| 日本一区美女福利视频| 国产一区av澳门在线观看| 亚洲人成精品久久久久久久| 天天色天天操天天透| 国产又粗又硬又猛的毛片视频| 午夜大尺度无码福利视频| 国产普通话插插视频| 五月天色婷婷在线观看视频免费| 狠狠操操操操操操操操操| 国产精品精品精品999| 午夜久久久久久久99| 国产精品一区二区av国| 成人在线欧美日韩国产| 亚洲人妻30pwc| av俺也去在线播放| 一个色综合男人天堂| 日韩二区视频一线天婷婷五| 亚洲少妇高潮免费观看| 天天操夜夜操天天操天天操| 大鸡吧插入女阴道黄色片| 天天日天天操天天摸天天舔| 国产91精品拍在线观看| 中文字幕人妻av在线观看| 亚洲成人激情av在线| 日日摸夜夜添夜夜添毛片性色av| a v欧美一区=区三区| 天天色天天操天天透| 亚洲公开视频在线观看| 91麻豆精品秘密入口在线观看| 人妻熟女在线一区二区| 少妇人妻真实精品视频| 亚洲图片偷拍自拍区| 中文字幕乱码人妻电影| 国产成人精品av网站| 97精品人妻一区二区三区精品| 成人影片高清在线观看| 美女视频福利免费看| 91www一区二区三区| 亚洲va天堂va国产va久| 亚洲一级美女啪啪啪| 国产乱弄免费视频观看| 国产老熟女伦老熟妇ⅹ| 欧美麻豆av在线播放| 久久精品亚洲成在人线a| 一区二区三区欧美日韩高清播放| av在线shipin| 经典av尤物一区二区| av黄色成人在线观看| 狠狠操狠狠操免费视频| www天堂在线久久| 亚洲成人三级在线播放| 制丝袜业一区二区三区| 91欧美在线免费观看| 亚洲精品麻豆免费在线观看| av亚洲中文天堂字幕网| 亚洲 图片 欧美 图片| 亚洲老熟妇日本老妇| 国产精品视频资源在线播放| 天天日天天透天天操| 人妻少妇一区二区三区蜜桃| 青草久久视频在线观看| 日韩成人性色生活片| 97国产在线观看高清| 女同互舔一区二区三区| 大胸性感美女羞爽操逼毛片| 在线免费91激情四射 | 91麻豆精品秘密入口在线观看| 亚洲精品亚洲人成在线导航| 免费国产性生活视频| 97成人免费在线观看网站| 亚洲的电影一区二区三区| 日本在线一区二区不卡视频| 在线 中文字幕 一区| 国产高清97在线观看视频| 岛国黄色大片在线观看| 午夜久久久久久久精品熟女| 午夜毛片不卡免费观看视频| 日韩美在线观看视频黄| 在线可以看的视频你懂的| 久久精品视频一区二区三区四区 | 91精品国产综合久久久蜜| 亚洲区美熟妇久久久久| 久久午夜夜伦痒痒想咳嗽P| 亚洲少妇高潮免费观看| 国产激情av网站在线观看| 日本少妇在线视频大香蕉在线观看| 91免费黄片可看视频 | yellow在线播放av啊啊啊| 天天日天天日天天射天天干| 欧美一区二区三区激情啪啪啪 | 99热久久这里只有精品| 精品亚洲中文字幕av| 黄片色呦呦视频免费看| 91久久国产成人免费网站| 国产极品美女久久久久久| gogo国模私拍视频| 亚洲欧美日韩视频免费观看| 青青青国产片免费观看视频| 一区二区视频视频视频| 免费黄高清无码国产| 青青青青青青青在线播放视频| 亚洲精品高清自拍av| 女同久久精品秋霞网| 激情五月婷婷免费视频| av黄色成人在线观看| 天天干天天日天天干天天操| av视网站在线观看| 91福利在线视频免费观看| 3344免费偷拍视频| 国产久久久精品毛片| 欲满人妻中文字幕在线| 国产丰满熟女成人视频| 一级黄片久久久久久久久| 亚洲av色香蕉一区二区三区| 白白操白白色在线免费视频 | 黄色大片免费观看网站| 国产精品人妻熟女毛片av久| 亚洲欧美精品综合图片小说| 国产精品大陆在线2019不卡| 亚洲另类伦春色综合小| 亚洲av日韩高清hd| 亚洲超碰97人人做人人爱| 成年人午夜黄片视频资源| 蜜臀av久久久久蜜臀av麻豆| 男人的网址你懂的亚洲欧洲av| 午夜毛片不卡在线看| 快插进小逼里大鸡吧视频| 含骚鸡巴玩逼逼视频| 2022精品久久久久久中文字幕| 午夜精品亚洲精品五月色| 亚洲精品午夜aaa久久| 快点插进来操我逼啊视频| 精内国产乱码久久久久久| 欧美精品资源在线观看| 五十路息与子猛烈交尾视频 | av在线资源中文字幕| 在线可以看的视频你懂的| 成人24小时免费视频| 哥哥姐姐综合激情小说| 日本女人一级免费片| www日韩a级s片av| 在线免费观看欧美小视频| 毛片av在线免费看| 国产亚洲欧美另类在线观看| 日韩a级精品一区二区| 日本www中文字幕| 91 亚洲视频在线观看| 国产内射中出在线观看| 成人蜜臀午夜久久一区| 免费看国产又粗又猛又爽又黄视频 | 亚洲福利天堂久久久久久| 91福利在线视频免费观看| 色综合天天综合网国产成人| 欧美亚洲国产成人免费在线| 青草久久视频在线观看| 黄色黄色黄片78在线| 国产精品久久久久久美女校花| 五月天中文字幕内射| 大鸡巴操b视频在线| 国产在线观看黄色视频| 国产一区二区火爆视频| 黑人借宿ntr人妻的沦陷2| 久久久精品精品视频视频| 久草电影免费在线观看| 亚洲国产精品美女在线观看| 日本午夜爽爽爽爽爽视频在线观看| 男人插女人视频网站| 国产高清女主播在线| 天天日天天鲁天天操| 亚洲人一区二区中文字幕| 男人靠女人的逼视频| 精品一区二区三区在线观看| 日韩人妻丝袜中文字幕| 日本韩国免费福利精品| 亚洲无码一区在线影院| 老司机欧美视频在线看| 日本性感美女视频网站| 午夜蜜桃一区二区三区| 男女啪啪啪啪啪的网站| 少妇高潮一区二区三区| 免费黄页网站4188| 亚洲 欧美 精品 激情 偷拍 | 国产一线二线三线的区别在哪| 日韩亚国产欧美三级涩爱| 久久久久91精品推荐99| 岛国一区二区三区视频在线| 5528327男人天堂| 亚洲青青操骚货在线视频| 11久久久久久久久久久| 日韩伦理短片在线观看| 福利在线视频网址导航| 国产一线二线三线的区别在哪| 欧洲亚洲欧美日韩综合| 黄色资源视频网站日韩| 久久久久久久精品成人热| 亚洲成人国产综合一区| 精品国产亚洲av一淫| 欧美精品伦理三区四区| 免费观看成年人视频在线观看| 美女被肏内射视频网站| 一本久久精品一区二区| 日本精品美女在线观看| 成人亚洲国产综合精品| 国产变态另类在线观看| 不卡精品视频在线观看| 成年人免费看在线视频| 男人和女人激情视频| 成人综合亚洲欧美一区| 欧美日韩亚洲国产无线码| 日本女大学生的黄色小视频| 午夜在线观看岛国av,com| 亚洲av一妻不如妾| 91九色porny国产在线| 视频一区二区三区高清在线| 不卡精品视频在线观看| 中文字幕午夜免费福利视频| 美女大bxxxx内射| 一区二区三区视频,福利一区二区| 日本中文字幕一二区视频| av手机在线免费观看日韩av| 91极品新人『兔兔』精品新作| 亚洲高清国产一区二区三区| 大骚逼91抽插出水视频| 在线观看的黄色免费网站| 白白操白白色在线免费视频| 看一级特黄a大片日本片黑人| 2018在线福利视频| 亚洲激情偷拍一区二区| 少妇高潮一区二区三区| 3344免费偷拍视频| 亚洲午夜高清在线观看| 特级欧美插插插插插bbbbb| 熟女人妻三十路四十路人妻斩| 中文人妻AV久久人妻水| 青春草视频在线免费播放| 青青青青青青青青青青草青青| 日本人竟这样玩学生妹| 精品视频中文字幕在线播放| 韩国一级特黄大片做受| 黄片大全在线观看观看| 国产在线观看黄色视频| 99的爱精品免费视频| 中字幕人妻熟女人妻a62v网 | 红杏久久av人妻一区| 国产精品免费不卡av| 又粗又硬又猛又爽又黄的| 青草青永久在线视频18| 日韩中文字幕在线播放第二页| 2020av天堂网在线观看| 蜜桃精品久久久一区二区| 亚洲码av无色中文| 亚洲男人让女人爽的视频| 亚洲成人精品女人久久久| 真实国产乱子伦一区二区| 偷偷玩弄新婚人妻h视频| 欧美日韩一区二区电影在线观看| 亚洲视频乱码在线观看| 熟女91pooyn熟女| 成人性爱在线看四区| 精品一区二区三区三区色爱| 国产一区成人在线观看视频| 亚洲激情,偷拍视频| 97人妻无码AV碰碰视频| 蜜臀av久久久久蜜臀av麻豆| 国产精品福利小视频a| 国产欧美日韩第三页| 97精品成人一区二区三区 | 国产日韩精品免费在线| 91色老99久久九九爱精品| 最新中文字幕乱码在线| 黑人大几巴狂插日本少妇| japanese日本熟妇另类| 91p0rny九色露脸熟女| 好了av中文字幕在线| huangse网站在线观看| 2019av在线视频| 日本一二三中文字幕| 91免费黄片可看视频 | 91九色国产熟女一区二区| av无限看熟女人妻另类av| 中文字幕一区二区三区蜜月| 青青伊人一精品视频| 午夜毛片不卡免费观看视频| 日韩av免费观看一区| 国产在线拍揄自揄视频网站| av男人天堂狠狠干| 欧美亚洲自偷自拍 在线| 久久精品36亚洲精品束缚| 97色视频在线观看| 五十路熟女人妻一区二| 中文字幕1卡1区2区3区| 97超碰人人搞人人| 精产国品久久一二三产区区别 | 搡老熟女一区二区在线观看| 天天通天天透天天插| 亚洲公开视频在线观看| 久久精品国产999| 韩国AV无码不卡在线播放| 99热碰碰热精品a中文| 日本三极片视频网站观看| 欧美日韩国产一区二区三区三州| 日本韩国在线观看一区二区| 激情五月婷婷免费视频| 大胸性感美女羞爽操逼毛片| 2020中文字幕在线播放| 日日夜夜狠狠干视频| 人妻少妇性色欲欧美日韩| 狠狠地躁夜夜躁日日躁| 91人妻精品一区二区在线看| 视频啪啪啪免费观看| 日本五十路熟新垣里子| 97人妻总资源视频| 这里只有精品双飞在线播放| 免费人成黄页网站在线观看国产 | 国产熟妇乱妇熟色T区| 亚洲免费福利一区二区三区| 国产V亚洲V天堂无码欠欠| 日韩亚洲高清在线观看| 九九热99视频在线观看97| 天天操天天爽天天干| 欧美视频一区免费在线| 男人和女人激情视频| 亚洲精品ww久久久久久| 色偷偷伊人大杳蕉综合网| 亚洲成人激情av在线| 最新的中文字幕 亚洲| 揄拍成人国产精品免费看视频| 新婚人妻聚会被中出| 在线免费观看靠比视频的网站 | 国产九色91在线视频| 亚洲卡1卡2卡三卡四老狼| 国产中文精品在线观看| 韩国一级特黄大片做受| 国产一区二区视频观看| 国产视频在线视频播放| 91传媒一区二区三区| av一区二区三区人妻| 成人av在线资源网站| 亚洲卡1卡2卡三卡四老狼| 操人妻嗷嗷叫视频一区二区| 精品黑人巨大在线一区| 日韩视频一区二区免费观看| 播放日本一区二区三区电影| 色综合天天综合网国产成人| 亚洲一级美女啪啪啪| 日韩欧美在线观看不卡一区二区| 国产精品黄片免费在线观看| 亚洲一区av中文字幕在线观看| 美女大bxxxx内射| 天天操天天弄天天射| 在线免费观看靠比视频的网站| 中文字幕人妻一区二区视频| 人人妻人人爽人人添夜| 婷婷久久一区二区字幕网址你懂得| 亚洲成人黄色一区二区三区| 中文字幕之无码色多多| 亚洲图库另类图片区| 亚洲成人三级在线播放| 天天通天天透天天插| 亚洲中文字幕国产日韩| 毛片一级完整版免费| 亚洲 中文字幕在线 日韩| 91国产在线免费播放| 亚洲高清自偷揄拍自拍| 国产精品人妻66p| 亚洲欧美久久久久久久久| 亚洲蜜臀av一区二区三区九色| 国产又大又黄免费观看| 插小穴高清无码中文字幕| 成年人午夜黄片视频资源| 77久久久久国产精产品| 欧美特级特黄a大片免费| 超碰在线观看免费在线观看| 成人av中文字幕一区| 免费在线观看污污视频网站| 日韩美女搞黄视频免费| 成熟熟女国产精品一区| 男生用鸡操女生视频动漫 | 欧美一级片免费在线成人观看| 亚洲精品国品乱码久久久久| 中文字幕人妻一区二区视频| 国产亚洲四十路五十路| 5528327男人天堂| 高清一区二区欧美系列| 国产精品探花熟女在线观看 | 国产视频在线视频播放| h国产小视频福利在线观看| 婷婷午夜国产精品久久久| 国产午夜无码福利在线看| 亚洲欧美成人综合在线观看| 国产高清在线在线视频| 黄色视频在线观看高清无码| 92福利视频午夜1000看| 99热这里只有精品中文| 欧美乱妇无乱码一区二区| 99精品国自产在线人| 亚洲av自拍天堂网| 成人av电影免费版| 91中文字幕免费在线观看| 国产又粗又硬又猛的毛片视频| 在线观看的黄色免费网站| 日日爽天天干夜夜操| 成人乱码一区二区三区av| 激情综合治理六月婷婷| 在线观看亚洲人成免费网址| 欧美性感尤物人妻在线免费看| 91极品大一女神正在播放| 黄色片黄色片wyaa| 青青青青视频在线播放| 91麻豆精品91久久久久同性| 欧美视频不卡一区四区| 亚洲老熟妇日本老妇| 日韩无码国产精品强奸乱伦| 日本午夜爽爽爽爽爽视频在线观看 | 免费费一级特黄真人片| 人人超碰国字幕观看97| 偷拍自拍国产在线视频| 天天色天天舔天天射天天爽| 欧美亚洲牲夜夜综合久久| 亚洲偷自拍高清视频| 福利一二三在线视频观看| 一级黄片久久久久久久久| 91欧美在线免费观看| 国产精品亚洲а∨天堂免| 国产又色又刺激在线视频| 日本阿v视频在线免费观看| 国产乱子伦一二三区| 亚洲国产美女一区二区三区软件 | 亚洲特黄aaaa片| 亚洲激情av一区二区| 亚洲区美熟妇久久久久| 美女张开两腿让男人桶av| 91桃色成人网络在线观看| 2022精品久久久久久中文字幕| 欧美在线精品一区二区三区视频 | av高潮迭起在线观看| 亚洲一区二区人妻av| 经典国语激情内射视频| 久久尻中国美女视频| 青青草在观免费国产精品| 精品日产卡一卡二卡国色天香| 人妻少妇中文有码精品| 中文字幕—97超碰网| 孕妇奶水仑乱A级毛片免费看| av中文字幕电影在线看| 91精品高清一区二区三区| 精品亚洲国产中文自在线| 老司机99精品视频在线观看| 日韩成人性色生活片| 日韩中文字幕在线播放第二页| 欧美中国日韩久久精品| 天天爽夜夜爽人人爽QC| 天天日天天爽天天爽| 成年人黄视频在线观看| 88成人免费av网站| 日本熟妇喷水xxx| 欧美日韩高清午夜蜜桃大香蕉| 欧美香蕉人妻精品一区二区| 五色婷婷综合狠狠爱| 9久在线视频只有精品| 亚洲免费av在线视频| 国产九色91在线视频| 又黄又刺激的午夜小视频| 中文字幕综合一区二区| 老司机免费视频网站在线看| 国产日韩精品一二三区久久久| 38av一区二区三区| 亚洲成人激情av在线| 精品首页在线观看视频| 班长撕开乳罩揉我胸好爽| 日本一本午夜在线播放| 欧美天堂av无线av欧美| 青草亚洲视频在线观看| 亚洲激情,偷拍视频| 日韩在线视频观看有码在线| 国产亚洲欧美45p| 天天日天天摸天天爱| 18禁免费av网站| av天堂中文免费在线| 宅男噜噜噜666国产| 99精品一区二区三区的区| 亚国产成人精品久久久| 亚洲av自拍天堂网| 精品美女福利在线观看| 久久久久久久精品老熟妇| 亚洲第一伊人天堂网| 亚洲精品国偷自产在线观看蜜桃| 日本一区精品视频在线观看| 在线免费观看欧美小视频| 亚洲护士一区二区三区| 换爱交换乱高清大片| 91大神福利视频网| 精品欧美一区二区vr在线观看| 亚洲精品在线资源站| 天天干天天操天天爽天天摸| 这里有精品成人国产99| 中文字幕免费福利视频6| aⅴ五十路av熟女中出| 国产黑丝高跟鞋视频在线播放| 中文字幕av第1页中文字幕| 午夜精品福利91av| 亚洲国产中文字幕啊啊啊不行了| 91综合久久亚洲综合| 超碰中文字幕免费观看| 日韩成人综艺在线播放| 超级福利视频在线观看| 亚欧在线视频你懂的| 久久久久久久久久久免费女人| 国产麻豆乱子伦午夜视频观看| 成人高潮aa毛片免费| 人妻久久无码中文成人| 男女第一次视频在线观看| 亚洲 中文 自拍 另类 欧美| 国产亚洲四十路五十路| 日本阿v视频在线免费观看| 91久久精品色伊人6882| 亚洲福利午夜久久久精品电影网| 天天日天天干天天爱| 中文字幕av第1页中文字幕| 黄色在线观看免费观看在线| 2020久久躁狠狠躁夜夜躁| 在线免费观看99视频| 男女啪啪啪啪啪的网站| 久久久久只精品国产三级| 98精产国品一二三产区区别| 国产亚洲成人免费在线观看 | 亚洲黄色av网站免费播放| 99一区二区在线观看| 啊啊啊想要被插进去视频| 深夜男人福利在线观看| 青青青国产免费视频| 少妇被强干到高潮视频在线观看 | 2021天天色天天干| 亚洲一区二区人妻av| 亚洲欧美国产麻豆综合| 91精品国产综合久久久蜜 | 天天摸天天亲天天舔天天操天天爽| 大香蕉福利在线观看| 97人妻色免费视频| 国产一区二区三免费视频| 亚洲人成精品久久久久久久| 中文字幕免费在线免费| 精品一线二线三线日本| 又黄又刺激的午夜小视频| 黄色片年轻人在线观看| 婷婷久久久综合中文字幕| 国产午夜无码福利在线看| 玖玖一区二区在线观看| 国产丰满熟女成人视频| 青青青视频自偷自拍38碰| 人妻另类专区欧美制服| 亚洲乱码中文字幕在线| 99国产精品窥熟女精品| 久青青草视频手机在线免费观看| 亚洲成人免费看电影| 日本特级片中文字幕| 日韩一区二区三区三州| 精品美女福利在线观看| 黄色片一级美女黄色片| 国产精选一区在线播放| 97色视频在线观看| 国产精品人妻熟女毛片av久| 毛片av在线免费看| 精品一区二区三区在线观看| 亚洲一区二区三区在线高清| 熟女人妻在线中出观看完整版| 91av精品视频在线| 中文字幕无码一区二区免费| 动漫精品视频在线观看| 国产揄拍高清国内精品对白| 国产福利在线视频一区| 精品美女福利在线观看| 激情啪啪啪啪一区二区三区| 日日夜夜狠狠干视频| 97瑟瑟超碰在线香蕉| 97成人免费在线观看网站| 精品黑人一区二区三区久久国产 | 欧美va不卡视频在线观看| 91国内精品自线在拍白富美| 天天草天天色天天干| 中文字幕一区二区人妻电影冢本| 999九九久久久精品| 天天操天天干天天艹| 91人妻精品一区二区久久| 一区二区三区四区中文| 97国产福利小视频合集| 国产精品人妻66p| 动漫精品视频在线观看| 91av精品视频在线| 91色网站免费在线观看| av天堂加勒比在线| 五月精品丁香久久久久福利社| 超碰公开大香蕉97| 馒头大胆亚洲一区二区| 亚洲欧美在线视频第一页| 亚洲高清国产自产av| 中文字幕 亚洲av| 青春草视频在线免费播放| 午夜成午夜成年片在线观看| 日本熟妇丰满厨房55| 黄片色呦呦视频免费看| 中文字幕一区二区亚洲一区| 黑人乱偷人妻中文字幕| 中文字幕之无码色多多| av资源中文字幕在线观看| 亚洲精品久久综合久| 国产精品精品精品999| 日韩成人综艺在线播放| 青青青视频手机在线观看| 天天日天天鲁天天操| 成年午夜免费无码区| 首之国产AV医生和护士小芳| 亚洲一级av大片免费观看| 51国产偷自视频在线播放| 欧美性感尤物人妻在线免费看| 大胸性感美女羞爽操逼毛片| 亚洲变态另类色图天堂网| 久久久久久久亚洲午夜综合福利 | 欧美精品中文字幕久久二区| 亚洲成人线上免费视频观看| 国产福利小视频大全| nagger可以指黑人吗| 国产熟妇人妻ⅹxxxx麻豆| 丝袜美腿欧美另类 中文字幕| 国产高清在线观看1区2区| 久久久久久国产精品| 亚洲中文字字幕乱码| 熟女国产一区亚洲中文字幕| 熟女妇女老妇一二三区| 国产男女视频在线播放| 欧美日韩亚洲国产无线码| 久久免看30视频口爆视频| 国产不卡av在线免费| 福利一二三在线视频观看| 91社福利《在线观看| 中文字幕在线视频一区二区三区| 中文字幕第1页av一天堂网| 啊啊好大好爽啊啊操我啊啊视频 | 中文字幕综合一区二区| 大陆av手机在线观看| 激情伦理欧美日韩中文字幕| 国产精品视频欧美一区二区| 午夜国产福利在线观看| 99精品视频在线观看婷婷| 黄色大片免费观看网站| 久草视频在线免播放| 国产aⅴ一线在线观看| 含骚鸡巴玩逼逼视频| 韩国亚洲欧美超一级在线播放视频 | 青青青爽视频在线播放| 国产在线91观看免费观看| 精品一区二区三区三区88 | 岛国黄色大片在线观看| 香港一级特黄大片在线播放| 91国内精品久久久久精品一| 少妇人妻久久久久视频黄片| 黄色片黄色片wyaa| 无套猛戳丰满少妇人妻| 东京热男人的av天堂| 亚洲成高清a人片在线观看| 97瑟瑟超碰在线香蕉| 大骚逼91抽插出水视频| 最新激情中文字幕视频| 国产精品午夜国产小视频| 欧美美女人体视频一区| 亚洲1区2区3区精华液| 性感美女高潮视频久久久| 亚洲精品一区二区三区老狼| 色综合色综合色综合色| 成人在线欧美日韩国产| 少妇人妻100系列| 国产亚州色婷婷久久99精品| 日噜噜噜夜夜噜噜噜天天噜噜噜| av在线播放国产不卡| 成人sm视频在线观看| 色综合久久无码中文字幕波多| 美洲精品一二三产区区别 | 成人免费做爰高潮视频| 2019av在线视频| 黄色成人在线中文字幕| 97超碰人人搞人人| 国产一线二线三线的区别在哪| 国产高清97在线观看视频| 91啪国自产中文字幕在线| 三上悠亚和黑人665番号| 日曰摸日日碰夜夜爽歪歪| 一区二区视频在线观看免费观看| 免费福利av在线一区二区三区| 日本丰满熟妇大屁股久久| 自拍偷拍 国产资源| 熟妇一区二区三区高清版| 亚洲1069综合男同| 538精品在线观看视频| 久久久精品精品视频视频| 丝袜亚洲另类欧美变态| 黄色录像鸡巴插进去| 国产精品手机在线看片| 另类av十亚洲av| 天天日天天干天天要| 亚洲高清自偷揄拍自拍| 国产精品探花熟女在线观看| 激情人妻校园春色亚洲欧美| 久久久精品欧洲亚洲av| av亚洲中文天堂字幕网| 青春草视频在线免费播放| 日韩国产乱码中文字幕| 最新91精品视频在线| 国产熟妇人妻ⅹxxxx麻豆| 青青青青视频在线播放| 一区二区三区久久久91| 最新的中文字幕 亚洲| 国产一区二区视频观看| 色综合久久久久久久久中文| 黄色无码鸡吧操逼视频| 激情人妻校园春色亚洲欧美| 国产日韩精品免费在线| 在线观看av2025| 久久精品国产999| 亚洲午夜高清在线观看| 青青草精品在线视频观看| 日本午夜久久女同精女女| 9国产精品久久久久老师 | 男人的网址你懂的亚洲欧洲av| 国产熟妇人妻ⅹxxxx麻豆| 亚洲在线免费h观看网站| 精品美女在线观看视频在线观看| 欧美成一区二区三区四区| 免费男阳茎伸入女阳道视频| 熟女91pooyn熟女| 国产成人综合一区2区| 成人av免费不卡在线观看| 亚洲 欧美 精品 激情 偷拍| 18禁精品网站久久| 国产高清女主播在线| 91天堂天天日天天操| 天堂女人av一区二区| 一区二区三区四区视频| 精品高潮呻吟久久av| 国产精品自拍在线视频| 综合国产成人在线观看| 91试看福利一分钟| 人妻凌辱欧美丰满熟妇| 亚洲午夜在线视频福利| 成人sm视频在线观看| 99人妻视频免费在线| 午夜美女少妇福利视频| 亚洲 色图 偷拍 欧美| 亚洲成av人无码不卡影片一| 亚洲成人免费看电影| 韩国AV无码不卡在线播放| 国产九色91在线视频| 国产精品系列在线观看一区二区| 中文字幕av第1页中文字幕| 亚洲成人av一区在线| 大鸡巴操娇小玲珑的女孩逼| 一区二区在线视频中文字幕| 护士特殊服务久久久久久久| 精品国产高潮中文字幕| 91成人精品亚洲国产| 亚洲午夜电影在线观看| 久久免看30视频口爆视频| 硬鸡巴动态操女人逼视频| 亚洲精品无码久久久久不卡|