Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Chcę przekazać zmienną argument do zewnętrznego pliku SQL (PL/SQL z SQL*Plus)

@ to polecenie SQL*Plus , nie ma to znaczenia w PL/SQL. Twój skrypt jest włączany do bloku PL/SQL w czasie analizy, co możesz zobaczyć, jeśli list kod w buforze. Zmienne zadeklarowane w bloku kontrolnym są dostępne bezpośrednio w kodzie dołączonym, bez konieczności podstawiania.

Na przykład, jeśli uitvoer.sql zawiera tylko:

dbms_output.put_line(v_s);

Następnie ten skrypt sterujący:

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

list

Produkuje:

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 w buforze zawiera dołączony kod, nie odwołanie do uitvoer.sql . Ale dołączony kod zadziałał, ponieważ odwoływał się do zmiennej ze skryptu sterującego, która wciąż była w zakresie.

Jeśli chcesz zezwolić na zmienne kontrolne mające różne nazwy, zezwól na uitvoer.sql być wywoływana bardziej elastycznie, wtedy nadal można używać zmiennych podstawień, ale nadal zastępujesz nazwę zmiennej, a nie jej wartość. Na przykład za pomocą tego uitvoer.sql (zauważ, że przypisanie zmiennej podstawienia nie) otoczone cytatami):

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

A twój skrypt sterujący przekazuje nazwę zmiennej:

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

Widzisz:

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. Aktualizowanie widoku sprzężenia bez otrzymywania błędu niezachowania klucza

  2. Usuwanie wierszy z ograniczeniami klucza obcego

  3. znaki arabskie w bazie danych Oracle

  4. Nie można utworzyć źródła danych Eclipse do Oracle 12c przy użyciu 12c jar. Jednak 11g działa

  5. Oracle SQL porównuje rekordy w tabeli