programing

PLSQL에서 단일 따옴표 이스케이프

megabox 2023. 7. 3. 22:39
반응형

PLSQL에서 단일 따옴표 이스케이프

PLSQL이 다음과 같은 문자열을 생성하기를 원합니다.

COMMENT ON COLUMN TABLE.COLUMN IS 'comment from database';

내 솔루션은 다음과(와)

declare
  str_comment varchar2(4000);
begin
  for rec in (select table_name, column_name, description from description_table)
  loop
    str_comment:='COMMENT ON COLUMN '||rec.table_name||'.'||rec.column_name||'  IS '''||rec.description||'''; ' ;
    dbms_output.put_line(str_comment);
  end loop;
end;

출력에 단일 쿼트가 포함되지 않은 경우 정상입니다.rec.description그렇지 않으면 탈출 편지가 필요합니다.어떻게 구현해야 합니까?

OK 출력 라인(단일 쿼트를 보존하기 위한 이스케이프 문자가 있습니다):

COMMENT ON COLUMN TABLE1.COLUMN1_LV  IS 'It''s secret';

단일 따옴표에 대한 이스케이프 문자가 추가되지 않고 컴파일되지 않으므로 NOK 출력 행이 아님:

COMMENT ON COLUMN TABLE1.COLUMN1_LV  IS 'It's secret';

제 해결책은 설명에 단일 따옴표가 포함되어 있는지 확인하지 않는 것입니다.생성하기 전에 소스(설명) 열의 단일 따옴표를 두 개의 단일 따옴표로 바꿉니다.COMMENT ON현악기 그리고 나ROLLBACK.

더 좋은 해결책은?

저는 이런 정렬 작업을 상당히 많이 합니다(보통 삽입/업데이트 문 생성).

교체 기능을 사용하여 모든 스위치를 돌리면 됩니다.'안으로''즉, 다음으로 변경:

str_comment:='COMMENT ON COLUMN '||rec.table_name||'.'||rec.column_name
            ||' IS '''||REPLACE( rec.description,'''','''''')||'''; ' ;

다음과 같이 견적 연산자를 사용할 수 있습니다.

str_comment:='COMMENT ON COLUMN '||rec.table_name||'.'||rec.column_name||' IS q''[' ||rec.description|| ']'';' ;

http://psoug.org/reference/string_func.html 을 참조하십시오.

사용REPLACE기능을 선택합니다.

declare
str_comment varchar2(4000);
begin
for rec in (SELECT table_name, column_name, REPLACE(description, '''', '''''') 
                FROM description_table)
loop
str_comment:='COMMENT ON COLUMN ' || rec.table_name || '.' 
                 ||rec.column_name|| ' IS ''' ||rec.description|| '''; ' ;
dbms_output.put_line(str_comment);
end loop;
end;

코드에서 '를 사용해야 하지만 실제 코드로 시도하기 전에

듀얼에 따옴표가 있는 행을 시도합니다.

예:

select '''sumesh''' from dual

언급URL : https://stackoverflow.com/questions/6678478/escaping-single-quote-in-plsql

반응형