Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Mendeklarasikan &Mengatur Variabel dalam Pernyataan Pilih

Dari pencarian yang saya lakukan, tampaknya Anda tidak dapat mendeklarasikan dan mengatur variabel seperti ini dalam pernyataan Select. Apakah ini benar atau saya melewatkan sesuatu?

Dalam Oracle PL/SQL dan SQL adalah dua bahasa terpisah dengan dua mesin terpisah. Anda dapat menyematkan SQL DML dalam PL/SQL, dan itu akan memberi Anda variabel. Seperti blok PL/SQL anonim berikut. Perhatikan / pada akhirnya bukan bagian dari PL/SQL, tetapi memberitahu SQL*Plus untuk mengirim blok sebelumnya.

declare 
    v_Date1 date := to_date('03-AUG-2010', 'DD-Mon-YYYY');
    v_Count number;
begin
    select count(*) into v_Count
    from Usage
    where UseTime > v_Date1;
    dbms_output.put_line(v_Count);
end;
/

Masalahnya adalah blok yang setara dengan kode T-SQL Anda tidak akan berfungsi:

SQL> declare 
  2      v_Date1 date := to_date('03-AUG-2010', 'DD-Mon-YYYY');
  3  begin
  4      select VisualId
  5      from Usage
  6      where UseTime > v_Date1;
  7  end;
  8  /
    select VisualId
    *
ERROR at line 4:
ORA-06550: line 4, column 5:
PLS-00428: an INTO clause is expected in this SELECT statement

Untuk melewatkan hasil kueri dari PL/SQL, baik blok anonim, prosedur tersimpan, atau fungsi tersimpan, kursor harus dideklarasikan, dibuka, dan kemudian dikembalikan ke program pemanggil. (Di luar cakupan menjawab pertanyaan ini. EDIT: lihat Mendapatkan hasil dari prosedur tersimpan Oracle)

Alat klien yang terhubung ke database mungkin memiliki variabel pengikatnya sendiri. Dalam SQL*Plus:

SQL> -- SQL*Plus does not all date type in this context
SQL> -- So using varchar2 to hold text
SQL> variable v_Date1 varchar2(20)
SQL>
SQL> -- use PL/SQL to set the value of the bind variable
SQL> exec :v_Date1 := '02-Aug-2010';

PL/SQL procedure successfully completed.

SQL> -- Converting to a date, since the variable is not yet a date.
SQL> -- Note the use of colon, this tells SQL*Plus that v_Date1
SQL> -- is a bind variable.
SQL> select VisualId
  2  from Usage
  3  where UseTime > to_char(:v_Date1, 'DD-Mon-YYYY');

no rows selected

Perhatikan di atas dalam SQLPlus, mungkin tidak (mungkin tidak akan) bekerja di pengembang Toad PL/SQL, dll. Baris yang dimulai dengan variabel dan exec adalah SQL Ditambah perintah. Itu bukan perintah SQL atau PL/SQL. Tidak ada baris yang dipilih karena tabel kosong.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mengikat parameter kueri berdasarkan nama dengan ODP.NET

  2. Encoding dan decoding Base64 di Oracle

  3. Cara menghapus semua item yang di-cache di Oracle

  4. nhibernate, panggil fungsi di Oracle yang mengembalikan refcursor sys

  5. Cara Mencadangkan RAC VM