2013-05-17 130 views
-1

我運行一個存儲過程:Oracle查詢 - 存儲過程

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

我認爲你需要一個左括號)在** DATADATE =:1 ** – mtwaddell

+0

之後,這是一個錯字。仍然沒有工作 – Monica

+0

@Monica:另外你錯過了創建或更換程序MYSP --procedure關鍵字 –

回答

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'')'; 

應該工作。

+0

謝謝。但現在我得到的錯誤:ORA-01847:一個月中的某一天必須在一個月中的最後一天 – Monica

+0

因爲我通過了2013年4月30日它很有趣 – Monica

+3

@Monica - 您是否確實通過了'DATE'?還是你傳遞一個代表日期的字符串?您確定'to_char'中的格式掩碼與'to_date'中的格式掩碼相匹配嗎? –