动态SQL(学习笔记)
动态SQL
EXECUTE IMMEDIATE 动态SQL字符串 [BUCK COLLECT] INTO 自定义的变量,,|记录类型
USING [IN |OUT|IN OUT]绑定的参数]
[RETURNING |RETURN ][BULK COLLECT]INTO 绑定参数
示例1
--根据用记输入的员工ID来输入员工信息
DECLARE
v_sql_smst VARCHAR2(200); --定义变量用来存放SQL语句
v_emp emp%ROWTYPE; --定义量行变量
v_id emp.empno%TYPE:=&empno; --定义用户输入的ID
BEGIN
v_sql_smst:='SELECT * FROM EMP WHERE EMPNO=:EMPNO';
EXECUTE IMMEDIATE v_sql_smst INTO v_emp USING v_id;
dbms_output.put_line('员工编号: '||v_id||' 姓名:'||v_emp.ename||' 职位'||v_emp.job);
END;
动态游标返回多行数据
--根据输入的工资,返回员工信息
DECLARE
cur_emp SYS_REFCURSOR; --定义游标
v_sal emp.sal%TYPE:=&sal; --定义用户输入工资
v_emp emp%ROWTYPE; --定义行变量
BEGIN
OPEN cur_emp FOR 'SELECT * FROM EMP WHERE SAL>:SAL ORDER BY SAL' USING v_sal; --打开游标并执行SQL查询多行,返回结果 dbms_output.put_line('工资高于 '||v_sal||'员工有:');
LOOP
FETCH cur_emp INTO v_emp;
EXIT WHEN cur_emp%NOTFOUND;
dbms_output.put_line('员工编号:'||v_emp.empno||' 姓名:'||v_emp.ename||' 工资:'||v_emp.sal);
END LOOP;
CLOSE cur_emp;
END;
--动态创建表和插入表
DECLARE
v_sql_creat VARCHAR2(220):='CREATE TABLE stuinfo(ID NUMBER(5),NAME VARCHAR2(20),sex VARCHAR2(5))';
v_into1 VARCHAR2(220):='INSERT INTO stuinfo VALUES(1,''张三'',''男'')';
v_into2 VARCHAR2(220):='INSERT INTO stuinfo VALUES(2,''李四'',''女'')';
BEGIN
EXECUTE IMMEDIATE v_sql_creat;
EXECUTE IMMEDIATE v_into1;
EXECUTE IMMEDIATE v_into2;
commit
END;
--动态增加
DECLARE
v_id stuinfo.id%TYPE:=&ID;
v_name stuinfo.name%TYPE:='&name';
v_sex stuinfo.sex%TYPE:='&sex';
v_into1 VARCHAR2(220):='INSERT INTO stuinfo VALUES(:id,:name,:sex)'; BEGIN
EXECUTE IMMEDIATE v_into1 USING v_id,v_name,v_sex;
COMMIT;
END;
--动态删除
DECLARE
v_id stuinfo.id%TYPE:=&ID; v_sql_del VARCHAR2(220):='delete from stuinfo where id=:id ';
BEGIN
EXECUTE IMMEDIATE v_sql_del USING v_id; EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
END;
--动态更新
--动态更新
DECLARE
v_id stuinfo.id%TYPE:=&ID;
v_name stuinfo.name%TYPE:='&name';
v_sex stuinfo.sex%TYPE:='&sex';
v_sql_update VARCHAR2(200):='UPDATE stuinfo SET name=:1,sex=:2 where id=:3';
BEGIN
EXECUTE IMMEDIATE v_sql_update USING v_name,v_sex,v_id;
IF SQL%ROWCOUNT > 0 THEN
COMMIT;
dbms_output.put_line('ok');
END IF;
EXCEPTION
WHEN OTHERS THEN
dbms_output.put_line(SQLERRM);
END;
--USING中的绑定顺序与执行语句中的顺序要一致
SELECT * FROM stuinfo;
--动态查询
DECLARE
stu stuinfo%ROWTYPE;
cur_r SYS_REFCURSOR;
v_id stuinfo.id%TYPE:=&ID;
v_sql_sel VARCHAR2(220):='select * from stuinfo where id=:id ';
BEGIN
OPEN cur_r FOR v_sql_sel USING v_id;
LOOP
FETCH cur_r INTO stu;
EXIT WHEN cur_r%NOTFOUND;
dbms_output.put_line(stu.id||' '||stu.name||' '||stu.sex);
END LOOP; EXCEPTION
WHEN OTHERS THEN
dbms_output.put_line(SQLERRM);
END;
动态SQL(学习笔记)的更多相关文章
- ORALCE PL/SQL学习笔记
ORALCE PL/SQL学习笔记 详情见自己电脑的备份数据资料
- mybatis原理分析学习记录,mybatis动态sql学习记录
以下个人学习笔记,仅供参考,欢迎指正. MyBatis 是支持定制化 SQL.存储过程以及高级映射的持久层框架,其主要就完成2件事情: 封装JDBC操作 利用反射打通Java类与SQL语句之间的相互转 ...
- Oracle之PL/SQL学习笔记
自己在学习Oracle是做的笔记及实验代码记录,内容挺全的,也挺详细,发篇博文分享给需要的朋友,共有1w多字的学习笔记吧.是以前做的,一直在压箱底,今天拿出来整理了一下,给大家分享,有不足之处还望大家 ...
- SQL学习笔记
SQL(Structured Query Language)学习笔记 [TOC] Terminal登录数据库 1.登录mysql -u root -p ; 2.显示所有数据库show database ...
- mybatis 动态sql 的笔记 以及标签
MyBatis常用OGNL表达式 e1 or e2 e1 and e2 e1 == e2,e1 eq e2 e1 != e2,e1 neq e2 e1 lt e2:小于 e1 lte e2:小于等于, ...
- sql学习笔记--存储过程
存储过程(stored procedure)有时也称sproc,它是真正的脚本,更准确地说,它是批处理(batch),但都不是很确切,它存储与数据库而不是单独的文件中. 存储过程中有输入参数,输出参数 ...
- [Oracle] PL/SQL学习笔记
-- 1. 使用一个变量 declare -- Local variables here v_name ); begin -- Test statements here select t.user_n ...
- [SQL学习笔记][用exists代替全称量词 ]
学习sql的必经问题. 学生表student (id学号 Sname姓名 Sdept所在系) 课程表Course (crscode课程号 name课程名) 学生选课表transcript (studi ...
- SQL学习笔记——SQL初入门,Ubuntu下MySQL的安装
刚开始接触sql,于是准备在Ubuntu下学习sql,就跟着itercast的sql教程开始入门了. 下面只是我个人的记录,高手请绕道: 一. 在安装之前,我们可以用下面这个命令通过开放端 ...
随机推荐
- Python知识(5)--绘图
Python学习变得很方便,不用任何安装一个浏览器也能够使用学习,比如Jupyter就是很好的一个网络工具,提供了编辑编译展示等强大的功能,网址如下: https://try.jupyter.org/ ...
- 你了解for循环吗
大家学什么语言都会学for循环 可是你真的会用吗 通常写法都是 var arr=arr[1,2,3,4]; for(var i=0;i<arr.length;i++){ console.log( ...
- 丢失或损坏NDF文件如何附加数据库
在论坛看到有人遇到 NDF文件丢失并且没有备份,所以无法成功附加数据库.在网上也看到过很多回答是如果没有NDF就无法附加成功. 其实我自己测试下来即使没有NDF也是可以成功附加的.但是有条件,丢失的N ...
- SPOJ 3267. D-query (主席树,查询区间有多少个不相同的数)
3267. D-query Problem code: DQUERY English Vietnamese Given a sequence of n numbers a1, a2, ..., an ...
- (provider: 共享内存提供程序, error: 0 - 管道的另一端上无任何进程。) (Microsoft SQL Server,错误: 233)
------------------------------ 无法连接到 IFCA-LIUWEI/SQL2005. ------------------------------其他信息: 已成功与服务 ...
- MVC文件上传09-使用客户端jQuery-File-Upload插件和服务端Backload组件让每个用户有专属文件夹,并在其中创建分类子文件夹
为用户创建专属上传文件夹后,如果想在其中再创建分类子文件夹,该怎么做?可以在提交文件的视图中再添加一个隐藏域,并设置 name="uploadContext". 相关兄弟篇: MV ...
- Tomcat 7 的七大新特性
英文原文:Top 7 Features in Tomcat 7: The New and the Improved Tomcat的7引入了许多新功能,并对现有功能进行了增强.很多文章列出了Tomcat ...
- 近看到的机器学习、NLP相关书单
书单再多,不去读,也是白搭~~ 水木上的machine learning书单:http://www.newsmth.net/bbscon.php?bid=5&id=34859&ftyp ...
- 【BZOJ】【3771】Triple
生成函数+FFT Orz PoPoQQQ 这个题要算组合的方案,而且范围特别大……所以我们可以利用生成函数来算 生成函数是一个形式幂级数,普通生成函数可以拿来算多重集组合……好吧我承认以上是在瞎扯→_ ...
- scala编程第17章学习笔记(2)——集和映射
默认情况下在使用“Set”或“Map”的时候,获得的都是不可变对象.如果需要的是可变版本,需要先写明引用. 如果同一个源文件中既要用到可变版本,也要用到不可变版本的集合或映射,方法之一是引用包含了可变 ...