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

Menggunakan variabel ikat di SQL Plus dengan lebih dari satu baris yang dikembalikan?

Mirip dengan pendekatan @ Glenn, tetapi Anda dapat mendeklarasikan variabel bind di SQL*Plus dan menggunakannya dalam kueri SQL biasa. Deklarasikan terlebih dahulu dengan var[iable] perintah:

variable comment_id number;

Kemudian atur dengan exec[ute] perintah, yang pada dasarnya adalah blok anonim:

execute :comment_id := 3052753;

Kemudian jalankan kueri asli Anda dengan :comment_id referensi, dan tidak ada BEGIN atau END :

select e.label as doc_name,
                       e.url,
                       i.item_id,
                       'multi' as form_type
                from cr_items i, cr_extlinks e
                where i.parent_id = :comment_id
                and e.extlink_id = i.item_id
               UNION
                select null as doc_name,
                       utl_raw.cast_to_varchar2(DBMS_LOB.SUBSTR(r.content, 2000, 1))  as url,
                       r.item_id,
                       'single' as form_type
                from cr_revisions r
                where r.revision_id = ( select content_item.get_latest_revision(:comment_id) from dual);

Saya tidak berpikir ada banyak perbedaan fungsional antara dua pendekatan di luar preferensi pribadi, dan keduanya juga berfungsi di SQL Developer (ketika dijalankan sebagai skrip). Saya merasa ini lebih mudah ketika menjalankan SQL yang disalin dari file Pro*C yang sudah menggunakan : bind form, murni karena Anda tidak perlu mengubah kode sama sekali.

Kebetulan, Anda dapat menulis:

where r.revision_id = ( select content_item.get_latest_revision(:comment_id) from dual)

tanpa tambahan select , sebagai:

where r.revision_id = content_item.get_latest_revision(:comment_id)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle DB Server + APEX + ORDS + JasperReports dari awal (Bagian 4)

  2. Ketika saya memanggil PreparedStatement.cancel() dalam aplikasi JDBC, apakah itu benar-benar mematikannya di database Oracle?

  3. Oracle:Menggunakan subquery dalam pemicu

  4. SQL Oracle - Menggabungkan baris berurutan dengan filter

  5. Apa metode terbaik untuk selalu mendapatkan 2 tempat desimal di Oracle?