Oracle查询 - 存储过程

时间:2013-05-17 18:36:49

标签: oracle plsql oracle11g

我正在运行存储过程:

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

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

1 个答案:

答案 0 :(得分: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'')';

应该有效。