我即将学习 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 数据类型的表的动态副本?有人知道吗?
非常感谢提前
唐尼