【问题标题】:oracle report lexical parameteroracle报告词法参数
【发布时间】:2019-01-29 15:25:59
【问题描述】:

我正在使用 oracle 报告,但“全选”有问题,这是我的查询

SELECT * FROM company A, seller B
WHERE a.id = b.id 
&(P)Company_id

我在 oracle 报告中的 after 参数中使用了

begin 
    if (:(V)Company_id is not null and :(V)Company_id<> '0')
       :(P)Company_id:= ' and a.id ='||:(V)Company_id;
    end if;
    return (true)`
end;

如果 id 都是像 000123 这样的数字,则可以正常工作,但如果像 ([L]00123) 这样的 id 则结果是显示所有数据。在我的词法参数方面需要帮助。

【问题讨论】:

  • (V)Company_id 中的(V) 是什么? ((P) 也是如此)。
  • 参数应该是P,所以变成了PCompany_id,而变量的V变成了VCompany_id。

标签: oracle oraclereports


【解决方案1】:

您发布的信息具有误导性。我一直在使用 Oracle Reports 多年,但我从未见过您使用的语法。您编写的代码甚至无法编译;那么它是如何工作的(这就是你所声称的)?根本没有(V)something 语法。

无论如何,在我看来,你不需要一个词法参数,而是一个简单的OR 条件,例如

select *
from company a join seller b on b.id = a.id
where (a.id = :par_company_id or :par_company_id is null)
  • 它的第一部分,a.id = :par_company_id 将返回 ID 等于您在参数表单中输入的值的行
  • 第二部分,or :par_company_id is null 将返回所有行,如果您保留参数值为空

【讨论】:

    【解决方案2】:

    我原以为您会从中得到一个错误,而不是所有数据,但在那种情况下,报告可能会做一些奇怪的事情。无论如何,看起来您只需将传入的值括在单引号中,您需要将其转义;所以代替这一行:

       :(P)Company_id:= ' and a.id ='||:(V)Company_id;
    

    使用:

       :(P)Company_id:= ' and a.id = ''' || :(V)Company_id || '''';
    

    虽然如果您可以将其保留为绑定变量会更好。我不熟悉报告,但这样的事情可能会起作用:

    select *
    from company A
    join seller B
    on a.id = b.id
    where &(V)Company_id is null or a.id = &(V)Company_id
    

    (我也切换到了 ANSI 连接语法...)

    【讨论】:

    • :(P)Company_id:= ' 和 a.id = ''' || :(V)Company_id || '''';我尝试使用像 000123 这样的数字 ID,但是当 ID 像“L00123”时,该查询将显示所有数据,而不是“L00123”数据
    • @gehirnseele - 即使有那些额外的单引号? (P)Company_id 是如何以及在哪里定义的?也许这是一个数字数据类型,或者一个字符串但太小,并且在某处将值分配给它的错误被抑制了?
    • 我在查询 oracle 报告中定义了 PCompany_id,而 VCompany_id 是我在“After Parameter Form”上使用的另一个参数。输入转到 VCompany_id 而 Pcompany 留在主查询中
    • 要求:如果您在文本框中输入空白,Company_Id 将选择所有公司如果您输入特定 id,它将搜索该 id
    猜你喜欢
    • 1970-01-01
    • 2021-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多