【问题标题】:Ignore hash character in a query on sqlplus忽略 sqlplus 查询中的哈希字符
【发布时间】:2021-11-19 16:38:11
【问题描述】:

我已经在 sql developer 上启动了这个查询,没有错误。

    insert into
    COMUNICAZIONI_TEMPLATE (ID, DESCRIZIONE, TESTO_TEMPLATE)
values
    (3, 'TEMPLATE EMAIL NUOVO DOCUMENTO', 'Gentile <strong>$nome $cognome</strong>, <br>
Document list:
<br>
#foreach($doc in $listaDocumentiAssociatiATaleCf)
<strong>$doc.getNomeDocumento()</strong> relativo/a al contratto  <strong>$doc.getNomeProdotto() </strong>, polizza numero <strong>$doc.getNumeroPolizza() </strong> <br>
#end
<br>');

但是当我使用 sqlplus 启动它时,出现以下错误:

SP2-0734:以“foreach($d...”开头的未知命令 - 忽略行的其余部分。
SP2-0042:未知命令“结束” - 忽略行的其余部分。

有没有办法忽略字符串中的特殊字符'#'?

【问题讨论】:

  • sql代码合法,应该是sql developer有问题。 db小提琴here

标签: sql oracle oracle-sqldeveloper sqlplus


【解决方案1】:

这就是你现在拥有的:

SQL> select * from comunicazioni_template;

no rows selected

SQL> insert into
  2      COMUNICAZIONI_TEMPLATE (ID, DESCRIZIONE, TESTO_TEMPLATE)
  3  values
  4      (3, 'TEMPLATE EMAIL NUOVO DOCUMENTO', 'Gentile <strong>$nome $cognome</strong>, <br>
  5  Document list:
  6  <br>
  7  #foreach($doc in $listaDocumentiAssociatiATaleCf)
SP2-0734: unknown command beginning "foreach($d..." - rest of line ignored.
  7  <strong>$doc.getNomeDocumento()</strong> relativo/a al contratto  <strong>$doc.getNomeProdotto() </strong>, polizza numero <strong>$doc.getNumeroPolizza() </strong> <br>
  8  #end
SP2-0042: unknown command "end" - rest of line ignored.
  8  <br>');

1 row created.

SQL> select length(testo_template) from comunicazioni_template;

LENGTH(TESTO_TEMPLATE)
----------------------
                   240

行实际上是插入的,但有错误。

为什么会这样?因为您遇到了SQLPREFIX 问题

设置 SQL*Plus 前缀字符。在输入 SQL 命令或 PL/SQL 块时,可以在单独的行中输入 SQL*Plus 命令,并以 SQL*Plus 前缀字符为前缀。 SQL*Plus 将立即执行命令,而不会影响您正在输入的 SQL 命令或 PL/SQL 块。前缀字符必须是非字母数字字符。

默认情况下,哈希 #SQLPREFIX 字符。因此,将其更改为不同的内容(您插入的值中没有的内容,例如 !),然后重复该操作:

SQL> rollback;

Rollback complete.

SQL> set sqlprefix "!"
SQL> insert into
  2      COMUNICAZIONI_TEMPLATE (ID, DESCRIZIONE, TESTO_TEMPLATE)
  3  values
  4      (3, 'TEMPLATE EMAIL NUOVO DOCUMENTO', 'Gentile <strong>$nome $cognome</strong>, <br>
  5  Document list:
  6  <br>
  7  #foreach($doc in $listaDocumentiAssociatiATaleCf)
  8  <strong>$doc.getNomeDocumento()</strong> relativo/a al contratto  <strong>$doc.getNomeProdotto() </strong>, polizza numero <strong>$doc.getNumeroPolizza() </strong> <br>
  9  #end
 10  <br>');

1 row created.

SQL> select length(testo_template) from comunicazioni_template;

LENGTH(TESTO_TEMPLATE)
----------------------
                   295

SQL>

对;没有更多错误,现在应该是长度(295 个字符)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 2022-10-22
    • 2015-11-27
    相关资源
    最近更新 更多