Lea*_*ner 5 oracle plsql jdbc java
我有 Oracle DB 11g 企业版,我想从我的 java 代码执行 sql 脚本。我正在从 .sql 文件中读取这个 sql 脚本,该脚本包含诸如create table
, create type
, alter table
, drop type
, 之类的语句drop procedure
,insert into
以及带有begin
和end
以及所有此类构造的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)
什么创建了你的sql脚本文件?sql脚本文件创建可以修改吗?
\n\n如果您可以修改 sql 脚本文件的创建,最简单的方法是将您自己的分隔符附加到语句之间的脚本中。(评论应该是个好主意)
\n\n如果不是,如果您只是在不可修改源的纯文本文件中接收一堆 sql 或 pl/sql 语句,那么您应该编写自己的解析算法。\n您必须记住,每个 sql 语句都以分号结尾(;),但由于 PL/SQL 块可以包含多个 sql 语句,因此它们必须在新行中单独以正斜杠 (/) 结尾。
\n\n令人困惑的部分是,某些 SQL 语句实际上是存储的 PL/SQL 块,例如CREATE PROCEDURE
or CREATE TRIGGER
(文档书“Oracle\xc2\xae 数据库 PL/SQL 语言参考”中的完整列表:http://docs.oracle.com /cd/E11882_01/appdev.112/e25519/sqlstatements.htm#LNPLS99979 )
(例如
\n\nALTER
, SELECT
,DROP
等GRANT
..语句以分号结尾;
CREATE TABLESPACE
、CREATE USER
、CREATE TABLE
等语句以分号结尾;
CREATE PROCEDURE
、CREATE PACKAGE
、CREATE TRIGGER
等语句以斜杠结尾/
DECLARE
, BEGIN
(匿名 pl/sql 块)语句以斜杠结尾/
)
\n\n问候
\n 归档时间: |
|
查看次数: |
11429 次 |
最近记录: |