如何在NestJs+TypeOrm(后端)中调用存储过程
我在oracle数据库中有存储过程,我想在NestJs中调用它。 如何在NestJs中调用存储过程 这是我的存储过程如何在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
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作为占位符