位置: 编程技术 - 正文

批处理 动态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使用的是什么逻辑模型)

  • 企业所得税和增值税重复收税了吗
  • 含税价和不含税计算公式
  • 结转增值税会计摘要
  • 银行开出的发票可以进行税抵扣吗
  • 技术服务费怎么算成本
  • 长期借调人员差旅费是谁的责任
  • 已认证红冲需要退回发票吗
  • 红字信息表跨月撤销有什么影响吗
  • 旧设备换新设备文案
  • 报销单和付款单的区别
  • 建筑行业开工程票,材料抵扣有没有比例
  • 土地款抵扣增值税申报
  • 银行取现怎么取
  • 咨询服务费怎么结转成本
  • 雇主责任险是否属于财产保险
  • 已经入账的发票能把原始票据退回吗
  • 单次劳务费税率
  • 加油费发票7月1日开具
  • 税收强制执行措施包括哪些
  • 单位报销的发票
  • 民办非企业所得税免税政策
  • 如何在国税网站下载财务报表
  • 公司没有实缴可以破产么
  • 短期投资算债权吗
  • 福利费进行税额转出
  • 上年销项税额录错了,怎么调整
  • 企业内部领用产品会计处理
  • 建筑工程购买的家用清洁电器能勾选认证吗
  • windows 安装
  • 工程机械设备租赁价格
  • 情人节海报怎么画简单
  • macos big sur操作
  • 子公司接受母公司无偿划转的房屋如何缴纳房产税
  • 无形资产的摊销方法
  • 路由器重启后电视放不出来咋办
  • 纳库鲁的念能力
  • phpstorm创建php文件
  • 银行同业存放业务管理办法
  • 结转成本 凭证
  • 辞退补偿金计算
  • 土地作为无形资产摊销年限
  • 企业所得税应按季预缴,年末汇算清缴
  • 计提工会经费如何做账
  • 发生了销售交易但没有在销售日记
  • 车辆违章有几种处理方法
  • 筹建期的开办费开业后如何处理
  • 企业支付宝收款码是进公账吗
  • 应交增值税一转出未交增值税
  • 企业利润分配的内容
  • 一般纳税人加工费怎么做账
  • MySQL ALTER命令使用详解
  • 查看linux服务器内存命令
  • win10重置登录
  • VISTA 下如何通过红外线连接外接设备 以索尼手机为例
  • 如何将windows文件复制到ubuntu
  • centos查看当前yum源
  • win7系统的虚拟内存在哪里
  • windows任务栏变色
  • centos怎么打开软件
  • win7更改文件名的方法
  • png批量转换成jpg
  • 微信小程序自定义相机
  • vue自定义过滤器的语法
  • bash shell control z
  • 命令行批处理文件
  • jQuery通过ajax快速批量提交表单数据
  • pythoni脚本
  • js debounce实现
  • unity多开同一个项目的方法
  • 安卓监听功能
  • android简单app实例
  • 代建工程如何缴纳增值税
  • 金税盘显示证书口令错误
  • 为何新能源汽车在东北推广不佳
  • 开普票需要提供合同吗
  • 两江新区钓鱼地方
  • 税务局自助终端
  • 车船税发票丢了怎么补办
  • 增值税发票选择确认平台已勾选未确认的发票怎么撤销?
  • 深圳市福田区行政代码是多少
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设