替换 sqlplus 命令中的 HTML 个实体

replace HTML Entities in sqlplus command

所以,我有一个自动生成的 sql 文件,我正在尝试 运行 使用 sqlplus 命令,但问题是......可能 HTML 实体(在本例中为 '),因此它不会向用户询问任何值,这是我所拥有的示例:

CREATE TABLE MY_TABLE (
    TABLE_KEY CHAR(24) DEFAULT '' '' NOT NULL,
    TABLE_FIELD CHAR(40) DEFAULT '' '' NOT NULL
)

我正在尝试 运行 使用以下命令:

sqlplus USER/PASSWORD @<path_to_sql_file>

有没有什么方法可以在不 sql 的情况下获得实际的撇号并要求我提供 "apos" 值?

非常感谢您对此的帮助!

您可以将 '&' 字符替换为 '||chr(38)||'

试试这个:

CREATE TABLE MY_TABLE (
    TABLE_KEY CHAR(24) DEFAULT chr(38)||'apos; '||chr(38)||'apos;' NOT NULL,
    TABLE_FIELD CHAR(40) DEFAULT chr(38)||'apos; '||chr(38)||'apos;' NOT NULL
)

您可以使用 CHR(38) 而不是 &(正如 Ersin 已经提出的)或者您 运行

SET DEFINE OFF

在 SQL*Plus 脚本的顶部。您甚至可以定义 & 以外的其他字符用于前缀替换变量,请参阅文档 SET DEFINE

更新

如果您在脚本中写入 DEFAULT '&apos; &apos;',那么 Oracle 会将 &apos; &apos; 作为默认值 - 您还期望什么? Oracle 数据库不是 HTML 浏览器。

如果你想有两个撇号然后写DEFAULT ''' '''。为了在字符串中转义 ',只需将其加倍即可。

如果您必须更新现有值,您可以像这样使用更新语句:

UPDATE MY_TABLE SET TABLE_KEY = DBMS_XMLGEN.CONVERT(TABLE_KEY, 1);