Oracle查询 - 存储过程

Mon*_*ica -1 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;
Run Code Online (Sandbox Code Playgroud)

我收到错误 -

ORA-01027: bind variables not allowed for data definitions operations 
ORA-06512: "Database.MYSP", line 4
Run Code Online (Sandbox Code Playgroud)

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

Jus*_*ave 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'')';
Run Code Online (Sandbox Code Playgroud)

应该管用.

  • @Monica - 你真的通过了'DATE`吗?或者您传递的是代表日期的字符串?你确定`to_char`中的格式掩码与`to_date`中的格式掩码相匹配吗? (3认同)