-1

我正在运行存储过程:

CREATE OR REPLACE MYSP (runDate Date)
BEGIN 
EXECUTE IMMEDIATE 'CREATE TABLE MYTABLE AS (SELECT * FROM DATATABLE WHERE DATADATE = :1' USING runDate); 

END MYSP;

我得到错误 -

ORA-01027: bind variables not allowed for data definitions operations 
ORA-06512: "Database.MYSP", line 4

有人可以帮助我哪里出错了。

4

1 回答 1

10

这个错误是不言自明的。不能在 DDL 语句中使用绑定变量。

您真的想在 Oracle 中动态创建表是非常非常不可能的。我强烈建议您退后一步,寻找一种不同的方式来设计系统,这样您就不会尝试在运行时创建表。

如果您绝对确信您有需要在运行时创建表的特殊需求,那么您不能使用绑定变量并且您不希望括号不匹配(您有一个左括号但没有右括号)。假设您忽略了时间组件,例如

EXECUTE IMMEDIATE 'CREATE TABLE MYTABLE ' ||
                  ' AS ' ||
                  ' SELECT * FROM DATATABLE WHERE DATADATE = to_date( ' || 
                  to_char( runDate, 'YYYY-MM-DD' ) ||
                  ', ''YYYY-MM-DD'')';

应该管用。

于 2013-05-17T18:55:04.617 回答