为什么EXEC需要执行程序?

时间:2012-12-28 20:43:39

标签: sql-server oracle tsql plsql

调用存储过程时为什么需要EXECEXECUTE? Oracle和SQL Server都有需要EXEC的情况以及何时不需要或不必要的情况。有什么需要呢?

3 个答案:

答案 0 :(得分:4)

这使得语法更清晰,更明确。由于语句分隔符(分号)在T-SQL中不是必需的,因此可以更清楚地查找语句的开始位置。

在旁注中,我建议在每个语句后严格使用分号,因为存在歧义问题(特别是在使用WITH关键字时经常遇到的问题,可以在DML语句之前启动公用表表达式的定义,或者在DML语句的末尾用于定义提示;没有分号,解析器无法知道要选择哪一个。

答案 1 :(得分:3)

毫无疑问,这是一个解析器问题/挑战。如果对存储过程的调用可以在文本正文中的任何位置,那么你会试图编写一个能够理解所有内容的通用“事物”。相反,设计师为语言发布BNF,用户负责了解如何说出来。

或者,在SQL Server世界中,总是使用EXEC / EXECUTE,并且永远不必担心需要时的细节。正如@alex所指出的那样,对于Oracle来说并不适用。

答案 2 :(得分:1)

在Oracle中,EXECUTE(或EXEC)在SQL * Plus中用作匿名PL / SQL块的快捷方式。 EXECUTE在PL / SQL中不起作用。你可以这样做:

SQL> execute my_proc;

或者,作为完全指定的匿名块:

SQL> DECLARE
BEGIN
  my_proc;
END;
/

这完全是Oracle中的客户端语法。