TypeORM получает значение DBMS_OUTPUT.PUT_LINE () из STORED PROCEDURE в PACKAGE - PullRequest
0 голосов
/ 27 декабря 2018

Мне удалось вызвать хранимую процедуру из пакета, что также объясняется в следующей ссылке .

Моя проблемаесли я не смог получить результат из DBMS_OUTPUT.PUT_LINE(TOTAL), где TOTAL - это переменная, которую я хочу взять с type NUMBER .Поскольку процедура только обрабатывает и не возвращает значение в виде необработанного вывода (например, из select), в результате я получаю неопределенное значение.

Я также прочитал следующее ссылка но я все еще не могу получить TOTAL.

Мой вопрос:

  • Можно ли получить TOTAL значение из DBMS_OUTPUT.PUT_LINE(TOTAL), которое будет передано в TypeORM после выполнения запроса?

  • И если невозможно, как обработать или выполнить процедуру, чтобы можно было получить TOTAL в return выражении для функции (Было сказаночто это не хорошо) / другая хранимая процедура?


Для справки, я использовал один из следующих запросов в данный момент, чтобы иметь возможность получить результат от хранимой процедурыDBMS_OUTPUT.PUT_LINE:

Первый:

BEGIN pkg_one.endpkg(:id, :adeius,:status,:aregate,:mapony, :total); END;

Второй:

DECLARE 
    ID NUMBER; 
    ADEIUS NUMBER; 
    STATUS NUMBER; 
    AREGATE VARCHAR2(200); 
    MAPONY NUMBER; 
    TOTAL NUMBER; 
BEGIN 
    ID := :ID; 
    ADEIUS := :ADEIUS; 
    STATUS := :STATUS; 
    AREGATE := :AREGATE; 
    MAPONY := :MAPONY; 
    PKG_ONE.ENDPKG(
        ID => ID, 
        ADEIUS => ADEIUS, 
        STATUS => STATUS, 
        AREGATE => AREGATE, 
        MAPONY => MAPONY, 
        TOTAL => TOTAL); 
    TOTAL := TOTAL; 
    --DBMS_OUTPUT.PUT_LINE(TOTAL); --either the initial procedure or the call TOTAL is the Result I want
END;

Обновлена ​​рабочая функция.

CREATE OR REPLACE FUNCTION PTD (ID IN NUMBER,ADIEUS IN NUMBER ,STATUS IN NUMBER,AREGATE IN VARCHAR2,MAPONY IN NUMBER) RETURN VARCHAR2 AS TOTAL NUMBER;
BEGIN 
PKG_ONE.ENDPKG(ID, ADIEUS,STATUS,AREGATE,MAPONY, TOTAL);
  RETURN TOTAL;
END PTD;

1 Ответ

0 голосов
/ 28 декабря 2018

Отвечая на исходный вопрос:

  • Возможно ли получить значение TOTAL из DBMS_OUTPUT.PUT_LINE (TOTAL) для передачи в TypeORM после выполнения запроса?

Это может быть возможно, как указано в одном из комментариев ссылка от @ Marmite Bomber .Но нет необходимости использовать DBMS_OUTPUT для передачи значения.

  • И если невозможно, как обработать или выполнить процедуру, чтобы иметь возможность получить ИТОГО в выражении возврата для функции (было сказаночто это не хорошо) / другая хранимая процедура?

Ниже приведена рабочая функция, запрос SQL и TypeORM после SELECT извлечения function из хранимой процедуры (SP), которые были обновлены ранее:

Функция:

CREATE OR REPLACE FUNCTION PTD (ID IN NUMBER,ADIEUS IN NUMBER ,STATUS IN NUMBER,AREGATE IN VARCHAR2,MAPONY IN NUMBER) RETURN VARCHAR2 AS TOTAL NUMBER;
BEGIN 
PKG_ONE.ENDPKG(ID, ADIEUS,STATUS,AREGATE,MAPONY, TOTAL);
  RETURN TOTAL;
END PTD;

SQL-запрос:

SELECT PTD(:ID, :ADIEUS,:STATUS,:AREGATE,:MAPONY) AS VAL FROM DUAL; -- NOTE that :var is input

TypeORM:

await getManager().query("SELECT PTD(" + id + ", " + adeius+ ", " + status + ", '" + aregate + "', " + mapony + ") AS VAL FROM DUAL")
   .then(
      res => {
          data.count = res[0].VAL; //note that data.count is from const data = { count:0 };
      },
   );

Примечание. Может считается плохой практикой использовать функцию для вызова SP.И ранее это не возможно .

1040 * Лично это спорно, является ли это плохая практика или нет, но до тех пор, либо функции, которые называют SP или SP невлияет на любое состояние базы данных .Это должно быть хорошо.
...