sql >> Databasteknik >  >> RDS >> Oracle

Jag vill skicka ett variabelt argument till extern SQL-fil (PL/SQL med SQL*Plus)

@ är ett SQL*Plus-kommando , det har ingen betydelse i PL/SQL. Ditt skript inkluderas i PL/SQL-blocket vid analystid, vilket du kan se om du list koden i bufferten. Variablerna som deklareras i ditt kontrollblock är tillgängliga för den "inkluderade" koden direkt, utan att behöva ersättas.

Som ett exempel, om uitvoer.sql innehåller bara:

dbms_output.put_line(v_s);

Sedan detta kontrollskript:

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

list

Producerar:

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;

PL/SQL-blocket i bufferten har den inkluderade koden, inte en referens till uitvoer.sql . Men den inkluderade koden fungerade eftersom den hänvisade till en variabel från kontrollskriptet som fortfarande var inom räckvidden.

Om du vill tillåta att kontrollvariablerna har olika namn, tillåter du uitvoer.sql för att kallas mer flexibelt kanske, då kan du fortfarande använda substitutionsvariabler, men du ersätter fortfarande variabelnamnet, inte dess värde. Till exempel med denna uitvoer.sql (observera att substitutionsvariabeln inte gör det har citat runt det):

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

Och ditt kontrollskript skickar variabelnamnet:

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

Du ser:

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. SQL uppdatera en kolumn från en annan kolumn i en annan tabell

  2. PHP SQL Server Output Parameter

  3. Lagrade icke-engelska tecken, fick '?????' - Problem med MySQL-teckenuppsättning

  4. Hur konverterar jag från en pengadatatyp i SQL-server?