2016-09-09 6 views
0

Мне нужно развернуть мой SQL-скрипт, и для этого я определил переменную в одном файле и сценарий создания в другом файле.Как передать переменную связывания в представление для цикла for

Файл 1:

Define_Variable.sql 

ОПРЕДЕЛИТЬ hr_SCHEMA = ч; Файл 2:

Createfile.sql 


declare 
lctr varchar2(200); 

BEGIN 

    for rec in (select view_name,count(1) as cnts from all_views where owner='&hr_SCHEMA .' AND VIEW_NAME IN('employee_user_v','employee_id_v') group by view_name) 

LOOP 
    if (rec.cnts = 1) THEN 
     lctr:='DROP VIEW :owner.' || rec.view_name ; 
     execute immediate lctr using '&hr_SCHEMA.'; 
     DBMS_OUTPUT.PUT_LINE('DROPPED VIEW OF..'|| rec.view_name); 
    else 
      DBMS_OUTPUT.PUT_LINE('no view found in the system'); 
    end if; 

END LOOP; 
END ; 
/

ответ

0

Где вы это выполнение? Анонимный PLSQL не разделяет переменные между блоками. Нет никакой «глобальной» переменной, и поэтому невозможно пройти через &. Ваши варианты: В SQLPLUS вы можете определить переменную и использовать ее или создать пакет PLSQL с переменной, что делает его глобальным. Или используйте базу данных и сохраните значение в (временной) таблице и выберите ее для использования во втором скрипте. Кроме того, мы никогда не являемся анонимным блоком. Always use a package (и ваша проблема прохождения пара) также решена).

+0

Переменная была передана из файла переменной define .sql, все сценарии таблиц были помещены в create_table.sql и все представления в файле create_view.sql. Я создал файл master.sql, после вызова вызовет define_Variable.sql сначала, а затем скрипты таблицы и т. Д. –