Я создал что-то вроде ниже:
DECLARE
active_ver number;
archived_ver number;
draft_ver number;
ret varchar2(10);
FUNCTION checkStatus(active_ver IN number, archived_ver IN number, draft_ver
IN number)
return varchar2 is varchar2(10);
BEGIN
IF (archived_ver > active_ver) then
IF (draft_ver > archived_ver) then
z:='DRAFT';
ELSE z:='ARCHIVED';
END IF;
ELSE z:='ACTIVE';
END IF;
RETURN z;
END;
BEGIN
SELECT NVL(max(version),0) into active_ver from table_1 order by run_id desc;// returns 0
SELECT NVL(max(version),0) into archived_ver from table_2 order by run_id desc;// returns 16
SELECT NVL(max(version),0) into draft_ver from table_3 order by run_id desc;// returns 11.6
ret = checkStatus(active_ver, archived_ver, draft_ver);
dbms_output.put_line('ret' || ret);
END;
Он работает хорошо и возвращает ARCHIVED, когда я запускаю его в SQL Developer, но когда я пытаюсь сделать это с помощью узла oracledb, я получаю ACTIVE: (
Вот что я делаю:
async executeFunction(){
const query = 'DECLARE
active_ver number;
archived_ver number;
draft_ver number;
ret varchar2(10);
FUNCTION checkStatus(active_ver IN number, archived_ver IN number, draft_ver IN number)
return varchar2 is varchar2(10);
BEGIN
IF (archived_ver > active_ver) then
IF (draft_ver > archived_ver) then
z:='DRAFT';
ELSE z:='ARCHIVED';
END IF;
ELSE z:='ACTIVE';
END IF;
RETURN z;
END;
BEGIN
SELECT NVL(max(version),0) into :active_ver from table_1 order by run_id desc;// returns 0
SELECT NVL(max(version),0) into :archived_ver from table_2 order by run_id desc;// returns 16
SELECT NVL(max(version),0) into :draft_ver from table_3 order by run_id desc;// returns 11.6
:ret = checkStatus(active_ver, archived_ver, draft_ver);
dbms_output.put_line('ret' || ret);
END;'
const result = connection.execute(query,
{
active_ver : {dir: oracledb.BIND_OUT,type: oracledb.NUMBER}.
archived_ver : {dir: oracledb.BIND_OUT,type: oracledb.NUMBER}.
draft_ver : {dir: oracledb.BIND_OUT,type: oracledb.NUMBER}.
ret : {dir: oracledb.BIND_OUT,type: oracledb.STRING}.
});
console.log('max ACTIVE ver: ' + result.outBinds.active_ver);
console.log('max ARCHIVED ver: ' + result.outBinds.archived_ver);
console.log('max DRAFT ver: ' + result.outBinds.draft_ver);
console.log('Output: ' + result.outBinds.ret);
return result.outBinds.ret;
}
В результате я получаю:
max ACTIVE ver: 0
max ARCHIVED ver: 22
max DRAFT ver: 11.01
Output: ACTIVE
У меня вопрос, почему я получаю правильное значение в SQL-разработчике, которое АРХИВИРУЕТСЯ, но неверный вывод, который является АКТИВНЫМ, сгенерированным oracle db ???
Можете ли вы помочь, пожалуйста?