一般来说,我们都听说过编程语言中的函数或过程。然而,我发现我几乎可以互换地使用这些术语(这可能是非常错误的)。
我的问题是:
它们的功能、目的和用途有什么不同?
请举例说明。
一般来说,我们都听说过编程语言中的函数或过程。然而,我发现我几乎可以互换地使用这些术语(这可能是非常错误的)。
我的问题是:
它们的功能、目的和用途有什么不同?
请举例说明。
当前回答
Function可以在sql语句中使用,而procedure不能在sql语句中使用。
插入、更新和创建语句不能包含在函数中,但过程可以包含这些语句。
过程支持事务,但函数不支持事务。
函数必须返回一个且仅返回一个值(另一个值可以由OUT变量返回),但过程返回尽可能多的数据集和返回值。
函数和过程的执行计划都被缓存,因此在这两种情况下性能是相同的。
其他回答
这取决于上下文。
在类pascal语言中,函数和过程是不同的实体,不同之处在于它们是否返回值。他们的行为不同。语言语法(例如;过程调用表单语句;你不能在表达式中使用过程调用,而函数调用不构成语句,你必须在其他语句中使用它们)。因此,pascal培养的程序员会对这两者进行区分。
在类c语言和许多其他当代语言中,这种区别已经不复存在;在静态类型语言中,过程只是带有有趣返回类型的函数。这可能就是为什么它们可以互换使用的原因。
在函数式语言中,通常没有过程这样的东西——所有东西都是函数。
C语言示例:
// function
int square( int n ) {
return n * n;
}
// procedure
void display( int n ) {
printf( "The value is %d", n );
}
尽管你应该注意到C标准没有谈论过程,只有函数。
Function可以在sql语句中使用,而procedure不能在sql语句中使用。
插入、更新和创建语句不能包含在函数中,但过程可以包含这些语句。
过程支持事务,但函数不支持事务。
函数必须返回一个且仅返回一个值(另一个值可以由OUT变量返回),但过程返回尽可能多的数据集和返回值。
函数和过程的执行计划都被缓存,因此在这两种情况下性能是相同的。
在程序内部我们可以使用DML(插入/更新/删除)语句,但在函数内部我们不能使用DML语句。
过程可以同时有输入/输出参数,但函数只能有输入参数。
在存储过程中可以使用Try-Catch块,但在函数中不能使用Try-Catch块。
在选择语句中不能使用存储过程,但在函数中可以使用。
存储过程可以返回0或n个值(最多1024个),但函数只能返回1个必须的值。
存储过程不能从函数调用,但可以从存储过程调用函数。
在存储过程中可以使用事务,但在函数中不能使用事务。
我们不能在Where/Having/select部分的Sql语句中使用存储过程,但可以使用in函数。
我们不能连接存储过程,但可以连接函数。
更多. .点击这里…http://dotnet-developers-cafe.blogspot.in/2013/08/difference-between-stored-procedure-and.html
函数返回值,过程只执行命令。
函数的名称来源于数学。它用于根据输入计算一个值。
程序是一组可以按顺序执行的命令。
在大多数编程语言中,甚至函数也可以有一组命令。因此,区别只在于返回值部分。
但是如果你想让函数保持简洁(看看函数式语言就知道了),你需要确保函数没有副作用。