动态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教程开始入门了. 下面只是我个人的记录,高手请绕道: 一. 在安装之前,我们可以用下面这个命令通过开放端 ...
随机推荐
- PCI DSS合规建设ASV扫描介绍
最近查一些Nessus.Nexpose漏洞扫描工具相关资料,工具介绍都会提到一些审计功能,其中最常见的就是PCI DSS合规性审计.从网上找到一篇介绍较详尽的文章,与大家分享. 原文摘自:http:/ ...
- Centos安装Perforce
Author: JinDate: 20140827System: CentOS release 6.5 (Final) 参考:http://www.cnblogs.com/itech/archive/ ...
- Spring <context:annotation-config/> 解说(转)
在基于主机方式配置Spring的配置文件中,你可能会见到<context:annotation-config/>这样一条配置,他的作用是式地向 Spring 容器注册 AutowiredA ...
- IOS快速入门
http://www.cnblogs.com/wellsoho/p/4313312.html
- [Mysql]MySQL 服务无法启动。
摘要 在官网下载了mysql,版本mysql-5.7.17-winx64,免安装的压缩包,解压后.放在MySql的文件夹中.电脑系统win10 x64. 配置文件 # For advice on ho ...
- .Net高级技术——对象序列化
对象序列化 “序列化是将一个对象保存到存储介质上或者将对象进行转换使之能够在网络上传送的行为”.通俗一点的解释,序列化就是把一个对象保存到一个文件或数据库字段中去,反序列化就是从文件或者数据库中取出数 ...
- 点集转线python最优代码
import arcpy import os import types def convertPoints(): arcpy.env.overwriteOutput = True inPts = ar ...
- Eclipse——浏览功能
一,打开变量声明 或选择opendeclaration就能够查看变量的定义 二.打开类型层次结构(open type hierarchy) 或者点击F4 watermark/2/text/aHR0cD ...
- VC调用QT的UIDLL
//VC程序#include "../QTDLL/ExportDll.h" int _tmain(int argc, _TCHAR* argv[]) { printf(" ...
- latex用法疑难解析
latex用法疑难解析 1.问题:如何生成ps(PostScript)文件? 回答: 方法有二 (1)用dvips这个工具,在WinEdt编辑器中专门有一个按钮: (2)如果使用windows系统的话 ...