【发布时间】:2014-10-11 03:23:37
【问题描述】:
在以下查询中,select_string 可以返回任意数量的列和行以及任何可能的数据类型。
Execute immediate 'select_string' into v_table_variable;
例如 select_string 可以是 'select name, last name from student' 或 'select date, subject, address , phone from booking' 等等。
有谁知道如何定义 v_table_variable 以便立即执行我想要的运行?!我打算之后做一个循环来读取这个变量的值。
非常感谢!
【问题讨论】:
-
你实际上可能做不到。您可能能够动态地构建整个 PL/SQL 块(包括后续循环),但使用动态 PL/SQL 通常是一种让您自己(以及任何必须维护您的代码的人)发疯的快速方法。您可能想使用
dbms_sql而不是execute immediate,但您很少真正想要编写通用的代码。您要解决的根本问题是什么? -
感谢您的快速回复!我想构建一个函数来获取表的名称和作为其 PK 之一的值,然后删除子表中的所有相应行,以及子表的子表中的所有相应行,依此类推。我不允许用级联改变我的表。
-
你确定你真的需要一个完全通用的函数吗?而不是,比如说,一个
delete_foo过程,它通过首先从所有foo的子表中删除数据来删除foo?您可以构建一个从一堆数据字典表中读取并创建一堆动态 SQL 的过程。但这比简单的程序选项要复杂一个数量级。你确定额外的复杂性真的值得吗? -
所以你有一些表有外键约束但没有
ON DELETE CASCADE,你想在PL/SQL中“模拟”级联?