【发布时间】:2015-09-18 18:35:49
【问题描述】:
我想要使用 Create Table ... Select ... 语句创建临时表的存储过程。 然后从同一个创建的表中选择记录。 最后删除创建的表...
我希望所有这些功能都在同一个存储过程中。
我已经创建了以下存储过程。但我得到了以下错误
PL/SQL: ORA-00942: table or view does not exist
这是我的程序
DECLARE
TEMP_TBL VARCHAR2(4000);
TBL_NAME VARCHAR2(200) := 'ABC_TEST';
BEGIN
TEMP_TBL := 'CREATE TABLE MY_TAB_COL AS(SELECT TABLE_NAME,COLUMN_NAME,DATA_TYPE,to_lob(DATA_DEFAULT) AS DATA_DEFAULT,NULLABLE FROM ALL_TAB_COLS WHERE TABLE_NAME=''' || TBL_NAME || ''')';
DBMS_OUTPUT.PUT_LINE(TEMP_TBL);
EXECUTE IMMEDIATE TEMP_TBL;
FOR DD_COLUMNS IN
(SELECT TABLE_NAME FROM MY_TAB_COL)
LOOP
DBMS_OUTPUT.PUT_LINE('DD_COLUMNS.TABLE_NAME');
END LOOP;
END;
【问题讨论】:
-
这行不通。正在从 MS SQL 迁移一些东西吗? PL/SQL 是编译语言(例如 Java)。因此,在编译这个 PL/SQL 块时,已知 id 取决于名为 MY_TAB_COL 的表。
-
您真的,真的不想在过程中创建和删除表。如果您有多个用户同时运行代码,那将完全失败。如果您来自另一个通常创建本地临时表的数据库(如 SQL Server),那么您确实希望适应 Oracle 约定。就像在 SQL Server 中编写 Oracle 风格的代码没有意义一样,在 Oracle 中编写 SQL Server 风格的代码也没有意义。
标签: oracle