Создание хранимых процедур с помощью оператора if else, выдающего ошибку компиляции - PullRequest
0 голосов
/ 05 августа 2020

Новое в DB2. Версия 11. При создании хранимой процедуры выдает ошибку Ожидается неправильный синтаксис рядом с 'FROM': 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;

1 Ответ

0 голосов
/ 05 августа 2020

Если вы используете синтаксис ANSI SQL PL, ваша процедура будет выглядеть примерно так, как показано ниже.

Обратите внимание, что переменные и параметры не должны начинаться с символа @, в отличие от других СУБД.

Использование соглашения об именах, например 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
...