我在PHP中有类似的功能,
if ( $busyUsersIDS ) {
SELECT statment
ELSE {
SELECT statment
}
到目前为止,我将其转换为可在Oracle SQL中使用的功能,现在的主要问题是添加IF ELSE
,这对我来说像初学者一样很难,无论我尝试什么,我总是会出错
FUNCTION GET_MOMENT_PROJECT_USERS(p_busyUsersID IN INT)
RETURN SYS_REFCURSOR IS
rc SYS_REFCURSOR;
/*getBusyUsersIDS*/
BEGIN
OPEN rc FOR
CASE bussyUserID WHEN bussyUserID THEN
SELECT u.*,
ur.Roles
FROM
users u
INNER JOIN
user_roles ur
ON
u.User_roleID = ur.id
WHERE
u.UserID NOT IN (p_busyUsersID)
AND
u.Surname IS NOT NULL
AND
u.Lastname IS NOT NULL
ORDER BY
u.ProjectPlanSortIndex;
ELSE
SELECT u.*,
ur.Roles
FROM
users u
INNER JOIN
user_roles ur
ON
u.User_roleID = ur.id
WHERE
u.Surname IS NOT NULL
AND
u.Lastname IS NOT NULL
ORDER BY
u.ProjectPlanSortIndex;
END;
RETURN rc;
END GET_BUSY_USERS_IDS;
到目前为止,我得到两个错误
错误(524,9):PLS-00103:预期以下情况之一时遇到符号“ SELECT”:(-+ case mod new not null日期管道<交替
错误(528,3):PLS-00103:预期以下情况之一时遇到符号“ INNER”:对于具有相交的负顺序的组,在连接处开始并集
谁能告诉我我哪里做错了,这里哪里出了问题?
关于初学者如何处理这种语法问题,我建议您练习将其简化为最小的示例,以免您被联接逻辑分散注意力。
例如,您可以快速进行测试,以查看它是否有效:
declare
rc sys_refcursor;
begin
open rc for
case
when 1 = 1 then select * from dual -- not valid
end;
end;
失败了
ORA-06550: line 6, column 29:
PLS-00103: Encountered the symbol "SELECT" when expecting one of the following: ...
因为open rc for select
语法必须是单个语句,并且不能与条件逻辑分开。
注意如何没有create function
,参数或联接等使事情复杂化。弄清语法后,可以将所有这些重新添加。该case
语句的语法在这里。(请注意,有几种不同的类型case
。)它必须是
declare
rc sys_refcursor;
begin
case
when 1 = 1 then
open rc for select * from dual;
end case;
end;
或等效的使用if
:
declare
rc sys_refcursor;
begin
if 1 = 1 then
open rc for select * from dual;
end if;
end;
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句