Oracle
 sql >> база данни >  >> RDS >> Oracle

Искам да предам променлив аргумент към външен SQL файл (PL/SQL с SQL*Plus)

@ е SQL*Plus команда , няма значение в PL/SQL. Вашият скрипт е включен в PL/SQL блока по време на анализ, което можете да видите, ако list кода в буфера. Променливите, декларирани във вашия контролен блок, са достъпни директно за „включения“ код, без да е необходимо заместване.

Като пример, ако uitvoer.sql просто съдържа:

dbms_output.put_line(v_s);

Тогава този контролен скрипт:

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

list

Произвежда:

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 блокът в буфера има включен код, не препратка към uitvoer.sql . Но включеният код работи, защото препращаше към променлива от контролния скрипт, която все още беше в обхвата.

Ако искате да разрешите контролните променливи да имат различни имена, разрешите uitvoer.sql за да се извиква по-гъвкаво може би, тогава все още можете да използвате заместващи променливи, но все още замествате името на променливата, а не нейната стойност. Например с този uitvoer.sql (обърнете внимание, че заместващата променлива assginment не има кавички около него):

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

И вашият контролен скрипт, предаващ името на променливата:

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

Виждате:

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. COLLATION() Функция в Oracle

  2. Задайте Oracle NLS_LANGUAGE от java в уеб приложение

  3. SESSIONTIMEZONE Функция в Oracle

  4. Изберете първите 150 реда, след това следващите 150 и така нататък?

  5. Изтриване на редове с ограничения на външен ключ