1

私は Oracle をまったく初めて使用し (MySQL と MSSQL から来ました)、JDBC の初心者です。私のテーブル作成クエリの1つは次のようになります。

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 の 1 つのクエリに複数のコマンドを含めることはできませんか? それとも、それらを分離するためのある種の構文が欠けているだけですか?

4

2 に答える 2

3

オラクルの場合、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;
于 2011-11-10T16:29:01.700 に答える
2

それらのそれぞれは別々のステートメントです。Connection#createStatement()への複数のSQL呼び出しを介して、または複数のSQL呼び出しを介して、個別のStatementオブジェクトを介して一度に1つずつ発行しますStatement#execute(String)

逆に、1つの描写されたステートメントでそれらを望んでいるあなたの理由は何ですか?

于 2010-12-09T23:25:19.933 に答える