在 JavaScript 中通过钱包连接到 oracle 云数据库?

问题描述

我有需要运行的脚本,准确地说是 CREATE TABLE 脚本。 我有这样的功能,见下:

oracleLoader.ts

const oracledb = require('oracledb');
import dbConfig from "./oracleDBConfig";
import log from "../utils/winston";

function oracleLoader(sql: string) {

  const connection = oracledb.getConnection(dbConfig);

  try{
    connection.execute(sql);
    log.info("Table created.");
  } catch (e) {
    log.error("sql script do not executed!" + e);
  }

}

export default oracleLoader;

oracleDBConfig.ts

function oracleDBConfig() {
  return {
    user: mail,password: pass,connectString: str
  };
}

export default oracleDBConfig;

从哪里获得该用户名或我需要电子邮件吗?

从哪里获取密码,是数据库密码还是oracle账户密码

从哪里获取连接字符串?

如果我有包含 oracle-wallet 的 .zip 文件怎么办。

请记住,我需要连接到云中存在的数据库

注意:在第 const connection = oracledb.getConnection(dbConfig); 行中,我有一个警告:

Argument type () => {password: string,user: string,connectString: string} is not assignable to parameter type GetConnectionoptions

解决方法

您需要的用户名和密码是数据库用户名和密码。假设您使用的是 Oracle Autonomous DB,那么管理用户名是“ADMIN”(您可以使用它来创建其他用户)。连接字符串将是您在钱包的 zip 文件中下载的 tnsnames.ora 文件中的别名。

因为这对您来说似乎很陌生,所以 Oracle 的“快速入门”是一个方便的起点https://www.oracle.com/database/technologies/appdev/quickstartnodejs.html

“不可分配”错误是一个不同的问题,与 Oracle 无关。首先,您需要调用 dbConfig() 以获取凭据。然后您需要以某种方式使用异步 oracledb 函数。然后你应该添加一些错误处理。

我不是打字稿用户,但这会运行:

const oracledb = require('oracledb');
import dbConfig from "./oracleDBConfig";

async function oracleLoader(sql: string) {

    let connection;
    try {
        connection = await oracledb.getConnection(dbConfig());
        const r = await connection.execute(sql);
        console.log(r);
        console.log("SQL statement was executed!");
    } catch (e) {
        console.error("SQL statement was not executed!" + e);
    } finally {
        if (connection) {
            try {
                await connection.close();
            } catch (err) {
                console.error(err);
            }
        }
    }
}

export default oracleLoader;

请注意,execute() 执行单个语句,而不是脚本。

在现实生活中,您可能想要使用连接池,请参阅 node-oracledb connection pooling 文档。