【问题标题】:ORACLE APEX 5.0 Region Source query with html使用 html 的 ORACLE APEX 5.0 区域源查询
【发布时间】:2016-05-30 15:47:50
【问题描述】:

该查询在 Apex 4.2 中运行良好,但在 5.0 中我在第 1 行收到错误消息

无法在 Builder 中解析查询。如果您认为您的查询在语法上是正确的,请选中区域源下方的“通用列”复选框以继续而不进行解析。 ORA-00919: 无效函数

select '<a href="f?    p='||&APP_ID.||':203:'||&SESSION.||'::::P203_ANO,P203_ID_PRJ:'||ANO||',3">'||   ANO||'</a>' as ANO,
 1 as id_prj,
 to_char(Muni) as "MUNI",
 to_char("Inscritos",'999G999G999G999G999G999G990') as "Inscritos",
 to_char("Instituições",'999G999G999G999G999G999G990') as "Instituições",
 to_char("Turmas",'999G999G999G999G999G999G990') as "Turmas",
 to_char("Beneficiários",'999G999G999G999G999G999G990') as "Beneficiários" ,
 to_char("Participantes",'999G999G999G999G999G999G990') as "Participantes" 
FROM 
  V_MOSTRA_ACU_MUNI_ENR
where 
 ano < (SELECT 
  EXTRACT(YEAR FROM (SELECT CURRENT_TIMESTAMP FROM dual)) 
FROM 
  dual)

你能帮帮我吗?

【问题讨论】:

  • 尝试添加“;”在查询结束时。
  • 分号无济于事。您的查询在 SQL Developer 中仍然有效吗?并使用绑定变量而不是替换字符串grassroots-oracle.com/2012/02/apex-variables-in-sql.html
  • 看起来你想在你的报告中有一个列链接?为什么不使用内置的 apex?它更容易创建。好吧,如果你想要那样的话,请尝试从第一列开始注释每一列,看看它们是否运行正确。如果它运行正确但有一列注释掉,那么那一列或那一行就是你的代码有问题。

标签: oracle-apex


【解决方案1】:

查看错误,它说ORA-00919: invalid function,然后查看您的代码后,TO_CHAR的第一行没有足够的参数,而接下来的列使用TO_CHAR 函数即使它满足函数的参数要求,它也可能会因为你使用的双引号而抛出错误。

  • 使用单引号将字符串括起来。

试试这个:

SELECT '<a href="f?    p='||&APP_ID.||':203:'||&SESSION.||'::::P203_ANO,P203_ID_PRJ:'||ANO||',3">'||   ANO||'</a>' as ANO,
        1 as id_prj,
        Muni,  
        TO_CHAR('Inscritos','999G999G999G999G999G999G990') as "Inscritos", 
        TO_CHAR('Instituições','999G999G999G999G999G999G990') as "Instituições",
        TO_CHAR('Turmas','999G999G999G999G999G999G990') as "Turmas",
        TO_CHAR('Beneficiários','999G999G999G999G999G999G990') as "Beneficiários" ,
        TO_CHAR('Participantes','999G999G999G999G999G999G990') as "Participantes" 
FROM 
  V_MOSTRA_ACU_MUNI_ENR
WHERE
 ano < (SELECT EXTRACT(YEAR FROM (SELECT CURRENT_TIMESTAMP FROM dual)) 
        FROM 
        dual)

【讨论】:

  • 没有理由不能只用一个参数调用 to_char,尽管不知道表的定义,很难知道“Muni”将如何解释。双引号只会让事情变得不必要地困难,不确定它会在这里引发错误。
【解决方案2】:

这是您自己的代码有问题,尤其是您的链接构造。您正在使用静态文本替换语法,而您应该使用绑定变量语法。他们非常不同。如果有的话,它也应该在 apex 4.2 中引发错误。现在你在告诉 apex 做不合逻辑的事情。

请考虑一下您写的内容! Apex 5.0 docs on referencing session state
&amp;. 将在解析查询之前将变量替换为变量的值,即当值不同时实际查询会改变。这将导致您向数据库发送大量几乎相同的查询,应该不惜一切代价避免。阅读 Scott Wesley 的这篇文章:APEX variables in SQL.
当然,并不是说没有静态文本替换的用例。但是如果你必须在 SQL 中使用它们,它应该在一个字符串中。虽然在 PLSQL 中使用时,请三思。

您的查询应该如下所示:

select '<a href="f?    p='|| :APP_ID ||':203:'||:APP_SESSION ||'::::P203_ANO,P203_ID_PRJ:'||ANO||',3">'||   ANO||'</a>' as ANO,
 1 as id_prj,

这样查询将不会根据应用程序 ID 或会话而改变。

注意:OP 也在 OTN 上发布了这个问题:Oracle OTN Apex

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多