【问题标题】:Delphi - View with parameterDelphi - 带参数查看
【发布时间】:2016-12-22 14:34:02
【问题描述】:

我有以下观点:

CREATE OR ALTER VIEW "ButtonGroup_ButtonNames_view"("ButtonName")
AS
select "ButtonName"
from   "ButtonGroupName_ButtonName"
where  "ButtonGroupName_ButtonName"."ButtonGroupName" = ':lButtonGroupName'

':lButtonGroupName' 应该用作参数,所以在运行时我可以为其设置一个值。

当我运行应用程序时,我收到parameter name not found 错误。我想这不是在view 中声明parameter 的正确方法。到底有没有可能?

谢谢。

【问题讨论】:

  • @MartynA。以上是已有的SQL。它已在数据库中注册。顺便说一句,它是一个FireBird 2.5 数据库。您是说不能像在查询中那样在视图中声明参数?
  • 您无法使用参数 AFAIK 创建视图。使用时可以在SELECT ... FROM <view> 中提供参数。你为什么要反复打电话给CREATE OR ALTER VIEW? VIEW 应该在服务器上创建一次,并且只有在该视图中的实际代码发生更改时才进行修改。
  • @Ken White。我没有重复调用 CREATE 或 ALTER VIEW,IBExpert 每次修改视图时都会这样做。
  • @Ken White。我已经有了无法在视图中插入参数的感觉。感谢您的确认。相反,可以通过存储的 preocedure 来提供该参数?
  • "相反,是否可以通过存储的 preocedure 提供该参数?"是的。

标签: delphi firebird firedac


【解决方案1】:

这就是视图的工作方式。您可以在用于从视图中获取结果的select 查询中提供参数,但视图本身不能有任何参数。无法将参数传递给不属于查询的视图。

无论如何,这种“参数化视图”实际上不会有任何优化。数据库引擎无法预取结果,因为在您执行查询之前它不会知道参数值。知道某个列是参数化的,数据库引擎可以在该列上创建索引,但您也可以轻松地为基础表中的列建立索引。针对视图的查询将使用与针对表的查询相同的索引。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-26
    • 1970-01-01
    • 2021-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多