【发布时间】:2020-07-19 02:53:06
【问题描述】:
我正在尝试在 Oracle 中为所有需要删除并重新创建的表使用游标来构建动态函数。例如,我有以下示例表结构:
CREATE TABLE All_tmp_DATA AS
(SELECT 'T_tmp_test1' As Table_NM, 'TEST1' As Process_name FROM DUAL UNION ALL
SELECT 'T_tmp_test2' As Table_NM, 'TEST1' As Process_name FROM DUAL UNION ALL
SELECT 'T_tmp_test3' As Table_NM, 'TEST1' As Process_name FROM DUAL)
以上以“T_tmp”开头的表代表了数据库中所有在启动TEST1过程时如果它们的计数>1则需要删除的表。我真的需要一个函数来传递参数 Process_name,我可以在其中输入“TEST1”,并使用游标通过将其绑定到来自 All_tmp_DATA 的 Table_NM 并将其插入到以下代码中的 table_name 中来构建一个循环:
BEGIN
SELECT count(*)
INTO l_cnt
FROM user_tables
WHERE table_name = 'MY_TABLE';
IF l_cnt = 1 THEN
EXECUTE IMMEDIATE 'DROP TABLE my_table';
END IF;
END;
【问题讨论】:
-
我以前从未听说过 Oracle 13。你确定版本号是正确的吗?此外,
SELECT CREATE TABLE...不是有效的 Oracle 语法。请说明您实际使用的数据库系统。 -
嗨,鲍勃,很抱歉有错别字。如果您去掉第一行中的 SELECT,它应该创建临时表。这是 ORACLE TOAD 第 13 版。谢谢 Yen
-
TOAD 是一个 SQL 客户端,它的版本基本上与您的问题无关。更相关的是您使用的 Oracle 版本(例如
select * from v$version)