create or replace package HTML_REPORT_PKG is
-------------------------------------------------------------------
-- 生成HTML格式报表的程序包 -
-- 张震 2004.2.2 -
-------------------------------------------------------------------
v_report_output_mode varchar2(2);
--过程名:TY_REPORT
--功能:生成HTML格式的通用报表
--传入参数:P_REPORT_REQUEST_ID
--参数描述:该参数是当用户在FORM上选择了条件之后,
-- 生成相应的参数,存储在基表html_report_requests
-- 中,以该参数(请求ID)为主键唯一索引
PROCEDURE TY_REPORT(p1 In Varchar2
,p2 In Varchar2
,P_REPORT_REQUEST_ID IN NUMBER);
--过程名:HTML_REPORT
--功能:生成HTML格式的通用报表
--传入参数:P_REPORT_REQUEST_ID
--参数描述:该参数是当用户在FORM上选择了条件之后,
-- 生成相应的参数,存储在基表html_report_requests
-- 中,以该参数(请求ID)为主键唯一索引
PROCEDURE HTML_REPORT(P_REPORT_REQUEST_ID IN NUMBER);
--过程名称:REPORT_TABLE_LOOP
--作用:以一个SELECT语句为数据源,利用动态SQL循环,
-- 以HTML表格的形式,将其内容输出。
--传入参数:P_TABLE_ATTRIBUTES 该表格的属性,直接以HTML语法要求写
-- P_REPORT_TABLE_SQL 数据源(一个SELECT语句,要求将每个要输出的字段都以逗号或其它符号连接成一个字符串成为一个字段)
-- P_SQL_DELIMITER 该SELECT语句中,用于连接每个字段的符号,默认为","
-- P_SQL_ATTR_DELIMITER 该SELECT语句的每个字段与其属性之间的分隔符号,默认为"*"
-- P_REPORT_TABLE_TITLE 该表格的标题行(一个用逗号或其它符号分隔后连成的字符串)
-- P_TITLE_DELIMITER 该标题行每个字段之间的分隔符号,默认为","
-- P_TITLE_ATTR_DELIMITER 该标题行的每个字段与其属性之间的分隔符号,默认为"*"
-- P_REPORT_TABLE_SUM 该表格的合计行(一个用逗号或其它符号分隔后连成的字符串)
-- P_SUM_DELIMITER 该合计行每个字段之间的分隔符号,默认为","
-- P_SUM_ATTR_DELIMITER 该合计行的每个字段与其属性之间的分隔符号,默认为"*"
--参数调用格式举例:
-- 参数 举例
-- P_TABLE_ATTRIBUTES 例子可参见默认值
-- P_REPORT_TABLE_SQL 'SELECT A*align=center||'',''||B||'',''||C||'','' FROM T WHERE A > 0'
-- P_SQL_DELIMITER ',',用在上面的SQL的||'',''||部分
-- P_SQL_ATTR_DELIMITER '*',用在上面的SQL的A*align=center部分
-- P_REPORT_TABLE_TITLE '客户编号,客户名称,客户群,'
-- P_TITLE_DELIMITER ','
-- P_TITLE_ATTR_DELIMITER '*'
-- P_REPORT_TABLE_SUM '合计*colspan=2,100,'
-- P_SUM_DELIMITER ','
-- P_SUM_ATTR_DELIMITER '*'
PROCEDURE REPORT_TABLE_LOOP (P_TABLE_ATTRIBUTES IN VARCHAR2 DEFAULT 'width=100%'||' style="border-collapse:collapse; border:none; font-family: 宋体; font-size: 10pt"'||' border=1 bordercolor=#000000 cellspacing="0"'
,P_REPORT_TABLE_SQL IN VARCHAR2 --表格的内容行的数据源
,P_SQL_DELIMITER IN VARCHAR2 DEFAULT ','
,P_SQL_ATTR_DELIMITER IN VARCHAR2 DEFAULT '*'
,P_REPORT_TABLE_TITLE IN VARCHAR2 --表格的标题行
,P_TITLE_DELIMITER IN VARCHAR2 DEFAULT ','
,P_TITLE_ATTR_DELIMITER IN VARCHAR2 DEFAULT '*'
,P_REPORT_TABLE_SUM IN VARCHAR2 DEFAULT '' --表格的合计行
,P_SUM_DELIMITER IN VARCHAR2 DEFAULT ','
,P_SUM_ATTR_DELIMITER IN VARCHAR2 DEFAULT '*'
);
--过 程 名:HTML_TITLE
--传入参数:P_PROGRAM_TITLE 程序名称,在IE的标题栏(顶部蓝色栏)显示
-- P_REPORT_TITLE 报表的标题
-- P_REPORT_TITLE_ATTR 报表标题的显示属性,直接以HTML语法格式写
-- P_STYLE 需要在该报表中定义的STYLE的HTML语句,直接以HTML语法格式写
--功 能:该过程用于生成HTML文件的开始部分,是一个通用的过程
PROCEDURE HTML_TITLE(P_PROGRAM_TITLE IN VARCHAR2
,P_REPORT_TITLE IN VARCHAR2
,P_REPORT_TITLE_ATTR IN VARCHAR2 DEFAULT 'align=center style="font-family: 宋体; font-size: 20pt"'
,P_STYLE IN VARCHAR2 DEFAULT '<!-- .amount {mso-number-format:Standard;text-align:right;}-->'
,P_FILE_ID IN utl_file.file_type DEFAULT NULL
) ;
--过 程 名:HEADER_TABLECOLUMN
--传入参数:P_PROMPT 字段的提示
-- P_VALUE 字段的值
-- P_WITH_OTHER_ATTR TD是否有其他属性
-- P_ATTR_DELIMITER TD属性与值之间的分隔符号
-- P_BOLD_FLAG 是否将所有PORMPT都以黑体显示
-- P_FONT_SIZE 所有TD值的字体大小
--功 能:该过程用于生成HTML表格的一对列的信息,
-- 包括一个PORMPT单元格和一个VALUE单元格。
PROCEDURE HEADER_TABLECOLUMN(P_PROMPT IN VARCHAR2
,P_VALUE IN VARCHAR2
,P_WITH_OTHER_ATTR IN VARCHAR2 DEFAULT 'N'
,P_ATTR_DELIMITER IN VARCHAR2 DEFAULT '*'
,P_BOLD_FLAG IN VARCHAR2 DEFAULT 'Y'
,P_FONT_SIZE IN NUMBER DEFAULT 12
);
--过 程 名:LINE_TITLE
--传入参数:P_TITLE_STRING 将表格的一行信息用一个特殊符号分隔后连成的字符串(注意:末尾也要有一个符号)
-- P_WITH_OTHER_ATTR 该属性用于区分本次调用是否要为TD指定其他属性
-- P_WITH_TR_FLAG 该属性用于区分是否要带<TR>标志
-- P_P_ATTR_DELIMITER 在解码后的字符串当中用于分隔字段值和其他属性的分隔符号,默认为“*”
-- P_DELIMITER 在字符串连接时的分隔符号,默认为逗号“,”
--功 能:该过程用于将表格的一行信息用一个特殊符号分隔后连成的字符串
-- 进行解码后,以单元格的格式显示出来。
PROCEDURE LINE_TITLE(P_TITLE_STRING IN VARCHAR2
,P_WITH_OTHER_ATTR IN VARCHAR2 DEFAULT 'N'
,P_WITH_TR_FLAG IN VARCHAR2 DEFAULT 'Y'
,P_DELIMITER IN VARCHAR2 DEFAULT ','
,P_ATTR_DELIMITER IN VARCHAR2 DEFAULT '*'
,P_FILE_ID IN utl_file.file_type DEFAULT NULL
) ;
--过 程 名:PARSE_TWO
--传入参数:p_full_str 以特殊符号分隔后的字符串
-- p_delimiter 在字符串连接时的分隔符号,默认为逗号“,”
--传出参数: p_first_str 每次解码后得到的一个字段
-- p_second_str 每次解码后剩余的字符串
-- p_zero 解码完成标志,为"Y"时,表示解码完成
--功 能:该过程用于进行字符串的解码。
PROCEDURE PARSE_TWO(p_full_str IN VARCHAR2
,p_first_str IN OUT VARCHAR2
,p_second_str IN OUT VARCHAR2
,p_zero IN OUT VARCHAR2
,p_delimiter IN VARCHAR2 DEFAULT ','
);
--
procedure output_line(p_output_str in varchar2
,p_output_mode in varchar2 default v_report_output_mode
);
--
procedure output_str(p_output_str in varchar2
,p_output_mode in varchar2 default v_report_output_mode
);
--
procedure insert_row(X_REQUEST_ID out NUMBER
,X_REPORT_TITLE IN VARCHAR2
,X_REPORT_SQL IN VARCHAR2
,X_SELECT_SQL IN VARCHAR2
,X_SELECT_SQL_TITLE IN VARCHAR2 default null
,X_OTHER_HEADER_INFO IN VARCHAR2 default null
,X_OTHER_BOTTOM_INFO IN VARCHAR2 default null
,X_TABLE_ATTRIBUTE IN VARCHAR2 default null
,X_SQL_DELIMITER IN VARCHAR2 default null
,X_SQL_ATTR_DELIMITER IN VARCHAR2 default null
,X_TITLE_DELIMITER IN VARCHAR2 default null
,X_TITLE_ATTR_DELIMITER IN VARCHAR2 default null
,X_SUM_DELIMITER IN VARCHAR2 default null
,X_SUM_ATTR_DELIMITER IN VARCHAR2 default null
,X_SUM_INFOMATION IN VARCHAR2 default null
,X_SUM_SQL IN VARCHAR2 default null
,X_OUTPUT_MODE IN VARCHAR2 default 'F'
,X_FILE_LOCATION IN VARCHAR2 default null);
end HTML_REPORT_PKG;
/
create or replace package body HTML_REPORT_PKG is
-------------------------------------------------------------------
-- 生成HTML格式报表的程序包 -
-- 张震 2004.2.2 -
-------------------------------------------------------------------
--过程名:TY_REPORT
--功能:生成HTML格式的通用报表
--传入参数:P_REPORT_REQUEST_ID
--参数描述:该参数是当用户在FORM上选择了条件之后,
-- 生成相应的参数,存储在基表html_report_requests
-- 中,以该参数(请求ID)为主键唯一索引
PROCEDURE TY_REPORT(p1 In Varchar2
,p2 In Varchar2
,P_REPORT_REQUEST_ID IN NUMBER)
IS
begin
--html_report_pkg.p_request_id := p_request_id;
html_report_pkg.v_report_output_mode := 'F';
html_report_pkg.HTML_REPORT(P_REPORT_REQUEST_ID);
end TY_REPORT;
--过程名:HTML_REPORT
--功能:生成HTML格式的通用报表
--传入参数:P_REPORT_REQUEST_ID
--参数描述:该参数是当用户在FORM上选择了条件之后,
-- 生成相应的参数,存储在基表html_report_requests
-- 中,以该参数(请求ID)为主键唯一索引
PROCEDURE HTML_REPORT(P_REPORT_REQUEST_ID IN NUMBER)
IS
v_report html_report_requests%ROWTYPE;
v_sum_str VARCHAR2(4000);
v_default_table_attributes VARCHAR2(4000) := 'width=100%'||' style="border-collapse:collapse; border:none; font-family: 宋体; font-size: 10pt"'||' border=1 bordercolor=#000000 cellspacing="0"';
BEGIN
--按照请求ID:P_REPORT_REQUEST_ID,取得报表参数
BEGIN
SELECT *
INTO v_report
FROM html_report_requests
WHERE request_id = p_report_request_id;
EXCEPTION WHEN OTHERS THEN
NULL;
END;
v_report_output_mode := V_REPORT.OUTPUT_MODE;
--输出报表的标题部分
IF v_report.report_title IS NOT NULL THEN
HTML_TITLE(P_PROGRAM_TITLE => v_report.report_title
,P_REPORT_TITLE => v_report.report_title
);
END IF;
--输出报表的头信息
IF v_report.other_header_info IS NOT NULL THEN
output_line(v_report.other_header_info);
END IF;
SELECT DECODE(v_report.sum_infomation ,NULL,v_report.sum_sql,v_report.sum_infomation)
INTO V_SUM_STR
FROM DUAL;
REPORT_TABLE_LOOP(P_TABLE_ATTRIBUTES => nvl(v_report.table_attribute,v_default_table_attributes)
,P_REPORT_TABLE_SQL => nvl(v_report.report_sql,'')
,P_SQL_DELIMITER => nvl(v_report.sql_delimiter,',')
,P_SQL_ATTR_DELIMITER => nvl(v_report.sql_attr_delimiter,'*')
,P_REPORT_TABLE_TITLE => nvl(v_report.select_sql_title,'')
,P_TITLE_DELIMITER => nvl(v_report.title_delimiter,',')
,P_TITLE_ATTR_DELIMITER => nvl(v_report.title_attr_delimiter,'*')
,P_REPORT_TABLE_SUM => nvl(V_SUM_STR,'')
,P_SUM_DELIMITER => nvl(v_report.sum_delimiter,',')
,P_SUM_ATTR_DELIMITER => nvl(v_report.sum_attr_delimiter,'*')
);
--输出报表的底部信息
IF v_report.other_bottom_info IS NOT NULL THEN
output_line(v_report.other_bottom_info);
END IF;
output_line('</html>');
delete html_report_requests hrr
where hrr.request_id = P_REPORT_REQUEST_ID;
commit;
END HTML_REPORT;
--过程名:REPORT_TABLE_LOOP
--功能:以一个SELECT语句为数据源,利用动态SQL循环,
-- 以HTML表格的形式,将其内容输出。
--传入参数:P_TABLE_ATTRIBUTES 该表格的属性,直接以HTML语法要求写
-- P_REPORT_TABLE_SQL 数据源(一个SELECT语句,要求将每个要输出的字段都以逗号或其它符号连接成一个字符串成为一个字段)
-- P_SQL_DELIMITER 该SELECT语句中,用于连接每个字段的符号,默认为","
-- P_SQL_ATTR_DELIMITER 该SELECT语句的每个字段与其属性之间的分隔符号,默认为"*"
-- P_REPORT_TABLE_TITLE 该表格的标题行(一个用逗号或其它符号分隔后连成的字符串)
-- P_TITLE_DELIMITER 该标题行每个字段之间的分隔符号,默认为","
-- P_TITLE_ATTR_DELIMITER 该标题行的每个字段与其属性之间的分隔符号,默认为"*"
-- P_REPORT_TABLE_SUM 该表格的合计行(一个用逗号或其它符号分隔后连成的字符串)
-- P_SUM_DELIMITER 该合计行每个字段之间的分隔符号,默认为","
-- P_SUM_ATTR_DELIMITER 该合计行的每个字段与其属性之间的分隔符号,默认为"*"
--参数调用格式举例:
-- 参数 举例
-- P_TABLE_ATTRIBUTES 例子可参见默认值
-- P_REPORT_TABLE_SQL 'SELECT A*align=center||'',''||B||'',''||C||'','' FROM T WHERE A > 0'
-- P_SQL_DELIMITER ',',用在上面的SQL的||'',''||部分
-- P_SQL_ATTR_DELIMITER '*',用在上面的SQL的A*align=center部分
-- P_REPORT_TABLE_TITLE '客户编号,客户名称,客户群,'
-- P_TITLE_DELIMITER ','
-- P_TITLE_ATTR_DELIMITER '*'
-- P_REPORT_TABLE_SUM '合计*colspan=2,100,'
-- P_SUM_DELIMITER ','
-- P_SUM_ATTR_DELIMITER '*'
PROCEDURE REPORT_TABLE_LOOP (P_TABLE_ATTRIBUTES IN VARCHAR2 DEFAULT 'width=100%'||' style="border-collapse:collapse; border:none; font-family: 宋体; font-size: 10pt"'||' border=1 bordercolor=#000000 cellspacing="0"'
,P_REPORT_TABLE_SQL IN VARCHAR2 --表格的内容行的数据源
,P_SQL_DELIMITER IN VARCHAR2 DEFAULT ','
,P_SQL_ATTR_DELIMITER IN VARCHAR2 DEFAULT '*'
,P_REPORT_TABLE_TITLE IN VARCHAR2 --表格的标题行
,P_TITLE_DELIMITER IN VARCHAR2 DEFAULT ','
,P_TITLE_ATTR_DELIMITER IN VARCHAR2 DEFAULT '*'
,P_REPORT_TABLE_SUM IN VARCHAR2 DEFAULT '' --表格的合计行
,P_SUM_DELIMITER IN VARCHAR2 DEFAULT ','
,P_SUM_ATTR_DELIMITER IN VARCHAR2 DEFAULT '*'
)
IS
V_Result VARCHAR2(4000);
V_Cursor NUMBER;
V_Rows_Processed INTEGER;
v_out_str long;
BEGIN
v_out_str := '<table '||P_TABLE_ATTRIBUTES||'>';
output_line(v_out_str);
--输出表格的标题行
LINE_TITLE(P_TITLE_STRING => P_REPORT_TABLE_TITLE
,P_WITH_OTHER_ATTR => 'Y'
,P_DELIMITER => P_TITLE_DELIMITER
,P_ATTR_DELIMITER => P_TITLE_ATTR_DELIMITER
);
--利用动态SQL进行循环,生成表格的内容
V_Cursor := dbms_sql.open_cursor;
dbms_sql.parse(V_Cursor,P_REPORT_TABLE_SQL,dbms_sql.v7);
dbms_sql.define_column(V_Cursor,1,V_Result,4000);
V_Rows_Processed := dbms_sql.execute(V_Cursor);
LOOP
IF dbms_sql.fetch_rows(V_Cursor) >0 THEN
dbms_sql.column_value(V_Cursor,1,V_Result);
LINE_TITLE(P_TITLE_STRING => V_Result
,P_WITH_OTHER_ATTR => 'Y'
,P_DELIMITER => P_SQL_DELIMITER
,P_ATTR_DELIMITER => P_SQL_ATTR_DELIMITER
);
ELSE
EXIT;
END IF;
END LOOP;
dbms_sql.close_cursor(V_Cursor);
--输出表格的合计行
IF P_REPORT_TABLE_SUM IS NOT NULL THEN
LINE_TITLE(P_TITLE_STRING => P_REPORT_TABLE_SUM
,P_WITH_OTHER_ATTR => 'Y'
,P_DELIMITER => P_SUM_DELIMITER
,P_ATTR_DELIMITER => P_SUM_ATTR_DELIMITER
);
END IF;
v_out_str := '</table>';
output_line(v_out_str);
END REPORT_TABLE_LOOP;
--过 程 名:HTML_TITLE
--传入参数:P_PROGRAM_TITLE 程序名称,在IE的标题栏(顶部蓝色栏)显示
-- P_REPORT_TITLE 报表的标题
-- P_REPORT_TITLE_ATTR 报表标题的显示属性,直接以HTML语法格式写
-- P_STYLE 需要在该报表中定义的STYLE的HTML语句,直接以HTML语法格式写
--功 能:该过程用于生成HTML文件的开始部分,是一个通用的过程
PROCEDURE HTML_TITLE(P_PROGRAM_TITLE IN VARCHAR2
,P_REPORT_TITLE IN VARCHAR2
,P_REPORT_TITLE_ATTR IN VARCHAR2 DEFAULT 'align=center style="font-family: 宋体; font-size: 20pt"'
,P_STYLE IN VARCHAR2 DEFAULT '<!-- .amount {mso-number-format:Standard;text-align:right;}-->'
,P_FILE_ID IN utl_file.file_type DEFAULT NULL
)
IS
v_out_str long;
BEGIN
v_out_str := '<html><head><meta chttp_equiv="" cname="" ccontent="">';
output_line(v_out_str);
v_out_str := '<style>'||p_style||'</style>'||'<title>'||P_PROGRAM_TITLE||'</title>'
||'<H1 '||P_REPORT_TITLE_ATTR||'>'||p_report_title||'</H1>';
output_line(v_out_str);
v_out_str := '</head><body>';
output_line(v_out_str);
END HTML_TITLE ;
--过 程 名:HEADER_TABLECOLUMN
--传入参数:P_PROMPT 字段的提示
-- P_VALUE 字段的值
-- P_WITH_OTHER_ATTR TD是否有其他属性
-- P_ATTR_DELIMITER TD属性与值之间的分隔符号
-- P_BOLD_FLAG 是否将所有PORMPT都以黑体显示
-- P_FONT_SIZE 所有TD值的字体大小
--功 能:该过程用于生成HTML表格的一对列的信息,
-- 包括一个PORMPT单元格和一个VALUE单元格。
PROCEDURE HEADER_TABLECOLUMN(P_PROMPT IN VARCHAR2
,P_VALUE IN VARCHAR2
,P_WITH_OTHER_ATTR IN VARCHAR2 DEFAULT 'N'
,P_ATTR_DELIMITER IN VARCHAR2 DEFAULT '*'
,P_BOLD_FLAG IN VARCHAR2 DEFAULT 'Y'
,P_FONT_SIZE IN NUMBER DEFAULT 12
)
IS
v_prompt VARCHAR2(4000);
v_prompt_other_attr VARCHAR2(4000);
v_value VARCHAR2(4000);
v_value_other_attr VARCHAR2(4000);
v_other_attr_length NUMBER;
v_out_str long;
BEGIN
v_other_attr_length := length(P_ATTR_DELIMITER) ;
IF P_BOLD_FLAG = 'Y' THEN
IF P_WITH_OTHER_ATTR = 'Y'
AND INSTR(P_PROMPT,P_ATTR_DELIMITER) > 0
THEN
v_prompt := SUBSTR(P_PROMPT,1,INSTR(P_PROMPT,P_ATTR_DELIMITER)-1);
v_prompt_other_attr := SUBSTR(P_PROMPT,INSTR(P_PROMPT,P_ATTR_DELIMITER)+v_other_attr_length);
v_out_str := '<td '||v_prompt_other_attr||'>'||'<b>'||V_PROMPT||'</b>'||'</td>';
ELSE
v_out_str := '<td align=right style="font-family: 宋体; font-size: '||P_FONT_SIZE||'pt">'||'<b>'||P_PROMPT||'</b>'||'</td>';
END IF;
ELSE
IF P_WITH_OTHER_ATTR = 'Y'
AND INSTR(P_PROMPT,P_ATTR_DELIMITER) > 0
THEN
v_prompt := SUBSTR(P_PROMPT,1,INSTR(P_PROMPT,P_ATTR_DELIMITER)-1);
v_prompt_other_attr := SUBSTR(P_PROMPT,INSTR(P_PROMPT,P_ATTR_DELIMITER)+1);
v_out_str := '<td '||v_prompt_other_attr||'>'||V_PROMPT||'</td>';
ELSE
v_out_str := '<td align=right style="font-family: 宋体; font-size: '||P_FONT_SIZE||'pt">'||P_PROMPT||'</td>';
END IF;
END IF;
output_line(v_out_str);
IF P_WITH_OTHER_ATTR = 'Y'
AND INSTR(P_VALUE,P_ATTR_DELIMITER) > 0
THEN
v_value := SUBSTR(P_VALUE,1,INSTR(P_VALUE,P_ATTR_DELIMITER)-1);
v_value_other_attr := SUBSTR(P_VALUE,INSTR(P_VALUE,P_ATTR_DELIMITER)+1);
v_out_str := '<td '||v_value_other_attr||'>'||V_VALUE||'</td>';
ELSE
v_out_str := '<td align=left style="font-family: 宋体; font-size: '||P_FONT_SIZE||'pt">'||P_VALUE||'</td>';
END IF;
output_line(v_out_str);
END HEADER_TABLECOLUMN ;
--过 程 名:LINE_TITLE
--传入参数:P_TITLE_STRING 将表格的一行信息用一个特殊符号分隔后连成的字符串(注意:末尾也要有一个符号)
-- P_WITH_OTHER_ATTR 该属性用于区分本次调用是否要为TD指定其他属性
-- P_WITH_TR_FLAG 该属性用于区分是否要带<TR>标志
-- P_P_ATTR_DELIMITER 在解码后的字符串当中用于分隔字段值和其他属性的分隔符号,默认为“*”
-- P_DELIMITER 在字符串连接时的分隔符号,默认为逗号“,”
--功 能:该过程用于将表格的一行信息用一个特殊符号分隔后连成的字符串
-- 进行解码后,以单元格的格式显示出来。
PROCEDURE LINE_TITLE(P_TITLE_STRING IN VARCHAR2
,P_WITH_OTHER_ATTR IN VARCHAR2 DEFAULT 'N'
,P_WITH_TR_FLAG IN VARCHAR2 DEFAULT 'Y'
,P_DELIMITER IN VARCHAR2 DEFAULT ','
,P_ATTR_DELIMITER IN VARCHAR2 DEFAULT '*'
,P_FILE_ID IN utl_file.file_type DEFAULT NULL
)
IS
v_title VARCHAR2(4000);
v_other_attr VARCHAR2(4000);
v_title_remain_string VARCHAR2(4000);
v_zero VARCHAR2(20);
v_delimiter_length NUMBER;
v_other_attr_length NUMBER;
v_out_str long;
v_count Number;
BEGIN
v_other_attr_length := length(P_ATTR_DELIMITER) ;
v_delimiter_length := length(P_DELIMITER) ;
IF P_WITH_TR_FLAG = 'Y' THEN
v_out_str := '<tr>';
END IF;
If v_report_output_mode != 'T' Then
output_line(v_out_str);
parse_two(p_title_string
,v_title
,v_title_remain_string
,v_zero
,p_delimiter);
LOOP
--判断:若有使用其他属性(指<TD>的),且该属性有指定。
IF P_WITH_OTHER_ATTR = 'Y'
AND INSTR(V_TITLE,P_ATTR_DELIMITER) > 0
THEN
v_other_attr := SUBSTR(V_TITLE,INSTR(V_TITLE,P_ATTR_DELIMITER)+v_other_attr_length);
v_title := SUBSTR(V_TITLE,1,INSTR(V_TITLE,P_ATTR_DELIMITER)-1);
v_out_str := '<td '||v_other_attr||'>'||v_title||'</td>';
ELSE
--update by zhangzhen@chinasie.com,2007.5.9 --v_out_str := '<td align=left>'||v_title||'</td>';
v_out_str := '<td>'||v_title||'</td>';
--update end.
END If;
If v_report_output_mode != 'T' Then
output_line(v_out_str);
Else
If v_count = 1 Then
output_line(v_title || p_delimiter);
Else
output_str(v_title || p_delimiter);
End If;
v_count := v_count + 1;
End If;
parse_two(v_title_remain_string
,v_title
,v_title_remain_string
,v_zero
,p_delimiter);
EXIT WHEN v_zero = 'Y' ;
END LOOP;
IF P_WITH_TR_FLAG = 'Y' THEN
v_out_str := '</tr>';
END IF;
If v_report_output_mode != 'T' Then
output_line(v_out_str);
End If;
Else
--v_count := 1;
output_line(P_TITLE_STRING);
End If;
END LINE_TITLE ;
--过 程 名:PARSE_TWO
--传入参数:p_full_str 以特殊符号分隔后的字符串
-- p_delimiter 在字符串连接时的分隔符号,默认为逗号“,”
--传出参数: p_first_str 每次解码后得到的一个字段
-- p_second_str 每次解码后剩余的字符串
-- p_zero 解码完成标志,为"Y"时,表示解码完成
--功 能:该过程用于进行字符串的解码。
PROCEDURE PARSE_TWO(p_full_str IN VARCHAR2
,p_first_str IN OUT VARCHAR2
,p_second_str IN OUT VARCHAR2
,p_zero IN OUT VARCHAR2
,p_delimiter IN VARCHAR2 DEFAULT ','
) IS
v_delimiter_length NUMBER;
BEGIN
v_delimiter_length := length(P_DELIMITER) ;
IF instr(p_full_str,p_delimiter)>0 THEN
p_first_str:=substr(p_full_str,1,instr(p_full_str,p_delimiter)-1);
p_second_str:=substr(p_full_str,instr(p_full_str,p_delimiter)+v_delimiter_length);
p_zero:='N';
ELSE
p_first_str:=p_full_str;
p_second_str:=null;
p_zero:='Y';
END IF;
END parse_two; --
procedure output_line(p_output_str in varchar2
,p_output_mode in varchar2 default v_report_output_mode
)
is
begin
if p_output_mode = 'W' then
htp.p(p_output_str);
elsif p_output_mode In ('T', 'F') then
fnd_file.PUT_LINE(fnd_file.output,p_output_str);
end if;
end output_line;
--
procedure output_str(p_output_str in varchar2
,p_output_mode in varchar2 default v_report_output_mode
)
is
begin
if p_output_mode = 'W' then
htp.p(p_output_str);
elsif p_output_mode = 'F' then
fnd_file.PUT_line(fnd_file.output,p_output_str);
elsif p_output_mode = 'T' then
fnd_file.PUT(fnd_file.output,p_output_str);
end if;
end output_str;
--
procedure insert_row(X_REQUEST_ID out NUMBER
,X_REPORT_TITLE IN VARCHAR2
,X_REPORT_SQL IN VARCHAR2
,X_SELECT_SQL IN VARCHAR2
,X_SELECT_SQL_TITLE IN VARCHAR2 default null
,X_OTHER_HEADER_INFO IN VARCHAR2 default null
,X_OTHER_BOTTOM_INFO IN VARCHAR2 default null
,X_TABLE_ATTRIBUTE IN VARCHAR2 default null
,X_SQL_DELIMITER IN VARCHAR2 default null
,X_SQL_ATTR_DELIMITER IN VARCHAR2 default null
,X_TITLE_DELIMITER IN VARCHAR2 default null
,X_TITLE_ATTR_DELIMITER IN VARCHAR2 default null
,X_SUM_DELIMITER IN VARCHAR2 default null
,X_SUM_ATTR_DELIMITER IN VARCHAR2 default null
,X_SUM_INFOMATION IN VARCHAR2 default null
,X_SUM_SQL IN VARCHAR2 default null
,X_OUTPUT_MODE IN VARCHAR2 default 'F'
,X_FILE_LOCATION IN VARCHAR2 default null)
is
begin
select html_report_requests_s.nextval
into X_REQUEST_ID
from dual;
insert into html_report_requests
(REQUEST_ID
,REPORT_TITLE
,REPORT_SQL
,SELECT_SQL
,SELECT_SQL_TITLE
,OTHER_HEADER_INFO
,OTHER_BOTTOM_INFO
,TABLE_ATTRIBUTE
,SQL_DELIMITER
,SQL_ATTR_DELIMITER
,TITLE_DELIMITER
,TITLE_ATTR_DELIMITER
,SUM_DELIMITER
,SUM_ATTR_DELIMITER
,SUM_INFOMATION
,SUM_SQL
,OUTPUT_MODE
,FILE_LOCATION )
values
(X_REQUEST_ID
,X_REPORT_TITLE
,X_REPORT_SQL
,X_SELECT_SQL
,X_SELECT_SQL_TITLE
,X_OTHER_HEADER_INFO
,X_OTHER_BOTTOM_INFO
,X_TABLE_ATTRIBUTE
,X_SQL_DELIMITER
,X_SQL_ATTR_DELIMITER
,X_TITLE_DELIMITER
,X_TITLE_ATTR_DELIMITER
,X_SUM_DELIMITER
,X_SUM_ATTR_DELIMITER
,X_SUM_INFOMATION
,X_SUM_SQL
,X_OUTPUT_MODE
,X_FILE_LOCATION );
end insert_row;
end HTML_REPORT_PKG;
/