【问题标题】:What is the Need of Functions in database if Procedures can do all things [closed]如果程序可以做所有事情,那么数据库中需要什么功能[关闭]
【发布时间】:2013-01-19 18:21:55
【问题描述】:

数据库中的函数需要什么,函数所做的一切,也可以通过数据库中的过程来实现。

【问题讨论】:

  • 一个非常广泛的问题,你断言“一个函数所做的一切,也可以通过数据库中的过程来实现”是错误的。函数可以在 sql 中使用,而过程不能(所以有一个原因)。
  • 他们有很多共同的特点。因此,将其作为一个问题是合理的。

标签: database oracle plsql


【解决方案1】:

在 Oracle 中,它们非常相似。主要区别在于函数返回结果,过程不返回。 (不要与两者都可能包含的输出参数混淆......)

这种差异使得在 SQL 语句中使用函数成为可能,例如

select user_name, myFunction( some_attribute ) from ...

select ... where fn2(col1)=something

您可以将其视为某种转变。

当然,为了在 SQL 语句中有效使用,它们应该很快,因为可以对输出中的每一行或每个检查的行执行多次。 (和/或确保行数不会太大)。

此外,在最近的版本中,可以使用 return 作为实时 dbms_output(搜索管道行)。

【讨论】:

  • 在函数的签名中包含 OUT 参数通常被认为是不好的做法
【解决方案2】:

您还可以在基于函数的索引中使用函数。 并且这些索引也可以是唯一索引。 使用基于函数的唯一索引,您可以构建复杂的唯一约束。

create unique index UK_MYINDEX
 on TBL_MYTABLE (case when IS_ACTUAL(MY_COLUMN_2) then MY_COLUMN_1 end);

在此示例中,我在唯一索引中使用 IS_ACTUAL 函数,以便仅对实际记录强制执行唯一 MY_COLUMN_1 约束。

【讨论】:

    猜你喜欢
    • 2021-02-10
    • 2019-05-20
    • 2020-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-18
    • 2011-02-02
    • 1970-01-01
    相关资源
    最近更新 更多