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.
答案 0 :(得分:2)
这没有任何意义。
返回只能返回整数,仅用于返回错误代码。
这也是错误地使用If以两种不同的方式。你在哪里获得Department_id的价值?并查找If的语法,因为你离开了。 当然,你不会在实际的存储过程中有行号。
用空格命名proc是一种不好的做法,不要这样做。
答案 1 :(得分:1)
我可以看到许多问题(根据标记假设这是MS-SQL):
find employees
不是有效的proc名称。绝对强迫它接受空间(警告:坏主意!!)你可以用[find employees]
这样的括号括起来,但我肯定会推荐像find_employees
这样的东西。
您错过了一个END
来表示您的过程结束。
您不能在存储过程中使用RETURN
,只能在函数内部使用Department_ID
。您是否尝试将结果集传递给任何调用它(在这种情况下,您需要&#34;表值函数&#34;)?或者只显示结果?
您是否正在尝试传入 Department_ID
?换句话说,每次运行时给它一个不同的@Department_ID
?在这种情况下,您需要IF
参数或其他内容。或者是从表中获取它?
我无法理解你的业务逻辑,这没有任何意义。你为什么要归还两个不同的雇员名单?您是否正在尝试计算每个部门属于多少员工?这是某种&#34;分页&#34;逻辑(一次只检索50名员工)?
您的IF @Department_ID < 50
语法已关闭。应该是IF (SELECT COUNT(*) FROM Employees WHERE Department_ID = @Department_ID) > 50
(对于参数)或END IF
或类似的东西,但同样,我很难弄清楚你正在尝试做什么。
SQL不使用{{1}}。查找单行IF ELSE语句和多行IF ELSE语句的语法。
警告:使用编译错误创建过程。
是的。
答案 2 :(得分:0)
CREATE语句没有END ... 没有department_id的定义...... 没有声明为IF语句工作的参数... 函数名称中有一个空格......