添加IF ELSE声明

用户名

我在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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章