【问题标题】:Connect to oracle cloud database by wallet in JavaScript?通过 JavaScript 中的钱包连接到 Oracle 云数据库?
【发布时间】:2021-04-25 17:42:21
【问题描述】:

我有需要运行的脚本,确切地说是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

【问题讨论】:

  • 你检查the documentation first了吗?它有什么问题?
  • @astentx 是的,我做到了,目前问题出在最后一个注释中,为什么我会遇到数据类型的问题

标签: javascript oracle cloud node-oracledb


【解决方案1】:

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

由于这对您来说似乎很新,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 文档。

【讨论】:

  • 由于execute()只执行一条语句,所以我应该通过迭代来遍历脚本,对吗?
  • 如果您正在执行一系列语句,那么您将需要单独执行它们。您还想打开一个连接一次,然后执行所有语句 - 不要为每个语句打开一个连接。
猜你喜欢
  • 2020-09-15
  • 1970-01-01
  • 2013-10-21
  • 2018-06-20
  • 2021-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-08
相关资源
最近更新 更多