在课堂上,我们被要求命名几个PL / SQL函数并说明它们的用法。有人提到了CREATE FUNCTION,我注意到Oracle将此标记为语句而不是函数。
我无法就两者之间的差异给出一个很好的答案。我认为语句更像是一个声明性工具,它指定程序要完成什么,而函数似乎更具程序性,我们在CREATE FUNCTION语句中定义新函数的过程。
对于像SELECT语句这样的东西,区别似乎更清楚,有人可以帮助明确区分两者吗?
答案 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 categories。 CREATE 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是一系列语句。这些语句可以是赋值,循环,提取,块等。
为了让事情更加混乱,在12c中,SQL语句可以包含PL / SQL语句:
with function f return number is begin return 1; end; select f from dual;