为什么调用存储过程时需要EXEC
或需要?EXECUTE
Oracle 和 SQL Server 都有EXEC
需要和不需要或不需要的情况。要求它有什么意义?
问问题
645 次
3 回答
4
这使得语法更加独特和明确。由于语句分隔符(分号)在 T-SQL 中不是强制性的,因此可以更清楚地找到语句的开始位置。
在旁注中,我建议在每条语句之后严格使用分号,因为存在歧义问题(尤其是在使用WITH
关键字时经常遇到,它可以在 DML 语句之前开始公用表表达式的定义,也可以在 DML 语句的末尾使用用于定义提示;没有分号,解析器无法知道真正选择哪一个)。
于 2012-12-28T20:50:08.297 回答
3
这无疑是一个解析器问题/挑战。如果对存储过程的调用可以在文本正文中的任何位置进行,那么您会在尝试编写可以理解所有内容的通用“事物”时自杀。相反,设计者发布该语言的BNF,而您,作为用户,有责任理解如何说它。
或者,在 SQL Server 世界中,始终使用 EXEC/EXECUTE,而不必担心何时需要它。正如@alex 所指出的,这不适用于甲骨文。
于 2012-12-28T20:48:45.420 回答
1
在 Oracle 中,EXECUTE(或 EXEC)在 SQL*Plus 中用作匿名 PL/SQL 块的快捷方式。EXECUTE 在 PL/SQL 中不起作用。你可以这样做:
SQL> execute my_proc;
或者,作为完全指定的匿名块:
SQL> DECLARE
BEGIN
my_proc;
END;
/
它完全是 Oracle 中的客户端语法。
于 2012-12-28T20:57:34.457 回答