【发布时间】:2013-09-15 03:18:31
【问题描述】:
我即将学习 pl/sql,目前我不明白我的代码出了什么问题。 我想要做的是动态复制(备份)一个特定的表。 这么简单:我已经创建了一个备份表,因为我实际上会经常使用它。 所以第一次尝试如下:
EXECUTE IMMEDIATE 'INSERT INTO '||sSchema_||'.backupTable
SELECT * FROM '||sSchema_||'.table'
这不起作用,因为其中一列包含 LONG 数据类型
Exception ORA-00997: illegal use of LONG datatype
所以下一步是尝试将这个东西打包成一个循环并单独获取每一行:
--Initialized as
TYPE cur_typ IS REF CURSOR;
cCursor cur_typ;
rRecord table%rowtype;
--Make sure cursor is closed
IF cCursor%ISOPEN THEN
CLOSE cCursor;
END IF;
--Run the copying
OPEN cCursor FOR 'SELECT * FROM '||sSchema_||'.table';
LOOP
FETCH cCursor INTO rRecord;
EXIT WHEN cCursor%NOTFOUND;
EXECUTE IMMEDIATE 'INSERT INTO '||sSchema_||'.updateTable 'VALUES rRecord';
END LOOP;
CLOSE cCursor;
未执行的原因是:
ORA-03001: unimplemented feature
之后我尝试使用不同的其他方式来编写该循环,例如
EXECUTE IMMEDIATE 'INSERT INTO '||sSchema_||'.updateTable 'VALUES :1' USING rRecord;
所有结果都相同:未实现的功能。
那么问题来了:如何创建包含 LONG 数据类型的表的动态副本?有人知道吗?
提前非常感谢
唐尼
【问题讨论】:
标签: oracle plsql dynamic-sql