位置: 编程技术 - 正文

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

  • 税务缴税流程
  • 公司法人已变更,前法人被失信
  • 水泥建材公司
  • 劳务服务公司不含派遣,能接外包吗
  • 手工账写错字怎么改呢
  • 一般纳税人财务报表月报还是季报
  • 库存商品进项税额转出分录怎么写
  • 向其他单位无偿提供服务的不需缴纳增值税
  • 固定资产暂估入账的账务处理
  • 银行利息回单怎么打印
  • 生产成本明细科目是原材料的名称吗
  • 土地款印花税计入无形资产吗
  • 专票打印的时候密码区压线了能用吗
  • 增值税留抵税额账务处理
  • 银行异地汇款抽奖需要扣缴个人所得税吗?
  • 个人缴纳工会费可以在工资里面扣交吗
  • 个体户 季报
  • 新个税申报身份怎么填
  • 资产负债表中其他流动资产怎么计算
  • 委托收款有哪些
  • 企业工资和社保缴费基数
  • 其它综合收益算利润吗
  • 夫妻房产分割哪家好
  • 在银行买理财产品
  • 电脑装系统分区出现错误
  • 收到采购发票未开票
  • mac笔记本装了双系统后打开苹果系统和原来一样吗
  • php-cpp
  • 辞退员工补偿标准是n+1还是2n
  • 招行网银专业版怎么登陆
  • 非货币性资产交换补价大于25%的会计处理
  • 未确认融资费用账务处理
  • php访问数据库的一般步骤
  • 人工智能大模型上市公司
  • 电子税务局附加税退税在哪看
  • 营业外收入的会计科目编码
  • 租金计入主营业务成本吗
  • idea快速生成lambda
  • php网站修改
  • sql性能优化方法
  • 金税四期的特点
  • 以前年度多计提增值税
  • 施工现场补助规定
  • 水利基金应税项填的数据怎么查
  • 中标的工程交易怎么处理
  • 兼职会计人员的职责
  • 厂区地面硬化施工方案
  • 固定资产累计折旧计算公式
  • 房产税土地税会减免吗
  • 简易计税项目税率
  • 投资公司如何运作
  • 半成品是指正在各生产阶段加工的产品
  • 变更公司股东要收费吗
  • 收到赠送样品如何入账
  • 在途物资入库怎么记账
  • windows2003企业版sp2密钥
  • linux开机启动ftp
  • ubuntu设置关闭按钮在右侧
  • centos w命令
  • winctlad.exe - winctlad是什么进程
  • win10升级后无法进入系统一直重启
  • windows xp无法更改密码
  • ubuntu发行版介绍
  • ubuntu tcp
  • 任务管理器快捷键ctrl+alt+
  • vivo渠道服容易被找回吗
  • win7系统如何查看隐藏文件夹
  • win8.1安装包
  • cocos2dx在不同安卓机型下scrollview裁剪失败
  • linux终端命令行和输出在一行
  • typeof的缺点
  • c#中的数组
  • android.view.window.addflags
  • jquery自动加载的方法
  • js如何实现重置功能
  • 测验2:python基本图形绘制
  • js实现dialog
  • 四川省一般纳税人资格证明
  • 境外承包工程款收入
  • 一手房有契税和个税吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设