TypeORM从PACKAGE中的STORED PROCEDURE中获取DBMS_OUTPUT.PUT_LINE()的值

时间:2018-12-27 10:00:58

标签: oracle stored-procedures nestjs typeorm

我能够从包中调用存储过程,以下 link也对此进行了说明。

我的问题是我无法从DBMS_OUTPUT.PUT_LINE(TOTAL)获取结果,其中TOTAL是我要使用 type NUMBER 。由于该过程仅处理并且没有将值作为原始输出返回(例如从select中返回),因此结果一直未定义。

我还阅读了以下 link ,但我仍然无法获得TOTAL

我的问题是:

  • 是否可以从TOTAL中获取DBMS_OUTPUT.PUT_LINE(TOTAL)的值,以在执行查询后传递给TypeORM?

  • 如果无法处理或执行该过程以能够在function上的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 :(得分:0)

回答原始问题:

  • 是否可以从中获取TOTAL值 执行后在TypeORM上传递的DBMS_OUTPUT.PUT_LINE(TOTAL) 查询?

link的评论@Marmite Bomber之一所述,这可能是可能的。但是,不必使用DBMS_OUTPUT来传递值。

  • 如果无法处理或执行该过程, 能够在函数的返回表达式中获得TOTAL(据说 不好)/另一个存储过程?

下面是从存储过程(SP)中SELECT function进行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和TypeORM查询,这些更新先前已更新:

功能:

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

SQL查询:

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 };
      },
   );

TypeORM:

<resources>

    <style name="AppTheme" parent="Theme.AppCompat.NoActionBar">

    </style>

</resources>

注意:使用函数调用SP可能被认为bad practice。还有以前的it's not possible

就个人而言,是否作弊是值得商bat的,但是只要调用SP的函数或SP都不会影响任何database state。没关系。