如何将绑定变量传递给 for 循环的视图
Posted
技术标签:
【中文标题】如何将绑定变量传递给 for 循环的视图【英文标题】:How to pass a bind variable to a view for a for loop 【发布时间】:2016-09-09 15:23:10 【问题描述】:我必须部署我的 sql 脚本,为此我在一个文件中定义了变量,并在另一个文件中定义了创建脚本。
文件 1:
Define_Variable.sql
定义 hr_SCHEMA = hr; 文件 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 ;
/
【问题讨论】:
【参考方案1】:你在哪里执行这个?匿名 PLSQL 不跨块共享变量。没有“全局”变量,因此无法传递和访问它。您的选择是: 在 SQLPLUS 中,您可以定义一个变量并使用它,或者使用该变量创建一个 PLSQL 包,从而使其成为全局变量。或者,使用数据库并将值存储在(临时)表中,然后选择它以在第二个脚本中使用。 此外,永远不要单独使用匿名块。 Always use a package(你的参数传递问题也解决了)。
【讨论】:
变量已从定义变量 .sql 文件中传递,所有表脚本已放置在 create_table.sql 中,所有视图都放置在 create_view.sql 文件中。我创建了一个 master.sql 文件,调用时会先调用 define_Variable.sql,然后调用表脚本,依此类推。以上是关于如何将绑定变量传递给 for 循环的视图的主要内容,如果未能解决你的问题,请参考以下文章