【问题标题】:ORA-00922 performing ALTER USER using cx_OracleORA-00922 使用 cx_Oracle 执行 ALTER USER
【发布时间】:2020-11-21 09:14:50
【问题描述】:

我正在尝试使用 python 模块 cx_Oracle 运行 ALTER USER 语句,但我收到错误“cx_Oracle.DatabaseError: ORA-00922: missing or invalid option

        dsn = cx_Oracle.makedsn(host_name, port, service_name=service_name)
        con = cx_Oracle.connect(user=DB_USER, password=DB_PASSWD, dsn=dsn)

        cursor = con.cursor()
        generated_passwd = random_passwd()

        sql = "ALTER USER " + user_to_reset + " IDENTIFIED BY \"" + generated_passwd + "\";"
        print(sql)
        cursor.execute(sql)

这是我的代码生成的示例查询,它在运行 cx_oracle 时会引发 ORA-00922 错误:

ALTER USER john IDENTIFIED BY "vJe3lfRI9zma";

这个查询在 sqlplus 中有效,所以我不确定我在这里做错了什么。任何帮助将不胜感激

【问题讨论】:

  • 去掉多余的密码引号
  • @OldProgrammer 很遗憾那没有用。收到同样的错误

标签: python sql oracle plsql cx-oracle


【解决方案1】:

我找到了答案。我的 PL/SQL 语句末尾的分号是错误的罪魁祸首。

ALTER USER john IDENTIFIED BY "vJe3lfRI9zma"

在 cx_Oracle 中工作得很好。

【讨论】:

  • 在您的情况下,问题是分号,但因为您正在运行 SQL 语句。如果你运行一个 PLSQL 程序,比如调用一个过程或包,你将需要分号。如果包含 sql 终止符、SQL 的分号或 PLSQL 程序的斜线,则方法 execute 将失败。
猜你喜欢
  • 2018-02-27
  • 2022-12-13
  • 1970-01-01
  • 1970-01-01
  • 2020-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多