位置: 编程技术 - 正文

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

  • 年末暂估成本是否进行纳税调整处理
  • 销项税额和进项税额发票怎么区别
  • 工资储备金制度
  • 在外地预缴的印花税如何扣除
  • 国家税务登记证是什么样子的
  • 劳务发票要交多少税费
  • 应交税费的借贷方向
  • 注册资本没有全额怎么办
  • 转让财产损失是指什么
  • 专票红冲要不要收回发票联
  • 股东退股如何清算表格
  • 高速费用支付宝的怎么开票
  • 减资账务处理基准日 会计视野
  • 合同款未付怎么写欠条
  • 周转材料计入什么账
  • 购买商品加包装后出售账务处理
  • 金融服务利息
  • 发生的成本作为存货处理
  • 非盈利组织捐赠支出
  • 农产品发票有抵税吗
  • 合作社能否开具专用发票
  • 增值税计提金额
  • 培训学校税收筹划
  • 企业的其他业务收入有
  • 企业转租房屋如何开票
  • 基金投资了能随时取出吗
  • 超市开具预付卡发票不征税发票上税吗
  • 天猫的软件服务费指的是什么
  • php的file函数
  • 抵债资产账务处理程序
  • 斋普尔的景点
  • 分配税后利润会计分录
  • 索洛维茨在哪
  • thinkphp3.x中display方法及show方法的用法实例
  • 微信小程序slot
  • 路由vue-router
  • vue前端常见面试题
  • javascriptj
  • 帝国cms移动端设置教程
  • 织梦如何使用
  • 帝国CMS根据不同会员组显示不同内容的方法
  • 总分机构纳税
  • 归还股东借款要交税吗
  • 个人独资企业所得税申报流程
  • 社保是当月计提当月交吗
  • 资产减值损失借贷方向
  • 月销售额不超过15万的免征增值税
  • 借别人账户过钱
  • 会计利润调增调减项目
  • 营业税暂行实施细则
  • 长期股权投资两种核算方法的区别
  • 机器配件属于什么类型的商品
  • 社保基数在哪里申报
  • 预付工资怎么入账
  • 会计错账的更正方法及适用范围
  • 电脑主板bios设置图解
  • 写出linux安装的详细步骤
  • Ghost XP SP3电脑市场专业装机版 V5.5
  • win8.1 ie浏览器
  • win8开机界面
  • linux 使用
  • win8系统触摸板按键不能用
  • [置顶] 此外,车牌号:458143(懂得都懂[吃瓜])
  • js的forin
  • html5的全局属性
  • 推荐一篇故事并说明理由
  • shell命令tee
  • python3的urllib
  • nodejs fabric
  • android 点击按钮如果数据库有数据就更新,没有就创建
  • java栈怎么写
  • unityshader插件
  • jQuery+formdata实现上传进度特效遇到的问题
  • psi python
  • 陕西省地方税务局关于调整土地增值税预征率的公告
  • 返利是否合法
  • 为什么增值税是销项税减进项税
  • 税控盘服务费必须每年交吗为什么
  • 河北航天信息技术有限公司官网
  • 企业所得税优惠事项管理目录2023
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设