【问题标题】:How to escape single quote in a string? [duplicate]如何转义字符串中的单引号? [复制]
【发布时间】:2019-11-25 22:09:10
【问题描述】:

我有一个以下类型的 pl-sql 过程:

BEGIN
p_name_all  VARCHAR2(20000 CHAR) ;
 ... 
 ...
 FOR name_rec IN name_cur
 LOOP
 IF (p_name_all IS NULL)
 p_name_all := '//' || name_rec.NAME || '//';  
 select RTRIM('p_name_all','//') from dual;
 ....
 ....
END IF
END LOOP
END

当我尝试执行上述 pl-sql 过程时,它崩溃了。所以我发现在遍历名称时,其中一个名称有一个单引号,这就是我面临问题的原因。在这种情况下如何转义单引号。

name.rec 有 name1, name2,name3 , ..... 在这些名称中,有单引号,但不确定是哪一个。我想在这里转义单引号。

【问题讨论】:

  • 不,这不是重复我的问题有点不同

标签: oracle plsql


【解决方案1】:

在字符串中的引号中添加一个单引号,例如 - > 不是吗?

【讨论】:

  • 有多个我们不知道的名称,我们将通过分配给一个变量来遍历名称,在这种情况下,当您不知道该字符串时,您将如何转义单引号。我们需要使用变量 p_name_all 来转义单引号
【解决方案2】:

q-quoting机制转义,比如

p_name_all := q'[blabla'''blabla]';

或者,在您的示例中(顺便说一下,这是无效的,因为它错过了 declare 部分,而 select 需要 into 子句):

DECLARE
   p_name_all  VARCHAR2 (20000 CHAR)
      := q'[Yun?i?e? Ki?ga?am//Birtaniya//Aupuni M?'? Hui P? 'ia//???????//Britania//Yun?ited Kingdam//???????? ??????//Egyesült Királyság//Aialand Ugwu//Bretland]';
   l_result    VARCHAR2 (20000 CHAR);
BEGIN
   SELECT RTRIM (p_name_all, '//') INTO l_result FROM DUAL;
END;

[编辑]

嗯......不 - 恐怕你弄错了。 NAME 中的单引号不应该有任何问题。这是一个工作示例,它显示了您应该如何完成它(至少,我是如何理解这个问题的):

SQL> create table test (col varchar2(20));

Table created.

SQL> insert into test values ('littlefoot');

1 row created.

SQL> insert into test values ('big''foot');

1 row created.

SQL> set serveroutput on
SQL> declare
  2    p_name_all varchar2(1000);
  3  begin
  4    for name_rec in (select col name from test) loop
  5      p_name_all := p_name_all || '//' || name_rec.name ;
  6    end loop;
  7
  8    p_name_all := rtrim(p_name_all, '//');
  9    dbms_output.put_line('Result: ' || p_name_all);
 10  end;
 11  /
Result: //littlefoot//big'foot

PL/SQL procedure successfully completed.

SQL>

【讨论】:

  • 我已经重新构建了我的问题
  • 我也编辑了我的答案;请看一下。
猜你喜欢
  • 2023-04-02
  • 2013-03-12
  • 2014-09-28
  • 1970-01-01
  • 2023-03-21
  • 2021-04-14
相关资源
最近更新 更多