如何在对Oracle 10g的JDBC SQL查询中包含多个命令?

如何在对Oracle 10g的JDBC SQL查询中包含多个命令?,oracle,jdbc,oracle10g,ora-00911,Oracle,Jdbc,Oracle10g,Ora 00911,我对Oracle完全陌生(我来自MySQL和MSSQL),并且是JDBC的新手。我的一个表创建查询如下所示: 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

我对Oracle完全陌生(我来自MySQL和MSSQL),并且是JDBC的新手。我的一个表创建查询如下所示:

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:缺少或无效选项
。如果我去掉斜线,我也会得到同样的结果。如果我尝试用分号替换它们,我会得到
java.sql.SQLSyntaxErrorException:ORA-00911:无效字符


在JDBC和/或Oracle中,在一个查询中不可能包含多个命令吗?或者我只是缺少某种语法来分隔它们?

它们都是独立的语句。通过
连接#createStatement()
或通过对
语句#执行(字符串)
的多个SQL调用,通过单独的语句对象一次发出一个


相反,您希望它们出现在一个描述语句中的原因是什么?

每一个都是单独的语句。通过
连接#createStatement()
或通过对
语句#执行(字符串)
的多个SQL调用,通过单独的语句对象一次发出一个


相反,您希望它们出现在一个描述语句中的原因是什么?

对于oracle,如果您在开始和结束之间包含sql;它应该会起作用

例:


对于oracle,如果在开始和结束之间包含sql;它应该会起作用

例:


它们是一个语句并不重要(我在发布之前将它们分成三个字符串作为解决方法),我只是想看看我是否遗漏了什么和/或做错了什么。谢谢你可以用一些Oracles特有的语法欺骗JDBC,但JDBC的对象模型实际上是为了将语句级命令传递给DB,因为每个命令都可能有响应/异常。有意义=)大多数情况下,我感到困惑的是,Oracle/Apex本身吐出的sql文件在我试图通过Apex或JDBC运行时返回为无效语法。它们是否正确并不重要是一个语句(在发布之前,我将它们分成三个字符串作为解决方法),我只是想看看我是否遗漏了一些内容和/或做错了。谢谢你可以用一些Oracles特有的语法欺骗JDBC,但JDBC的对象模型实际上是为了将语句级命令传递给DB,因为每个命令都可能有响应/异常。有意义=)大多数情况下,我感到困惑的是,Oracle/Apex本身吐出的sql文件在我试图通过Apex或JDBC运行时返回为无效语法。我认为这是唯一适用的对于UPDATE/INSERT/DELETE语句-当我的SQL具有CREATE/DROP语句时,我无法使其工作以下操作对我有效:
String wa=“”声明v_命令VARCHAR2(32767);BEGIN v_命令:=“创建或替换名为$clsName并将其编译为$clsDef”的JAVA源代码;执行立即v_命令;END;””jdbcTemplate.execute(wa)
还要注意,create语句是DDL,而Update(etc)语句是DML。我不建议在PLSQL中聚合DML,而是执行批处理。我认为这只适用于UPDATE/INSERT/DELETE语句-当我的SQL有CREATE/DROP语句时,我无法让它工作以下内容对我有效:
String wa=“””DECLARE v_command VARCHAR2(32767);BEGIN v_命令:='CREATE或REPLACE并将名为$clsName的JAVA源代码编译为$clsDef';EXECUTE IMMEDIATE v_命令;END;“”“jdbcTemplate.EXECUTE(wa)
另请注意,CREATE语句是DDL,而Update(etc)语句是DML。我不建议在PLSQL中聚合DML,而是建议执行批处理。
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;