如何在字符串中转义单引号?

14 浏览
0 Comments

如何在字符串中转义单引号?

我有一个如下类型的PL-SQL存储过程:\n

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

\n当我尝试执行上述PL-SQL存储过程时,它崩溃了。所以我发现在遍历名称时,有一个名称包含单引号,这就是我遇到问题的原因。在这种情况下,如何转义单引号。\nname_rec中包含name1、name2、name3等名称。\n其中一个名称包含单引号,但不确定是哪个。我想在这里转义单引号。

0
0 Comments

问题的原因是在字符串中使用单引号时可能会导致语法错误。解决方法是使用q-quoting机制来转义单引号。

例如, 可以使用以下方式来转义单引号:

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

另外,在下面的示例中(该示例缺少declare部分,而select语句需要into子句),也可以使用q-quoting机制来转义单引号:

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;

编辑补充:

在编辑中,我认为你理解错了。在名称中的单引号不应该造成任何问题。以下是一个工作示例,展示了你应该如何解决问题(至少是我理解的问题解决方法):

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>

我已经修改了我的回答,请看一下。

0
0 Comments

在字符串中添加一个额外的单引号,如-> isn''t it?

当我们不知道有多少个名称并且需要通过将其赋值给一个变量来循环遍历这些名称时,如果你不知道字符串中的单引号如何转义,你该怎么办?我们需要使用变量p_name_all来转义单引号。

0