如何从 Oracle SQL 脚本中分离出单独的 sql 语句以从 Java 代码中执行

Lea*_*ner 5 oracle plsql jdbc java

我有 Oracle DB 11g 企业版,我想从我的 java 代码执行 sql 脚本。我正在从 .sql 文件中读取这个 sql 脚本,该脚本包含诸如create table, create type, alter table, drop type, 之类的语句drop procedureinsert into以及带有beginend以及所有此类构造的pl/sql 块。

我的问题是,如何将单独的 sql 语句从 java 代码中分离出来执行?在 MS SQL 中,我可以简单地按GO关键字分隔这些 sql 语句,而在 Oracle db 中没有这样的分隔符。那么通常什么在 Oracle db 脚本中用作分隔符?


例如,我在我的 sql 脚本和其他 sql 语句中有以下创建触发器块。这里我有分号,我不能将其视为 SQL 语句终止符(PL/SQL 块本身可以包含多个分号分隔的语句)。这意味着我不能使用;类似于GO(在 MS SQL 中)。

CREATE OR REPLACE TRIGGER SQLVersionHistory_SeqNum_TRG
   BEFORE INSERT 
   ON SQLVersionHistory
   FOR EACH ROW
   BEGIN
    :NEW.SequenceNumber := SQLVersionHistory_SeqNum.NEXTVAL;
   END;
Run Code Online (Sandbox Code Playgroud)

veg*_*ipy 3

什么创建了你的sql脚本文件?sql脚本文件创建可以修改吗?

\n\n

如果您可以修改 sql 脚本文件的创建,最简单的方法是将您自己的分隔符附加到语句之间的脚本中。(评论应该是个好主意)

\n\n

如果不是,如果您只是在不可修改源的纯文本文件中接收一堆 sql 或 pl/sql 语句,那么您应该编写自己的解析算法。\n您必须记住,每个 sql 语句都以分号结尾(;),由于 PL/SQL 块可以包含多个 sql 语句,因此它们必须在新行中单独以正斜杠 (/) 结尾。

\n\n

令人困惑的部分是,某些 SQL 语句实际上是存储的 PL/SQL 块,例如CREATE PROCEDUREor CREATE TRIGGER(文档书“Oracle\xc2\xae 数据库 PL/SQL 语言参考”中的完整列表:http://docs.oracle.com /cd/E11882_01/appdev.112/e25519/sqlstatements.htm#LNPLS99979 )

\n\n

(例如

\n\n
    \n
  • ALTER, SELECT,DROPGRANT..语句以分号结尾;
  • \n
  • CREATE TABLESPACECREATE USERCREATE TABLE等语句以分号结尾;
  • \n
  • CREATE PROCEDURECREATE PACKAGECREATE TRIGGER等语句以斜杠结尾/
  • \n
  • DECLARE, BEGIN(匿名 pl/sql 块)语句以斜杠结尾/
  • \n
\n\n

)

\n\n

问候

\n

  • 以 ; 结束 sql 语句 或者 / 只是 Oracle 工具 [sqlplus](http://docs.oracle.com/cd/E11882_01/server.112/e16604/ch_four.htm#sthref273) 使用的约定。我认为OP是关于sqlplus脚本的,但也许不是。 (2认同)