我正在运行存储过程:
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
有人可以帮助我在哪里出错。
答案 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'')';
应该有效。