【问题标题】:Difference between a function and a statement函数和语句的区别
【发布时间】:2015-05-04 01:57:05
【问题描述】:

在课堂上,我们被要求命名几个 PL/SQL 函数并说明它们的用途。有人提到 CREATE FUNCTION,我注意到 Oracle 将其标记为语句而不是函数。

我无法就两者之间的区别给出一个很好的答案。我认为语句更像是一种声明性工具,它指定程序要完成的任务,而函数似乎更程序化,我们在 CREATE FUNCTION 语句中定义新函数的过程。

SELECT 语句之类的区别似乎更明显,有人可以帮助明确区分两者吗?

【问题讨论】:

    标签: sql oracle plsql semantics


    【解决方案1】:

    语句是一段可以执行的代码。这是一个命令。它做某事。示例:

    打印“Hello World”

    函数是您使用参数调用的代码块,它返回一个值(即使该值未定义)。示例:

    function(a) { return a * 2 }

    【讨论】:

      【解决方案2】:

      “语句”一词在 SQL 和 PL/SQL 中有两种不同的含义。

      在狭义的技术意义上,CREATE FUNCTION 是一种 SQL 语句,CREATE FUNCTION 包含 PL/SQL 语句。

      在更一般的意义上,SQL 语句是一种声明性代码,它告诉数据库“什么是真的”或“必须做什么”,而没有关于“如何做”的详细说明。函数或任何 PL/SQL 块是命令式代码,它准确地告诉数据库“要做什么”。声明式 SQL 通常比命令式 PL/SQL 更简单、更快,因此通常最好在 SQL 中完成大部分工作,然后将其与 PL/SQL 粘合在一起。


      SQL 有大约 170 条命令(由 V$SQLCOMMAND 定义),组织成大约 31 种语句类型,组织成 the below 6 categoriesCREATE FUNCTION 命令是DDL 类别中的CREATE 语句类型。该分类方案在数据库和手册中并不是 100% 清楚的,但我已将其用于thoroughly classify all SQL statements

      Data Definition Language (DDL) Statements
      
      Data Manipulation Language (DML) Statements
      
      Transaction Control Statements
      
      Session Control Statements
      
      System Control Statement
      
      Embedded SQL Statements
      

      在 PL/SQL 中,大多数 blocks 是一个语句序列。这些语句可以是赋值、循环、获取、块等。


      为了让事情更混乱,在 12c 中,一条 SQL 语句可以包含 PL/SQL 语句:

      with function f return number is begin return 1; end; select f from dual;
      

      【讨论】:

      • 谢谢,你能说一下“函数”与 SQL 语句的不同之处吗?
      【解决方案3】:

      CREATE FUNCTION 是一个声明。函数本身是一个FUNCTION。运行创建函数的语句允许您访问该函数。

      一般来说,如果您要在数据库中创建任何内容,则使用的是语句(特别是数据定义语言 (DDL) 语句)。您创建的项目,无论是表、函数、包等,都可以在以后的语句中引用。

      【讨论】:

        猜你喜欢
        • 2012-03-07
        • 1970-01-01
        • 1970-01-01
        • 2019-09-02
        • 1970-01-01
        • 2010-10-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多