TypeORM执行查询时是否支持Oracle特定参数(如fetchInfo)?
TypeORM对Oracle特定参数(如fetchInfo)的支持情况
TypeORM的标准QueryBuilder API不直接暴露Oracle驱动专属的fetchInfo这类参数选项——它的设计目标是保持跨数据库兼容性,不会在核心API中加入单一数据库的特有配置。不过你可以通过以下两种方式实现需求:
方案一:直接使用原生SQL查询
利用TypeORM的query方法,它会直接将参数传递给Oracle驱动的execute方法,完全支持所有Oracle驱动的选项:
const result = await _connection.query( 'SELECT QUANTITY FROM mytable WHERE id = :id', [id], { fetchInfo: { "QUANTITY": { type: oracledb.STRING } } } );
方案二:结合QueryBuilder与原生连接
如果想保留QueryBuilder生成SQL的便利,可以先获取底层Oracle连接实例,再执行自定义查询:
const repository = _connection.manager.getRepository(target); // 获取底层Oracle连接 const oracleConn = await _connection.driver.connect(); try { // 用QueryBuilder生成目标SQL const sql = repository.createQueryBuilder('mytable') .select('QUANTITY') .where('mytable.id = :id', { id }) .getSql(); // 用原生Oracle连接执行查询并指定fetchInfo const result = await oracleConn.execute( sql, { id }, { fetchInfo: { "QUANTITY": { type: oracledb.STRING } } } ); // 手动将结果映射为TypeORM实体(可选) const entities = repository.create(result.rows); } finally { // 务必关闭连接 await oracleConn.close(); }
补充说明
如果需要频繁使用Oracle特定功能,直接使用oracledb原生驱动会更高效灵活——TypeORM的核心价值在于跨数据库的统一操作,单一数据库的专属特性通常需要绕过ORM层直接对接驱动。
内容的提问来源于stack exchange,提问作者diegodarossi
相关产品推荐
相关产品推荐

