在Oracle中一次执行多条sql语句,结束符很重要

Oracle系列:Oracle sqlplus执行sql文件语句结束符号(空行、分号;、斜杠/) with a semicolon (;) with a slash (/) on a line by itself with a blank line 阅读详情
AI摘要

本文介绍在Oracle数据库中如何正确地批量执行多条SQL语句,包括使用BEGIN-END块、EXECUTE IMMEDIATE动态SQL及注意事项。

有时我们需要一次性执行多条sql语句,而用来更新的sql是根据实际情况用代码拼出来的

解决方案是把sql拼成下面这种形式:
begin 
update TB_VG set seq = 1, vessel_id = 'Jin14', vessel_type = 'TRACK' where batch_number = '20837' and train_id = '0233086';
update TB_VG set seq = 2, vessel_id = 'Jin14', vessel_type = 'TRACK' where batch_number = '20992' and train_id = '0233110';
end;
总结如下:
以begin开始,以end;结尾(end后的分号不能省),中间的每个sql语句要以分号;结尾

在实际编码中,发现即使这样也会有错误发生,把sql语句中的换行符替换成空格就可以了
比较稳妥的编码方式是:
1、以正常的方式编写sql,根据阅读与编写的需要,中间肯定会有换行符
2、在执行之前进行替换:strSql = strSql.Replace("r\n", " ").Replace('\n', ' ');

-------------------------------------------------------------------------------------------
前几天做项目的时候发现了一个问题,那就是将许多的SQL语句连在一起去执行时竟然会出错,在SQLserver2000中就可把每句SQL用空格分开,直接就可以运行,这样在写程序的时候增加了不少的灵活性,而在ORACLE中就不行了。也许大家都会认为在每句的最后加上“;”就可以了,其实不然。在网上找了好多的方法,有的认为在SQLPLUS中用begin~~end可以解决,经过多次的实验还是解决不了问题,有的方法可以在SQLPLUS中运行,但是不符合项目的需要,如果在sqlplus中录入的话不用begin和end也可执行多条语句,只要每一行用分号结束,一行一条语句就可以。

         问题,执行一段代码反回一个字符串,这个串中就是要执行我多条SQL语句。怎样让它在ORACLE中通过呢。想来想去想到了动态SQL,EXECUTE IMMEDIATE 这是一个解析和执行标准SQL语句的语法。只要在这条字符串中格式化一下我们要执行的语句就可以了,比如这条要执行的多条SQL的字符串为:

  delete tableA where Aid=1;update tableB where Bid=2;insert into tableC values(id,3,4);

像这样的SQL语句想一起执行是不可以的,只要加点格式化就OK了,

要这样:BEGIN EXECUTE IMMEDIATE 'delete tableA where Aid=1';EXECUTE IMMEDIATE 'update tableB where Bid=2';EXECUTE IMMEDIATE 'insert into tableC values(id,3,4)';END;

注意,一定要写好格式,比如END后的分号。这样就可以在ORACLE中执行这个字符串了。

今天我在做一个项目的时候,需要向数据库(数据库是Oracle 8.0.5)一次同时插入多条数据,但是程序运行却出错:ORA-00911: 无效字符。SQL语句如下:
-------------------------------------------------------------------------------------------

DELETE FROM SYSROLEOPENR WHERE ROLEID = 2;
  INSERT INTO SYSROLEOPENR
    (PKID, ROLEID, OPERID)
    SELECT SYSROLEOPENR_PKID_SEQ.NEXTVAL, '2' ROLEID, OPERID
      FROM SYSMODULEOPER
     WHERE OPERCODE = '300090010';
  INSERT INTO SYSROLEOPENR
    (PKID, ROLEID, OPERID)
    SELECT SYSROLEOPENR_PKID_SEQ.NEXTVAL, '2' ROLEID, OPERID
      FROM SYSMODULEOPER
     WHERE OPERCODE = '300090020';
  INSERT INTO SYSROLEOPENR
    (PKID, ROLEID, OPERID)
    SELECT SYSROLEOPENR_PKID_SEQ.NEXTVAL, '2' ROLEID, OPERID
      FROM SYSMODULEOPER
     WHERE OPERCODE = '300090050';


