SQL Plus'tan çalıştırılan bir SQL komut dosyasındaki ve işaretlerini nasıl yoksayarım?


105

Ve işareti (&) içeren bir açıklamayla paket oluşturan bir SQL betiğim var. Komut dosyasını SQL Plus'tan çalıştırdığımda, & ile başlayan dize için bir yedek değer girmem isteniyor. SQL Plus'ın ve işaretini yok sayması için bu özelliği nasıl devre dışı bırakırım?

Yanıtlar:


182

Bu sizin için çalışabilir:

set define off

Aksi takdirde ve işaretinin bir dizenin sonunda olması gerekir,

'StackOverflow &' || ' you'

DÜZENLEME: Kaydederken tıklama mutlu oldum ... Buna bir blogdan referans verildi .


2
Bunu glogin.sql site profili kurulum dosyasında veya login.sql kullanıcı profili kurulum dosyasında da belirtebilirsiniz
David Aldridge

İkame değişkenlerle ilgilenmiyorsanız bu en basit çözümdür.
Drumbeg

Her zaman hayat kurtaran bir çözüm :) Teşekkürler.
Anjana Silva

25

Bazen ikame değişkenleri kullanıyorsanız, tanımlamayı kapatmak istemeyebilirsiniz. Bu durumlarda, ve işaretini olduğu gibi sayısal eşdeğerinden dönüştürebilir || Chr(38) ||veya olduğu gibi tek bir karakter olarak ekleyebilirsiniz || '&' ||.


Spesifik senaryo, kaynağında bir yorumda "ve" işareti bulunan bir pakettir. Bunun için birleştirme veya ikameyi nasıl kullanacağımı anlamıyorum.
JoshL

JoshL, haklısın Bunu tamlık için listeledim. Sorunuza doğrudan cevap vermese de sorunuzla ilgilidir.
Leigh Riffel

Aslında bana yardımcı oldu.
Archimedes Trajano

13

Aşağıdaki kodla çözdüm:

set escape on

ve sol tarafın yanına bir \ işareti koyun 'value_\&_intert'

Att


Bu benim için çalıştı. Komutu kullanıyordum comment on column tablename.columnname is 'war ' || chr(38) || ' peace'ama bana hata veriyordu ORA-01780: string literal required.
mrswadge

6

Komut dosyası çalıştırıldığında aranan özel karakteri başka bir değere set etmek için SET DEFINE <1_CHARACTER>

Varsayılan olarak, DEFINE işlevinin kendisi açıktır ve & olarak ayarlanmıştır.

Kapatılabilir - daha önce de belirtildiği gibi - ancak farklı bir değere ayarlanarak da önlenebilir. Hangi işarete koyduğunuzun çok farkında olun. Aşağıdaki örnekte, # karakterini seçtim, ancak bu seçim sadece bir örnek.

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
Bu yaklaşımı son zamanlarda kendim de kullandım. PL / SQL paketlerimin içeriğini değiştirmemi gerektirmediği için beğendim.
Drumbeg

3

set define off <- Bulduğum en iyi çözüm bu

Ben de denedim ...

tanımla} ayarla

"&" "Ve" karakterlerini içeren birkaç kayıt ekleyebildim ancak metne "}" karakterini kullanamıyorum. Bu yüzden "set define off" kullanmaya karar verdim ve her şey olması gerektiği gibi çalışıyor.


2

Göre bu güzel SSS birkaç çözüm var.

Açıklamayı \değiştirebiliyorsanız, ters eğik çizgi karakteriyle ve işaretinden de çıkabilirsiniz.


2
Ters eğik çizgi kaçışı SQL * Plus veya SQLDeveloper'da çalışmıyor
Jim Tough

2
@JimTough Etkinleştirdikten sonra yaparset escape on
David Balažic

0

WHEN sütun = 'sometext & more text' THEN .... ile bir CASE deyimim vardı.

Onu WHEN column = 'sometext' || ile değiştirdim CHR (38) || 'daha fazla metin' SONRA ...

Ayrıca NE ZAMAN sütununu LIKE 'sometext _ daha fazla metin' OLARAK ...

(_ tek bir karakter için joker karakterdir)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.