SQL Plus에서 실행되는 SQL 스크립트에서 앰퍼샌드를 무시하려면 어떻게합니까?


104

앰퍼샌드 (&)가 포함 된 주석이있는 패키지를 만드는 SQL 스크립트가 있습니다. SQL Plus에서 스크립트를 실행할 때 &로 시작하는 문자열에 대한 대체 값을 입력하라는 메시지가 표시됩니다. SQL Plus가 앰퍼샌드를 무시하도록이 기능을 비활성화하려면 어떻게합니까?

답변:


181

이것은 당신을 위해 일할 수 있습니다.

set define off

그렇지 않으면 앰퍼샌드가 문자열 끝에 있어야합니다.

'StackOverflow &' || ' you'

편집 : 저장할 때 클릭 만족했습니다 ... 이것은 블로그 에서 참조되었습니다 .


2
glogin.sql 사이트 프로필 설정 파일 또는 login.sql 사용자 프로필 설정 파일에서 지정할 수도 있습니다
— David Aldridge

대체 변수에 관심이없는 경우 가장 간단한 솔루션입니다.
— Drumbeg 2015

항상 생명을 구하는 솔루션 :) 감사합니다.
— Anjana Silva

25

가끔 대체 변수를 사용하는 경우 정의를 끄고 싶지 않을 수 있습니다. 이 경우 앰퍼샌드를 in과 같은 숫자에서 변환 || Chr(38) ||하거나 에서와 같이 단일 문자로 추가 할 수 || '&' ||있습니다.


특정 시나리오는 소스가 주석에 앰퍼샌드를 포함하는 패키지입니다. 나는 이것을 위해 연결이나 대체를 어떻게 사용할지 모르겠습니다.
— JoshL 2010

JoshL, 당신이 맞아요. 완전성을 위해 이것을 나열했습니다. 특정 질문에 직접 답변하지는 않지만 질문과 관련이 있습니다.
— Leigh Riffel

실제로 도움이되었습니다.
— Archimedes Trajano

13

아래 코드로 해결했습니다.

set escape on

왼쪽에 & 옆에 \를 넣으십시오. 'value_\&_intert'

Att


이것은 나를 위해 일했습니다. 명령을 사용 comment on column tablename.columnname is 'war ' || chr(38) || ' peace'했지만 오류가 발생했습니다 ORA-01780: string literal required.
— mrswadge

6

스크립트 실행시 찾는 특수 문자를 다른 값으로 설정할 수 있습니다. SET DEFINE <1_CHARACTER>

기본적으로 DEFINE 기능 자체가 켜져 있으며 & 로 설정되어 있습니다 .

이미 언급했듯이 끌 수 있지만 다른 값으로 설정하여 피할 수도 있습니다. 어떤 기호로 설정했는지 잘 알고 있어야합니다. 아래 예에서는 # 문자를 선택했지만 그 선택은 단지 예일뿐입니다.

SQL> select '&var_ampersand #var_hash' from dual;
Enter value for var_ampersand: a value

'AVALUE#VAR_HASH'
-----------------
a value #var_hash

SQL> set define #
SQL> r
  1* select '&var_ampersand #var_hash' from dual
Enter value for var_hash: another value

'&VAR_AMPERSANDANOTHERVALUE'
----------------------------
&var_ampersand another value

SQL>

1
나는 최근에이 접근 방식을 사용했습니다. PL / SQL 패키지의 내용을 변경할 필요가 없기 때문에 마음에 듭니다.
— Drumbeg

3

set define off <-이것은 내가 찾은 최고의 솔루션입니다

나는 또한 시도했다 ...

정의 설정}

앰퍼샌드 문자 '&'가 포함 된 여러 레코드를 삽입 할 수 있었지만 텍스트에 '}'문자를 사용할 수 없어서 "set define off"를 사용하기로 결정했고 모든 것이 제대로 작동합니다.


2

이 멋진 FAQ 에 따르면 몇 가지 해결책이 있습니다.

\주석을 수정할 수있는 경우 백 슬래시 문자로 앰퍼샌드를 이스케이프 할 수도 있습니다 .


2
백 슬래시 이스케이프는 SQL * 플러스 또는 SQLDeveloper에 일을하지 않습니다
— 힘든 짐

2
@JimTough은 그것을 활성화 한 후 수행set escape on
— 데이비드 Balažic

0

WHEN column = 'sometext & more text'THEN ...이 포함 된 CASE 문이 있습니다.

나는 그것을 WHEN column = 'sometext'|| CHR (38) || '더 많은 텍스트'THEN ...

WHEN 열 LIKE 'sometext _ more text'THEN ...

(_은 단일 문자에 대한 와일드 카드입니다.)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.