Как исправить: ORA-00942: таблица или представление не существует 'при запросе Oracle с TypeORM и Loopback4 - PullRequest
0 голосов
/ 30 сентября 2019

Я пытаюсь запросить таблицу Oracle с помощью Loopback4 и TypeORM, но я ORA-00942: таблица или представление не существует. Более того, через некоторое время я получаю еще одну ошибку, подобную этой:

'Невозможно создать новое соединение с именем «default», потому что соединение с таким именем уже существует, и теперь у него есть активный сеанс соединения.'

Я новичок в 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));
    });

  }

спасибо

1 Ответ

0 голосов
/ 30 сентября 2019

Имеет ли sua03e таблицу, которую вы пытаетесь запросить? Если да, совпадает ли регистр имени таблицы с тем, что находится в базе данных (обратите внимание, что имена Oracle в верхнем регистре по умолчанию)?

Сообщение об ошибке «по умолчанию» не выглядит правильным. Была ли ошибка префиксом «NJS-NNN»? Если нет, возможно, ошибка возникает из-за Loopback, а не из драйвера.

Вы поместили createConnection в функцию, которая использует соединение для выполнения работы. Я вообще советую против этого. Лучше создать пул в логике инициализации, который выполняется при запуске приложения. Затем вы вызываете getConnection только для пула внутри функции, которая использует соединение. Это и более производительно, и проще в обслуживании.

Даже если вы используете Loopback, вы можете извлечь пользу из чтения и проработки этой серии статей по созданию REST API с Node.js и Oracle Database: https://jsao.io/2018/03/creating-a-rest-api-with-node-js-and-oracle-database/

...