我去掉所有的;号,也报错。困惑了许久。如果数据库是SQL SERVER 2000,程序去掉分号后是可以正常运行的。后来发现在Oracle中需要加上begin
end才正确。改成以下的SQL就正确了:


BEGIN
  DELETE FROM SYSROLEOPENR WHERE ROLEID = 2;
  INSERT INTO SYSROLEOPENR
    (PKID, ROLEID, OPERID)
    SELECT SYSROLEOPENR_PKID_SEQ.NEXTVAL, '2' ROLEID, OPERID
      FROM SYSMODULEOPER
     WHERE OPERCODE = '300090010';
  INSERT INTO SYSROLEOPENR
    (PKID, ROLEID, OPERID)
    SELECT SYSROLEOPENR_PKID_SEQ.NEXTVAL, '2' ROLEID, OPERID
      FROM SYSMODULEOPER
     WHERE OPERCODE = '300090020';
  INSERT INTO SYSROLEOPENR
    (PKID, ROLEID, OPERID)
    SELECT SYSROLEOPENR_PKID_SEQ.NEXTVAL, '2' ROLEID, OPERID
      FROM SYSMODULEOPER
     WHERE OPERCODE = '300090050';

END;
python爬虫入门教程(非常详细) 爬虫指的是一种自动化程序,能够模拟人类在互联网上的浏览行为,自动从互联网上抓取、预处理并保存所需要的信息。爬虫运行的过程一般是先制定规则(如指定要抓取的网址、要抓取的信息的类型等),紧接着获取该网址的HTML源代码,根据规则对源代码进行解析和抽取,最后进行处理和保存。爬虫在实际应用中广泛使用,如搜索引擎、大数据分析、交易数据采集等领域,都需要用到爬虫技术来实现信息的定向采集和处理。 阅读详情

相关推荐

手把手教你解决COLMAP编译中的Ceres CUDA支持问题(附详细配置步骤)

本文详细解析了COLMAP编译中Ceres CUDA支持问题的完整解决方案,包括环境准备、Ceres Solver的CUDA编译配置、COLMAP的CUDA集成配置等关键步骤。通过优化CMake参数和解决常见错误,帮助技术人员充分利用GPU加速优势,提升三维重建效率。

vodka的博客 858

oracle一次执行多个语句吗,oracle执行多语句怎么写

1.Oracle中怎样一次执行多条sql语句有时我们需要一次性执行多条sql语句,而用来更新的sql是根据实际情况用代码拼出来的解决方案是把sql拼成下面这种形式:beginupdate TB_VG set seq = 1, vessel_id = 'Jin14', vessel_type = 'TRACK' where batch_number = '20837' and train_id = ...

weixin_34452086的博客 2469

Briefings in Bioinformatics投稿经验分享

Briefings in Bioinformatics投稿经验分享

LiRongLu_的博客 3335

ORACLE PLSQLDEVELOPER中一次执行多个SQL脚本

假设当前在电脑D盘有两个sql脚本文件需要执行,一般人可能会想着直接将SQL里面的内容复制到plsqldeveloper中执行,当然这是一种方法,但是对于十几个文件呢?一个个复制未免太过繁琐且低效率。

java学习开发 2671

PSO-BP和BP多输入多输出回归预测模型 matlab (多输入多输出)

PSO-BP和BP多输入多输出回归预测模型 matlab (多输入多输出)

算法如诗的博客 257

79、昇腾系列服务器/昇腾系列推理卡/昇腾系列嵌入式开发板+Dify+one api部署DeepSeek-R1-Distill-Qwen-32BW8A8+RAG本地模型知识库和负载均衡双实例

阶段,安装过程缺什么,,在docker外面git下源码,进入容器内部进行量化,这里的容器建议在创建个8卡的容器,双卡容器量化会显示npu显存不够,除非你用cpu转模型,我就懒得创建容器了,使用cpu量化吧,巨慢;创建容器,进入容器,计划使用两张昇腾NPU卡推理DeepSeek-R1-Distill-Qwen-32B的W8A8模型,所以构建的容器用两张卡,选6、7卡吧,0-6号卡可以跑文本嵌入模型、重排序模型;直接进入量化阶段,在容器外面操作即可,环境不用管,因为系统已经默认配置了环境,直接跳到。

