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.