动态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教程开始入门了. 下面只是我个人的记录,高手请绕道: 一. 在安装之前,我们可以用下面这个命令通过开放端 ...
随机推荐
- ZeptoLab Code Rush 2015 B. Om Nom and Dark Park DFS
B. Om Nom and Dark Park Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/5 ...
- mySql---or和in的效率问题(和<=、>=、between之间的关系)
写在前面: 本文是直接拿取的别人的实验数据作参考,然后对数据作分析. 参考网友的测试数据结果: 在网上一直看到的是or和in的效率没啥区别,一直也感觉是这样,前几天刚好在看<mysql数据库开发 ...
- 重温PHP之选择排序
思路:一组数中,选出最小者与第一个位置数交换,然后在剩余数中再找最小者与第二个位置数交换,依次类推,循环到倒数第二个数和最后一个数比较为止. 测试代码: 结果:
- 如何使用 sqlite3 访问 Android 手机的数据库
如何设置Android手机的sqlite3命令环境 http://www.cnblogs.com/linjiqin/archive/2011/11/28/2266619.html SQLite3 为a ...
- jquery easyui combobox设置默认选中第一项
combobox的内容是从后台获取的json, js截取: var data = $('#id').combobox('getData'); $("#id ").combobox( ...
- 报错:具有键"..."的ViewData项属于类型"...",但它必须属于类型"IEnumerable<SelectListItem>"
报错:具有键"..."的ViewData项属于类型"...",但它必须属于类型"IEnumerable<SelectListItem>&q ...
- mysql 主从复制原理(转)
本文转自https://blog.csdn.net/php_younger/article/details/59673879 mysql 主从复制原理 主从形式 mysql主从复制 灵活 一主一从 ...
- linux常用命令集锦
linux 查看所有用户所在组 vi /etc/group 一个用户可以属于多个组,查看用户所属的组,groups + 用户名 linux 查找文件命令 find -name 文件名 在 ...
- Unity中一键创建常用文件夹
Unity中一键创建常用文件夹 说明 项目测试版本Unity5.3. 这个一个小工具:功能非常简单,就是一键给新建工程添加所有文件夹.到此结束. 但是具体咋操作呢? 与把大象装进冰箱一样,三步,下载代 ...
- 《Windows核心编程》第2章——字符和字符处理
ANSI和UNICODE 计算char和wchar_t的长度都一样,都是5,但是二者在内存中的布局实际上是不同的: