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 查询:='从到日期('第一个月值','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

提前感谢。

回顾过去和逻辑问题,您的代码目前是一场噩梦,让您的页面容易受到用户查询不允许的信息的攻击。它还强制使用文字,这会太快地破坏您的共享SQL

本机功能允许您链接到带有IR的页面,并像手动使用过滤器一样预填充过滤器


您没有处理其他案件-例如,如果: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;