位置: 编程技术 - 正文

批处理 动态sql(sqlserver批处理)

编辑:rootadmin
1. DECLARE TYPE ref_cursor_type IS ref CURSOR; v_mycursor ref_cursor_type; TYPE id_list IS TABLE OF integer; TYPE name_list IS TABLE OF varchar2(); v_tabid id_list:=id_list(); v_tabname name_list:=name_list(); sql_str varchar2(); BEGIN --查询所以行,放在集合里 sql_str:='select empno,ename from emp'; sql_str:=sql_str||' order by empno desc'; execute immediate sql_str BULK COLLECT INTO v_tabid,v_tabname; FOR c IN v_tabid.first..v_tabid.last LOOP dbms_output.put_line('empno为'||v_tabid(c)||' 记录的NAME为'||v_tabname(c)); END LOOP; dbms_output.put_line('---------------------------------'); --更新(返回更新后的值) sql_str:='update emp set empno=1+empno,ename=''a'' where rownum=1 RETURNING empno,ename into :1,:2 '; execute immediate sql_str RETURNING BULK COLLECT INTO v_tabid, v_tabname; FOR c IN v_tabid.first..v_tabid.last LOOP dbms_output.put_line('empno为'||v_tabid(c)||' 记录的NAME为'||v_tabname(c)); END LOOP; dbms_output.put_line('---------------------------------'); --删除(返回被删除的行) sql_str:='delete from emp where rownum<=2 RETURNING empno,ename into :1,:2 '; execute immediate sql_str RETURNING BULK COLLECT INTO v_tabid, v_tabname; FOR c IN v_tabid.first..v_tabid.last LOOP dbms_output.put_line('empno为'||v_tabid(c)||' 记录的NAME为'||v_tabname(c)); END LOOP; dbms_output.put_line('---------------------------------'); --插入(返回插入的行) sql_str:='insert into emp(empno,ename) values(1,''abc'') RETURNING empno,ename into :1,:2 '; execute immediate sql_str RETURNING BULK COLLECT INTO v_tabid, v_tabname; FOR c IN v_tabid.first..v_tabid.last LOOP dbms_output.put_line('empno为'||v_tabid(c)||' 记录的NAME为'||v_tabname(c)); END LOOP; dbms_output.put_line('---------------------------------'); /* 批fetch 语法: fetch dynamic_cursor bulk collect into define_variable[,define_variable...] */ sql_str:='select empno,ename from emp'; sql_str:=sql_str||' order by empno desc'; OPEN v_mycursor FOR sql_str; --取 FETCH v_mycursor BULK COLLECT INTO v_tabid,v_tabname; --关 CLOSE v_mycursor; --输 FOR c IN v_tabid.first..v_tabid.last LOOP dbms_output.put_line('empno为'||v_tabid(c)||' 记录的NAME为'||v_tabname(c)); END LOOP; dbms_output.put_line('---------------------------------'); END; 2.------- forall DECLARE /*批forall 语法:动态字符串必须为insert/update/delete,不能为select forall index in lower..upper execute immediate dynamic_string using bind |bind(index)[,bind |bind(index)...] [{returning|return} bulk collect into bind_argument[,bind_argument...]]; */ TYPE sal_list IS TABLE OF number(8,2); TYPE name_list IS TABLE OF varchar2(); TYPE dept_list IS VARRAY() OF integer; v_depts dept_list:=dept_list(,,,,,,,); v_tabsal sal_list:=sal_list(); v_tabname name_list:=name_list(); sql_str varchar2(); BEGIN sql_str:='update emp set sal=sal*:arg1 where DEPTNO=:arg2'; sql_str:=sql_str||' returning ename,sal into :arg3,:arg4'; --给前面4个部门加薪%,并返回结果到集合. FORALL j IN 1..4 execute immediate sql_str using 1.,v_depts(j) RETURNING BULK COLLECT INTO v_tabname,v_tabsal; --显示结果 FOR j IN v_tabname.first..v_tabname.last LOOP dbms_output.put_line('雇员'||v_tabname(j) ||' 的薪水被提到'||v_tabsal(j)); END LOOP; dbms_output.put_line('---------------------------------'); --给后面4个部门加薪%,并返回结果到集合. FORALL j IN 5..8 execute immediate sql_str using 1.,v_depts(j) RETURNING BULK COLLECT INTO v_tabname,v_tabsal; --显示结果(用notfound判断是否有结果集) IF SQL%NOTFOUND THEN dbms_output.put_line('无数据更新'); ELSE FOR j IN v_tabname.first..v_tabname.last LOOP dbms_output.put_line('雇员'||v_tabname(j) ||' 的薪水被提到'||v_tabsal(j)); END LOOP; END IF; END; 3.用一个值绑定绑定名称相同的值. 把sql语句用begin end括起来就能实现 如: execute immediate 'begin calc_stats(:x,:x,:y,:x,:y); end;' using a,b; 将A与X绑定,当第二次出来不同名称时,与B绑定,以此类推

