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

Saya ingin meneruskan argumen variabel ke file SQL eksternal (PL/SQL dengan SQL*Plus)

@ adalah perintah SQL*Plus , itu tidak memiliki arti dalam PL/SQL. Skrip Anda disertakan dalam blok PL/SQL pada waktu penguraian, yang dapat Anda lihat jika Anda list kode dalam buffer. Variabel yang dideklarasikan di blok kontrol Anda tersedia untuk kode 'disertakan' secara langsung, tanpa perlu diganti.

Sebagai contoh, jika uitvoer.sql hanya berisi:

dbms_output.put_line(v_s);

Kemudian skrip kontrol ini:

set serveroutput on
declare
  v_s varchar2(10) := 'Test';
begin
  @uitvoer.sql
end;
/

list

Menghasilkan:

Test

PL/SQL procedure successfully completed.

  1  declare
  2    v_s varchar2(10) := 'Test';
  3  begin
  4  dbms_output.put_line(v_s);
  5* end;

Blok PL/SQL dalam buffer memiliki kode yang disertakan, bukan referensi ke uitvoer.sql . Tetapi kode yang disertakan berfungsi karena merujuk ke variabel dari skrip kontrol yang masih dalam cakupan.

Jika Anda ingin mengizinkan variabel kontrol memiliki nama yang berbeda, izinkan uitvoer.sql untuk dipanggil lebih fleksibel mungkin, maka Anda masih dapat menggunakan variabel substitusi, tetapi Anda masih mengganti nama variabel, bukan nilainya. Misalnya, dengan uitvoer.sql ini (perhatikan bahwa penetapan variabel substitusi tidak memiliki kutipan di sekitarnya):

declare
  variable_s varchar2(10);
begin
  variable_s := &&1;
  dbms_output.put_line(variable_s);
end;

Dan skrip kontrol Anda meneruskan nama variabel:

declare
  v_s varchar2(10) := 'Test';
begin
  @uitvoer.sql v_s
end;
/

Anda melihat:

old   7:   variable_s := &&1;
new   7:   variable_s := v_s;
Test

PL/SQL procedure successfully completed.

  1  declare
  2    v_s varchar2(10) := 'Test';
  3  begin
  4  declare
  5    variable_s varchar2(10);
  6  begin
  7    variable_s := &&1;
  8    dbms_output.put_line(variable_s);
  9  end;
 10* end;



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Contoh Fungsi Oracle (Nomor Pengembalian)

  2. Bagaimana cara membuat urutan Oracle yang dimulai dengan nilai maksimal dari sebuah tabel?

  3. Tidak dapat menghapus dalam database karena kendala

  4. Penyedia Oracle untuk Oledb hilang di VS 2015 Shell

  5. jar jdbc apa yang digunakan dengan oracle 11g &jdk 1.6 dan bagaimana menghubungkan ke db itu sendiri