我在尝试使用Execute Immediate
包含CREATE TABLE
语句和用户定义的表类型的语句时遇到问题。ORA-22905
我在 Oracle 11g 上遇到错误。
有什么办法可以解决这个问题吗?
CREATE TYPE MY_TABLE_TYPE AS TABLE OF VARCHAR2(30);
/
DECLARE
MT MY_TABLE_TYPE;
BEGIN
SELECT * BULK COLLECT INTO MT FROM DUAL;
-- Two steps
EXECUTE IMMEDIATE 'CREATE TABLE MY_TABLE1 (A VARCHAR2(30))';
EXECUTE IMMEDIATE 'INSERT INTO MY_TABLE1 SELECT * FROM TABLE(:T)' USING MT; -- OK
-- One step
EXECUTE IMMEDIATE 'CREATE TABLE MY_TABLE2 AS SELECT * FROM TABLE(:T)' USING MT; -- ERROR ORA-22905
END;
真正的代码SELECT * FROM TABLE(:T)
是动态的(主表名是临时的)并且速度很慢。这就是为什么我尽量避免分两步创建表格(如 完成MY_TABLE1
)。还有两个步骤我不能使用SELECT *
,但我必须指定所有列(可变数量和超过 100 列)。