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

时间:2019-07-17 06:24:54

标签: oracle plsql

我具有以下类型的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,..... 这些名字中没有一个是单引号,也不知道是哪个。我想在这里转义单引号。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

使用 q报价机制(例如

)对其进行转义
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>