1

为什么调用存储过程时需要EXEC或需要?EXECUTEOracle 和 SQL Server 都有EXEC需要和不需要或不需要的情况。要求它有什么意义?

4

3 回答 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 回答