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.