【问题标题】:How to insert regex with special characters like “&,?.@:;” in oracle database?如何插入带有“&,?.@:;”等特殊字符的正则表达式在oracle数据库中?
【发布时间】:2018-06-21 19:32:11
【问题描述】:

我有一个正则表达式值,我想在 oracle 数据库表列中插入,但我遇到了一些问题,即该值没有正确插入到数据库中 这是我要插入的值:

INSERT INTO valid_value VALUES (9, 14, 'REGEX[[A-Z.,-\s]+(,\s[A-Za-z.,-\s]+)?]', 1);

这个插入的结果是:

valid_value 
+--------------------------------------+
REGEX[[A-Z.,-\s]+(,\s[A-Za-z.,-\s]+)]

我失去了“?”有人可以帮助我了解如何在表格列中插入正则表达式值。

我使用批处理文件启动脚本

set DB_CREATE_ROOT="%~dp0"
set SQL_INIT_CONF_DIR=%DB_CREATE_ROOT%\Scripts\configuration\
for /r %SQL_INIT_CONF_DIR% %%F in (*init.sql) do (


    ECHO %DATE% %TIME%  "%%F" >> %LOG_NAME%
    sqlplus -L Test_APP/welkom@//localhost:1521/xe @"%%F" >> %LOG_NAME% 2>&1
)

提前致谢

【问题讨论】:

  • 在 SQL*Plus 和 SQL Developer 中对我来说很好用。您使用的是哪个客户端?它想也许客户正在解释问号?
  • 这些字符在 SQL 上下文中都没有特殊含义,正如简单的SELECT 'REGEX[[A-Z.,-\s]+(,\s[A-Za-z.,-\s]+)?]' FROM DUAL; 所示。您面临的具体问题是什么?
  • 它在 sqldevlopper 中工作正常,但是当我使用 sqlplus 运行脚本时它不起作用
  • 它在 SQL*Plus 中对我有用。 究竟在多大程度上不起作用?
  • 它插入这个值 REGEX[[AZ.,-\s]+(,\s[A-Za-z.,-\s]+)] 而不是 REGEX[[AZ., -\s]+(,\s[A-Za-z.,-\s]+)?] 我失去了 ? 个字符

标签: sql regex oracle


【解决方案1】:

这可能对你有帮助

   INSERT INTO valid_value VALUES (9, 14, 'REGEX[[A-Z.,-\s]+(,\s[A-Za-z.,-\s]+)'?']', 1);

【讨论】:

  • 这会在 SQL*Plus 中引发“ORA-00911: invalid character”,并且 SQL Developer 似乎认为问号是一个绑定占位符和“缺少 IN 或 OUT 参数”的错误。
【解决方案2】:

试试这个:

INSERT INTO valid_value VALUES (9, 14, 'REGEX[[A-Z.,-\s]+(,\s[A-Za-z.,-\s]+) ?]', 1);

查看演示:

在 SQLPLUS 中:

SQL> /

COL1                                            
---------------------------------------------
REGEX[[A-Z.,-\s]+(,\s[A-Za-z.,-\s]+) ?]

现在的问题是您使用的是哪个客户端。在 SQLPLUS 中,它的工作如上所示。

【讨论】:

  • 这个插入这个值 "REGEX[[A-Z.,-\s]+(,\s[A-Za-z.,-\s]+)]"
  • 为什么这会对字符串文字产生影响(除了修改预期值)?正则表达式尚未应用于任何内容?
  • 只是我想将正则表达式存储为字符串值,问题是每次都丢失“?”字符
  • @ErrabiAyoub 你用过我发布的内容吗?我的意思是我在 ? 之前放了一个空格。它与您的问题不同
  • 我会尝试添加空间
【解决方案3】:

如果您发现直接插入有困难,可以对每个特殊字符使用CHR 函数。

谢谢

【讨论】:

  • 是的 chr 解决了它与 INSERT INTO valid_value VALUES (9, 14, 'REGEX[[AZ-\s]+(,\s[A-Za-z-\s] +)'||chr(63)||']', 1);谢谢
  • 欢迎来到 S.O!
【解决方案4】:

对于记录,所提到的字符在 SQL 字符串中都没有特殊含义,因此它们不需要任何特殊处理:

SQL> SELECT '&,?.@:;' AS are_we_special
  2  FROM DUAL;

ARE_WE_
-------
&,?.@:;

(online demo)

...& 是唯一可能的例外 (“SET DEFINE OFF” in Oracle Database),并且仅在 SQL*Plus 和 SQL Developer 的上下文中——在这种情况下,您将获得 输入 xxxxx 的值 em> 提示。

无论 OP 遇到什么问题,CHR() 只是针对他未公开的具体问题的一种解决方法。

【讨论】:

  • 不在 SQL 中;但& 是这些客户端中的默认替换字符。当然,避免 set deifne off 出现问题是微不足道的,并且在您的演示中后跟标点符号时无论如何都没有关系。 (并且set define ? 不会因为同样的原因导致 OP 的问题。)
  • @AlexPoole 我试图改进我的答案。我这里没有 Oracle 来验证东西,所以我希望我没有犯任何错误。
猜你喜欢
  • 2011-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-19
  • 1970-01-01
相关资源
最近更新 更多