如何在字符串中转义单引号?
如何在字符串中转义单引号?
我有一个如下类型的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其中一个名称包含单引号,但不确定是哪个。我想在这里转义单引号。
问题的原因是在字符串中使用单引号时可能会导致语法错误。解决方法是使用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>
我已经修改了我的回答,请看一下。