Попытка сравнить две строки. один из параметра IN (myname), а другой - жестко закодированный ('abcd').Сравнение строк в Oracle Процедура
(myname IN VARCHAR2)
-- myname will be set to 'abcd' when calling this procedure
DECLARE
name VARCHAR2(10):=myname;
IF(name='abcd') THEN
--update something in database
END IF;
Настоящий код приводится ниже. idegreeName имеет значение «HONS». если я удалю, если блок, то моя процедура работает нормально. но мне нужен блок IF для выполнения запроса на обновление.
// Calling in JAVA
stmt = (OracleCallableStatement) conn.prepareCall("{ call receiveAdmission2(?,?,?,?,?,?,?,?,?,?,?,?,?,?) }");
// my procedure
CREATE OR REPLACE PROCEDURE NU_DB.receiveAdmission2 (
iAdmissionRoll IN VARCHARARRAY,
iUserId IN VARCHAR2,
iCollegeCode IN VARCHAR2,
isessionId IN VARCHAR2,
isubjectId IN VARCHAR2,
iMeritType IN VARCHAR2,
iStatus IN VARCHAR2,
iXforward IN VARCHAR2,
iVia IN VARCHAR2,
iRemoteAddress IN VARCHAR2,
oResponseCode OUT NUMBER,
oResponseMessage OUT VARCHAR2,
oResponse OUT VARCHAR2,
idegreeName IN VARCHAR2
)
IS
tErrorCode VARCHAR2(20);
tErrorMsg VARCHAR2(400);
tResponse VARCHAR2(100);
BEGIN
oResponse:='';
DECLARE
str1 VARCHAR2(10):=idegreeName;
Begin
FOR i IN 1 .. iAdmissionRoll.COUNT
LOOP
IF(str1='HONS') THEN
UPDATE nu_hons_result set STATUS=iStatus where ADMISSION_ROLL=iAdmissionRoll(i) and MERIT_TYPE=iMeritType and COLLEGE_CODE=iCollegeCode and SUBJECT_ID=isubjectId and STATUS='Student Requested';
END IF;
if (sql%rowcount > 0) then
tResponse := 'Successfully approved.';
if(iMeritType<>5) then
UPDATE nu_college_subject_map set AVAILABLE_SEAT=AVAILABLE_SEAT-1 where SESSION_ID=isessionId and COLLEGE_CODE=iCollegeCode and SUBJECT_ID=isubjectId;
end if;
insert into NU_HONS_SUBJECT_ADMISSION (ADMISSION_ROLL,SESSION_ID,COLLEGE_CODE,SUBJECT_ID,APPROVED_BY,APPROVED_ON)
values(iAdmissionRoll(i),isessionId,iCollegeCode,isubjectId,iUserId,sysdate);
insert into nu_log_admission values (iAdmissionRoll(i),isessionId,iCollegeCode,iMeritType,iStatus,sysdate,isubjectId);
else
tResponse := 'Failed to approve.'||idegreeName;
end if;
oResponse := oResponse || tResponse || '###';
END LOOP;
EXCEPTION WHEN DUP_VAL_ON_INDEX THEN
tErrorCode:=SQLCODE;
tErrorMsg:=SUBSTR(SQLERRM, 1, 400);
oResponseCode := 1;
oResponseMessage :=tErrorMsg;
ROLLBACK;
Return;
WHEN OTHERS THEN
tErrorCode:=SQLCODE;
tErrorMsg:=SUBSTR(SQLERRM, 1, 400);
oResponseCode := 2;
oResponseMessage :=tErrorMsg;
ROLLBACK;
Return;
End;
END receiveAdmission2;
/
Проблема в том, что блок IF не выполняется.
Очевидно, что мое имя не равно «abcd». Можете ли вы вставить полный пример? Я имею в виду процедуру и то, как вы ее называете –
Я только что редактировал свой вопрос с полным кодом. –
1. Откуда вы знаете, что блок IF не выполняется. –