Oracle에서 문자열을 특정 API와 호환되는 수정 된 문자열로 변환하려고합니다.Oracle에서 비영 숫자 문자 대체
모든 영숫자를 그대로두고 모든 공백을 + 문자로 바꾸고 모든 특수 문자를 %와 (과) 16 진 코드로 바꿔야합니다.
프로젝트 1 예
: 너트 & 볼트26 개 + 볼트
프로젝트 + 1 % 3A + 너트 + %가되어야 어떤 방법이 SQL 만 사용하여이 작업을 수행할까요?
Oracle에서 문자열을 특정 API와 호환되는 수정 된 문자열로 변환하려고합니다.Oracle에서 비영 숫자 문자 대체
모든 영숫자를 그대로두고 모든 공백을 + 문자로 바꾸고 모든 특수 문자를 %와 (과) 16 진 코드로 바꿔야합니다.
프로젝트 1 예
: 너트 & 볼트26 개 + 볼트
프로젝트 + 1 % 3A + 너트 + %가되어야 어떤 방법이 SQL 만 사용하여이 작업을 수행할까요?
나는 replace
중첩 코드없이 일반 SQL을 사용할 수 있다고 생각하지 않는다. 당신은 utl_url.escape()
function와 샘플 값을 얻을 수 있습니다,하지만 당신은 그것을 두 번째 매개 변수를 전달해야하고 그 부울이기 때문에, 당신은 PL/SQL 블록에서 그것을 할 수 있습니다
set define off
begin
dbms_output.put_line(replace(utl_url.escape('Project 1: Nuts & Bolts', true),
'%20', '+'));
end;
/
Project+1%3A+Nuts+%26+Bolts
url_utl.escape
기능은 변환 %20
에 공간 :
Project%201%3A%20Nuts%20%26%20Bolts
... 그리고 하나의 replace
호출이 +
에 사람들을 변환합니다. 에드 깁스 말했듯이
, 당신은 당신이 적어도 일반 SQL에서이 함수를 호출 할 수 있도록 있는지 확인 할 수 있습니다
create or replace function my_escape(str in varchar2) return varchar2 is
begin
return replace(utl_url.escape(str, true), '%20', '+');
end;
/
set define off
select my_escape('Project 1: Nuts & Bolts') from dual;
MY_ESCAPE('PROJECT1:NUTS&BOLTS')
--------------------------------
Project+1%3A+Nuts+%26+Bolts
을 당신은 아마 법적, 예약 문자를 확인해야하는 것은 다른 어떤이가 있는지 나열 특별한 취급이 필요합니다.
(내 클라이언트가 앰퍼샌드를 대체 변수로 사용하는 것을 막기 위해 set define off
을 사용 했으므로 JDBC를 통해 호출하는 경우와 같이 클라이언트 또는 응용 프로그램이 필요하지 않을 수 있습니다).
설명서 링크를 수정할 수 있습니까? 그것의 작동하지 않습니다 – XING
@Raj_Te - 완료; 오라클의 문서 링크로 많은 일이 발생합니다. 나는 종종 오래된 답변을 다른 사람들이 편집하여 수정하는 것을 보았습니다. 따라서 어떤 사람이든 만나게되면 자유롭게 생각하십시오. –
하나 더 수정. 블록이나 쿼리를 실행하면 입력 리터럴을 묻습니다. 따라서 처음에 "set define off"를 선언하거나 입력 문자열을 === 'Project 1 : Nuts'|| '&'|| '로 수정해야합니다. Bolts '==== – XING
apex_util.url_encode가 작동합니다.
"REPLACE"함수 호출을 중첩하는 것 이외의 방법은 모르지만 각 문자 변환에 하나씩 포함됩니다. 'TRANSLATE' 함수는 탄력있게 닫히지 만 한 문자를 다른 한 문자로만 대체 할 수 있습니다. 나는 당신이 사용자 정의 함수를 고수하고 있다고 생각하지만 일단 SQL을 쉽게 호출 할 수있다. –