sxj731533730 6116

oracle同时运行多行sql语句,.NET程序连接Oracle一次执行多行SQL的注意事项

以前写的基于MSSQL数据库的.NET程序,不用担心SQL语句中的;或者换行符。但是因为要基于Infor LN的Oracle数据库进行开发,就碰到了;分号和换行的报错,同时一次执行UPDATE的多条更新语句时,也会报错。Oracle.ManagedDataAccess.Client.OracleException:ORA-00911: invalid character单行SQL如果有换行时,加了...

weixin_29786123的博客 1404

15、远程操作水下航行器(ROV)的非线性控制系统设计

本文探讨了远程操作水下航行器(ROV)的非线性控制系统设计,重点介绍了多变量PID控制、改进的PD控制和滑模控制三种方法。详细阐述了各控制策略的原理、建模与仿真过程,并通过对比分析其在稳态误差、振荡、抖振及跟踪效果等方面的性能表现。文章还提出了针对不同控制方法的优化建议,并给出了选择合适控制策略的决策流程,为ROV高精度运动控制提供了系统性解决方案。

sun99的博客 156

通过jdbc的execute函数一次向oracle提交多条sql

  虽然addbatch效率也不错,但有时还是需要一个execute执行多个sql,但是execute直接执行的话(以分号分隔)会出异常。通过测试,可通过以下方式来处理。  思路就是把多条sql包装起来,以begin,end包装成一个pl/sql块来执行,这样就可以了。execute("begin insert xxx;update xxx;delete xxx; end;");  //注

李智胜的专栏 4208

OpenCv —— 检测车牌号(附完整源码)

OpenCv —— 检测车牌号

5598

YOLO11实战优化:长尾分布解决 | 引入Seesaw Loss配合YOLO11分类头,完美应对类别极其不平衡的现实业务场景

摘要: YOLO11在工业缺陷检测等长尾分布场景中面临尾部类别检测失效的问题,根源在于头部类别样本的负样本梯度压制了尾部类别的学习。传统方法如重采样、Focal Loss等效果有限。Seesaw Loss通过动态调整缓解因子和补偿因子,平衡类别间的梯度分布,结合YOLO11的解耦分类头、Anchor-Free设计和C2PSA/C3K2模块,显著提升尾部类别识别能力。文章详细解析了Seesaw Loss的数学原理,并提供了可直接集成到YOLO11的PyTorch实现代码,为长尾分布下的目标检测提供了实用解决方

2601_95807009的博客 251

oracle execute immediate执行多条语句_Oracle SQL执行的内部原理

Oracle拥有当前数据库中最为复杂的共享池结构,其目的是确保在高并发下,SQL执行能以十分高效的效率进行。为了CURSOR的共享,Oracle一直在算法上做优化。Oracle10g的Mutex锁的引入,彻底改变了以前仅仅通过library cache锁来进行串行化的模式,使Oracle在大并发场景下的CURSOR共享更为高效。为了支持同一个CURSOR大规模并发执行的问题,在Orac...

weixin_39571749的博客 700

双重机器学习模型中解释变量是连续变量的代码,看到好多都是0/1变量,如何解决?

🏆本文收录于 《全栈Bug调优(实战版)》 专栏,该专栏专注于分享我在真实项目开发中遇到的各类疑难Bug及其深层成因,并系统提供高效、可复现的解决思路和实操方案。无论你是刚入行的新手开发者,还是拥有多年项目经验的资深工程师,本专栏都将为你提供一条系统化、高质量的问题排查与优化路径,助力你加速成长,攻克技术壁垒,迈向技术价值最大化与职业发展的更高峰🚀!    📌 特别说明: 文中部分技术问题来源于真实生产环境及网络公开案例,均经过精挑细选与系统化整理,并结合多位一线资深架构师和工程师多年实战经验沉淀,提

**My Coding Family** 851

Oracle中sql语句结束后,在Oracle中一次执行多条sql语句,结束符很重要

