2016-09-09 110 views
0

我必须部署我的sql脚本,并为此我已在一个文件中定义了变量,并在另一个文件中创建了脚本。如何将绑定变量传递给for循环的视图

文件1:

Define_Variable.sql 

DEFINE 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(你的param传递问题也解决了)。

+0

该变量已从定义变量.sql文件传递,所有表脚本已放置在create_table.sql和create_view.sql文件中的所有视图中。我创建了一个master.sql文件,在调用之后,将首先调用define_Variable.sql,然后再调用表脚本等。 –