如何解决:ORA
我正在尝试使用Loopback4和TypeORM查询Oracle表,但是我ORA-00942:表或视图不存在。 Morover,过了一会儿,我又遇到了另一个错误:
'无法创建名为“默认”的新连接,因为具有该名称的连接已经存在,并且现在具有活动的连接会话。'
我是Loopback4和Nodejs的新手-Typescript,所以我在控制器内部调用了createConnection方法。
也许我应该在集中的地方称它,但是我不知道在哪里以及如何在我的项目中将其集中。
这是我的实体
import { Entity, Column, PrimaryColumn, OneToOne } from "typeorm";
@Entity("Pratica")
export class Pratica {
@PrimaryColumn()
protocolloaci: number;
@Column()
codicepratica: string;
}
我的控制器方法
@get('/pratiche/{id}', {
responses: {
'200': {
description: 'Pratica model instance',
content: { 'application/json': { schema: getModelSchemaRef(Pratica) } },
},
},
})
async findById(@param.path.number('id') id: number): Promise<Pratica> {
return new Promise((resolve) => {
createConnection({
type: 'oracle',
host: '10.64.2.226',
port: 1521,
sid: 'npra02s.svidbs003std',
username: 'sua03e',
password: 'iniziale',
entities: [
Pratica
],
logging: true
}).then(async connection => {
let praticaRepository = connection.getRepository(Pratica);
const pratica = await praticaRepository.find({ protocolloaci: id });
resolve(pratica[0]); // return using resolve
}).catch(error => console.log(error));
});
}
谢谢
回答如下:sua03e
是否拥有您要查询的表?如果是,表名的大小写是否与数据库中的名称匹配(请注意,默认情况下,Oracle大写名称)?
“默认”错误消息似乎不正确。错误是否以“ NJS-NNN”为前缀?如果不是,则错误可能来自回送而不是驱动程序。
您已将createConnection
放在使用连接进行工作的函数中。我通常不建议这样做。最好在启动应用程序时在执行的初始化逻辑中创建一个池。然后,您仅在使用连接的函数内的池上调用getConnection
。这不仅性能更高,而且更易于维护。
即使您正在使用回送,您也可以通过阅读和研究本系列以使用Node.js和Oracle数据库创建REST API来受益:https://jsao.io/2018/03/creating-a-rest-api-with-node-js-and-oracle-database/