如何在NestJs+TypeOrm(后端)中调用存储过程

如何在NestJs+TypeOrm(后端)中调用存储过程,nestjs,Nestjs,我在oracle数据库中有存储过程,我想在NestJs中调用它。 如何在NestJs中调用存储过程 这是我的存储过程 PROCEDURE pipeline_critical ( i_main_company IN NUMBER, o_value OUT NUMBER ) AS BEGIN SELECT COUNT(A.PIPELINE_ID) AS IGNORED_PIPELINE INTO o_value FROM T_PI

我在oracle数据库中有存储过程,我想在NestJs中调用它。 如何在NestJs中调用存储过程

这是我的存储过程

PROCEDURE pipeline_critical (
        i_main_company IN NUMBER,
        o_value OUT NUMBER
   ) AS
   BEGIN
    SELECT COUNT(A.PIPELINE_ID) AS IGNORED_PIPELINE 
    INTO o_value
    FROM T_PIPELINE A
    LEFT JOIN T_PIPELINE_PRODUCT P ON P.PIPELINE_ID = A.PIPELINE_ID
    WHERE 
        1 = ( CASE WHEN
                i_main_company <> 3
                AND A.MAIN_COMPANY_ID = i_main_company
                AND TO_CHAR(A.EST_DELIVERY,'YYYY') >= TO_CHAR(SYSDATE,'YYYY') - 1
                AND A.PIPELINE_STATUS_ID IN (1,2,3)
                AND TO_CHAR(ADD_MONTHS(A.UPDATE_DATE,3),'YYYYMM') < TO_CHAR(SYSDATE,'YYYYMM')
                AND P.PAID_DATE IS NULL THEN 1
            WHEN
                i_main_company = 3
                AND TO_CHAR(A.EST_DELIVERY,'YYYY') >= TO_CHAR(SYSDATE,'YYYY') - 1
                AND A.PIPELINE_STATUS_ID IN (1,2,3)
                AND TO_CHAR(ADD_MONTHS(A.UPDATE_DATE,3),'YYYYMM') < TO_CHAR(SYSDATE,'YYYYMM')
                AND P.PAID_DATE IS NULL THEN 1
            END
        );
   END pipeline_critical;

我正在迁移Javascript/顺序化后端,我正在测试我的需求。 这是一个对我有用的简单示例:

这是存储过程

PROCEDURE pipeline_critical (
        i_main_company IN NUMBER,
        o_value OUT NUMBER
   ) AS
   BEGIN
    SELECT COUNT(A.PIPELINE_ID) AS IGNORED_PIPELINE 
    INTO o_value
    FROM T_PIPELINE A
    LEFT JOIN T_PIPELINE_PRODUCT P ON P.PIPELINE_ID = A.PIPELINE_ID
    WHERE 
        1 = ( CASE WHEN
                i_main_company <> 3
                AND A.MAIN_COMPANY_ID = i_main_company
                AND TO_CHAR(A.EST_DELIVERY,'YYYY') >= TO_CHAR(SYSDATE,'YYYY') - 1
                AND A.PIPELINE_STATUS_ID IN (1,2,3)
                AND TO_CHAR(ADD_MONTHS(A.UPDATE_DATE,3),'YYYYMM') < TO_CHAR(SYSDATE,'YYYYMM')
                AND P.PAID_DATE IS NULL THEN 1
            WHEN
                i_main_company = 3
                AND TO_CHAR(A.EST_DELIVERY,'YYYY') >= TO_CHAR(SYSDATE,'YYYY') - 1
                AND A.PIPELINE_STATUS_ID IN (1,2,3)
                AND TO_CHAR(ADD_MONTHS(A.UPDATE_DATE,3),'YYYYMM') < TO_CHAR(SYSDATE,'YYYYMM')
                AND P.PAID_DATE IS NULL THEN 1
            END
        );
   END pipeline_critical;
创建程序sp_prueba @电子邮件varchar100 像 开始 不计数; 从tbusua中选择*其中emai_usua=@email 终止 在NESTJS-Controller中

从'@nestjs/common'导入{Controller,Get,Param}; 从“./usuarios.service”导入{UsuariosService}; 从'rxjs/internal/scheduler/async'导入{async}; 从“./usuarios.entity”导入{Usuario}; @“Usuarios”控制员 导出类UsuariosController{ 构造函数私有只读UsuariosService:UsuariosService{} @获取“/:电子邮件” 异步的find@Param“电子邮件”电子邮件:承诺{ 返回等待this.UsuariosService.findemail; } } 在服务的NESTJS-TypeORM后端中

从'@nestjs/common'导入{Injectable}; 从'@nestjs/typeorm'导入{InjectRepository}; 从“./usuarios.entity”导入{Usuario}; 从“typeorm”导入{Repository,Db,EntityManager}; @注射的 导出类UsuariosService{ 建造师 @注射性尿毒症 专用只读存储库:存储库{} 异步findemail:string:Promise{ return wait this.usuariosRepository.querysp_prueba@email='+email+'; } }
这对我来说很有用

尝试使用QueryRunner运行原始SQL查询调用您的过程。我认为您在当前代码sp_prueba@email='+email+'中很容易出现SQL注入,如果没有可查询的存储库怎么办?为了避免SQL注入,您可以执行以下操作:;queryCALL my_spr,[value1]@JaimeGinorio它在Oracle上对我有效的唯一方式是使用:PARAM_NAME作为占位符