有时我们需要一次性执行多条sql语句,而用来更新的sql是根据实际情况用代码拼出来的解决方案是把sql拼成下面这种形式:beginupdateTB_VGsetseq=1,vessel_id='Jin14',vessel_type='TRACK'wherebatch_number='20837'andtrain_id='0233086';updateTB_VG...

weixin_42116650的博客 737

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

如何在Oracle中一次执行多条sql语句,结束符很重要

有时我们需要一次性执行多条sql语句,而用来更新的sql是根据实际情况用代码拼出来的解决方案是把sql拼成下面这种形式:begin  update TB_VG set seq = 1, vessel_id = Jin14, vessel_type = TRACK where batch_number = 20837 and train_id = 0233086;update TB_

thisisvoa的专栏 6491

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

oracle 一次执行多个sql的问题

有时我们需要一次性执行多条sql语句,而用来更新的sql是根据实际情况用代码拼出来的 解决方案是把sql拼成下面这种形式: begin update   TB_VG   set   seq   =   1,   vessel_id   =   Jin14 ,   vessel_type   =   TRACK   where   batch_number   =   20837  

白虎的地盘 4252

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

openGauss执行SQL语句

在实际的批处理过程中,通常不终止批处理程序的执行,否则会降低数据库的性能。用一条预处理语句处理多条相似的数据,数据库只创建一次执行计划,节省了语句的编译和优化时间。调用PreparedStatement的executeUpdate方法执行预编译SQL语句。调用Connection的prepareStatement方法创建预编译语句对象。调用Connection的prepareStatement方法创建预编译语句对象。调用Connection的prepareCall方法创建调用语句对象。

m0_60569209的博客 1286

oracle中的if条件判断语句,SQL条件判断语句语法

条件判断语句可以作为程序段的逻辑结构跳转,根据不同条件执行不同的程序段,也可以在单条SQL语句内部使用,根据不同条件进行更新选择取值。三种数据库条件判断语句都有if和case,每种数据库语法存在些微差别。oracle:1、if语句:if condition thensql_statementelsif condition thensql_statementelsesql_statementend ...

weixin_30726605的博客 2万+

如何在Oracle中一次执行多条sql语句【ado.net】

有时我们需要一次性执行多条sql语句,而用来更新的sql是根据实际情况用代码拼出来的解决方案是把sql拼成下面这种形式: begin update TB_VG set seq = 1, vessel_id = 'Jin14', vessel_type = 'TRACK' where batch_number = '20837' and train_id = '0233086';update TB...

weixin_30629653的博客 285

mysql sql判断语句,SQL条件判断语句语法

条件判断语句可以作为程序段的逻辑结构跳转,根据不同条件执行不同的程序段,也可以在单条SQL语句内部使用,根据不同条件进行更新选择取值。三种数据库条件判断语句都有if和case,每种数据库语法存在些微差别。oracle:1、if语句:if condition thensql_statementelsif condition thensql_statementelsesql_statementend ...

weixin_29595351的博客 6714

SQL语句、PL/SQL语句、SQL*PLUS语句结束符号

SQL语句、PL/SQL语句、SQL*PLUS语句结束符号 (1)SQL语句以;或者/结束语句。 (2)PL/SQL语句以/结束语句。 (3)SQL*PLUS语句以换行符结束语句。

u010940730的博客 3902

Oracle执行sql导入时报错:ERROR:ORA-01756: 引号内的字符串没有正确结束

在执行Oracle的sql语句时,有时会报"ORA-01756: 引号内的字符串没有正确结束"这个错误,可以通过修改编码格式进行更改。 图1-1 错误图 将原sql文件改为ANSI编码格式,这时会看到报错语句中中文部分乱码,但是后面却没有单引号结束符,此时将原来的语句,修改重新编写后,保存执行则不会再报该错误,执行通过。 图1-2 UTF-8格式下的内容图1-3 改为ANSI格式后,字符乱...

fise19的博客 4万+
上一篇: oracle导入导出数据
下一篇: Oracle 数据库全量备份恢复和部分备份恢复
eplusing
博客等级 码龄12年 45粉丝 118原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值