2010-12-09 88 views
1

我完全不熟悉Oracle(我來自MySQL和MSSQL)並且是JDBC的新手。我的一個表創建的查詢看起來是這樣的:如何在Oracle SQL查詢中包含多個命令到Oracle 10g?

CREATE TABLE "LISTS" 
    ("ID" NUMBER NOT NULL ENABLE, 
    "NAME" VARCHAR2(1000) NOT NULL ENABLE, 
    "DOMAIN_ID" NUMBER NOT NULL ENABLE, 
    CONSTRAINT "LISTS_PK" PRIMARY KEY ("ID") ENABLE 
    ) 
/

CREATE OR REPLACE TRIGGER "BI_LISTS" 
    before insert on "LISTS"    
    for each row 
begin 
    select "LISTS_SEQ".nextval into :NEW.ID from dual; 
end; 

/
ALTER TRIGGER "BI_LISTS" ENABLE 
/

當我嘗試connection.createStatement().execute()此查詢,我得到java.sql.SQLSyntaxErrorException: ORA-00922: missing or invalid option。如果我刪除斜線,我會得到相同的結果。如果我嘗試用分號替換它們,我會得到java.sql.SQLSyntaxErrorException: ORA-00911: invalid character

是不是可以在JDBC和/或Oracle中的一個查詢中包含多個命令?或者我只是缺少某種語法來區分它們?

回答

2

這些都是單獨的語句。通過Connection#createStatement()或通過多個SQL調用Statement#execute(String)通過單獨的Statement對象一次發出一個。

相反,你在一個描述性陳述中想要他們的理由是什麼?

+0

這不是那麼重要,他們是一個聲明(我會分離出來分爲三個字符串作爲發佈前一種解決方法),我只是想看看,如果我失去了一些東西和/或者做錯了。謝謝! – kobachi 2010-12-09 23:30:25

+0

您可以使用一些特定於Oracle的語法來欺騙JDBC,但JDBC的對象模型確實旨在將語句級命令傳遞到數據庫,因爲每個命令都可能有響應/異常。 – Xailor 2010-12-09 23:34:33

3

對於oracle,如果在BEGIN和END之間包含sql;它應該工作。

例:

BEGIN 
    CREATE TABLE "LISTS" 
     ("ID" NUMBER NOT NULL ENABLE, 
     "NAME" VARCHAR2(1000) NOT NULL ENABLE, 
     "DOMAIN_ID" NUMBER NOT NULL ENABLE, 
     CONSTRAINT "LISTS_PK" PRIMARY KEY ("ID") ENABLE 
     ) 
    ; 

    CREATE OR REPLACE TRIGGER "BI_LISTS" 
     before insert on "LISTS"    
     for each row 
    begin 
     select "LISTS_SEQ".nextval into :NEW.ID from dual; 
    end; 
    ; 

    ALTER TRIGGER "BI_LISTS" ENABLE; 
END;