Saya ingin menulis kode yang dapat digunakan kembali dan perlu mendeklarasikan beberapa variabel di awal dan menggunakannya kembali dalam skrip, seperti:
DEFINE stupidvar = 'stupidvarcontent';
SELECT stupiddata
FROM stupidtable
WHERE stupidcolumn = &stupidvar;
Bagaimana saya bisa mendeklarasikan variabel dan menggunakannya kembali dalam pernyataan yang mengikuti seperti dalam menggunakannya SQLDeveloper.
Mencoba
- Gunakan bagian DECLARE dan masukkan pernyataan SELECT berikut di
BEGIN
danEND;
. Akses variabel menggunakan&stupidvar
. - Gunakan kata kunci
DEFINE
dan akses variabel. - Menggunakan kata kunci
VARIABLE
dan mengakses variabel.
Tapi saya mendapatkan semua jenis kesalahan selama percobaan saya (variabel Tidak terikat, kesalahan Sintaks, Diharapkan SELECT INTO
...).
sql
oracle
variables
declaration
bl4ckb0l7
sumber
sumber
Jawaban:
Ada beberapa cara mendeklarasikan variabel dalam skrip SQL * Plus.
Yang pertama adalah menggunakan VAR, untuk mendeklarasikan variabel bind. Mekanisme untuk menetapkan nilai ke VAR adalah dengan panggilan EXEC:
VAR sangat berguna ketika kita ingin memanggil prosedur tersimpan yang memiliki parameter atau fungsi OUT.
Atau kita bisa menggunakan variabel substitusi. Ini bagus untuk mode interaktif:
Ketika kita sedang menulis sebuah skrip yang memanggil skrip lain, akan sangat berguna untuk mendefinisikan variabel di muka. Cuplikan ini berjalan tanpa meminta saya untuk memasukkan nilai:
Akhirnya ada blok PL / SQL anonim. Seperti yang Anda lihat, kami masih dapat menetapkan nilai ke variabel yang dideklarasikan secara interaktif:
sumber
Coba gunakan tanda kutip ganda jika itu variabel char:
atau
upd:
sumber
ORA-01008: not all variables bound
.DEFINE num = 1; SELECT &num FROM dual;
mengarah ke:ORA-01008: not all variables bound
Dalam PL / SQL v.10
kata kunci menyatakan digunakan untuk mendeklarasikan variabel
untuk menetapkan nilai, Anda dapat mengaturnya saat Anda mendeklarasikan
atau untuk memilih sesuatu ke dalam variabel yang Anda gunakan
INTO
pernyataan, namun Anda harus memasukkan pernyataanBEGIN
danEND
, juga Anda perlu memastikan bahwa hanya nilai tunggal yang dikembalikan, dan jangan lupa titik koma.jadi pernyataan lengkapnya akan keluar sebagai berikut:
Variabel Anda hanya dapat digunakan di dalam
BEGIN
danEND
jadi jika Anda ingin menggunakan lebih dari satu, Anda harus melakukan beberapaBEGIN END
pembungkusSemoga ini menghemat waktu Anda
sumber
Jika Anda ingin mendeklarasikan tanggal dan kemudian menggunakannya dalam SQL Developer.
sumber
Hanya ingin menambahkan jawaban Matas . Mungkin sudah jelas, tapi saya sudah lama mencari untuk mengetahui bahwa variabel hanya dapat diakses di dalam konstruksi BEGIN-END , jadi jika Anda perlu menggunakannya dalam beberapa kode nanti, Anda harus memasukkan kode ini di dalam BEGIN -Blokir .
Perhatikan bahwa blok ini dapat disarangkan :
sumber
Pertanyaannya adalah tentang menggunakan variabel dalam skrip berarti bagi saya itu akan digunakan dalam SQL * Plus.
Masalahnya adalah Anda melewatkan tanda kutip dan Oracle tidak dapat menguraikan nilai ke angka.
Sampel ini berfungsi dengan baik karena konversi tipe otomatis (atau apa pun namanya).
Jika Anda memeriksa dengan mengetikkan DEFINE di SQL * Plus, itu akan menunjukkan bahwa variabel num adalah CHAR.
Ini bukan masalah dalam kasus ini, karena Oracle dapat menangani string parsing ke nomor jika itu akan menjadi nomor yang valid.
Ketika string tidak dapat menguraikan angka, maka Oracle tidak bisa mengatasinya.
Dengan kutipan, jadi jangan memaksa Oracle untuk menguraikan angka, akan baik-baik saja:
Jadi, untuk menjawab pertanyaan awal, harus dilakukan seperti contoh ini:
Ada cara lain untuk menyimpan variabel dalam SQL * Plus dengan menggunakan Nilai Kolom Kueri .
The COL [UMN] memiliki new_value pilihan untuk menyimpan nilai dari query dengan nama field.
Seperti yang Anda lihat, nilai X.log diatur ke dalam variabel stupid_var , sehingga kita dapat menemukan file X.log di direktori saat ini memiliki beberapa login di dalamnya.
sumber
Inilah jawaban Anda:
sumber
Di Toad saya menggunakan karya ini:
Maka nilainya akan dicetak ke
DBMS Output
Window.Referensi ke sini dan sini2 .
sumber
Terkadang Anda perlu menggunakan variabel makro tanpa meminta pengguna untuk memasukkan nilai. Paling sering ini harus dilakukan dengan parameter skrip opsional. Kode berikut berfungsi penuh
Kode serupa entah bagaimana ditemukan di direktori rdbms / sql.
sumber
Salah satu pendekatan yang mungkin, jika Anda hanya perlu menentukan parameter sekali dan mereplikasi di beberapa tempat, adalah melakukan sesuatu seperti ini:
Kode ini menghasilkan string 8 digit acak.
Perhatikan bahwa saya membuat semacam alias bernama
str_size
yang memegang konstanta8
. Ini bergabung-silang untuk digunakan lebih dari sekali dalam kueri.sumber