如何将绑定变量传递给 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 循环的视图的主要内容,如果未能解决你的问题,请参考以下文章

将绑定传递给类型属性包装器的变量 - 失去基础类型

如何将绑定变量传递给 ObservableObject?

如何使用'for'循环将新变量传递给python脚本

JavaScript 变量绑定和循环

如何按值将变量传递给匿名javascript函数?

如何使用绑定变量执行 SQL 脚本