Plsql 查询:='从到日期('第一个月值','DD.MM.YYYY')和到日期('最后一个月值','DD.MM.YYYY')之间选择; elsif:P24_TYPE=4然后 查询:='从到日期('第一年值','DD.MM.YYYY')和到日期('最后一年值','DD.MM.YYYY')之间选择; 如果结束; 如果结束; 如果:P24\u人员“否”,则 查询:=query | | AND=''| | | lower(:P24_PERSON)| |''; 如果结束; 返回查询; 结束;
提前感谢。回顾过去和逻辑问题,您的代码目前是一场噩梦,让您的页面容易受到用户查询不允许的信息的攻击。它还强制使用文字,这会太快地破坏您的共享SQL 本机功能允许您链接到带有IR的页面,并像手动使用过滤器一样预填充过滤器Plsql 查询:='从到日期('第一个月值','DD.MM.YYYY')和到日期('最后一个月值','DD.MM.YYYY')之间选择; elsif:P24_TYPE=4然后 查询:='从到日期('第一年值','DD.MM.YYYY')和到日期('最后一年值','DD.MM.YYYY')之间选择; 如果结束; 如果结束; 如果:P24\u人员“否”,则 查询:=query | | AND=''| | | lower(:P24_PERSON)| |''; 如果结束; 返回查询; 结束;,plsql,oracle-apex,oracle-apex-5.1,Plsql,Oracle Apex,Oracle Apex 5.1,提前感谢。回顾过去和逻辑问题,您的代码目前是一场噩梦,让您的页面容易受到用户查询不允许的信息的攻击。它还强制使用文字,这会太快地破坏您的共享SQL 本机功能允许您链接到带有IR的页面,并像手动使用过滤器一样预填充过滤器 您没有处理其他案件-例如,如果:P21\U详情!=1不会生成任何查询,这将导致您得到的错误。希望看到它正在使用第一个值。您是对的。但我想我在你的个人资料上找到了答案。我试图导出到xlsx或其他格式,发现了这个。我的旧代码不再使用了。酷。我一直想把它写在一篇博文里。 declare
您没有处理其他案件-例如,如果:P21\U详情!=1不会生成任何查询,这将导致您得到的错误。希望看到它正在使用第一个值。您是对的。但我想我在你的个人资料上找到了答案。我试图导出到xlsx或其他格式,发现了这个。我的旧代码不再使用了。酷。我一直想把它写在一篇博文里。
declare
single_date char(12) := ''''||TO_CHAR(TRUNC(to_date(:P21_DATE, 'DD-MM-YYYY')), 'DD.MM.YYYY')||'''';
start_date_value char(12) := ''''||TO_CHAR(TRUNC(to_date(:P21_DATE, 'DD-MM-YYYY'), 'IW'), 'DD.MM.YYYY')||'''';
end_date_value char(12) := ''''||TO_CHAR(TRUNC(to_date(:P21_DATE, 'DD-MM-YYYY'), 'IW') + 6, 'DD.MM.YYYY')||'''';
first_month_value char(12) := ''''||to_char(trunc(to_date(:P21_DATE, 'DD-MM-YYYY'), 'MM'), 'DD.MM.YYYY')||'''';
last_month_value char(12) := ''''||to_char(LAST_DAY(to_date(:P21_DATE,'DD-MM-YYYY')), 'DD.MM.YYYY')||'''';
first_year_value char(12) := ''''||to_char(trunc(to_date(:P21_DATE, 'DD-MM-YYYY'), 'YYYY'), 'DD.MM.YYYY')||'''';
last_year_value char(12) := ''''||to_char(last_day(add_months(to_date(:P21_DATE,'DD-MM-YYYY'),12 - to_number(to_char(to_date(:P21_DATE,'DD-MM-YYYY'),'mm')))), 'DD.MM.YYYY')||'''';
begin
if :P21_DETAILS = 1 then
if :P21_FREQUENCY = 1 then
if :P21_FOR = 1 then
return q'~
SELECT <columns> FROM <table> WHERE <date> = '||single_date||' AND <something> = '||lower(:APP_USER)||';
~';
elsif :P21_FOR = 2 then
return q'~
SELECT <columns> FROM <table> WHERE <date> = '||single_date||' AND <something> = '||lower(:P21_PERSON)||';
~';
elsif :P21_FOR = 3 then
return q'~
SELECT <columns> FROM <table> WHERE <date> = '||single_date||';
~';
end if;
elsif :P21_FREQUENCY = 2 then
if :P21_FOR = 1 then
return q'~
SELECT <columns> FROM <table> WHERE <date> BETWEEN TO_DATE('||start_date_value||', ''DD.MM.YYYY'') AND TO_DATE('||end_date_value||', ''DD.MM.YYYY'') AND <something> = '||lower(:APP_USER)||';
~';
elsif :P21_FOR = 2 then
return q'~
SELECT <columns> FROM <table> WHERE <date> BETWEEN TO_DATE('||start_date_value||', ''DD.MM.YYYY'') AND TO_DATE('||end_date_value||', ''DD.MM.YYYY'') AND <something> = '||lower(:P21_PERSON)||';
~';
elsif :P21_FOR = 3 then
return q'~
SELECT <columns> FROM <table> WHERE <date> BETWEEN TO_DATE('||start_date_value||', ''DD.MM.YYYY'') AND TO_DATE('||end_date_value||', ''DD.MM.YYYY'');
~';
end if;
elsif :P21_FREQUENCY = 3 then
if :P21_FOR = 1 then
return q'~
SELECT <columns> FROM <table> WHERE <date> BETWEEN TO_DATE('||first_month_value||', ''DD.MM.YYYY'') AND TO_DATE('||last_month_value||', ''DD.MM.YYYY'') AND <something> = '||lower(:APP_USER)||';
~';
elsif :P21_FOR = 2 then
return q'~
SELECT <columns> FROM <table> WHERE <date> BETWEEN TO_DATE('||first_month_value||', ''DD.MM.YYYY'') AND TO_DATE('||last_month_value||', ''DD.MM.YYYY'') AND <something> = '||lower(:P21_PERSON)||';
~';
elsif :P21_FOR = 3 then
return q'~
SELECT <columns> FROM <table> WHERE <date> BETWEEN TO_DATE('||first_month_value||', ''DD.MM.YYYY'') AND TO_DATE('||last_month_value||', ''DD.MM.YYYY'');
~';
end if;
elsif :P21_FREQUENCY = 4 then
if :P21_FOR = 1 then
return q'~
SELECT <columns> FROM <table> WHERE <date> BETWEEN TO_DATE('||first_year_value||', ''DD.MM.YYYY'') AND TO_DATE('||last_year_value||', ''DD.MM.YYYY'') AND <something> = '||lower(:APP_USER)||';
~';
elsif :P21_FOR = 2 then
return q'~
SELECT <columns> FROM <table> WHERE <date> BETWEEN TO_DATE('||first_year_value||', ''DD.MM.YYYY'') AND TO_DATE('||last_year_value||', ''DD.MM.YYYY'') AND <something> = '||lower(:P21_PERSON)||';
~';
elsif :P21_FOR = 3 then
return q'~
SELECT <columns> FROM <table> WHERE <date> BETWEEN TO_DATE('||first_year_value||', ''DD.MM.YYYY'') AND TO_DATE('||last_year_value||', ''DD.MM.YYYY'');
~';
end if;
end if;
end if;
end;
declare
date_modify char(12) := :P24_DATE;
single_date char(12) := ''''||TO_CHAR(TRUNC(to_date(date_modify, 'DD.MM.YYYY')), 'DD.MM.YYYY')||'''';
start_date_value char(12) := ''''||TO_CHAR(TRUNC(to_date(date_modify, 'DD.MM.YYYY'), 'IW'), 'DD.MM.YYYY')||'''';
end_date_value char(12) := ''''||TO_CHAR(TRUNC(to_date(date_modify, 'DD.MM.YYYY'), 'IW') + 6, 'DD.MM.YYYY')||'''';
first_month_value char(12) := ''''||to_char(trunc(to_date(date_modify, 'DD.MM.YYYY'), 'MM'), 'DD.MM.YYYY')||'''';
last_month_value char(12) := ''''||to_char(LAST_DAY(to_date(date_modify,'DD.MM.YYYY')), 'DD.MM.YYYY')||'''';
first_year_value char(12) := ''''||to_char(trunc(to_date(date_modify, 'DD.MM.YYYY'), 'YYYY'), 'DD.MM.YYYY')||'''';
last_year_value char(12) := ''''||to_char(last_day(add_months(to_date(date_modify,'DD.MM.YYYY'),12 - to_number(to_char(to_date(date_modify,'DD.MM.YYYY'),'mm')))), 'DD.MM.YYYY')||'''';
query varchar2(500);
begin
if apex_application.g_f01(1) = 1 then
if :P24_TYPE = 1 then
query := 'SELECT <some columns> FROM <table> WHERE <date> = '||single_date||'';
elsif :P24_TYPE = 2 then
query := 'SELECT <some columns> FROM <table> WHERE <date> BETWEEN TO_DATE('||start_date_value||', ''DD.MM.YYYY'') AND TO_DATE('||end_date_value||', ''DD.MM.YYYY'')';
elsif :P24_TYPE = 3 then
query := 'SELECT <some columns> FROM <table> WHERE <date> BETWEEN TO_DATE('||first_month_value||', ''DD.MM.YYYY'') AND TO_DATE('||last_month_value||', ''DD.MM.YYYY'')';
elsif :P24_TYPE = 4 then
query := 'SELECT <some columns> FROM <table> WHERE <date> BETWEEN TO_DATE('||first_year_value||', ''DD.MM.YYYY'') AND TO_DATE('||last_year_value||', ''DD.MM.YYYY'')';
end if;
end if;
if :P24_PERSON <> 'no' then
query := query||' AND <something_else> = '''||lower(:P24_PERSON)||'''';
end if;
return query;
end;