2016-09-09 2 views
0

Ich muss mein SQL-Skript bereitstellen und dafür habe ich Variable in einer Datei definiert und das Skript in einer anderen Datei erstellen.Wie übergebe ich eine bind-Variable an eine Sicht für eine for-Schleife

Datei 1:

Define_Variable.sql 

DEFINE hr_SCHEMA = h; Datei 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 ; 
/

Antwort

0

Wo ausgeführt werden Sie das? Anonymer PLSQL teilt Variablen nicht blockübergreifend. Es gibt keine "globale" Variable und daher keine Möglichkeit, & Zugriff darauf zu geben. Sie haben folgende Auswahlmöglichkeiten: In SQLPLUS können Sie eine Variable definieren und diese verwenden oder ein PLSQL-Paket mit der Variablen erstellen, um es global zu machen. Oder verwenden Sie die Datenbank und speichern Sie den Wert in einer (temporären) Tabelle und wählen Sie sie für die Verwendung im zweiten Skript aus. Auch uns nie eine anonyme Block für sich. Always use a package (und Ihr Param-Passing-Problem ist ebenfalls gelöst).

+0

Die Variable wurde aus einer SQL-Definitionsvariable übergeben, alle Tabellenskripts wurden in create_table.sql und alle Ansichten in der Datei create_view.sql abgelegt. Ich habe eine master.sql Datei erstellt, beim Aufrufen wird zuerst define_Variable.sql und die Tabellenskripte usw. aufrufen. –

Verwandte Themen