推荐整理分享批处理 动态sql(sqlserver批处理),希望有所帮助,仅作参考,欢迎阅读内容。

批处理 动态sql(sqlserver批处理)

文章相关热门搜索词:批处理执行sql文件,批量执行sql脚本,sqlplus批处理命令,sqlserver批处理,批处理执行sql文件,批处理执行sql脚本,sqlplus批处理命令,批处理执行sql,内容如对您有帮助,希望把文章链接给更多的朋友!

SQL Server 的逻辑查询处理步骤 最近我则刚刚收到了微软最有价值专家项目组寄来的该书的SQLServer英文版本-《InsideMicrosoftSQLServer:T-SQLQuerying》(

在sp_executesql中使用like字句的方法 declare@LikeSqlnvarchar();--定义一个like变量,如果是存储过程,此处可以存储过程的参数set@LikeSql=‘someword%';--把LikeSql变量赋值,可以赋值成'%xxxxxxxxxxxx%'decl

SQL 合并多行记录的方法总汇 SQL中合并多行记录的方法总汇:--1.创建表,添加测试数据CREATETABLEtb(idint,[value]varchar())INSERTtbSELECT1,'aa'UNIONALLSELECT1,'bb'UNIONALLSELECT2,'aaa'UNIONALLSELECT2,'bbb'UNION

标签: sqlserver批处理

本文链接地址:https://www.jiuchutong.com/biancheng/349099.html 转载请保留说明!

上一篇:SQL 合并多行记录的方法总汇(sql合并多条记录某一个字段)

下一篇:SQL Server 2008的逻辑查询处理步骤(sql server使用的是什么逻辑模型)

  • 补缴个税差额有时间规定吗
  • 土地出让金印花税计税依据
  • 建筑劳务公司工人工资计入什么科目
  • 房地产企业年报台账怎么填
  • 电子税务局税种核定怎么操作
  • 发票普票一个月能开多少
  • 行政单位工资支出标准
  • 企业赠送礼品是否涉税
  • 支付外币投资会计处理
  • 存货清查的结果
  • 经营结余年末结转
  • 事业单位收到借款分录
  • 收到的扶贫工作经费会计分录
  • 实收资本未到位可以注销吗?
  • 抵缴以前年度多缴所得税如何做会计分录?
  • 忘了报税算偷税漏税吗
  • 公司单独买医保
  • 建筑业简易征收的适用范围
  • 油罐车运输费用怎么算
  • 非居民企业能否认定为一般纳税人
  • 税务稽查的内容
  • 发生广告费用会计分录
  • 解析居民企业非货币性资产对外投资政策
  • 电器以旧换新的套路
  • 资产减值损失和信用减值损失的区别
  • 发生工伤事故先怎么办
  • 我想看一下这个月几日
  • 小规模纳税人的专票可以抵税吗
  • Ubuntu 16.04 Server Edition 英文版安装教程
  • 所得税季度预缴怎么算
  • 事业单位接受捐赠固定资产入账
  • symfony是最好的框架
  • 将时间序列转化为图像
  • 什么是AI工具
  • HttpServletRequest 获取参数
  • php解析xml文件
  • 商贸企业发生退税的原因
  • 年度预算的意义
  • 定额发票在哪查真伪
  • 预计负债初始计量的最佳估计数的确定是会计估计变更吗
  • 进项与销项区别
  • 以前年度盈余调整对应科目
  • 缴纳以前年度房产税分录
  • 劳务派遣合法吗
  • SQLServer 2008 CDC功能实现数据变更捕获脚本
  • 疫情期间提涨薪合适吗
  • 收到社保的退费是怎么回事
  • 财务报表的勾稽关系结构图
  • 房地产公司项目开发流程
  • 会计中应收账款属于什么科目
  • 应付账款长时间收不回怎么处理呢
  • 资本公积现金流量表里放在哪里
  • 融资租赁出租人与承租人之间形成债权债务关系
  • 委托加工合同如何签订
  • 一般纳税人印花税税率是多少
  • 资本公积和盈余公积的用途
  • 企业筹建期间利润计算
  • 研发费用账务处理实例
  • 什么是库存现金限额
  • 老毛桃winpe系统对注册表信息进行备份的方法
  • ubuntu安装超详细教程
  • win10蓝屏后黑屏
  • vmware centos8
  • mac笔记本如何设置不黑屏
  • 苹果服务器操作系统
  • windows8任务管理器在哪
  • certutil - decode/encode BASE64/HEX strings.Print symbols by HEX code
  • unity双击
  • 零基础搭建直播室与云直播平台
  • css回到页面顶部
  • unity text
  • android network
  • JavaScript fontsize方法入门实例(按照指定的尺寸来显示字符串)
  • python flask debug
  • 非涉密网络严禁什么
  • 湖北国税办税人是谁
  • 广东国税局局长是谁
  • 12366的客服辛苦吗
  • 世界近代史的改革有哪些
  • 卷筒纱窗拆卸
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设