[英]What am I doing wrong in the following SQL code?
SQL> set serverout on
SQL> CREATE PROCEDURE find employees
2 BEGIN
3 if Department_ID < 50 from Employees
4 THEN
5 RETURN select Employee_ID, First_Name, Last_Name, Department_ID from Employees where Department_ID < 50;
6 ELSE
7 RETURN select Employee_ID, First_Name, Last_Name, Department_ID from Employees where Department_ID > 50;
8 END IF;
9 /
Warning: Procedure created with compilation errors.
这没有任何意义。
Return 只能返回整数,仅用于返回错误代码。
这也是两种不同方式对 If 的错误使用。 你从哪里得到 Department_id 的值? 并在您离开时查找 If 的语法。 当然,您在实际存储的过程中不会有行号。
用空格命名 proc 是一种糟糕的做法,不要这样做。
我可以看到许多问题(假设每个标签是 MS-SQL):
由于空间原因, find employees
不是有效的过程名称。 要绝对强制它接受空格(警告:坏主意!!),您可以将其括在括号中,例如[find employees]
但我肯定会推荐诸如find_employees
东西。
你缺少一个END
来表示你的过程结束。
您不在存储过程中使用RETURN
,只能在函数内部使用。 您是否试图将结果集传递给调用它的任何对象(在这种情况下,您需要一个“表值函数”)? 还是只显示结果?
你想传入Department_ID
吗? 换句话说,每次运行时给它一个不同的Department_ID
? 在这种情况下,您将需要一个@Department_ID
参数或其他东西。 或者它是从桌子上得到的?
我无法理解你的商业逻辑,这毫无意义。 为什么要返回两个不同的员工列表? 您是否要计算每个部门有多少员工? 这是某种“分页”逻辑(一次仅检索 50 名员工)吗?
您的IF
语法已经过时了。 应该是IF @Department_ID < 50
(对于参数)或者IF (SELECT COUNT(*) FROM Employees WHERE Department_ID = @Department_ID) > 50
东西,但同样,我很难弄清楚你想做什么。
SQL 不使用END IF
。 查找单行 IF ELSE 语句和多行 IF ELSE 语句的语法。
警告:创建的过程有编译错误。
是的。
CREATE 语句没有 END ......没有 Department_id 的定义......没有为 IF 语句声明的参数可以处理......函数名称中有一个空格......
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.