使用 if else 语句创建存储过程时出现编译错误

Creating Stored Procedures by using if else statement giving compilation error

DB2 新手。版本 11。创建存储过程时出现错误 Incorrect syntax near 'FROM' expected: BULKINFO

CREATE PROCEDURE My_StrProc 
( IN @rollNumber     Varchar(18), 
  IN @studentType       Varchar(3),   
 OUT @studentID        Varchar(15),   
 OUT @oldStudentType   Varchar(4) ,  
 OUT  @oldBranch Varchar(3) ,  
 OUT @newStudentType    Varchar(4) ,  
 OUT @newBranch Varchar(4) 
)
BEGIN
IF @studentType IS NOT NULL 
    THEN
    Select  
            @studentID       =  REGISTRATION_NO,  
            @oldStudentType   = OLD_STUD_TYPE,  
            @oldBranch    = OLD_BRANCH,  
            @newStudentType    = NEW_STUD_TYPE,  
            @newBranch = NEW_BRANCH
        From  
            Migrated_Student  
        Where  
            OLD_STUDENT_NUM = @rollNumber and   
            ACTIVE = 'P';
ELSE
    Select  
            @studentID       = REGISTRATIONNO,  
            @oldStudentType   = OLD_STUD_TYPE,  
            @oldBranch    = OLD_BRANCH,  
            @newStudentType   = NEW_STUD_TYPE,  
            @newBranch    = NEW_BRANCH
                    From  
            Migrated_Student  
        Where  
            OLD_STUDENT _NUM = @rollNumber and  
            OLD_ STUDENT _TYPE = @studentType and  
            ACTIVE = 'P';
END IF;
END;

如果您使用的是 ANSI SQL PL 语法,那么您的程序将如下所示。

请注意,与其他 RDBMS 不同,变量和参数不应以 @ 字符开头。

使用命名约定,例如 p_ 表示参数,或 v_ 表示变量只是可选噪音,但有些人喜欢它。

CREATE or replace PROCEDURE My_StrProc 
( IN p_rollNumber        Varchar(18), 
  IN p_studentType       Varchar(3),   
 OUT p_studentID         Varchar(15),   
 OUT p_oldStudentType    Varchar(4) ,  
 OUT p_oldBranch         Varchar(3) ,  
 OUT p_newStudentType    Varchar(4) ,  
 OUT p_newBranch         Varchar(4) 
)
BEGIN

IF p_studentType IS NOT NULL 
THEN
    Select  
            REGISTRATION_NO,  
            OLD_STUD_TYPE,  
            OLD_BRANCH,  
            NEW_STUD_TYPE,  
            NEW_BRANCH
        into
             p_studentID
            ,p_oldStudentType
            ,p_oldBranch
            ,p_newStudentType
            ,p_newBranch
        From  
            Migrated_Student  
        Where  
            OLD_STUDENT_NUM = p_rollNumber 
            and   ACTIVE = 'P';
ELSE
    Select  
            REGISTRATION_NO,  
            OLD_STUD_TYPE,  
            OLD_BRANCH,  
            NEW_STUD_TYPE,  
            NEW_BRANCH
     into
             p_studentID
            ,p_oldStudentType
            ,p_oldBranch
            ,p_newStudentType
            ,p_newBranch
     From  
            Migrated_Student  
        Where  
            OLD_STUDENT_NUM = p_rollNumber and  
            OLD_STUD_TYPE = p_studentType and  
            ACTIVE = 'P';
END IF;
END