【问题标题】:Oracle Escape Special Characters in Substitution VariableOracle Escape 替换变量中的特殊字符
【发布时间】:2018-11-03 06:52:01
【问题描述】:

我正在尝试编写一个用于 SQL 的 SQL 脚本,并使用在运行时定义的替换变量。有没有办法主动逃避任何进来的特殊字符?

例如,如果变量中有一个 ' ,它将立即中断脚本中正在运行它的任何行

ORA-01756: quoted string not properly terminated

错误,因为我没有完成报价或过早完成。我只是想让它把变量当作一个字符串。有没有办法告诉 Oracle 只按字面意思对待字符来设置字段或类似内容?

在我的具体案例中,我想制作一个通用案例脚本,通过提示输入用户、旧密码和新密码来更改密码。

connect &&myuser/&&oldpass@mydb;
alter user &&myuser identified by &&newpass replace &&oldpass;

如果旧密码或新密码包含特殊字符,它可能会因多种原因而中断,包括我上面遇到的问题。

【问题讨论】:

    标签: oracle plsql


    【解决方案1】:

    不,没有办法在替换变量值中转义字符。

    SQL*Plus 替换变量(CHAR 类型的那些,唯一的其他类型是数字)are always substituted verbatim。 SQL*Plus 不注意出现替换变量的语句的结构:它只是用它们的值搜索和替换变量,不管这样做是否会留下有效的 SQL 语句。

    【讨论】:

    • 谢谢。有没有更好的方法来获取这些值,还是我应该以另一种方式进行密码维护?我不是 DBA 职位,但我需要每 X 天重置一次密码,我想要一种更好的方法,而不是一个接一个地进入每个连接并重置它们。您有什么建议吗?或者现在这不是主题吗?
    • 尝试用" 字符包围密码(例如alter user &&myuser identified by "&&newpass" replace "&&oldpass";)。您不能在密码中包含" 字符,并且(据我所知)您可以将" 以外的任何字符放入"..." 字符串中,所以您应该没问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-11
    • 2021-06-14
    • 2014-11-03
    • 1970-01-01
    • 2011-12-28
    相关资源
    最近更新 更多