복붙노트

[SQL] 에 "&"가 포함 된 문자열을 삽입하는 방법

SQL

에 "&"가 포함 된 문자열을 삽입하는 방법

어떻게 및 문자를 포함하는 삽입 문을 작성할 수 있습니다? 예를 들어, 나는 데이터베이스에 컬럼에 "J & J 건설"을 삽입하기를 원한다면.

나는 확실히 그 차이가 있는지 모르겠지만, 오라클 9i에 사용하고 있습니다.

해결법

  1. ==============================

    1.나는 이것을 잊고 다시 다시오고 계속! 나는 최선의 대답은 지금까지 제공 한 응답의 조합이라고 생각합니다.

    나는 이것을 잊고 다시 다시오고 계속! 나는 최선의 대답은 지금까지 제공 한 응답의 조합이라고 생각합니다.

    첫째, 변수 접두사 SQLPLUS / sqldeveloper, 따라서 문제는 -이 나타나면,이 변수 이름의 일부가 될 것으로 예상된다.

    SET는 & 이런 식으로 해석 SQLPLUS 중지됩니다 OFF DEFINE.

    하지만 당신은 사용 SQLPLUS 변수와 문자 및 문자에 무엇을해야하는 경우?

    EG

    set define on
    set escape on
    
    define myvar=/forth
    
    select 'back\\ \& &myvar' as swing from dual;
    

    생성합니다 :

    old   1: select 'back\\ \& &myvar' from dual
    new   1: select 'back\ & /forth' from dual
    
    SWING
    --------------
    back\ & /forth
    

    당신은 다른 이스케이프 문자를 사용하려면 :

    set define on
    set escape '#'
    
    define myvar=/forth
    
    select 'back\ #& &myvar' as swing from dual;
    

    특정 이스케이프 문자를 설정할 때 'SP2-0272 : 이스케이프 문자가 숫자 또는 공백이 될 수 없습니다'가 표시 될 수 있습니다. 이것은 아마도 당신은 이미 정의 된 이스케이프 문자를 의미하며, 상황이 끔찍하게 자기 참조 얻는다. 이 문제를 피할 수있는 깨끗한 방법은 우선 설정 탈출하는 것입니다 :

    set escape off
    set escape '#'
    
  2. ==============================

    2.당신은 SQLPLUS 사용에서 그 일을하는 경우

    당신은 SQLPLUS 사용에서 그 일을하는 경우

    SET DEFINE OFF  
    

    그것은 & 특별한 경우로 밟고 정지

  3. ==============================

    3.또 다른 솔루션을 사용하여 연결하고, CHR 기능 :

    또 다른 솔루션을 사용하여 연결하고, CHR 기능 :

    select 'J' || chr(38) || 'J Construction' from dual;
    
  4. ==============================

    4.올바른 구문은

    올바른 구문은

    set def off;
    insert into tablename values( 'J&J');
    
  5. ==============================

    5.문자열로 아스키 코드를 변환 CHR () 함수는 항상있다.

    문자열로 아스키 코드를 변환 CHR () 함수는 항상있다.

    즉. 뭔가 같은 : 에 집어 넣다 표 VALUES ( CONCAT ( 'J', CHR (38), 'J') )

  6. ==============================

    6.SET SCAN OFF는 사용되지 않습니다 http://download-uk.oracle.com/docs/cd/B10501_01/server.920/a90842/apc.htm

    SET SCAN OFF는 사용되지 않습니다 http://download-uk.oracle.com/docs/cd/B10501_01/server.920/a90842/apc.htm

  7. ==============================

    7.프로그램에서 항상 매개 변수화 된 쿼리를 사용합니다. 그것은 SQL 주입 공격뿐만 아니라 SQL 파서에 특별한 다른 문자를 피할 수 있습니다.

    프로그램에서 항상 매개 변수화 된 쿼리를 사용합니다. 그것은 SQL 주입 공격뿐만 아니라 SQL 파서에 특별한 다른 문자를 피할 수 있습니다.

  8. ==============================

    8.당신은 'J'|| '&'|| '건설'등 같은 문자열을 삽입 할 수 있습니다. 그것은 잘 작동합니다.

    당신은 'J'|| '&'|| '건설'등 같은 문자열을 삽입 할 수 있습니다. 그것은 잘 작동합니다.

    insert into table_name (col_name) values('J'||'&'||'Construction');
    
  9. ==============================

    9.

    INSERT INTO TEST_TABLE VALUES('Jonhy''s Sport &'||' Fitness')
    

    이 쿼리의 출력 : Jonhy의 스포츠 및 피트니스

  10. ==============================

    10.다음 옵션 중 하나를 사용하여 작동하는지 나는 발견했습니다 :

    다음 옵션 중 하나를 사용하여 작동하는지 나는 발견했습니다 :

    SET DEF OFF

    또는

    SET SCAN OFF

    나는 하나가 다른 것보다 더 나은 또는 "더 잘"인 경우 데이터베이스가 알고에 대해 충분히 알지 못한다. 뭔가 더 나은 다음 중 하나 이상이 있다면 또한, 알려 주시기 바랍니다.

  11. ==============================

    11.

    SET ESCAPE ON;
    INSERT VALUES("J\&J Construction") INTO custnames;
    

    (테스트되지 않은, 손에서 오라클 상자가없는 그것은 잠시왔다)

  12. ==============================

    12.당신은 SQL을 사용하는 플러스 나는 당신이 명령을 실행해야한다고 생각하는 경우

    당신은 SQL을 사용하는 플러스 나는 당신이 명령을 실행해야한다고 생각하는 경우

    SET SCAN OFF
    
  13. ==============================

    13.정지 내가보기 엔 훨씬 더는 SQL 도구보다는이다 PL / SQL 개발자를 추천, SQL을 사용하여 / 플러스.

    정지 내가보기 엔 훨씬 더는 SQL 도구보다는이다 PL / SQL 개발자를 추천, SQL을 사용하여 / 플러스.

    추신. 어떤 사람들은 두꺼비를 선호합니다.

  14. ==============================

    14.앤드류을 봐 :

    앤드류을 봐 :

    "J & J 건설"

    SELECT CONCAT('J', CONCAT(CHR(38), 'J Construction')) FROM DUAL;
    
  15. from https://stackoverflow.com/questions/152837/how-to-insert-a-string-which-contains-an by cc-by-sa and MIT license