函数和语句之间的区别

时间:2015-05-04 01:57:05

标签: sql oracle plsql semantics

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

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

对于像SELECT语句这样的东西,区别似乎更清楚,有人可以帮助明确区分两者吗?

3 个答案:

答案 0 :(得分:1)

语句是一段执行的代码。这是一个命令。它做了一些事情。例如:

打印“Hello World”

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

功能(a){return a * 2}

答案 1 :(得分:1)

d3.select = function(node) { var group = [ typeof node === "string" ? d3_select(node, d3_document) : node ]; group.parentNode = d3_documentElement; return d3_selection([ group ]); }; 是一个声明。函数本身是CREATE FUNCTION。运行创建该函数的语句允许您访问该函数。

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

答案 2 :(得分:0)

"陈述"在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命令是CREATE类别中的DDL语句类型。数据库和手册中没有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是一系列语句。这些语句可以是赋值,循环,提取,块等。

enter image description here

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

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