PL/SQL之DBMS_SQL程序包使用(1)(学习笔记)
dbms_sql程序包
dbms_sql程序包是系统提供给我们的另一种使用动态SQL的方法:
使用DBMS_SQL包实现动态的SQL的步骤如下:
1.将要执行的SQL语句或者一个语句放到一个字符串变量中
2.使用DBMS_SQL包的parse过程来分析该字符串
3.使用DBMS_SQL包的bind_varable过程绑定变量
4.使用DMBS_SQL包的execute函数和执行语句:
示例1:
--使用DBMS_SQL包执行DDL语句
--需求:使用DBMS_SQL包根据用户输入的表名,字段名及字段类型建表
DECLARE
TABLE_NAME VARCHAR2(20); --表名
FIELD1 VARCHAR2(20); --字段名
DATATYPE1 VARCHAR2(20); --字段类型
FIELD2 VARCHAR2(20); --字段名
DATATYPE2 VARCHAR2(20); --字段类型
V_CURSOR NUMBER; --定义光标
V_STRING VARCHAR2(200); --定义字符串变量
V_ROW NUMBER; --行数
BEGIN
TABLE_NAME := 't2';
FIELD1 := 'id';
DATATYPE1 := 'NUMBER';
FIELD2 := 'name';
DATATYPE2 := 'VARCHAR2(20)';
V_CURSOR := DBMS_SQL.OPEN_CURSOR; --为处理打开光标
V_STRING := 'create table ' || TABLE_NAME || '(' || FIELD1 || ' ' ||
DATATYPE1 || ',' || FIELD2 || ' ' || DATATYPE2 || ')';
DBMS_SQL.PARSE(V_CURSOR, V_STRING, DBMS_SQL.NATIVE); --分析语句
V_ROW := DBMS_SQL.EXECUTE(V_CURSOR); --执行语句
DBMS_SQL.CLOSE_CURSOR(V_CURSOR); --关闭光标
DBMS_OUTPUT.PUT_LINE(V_ROW);
EXCEPTION
WHEN OTHERS THEN
DBMS_SQL.CLOSE_CURSOR(V_CURSOR); --关闭光标
END;
SELECT * FROM t2;
示例2:
--使用DBMS_SQL包执行DML语句insert
DECLARE
ID NUMBER:=&ID;
NAME VARCHAR2(20):='&name';
v_cursor NUMBER; --定义光标
v_string VARCHAR2(200); --定义字符串变量
v_row NUMBER; --行数变量
BEGIN v_cursor:=dbms_sql.open_cursor; --打开光标
v_string:='insert into t2 values(:id,:name)';
dbms_sql.parse(v_cursor,v_string,dbms_sql.native); --分析语句
dbms_sql.bind_variable(v_cursor,'id',ID); --绑定变量
dbms_sql.bind_variable(v_cursor,'name',NAME); --绑定变量
v_row:=dbms_sql.execute(v_cursor); --执行动态SQL
COMMIT;
dbms_sql.close_cursor(v_cursor); --关闭光标
EXCEPTION
WHEN OTHERS THEN
dbms_sql.close_cursor(v_cursor); --关闭光标 END;
示例3:
-使用DBMS_SQL包执行DML语句
--需求:使用DBMS_SQL包将表中t2的id=1的名称改为Marry
DECLARE
ID NUMBER := &ID;
NAME VARCHAR2(20) := '&NAME';
V_CURSOR NUMBER; --定义光标
V_STRING VARCHAR2(200); --定义字符串变量
V_ROW NUMBER; --行数变量
BEGIN V_CURSOR := DBMS_SQL.OPEN_CURSOR; --打开光标
V_STRING := 'update t2 set name=:name where id=:id';
DBMS_SQL.PARSE(V_CURSOR, V_STRING, DBMS_SQL.NATIVE); --分析语句
DBMS_SQL.BIND_VARIABLE(V_CURSOR, 'name', NAME); --绑定变量
DBMS_SQL.BIND_VARIABLE(V_CURSOR, 'id', ID); --绑定变量
V_ROW := DBMS_SQL.EXECUTE(V_CURSOR); --执行动态SQL
COMMIT;
DBMS_SQL.CLOSE_CURSOR(V_CURSOR); --关闭光标
EXCEPTION
WHEN OTHERS THEN
DBMS_SQL.CLOSE_CURSOR(V_CURSOR); --关闭光标
RAISE;
END;
示例4:
--使用DBMS_SQL包执行DML语句delete
DECLARE
ID NUMBER := &ID; --定义id
V_CURSOR NUMBER; --定义光标
V_ROW NUMBER; --定义行数
V_STRING VARCHAR2(200); --定义字符串变量
BEGIN V_CURSOR:=DBMS_SQL.OPEN_CURSOR; --打开光标
V_STRING := 'delete from t2 where id=:id';
DBMS_SQL.PARSE(V_CURSOR, V_STRING, DBMS_SQL.NATIVE); --分析语句
DBMS_SQL.BIND_VARIABLE(V_CURSOR, 'id', ID); --绑定字段ID
V_ROW := DBMS_SQL.EXECUTE(V_CURSOR); --执行动态SQL
COMMIT;
DBMS_SQL.CLOSE_CURSOR(V_CURSOR); --关闭光标
EXCEPTION
WHEN OTHERS THEN
DBMS_SQL.CLOSE_CURSOR(V_CURSOR); --关闭光标
RAISE;
END;
查询
--示例五:
使用DBMS_SQL包执行DML语句select DECLARE
V_ID emp.deptno%TYPE:= &ID; --定义变量
V_STRING VARCHAR2(200); --定义字符串变量
V_EMPNO NUMBER;
V_NAME VARCHAR2(20);
V_CURSOR NUMBER; --定义光标
V_ROW NUMBER; --定义行
BEGIN v_cursor:=dbms_sql.open_cursor; --打开光标
V_STRING := 'select empno,ename from emp where deptno=:deptno';
DBMS_SQL.PARSE(V_CURSOR, V_STRING, DBMS_SQL.NATIVE); --分析语句
DBMS_SQL.BIND_VARIABLE(V_CURSOR, 'deptno', V_ID); --绑定字段 DBMS_SQL.DEFINE_COLUMN(V_CURSOR,1,V_EMPNO);
DBMS_SQL.DEFINE_COLUMN(V_CURSOR,2,V_NAME,20); --如果是有长度需要指定找长度 V_ROW := DBMS_SQL.EXECUTE(V_CURSOR); --执行 LOOP
EXIT WHEN DBMS_SQL.FETCH_ROWS(V_CURSOR) <= 0; --解析游标,
DBMS_SQL.COLUMN_VALUE(V_CURSOR,1,V_EMPNO); --将当前行的数据写入上面对应的列中。
DBMS_SQL.COLUMN_VALUE(V_CURSOR,2,V_NAME);
DBMS_OUTPUT.PUT_LINE('no:' || V_EMPNO || ' enmae:' || V_NAME); --输出内容
END LOOP;
DBMS_SQL.CLOSE_CURSOR(V_CURSOR); --关闭游标
END;
PL/SQL之DBMS_SQL程序包使用(1)(学习笔记)的更多相关文章
- Java程序猿的JavaScript学习笔记(汇总文件夹)
最终完结了,历时半个月. 内容包含: JavaScript面向对象特性分析,JavaScript高手必经之路. jQuery源代码级解析. jQuery EasyUI源代码级解析. Java程序猿的J ...
- Java程序猿的JavaScript学习笔记(8——jQuery选择器)
计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...
- Java程序猿的JavaScript学习笔记(3——this/call/apply)
计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...
- Java程序猿的JavaScript学习笔记(1——理念)
计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...
- Java程序猿的JavaScript学习笔记(10—— jQuery-在“类”层面扩展)
计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...
- Java程序猿的JavaScript学习笔记(12——jQuery-扩展选择器)
计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...
- Java程序猿的JavaScript学习笔记(9—— jQuery工具方法)
计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...
- Java程序猿的JavaScript学习笔记(6——面向对象模拟)
计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...
- Java程序猿的JavaScript学习笔记(5——prototype和Object内置方法)
计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...
随机推荐
- [Visual Studio] 安装清单
VS安装位置要求路径必须是英文,且位于Program Files (x86)文件夹下. 下载工具vs_Professional.exe:https://pan.baidu.com/s/1jHRjiia ...
- Java_基础知识回顾
1.ByteArrayInputStream. ByteArrayOutputStream String str = "ZHANGSAN"; //System.out.printl ...
- [Dynamic Language] Python3.7 源码安装 ModuleNotFoundError: No module named '_ctypes' 解决记录
Python3.7 源码安装 ModuleNotFoundError: No module named '_ctypes' 解决记录 源码安装时报错 File "/home/abeenser ...
- empireCMS 帝国cms功能总结
上1 系统 对应左菜单为 系统设置 系统参数设置 基本属性 站点名称,网站地址,关键字,简介,首页模式,php时间, 前台功能,操作时间,来源地址,验证码 用户属性 后台验证码开启,次数限制,时间限制 ...
- cocos2d-x3.0 macOS下配置Android开发环境以及使用cocos2d-console来新建执行project
下面是子龙山人录制的关于cocos2d-x3.0的视频教程,macOS下配置Android开发环境.使用cocos2d-console来新建执行project.怎样执行cocos2d-x 3.0win ...
- 如何从Windows远程上传文件到Linux(例如CentOS 7)
一.先看Linux系统是否安装有vsftp软件(vs是very secure的意思) [root@localhost /]# rpm -qa | grep vsftpdvsftpd-3.0.2-9.e ...
- startActivities的使用
和startActivity()类似,startActivities也是界面跳转,可是传入的intent是一个数组,也就是说是多个. 如果我传入的是两个intent: I1和I2.则调用startAc ...
- mysql---总体备份和增量备份
总体备份: 对整张表或者整个数据库甚至全部数据库进行备份. 增量备份: 对某一范围内的数据进行备份. 1.总体备份: 对表进行备份: 针对存储引擎为myisam的表,能够直接复制frm.myd.myi ...
- C#中数据库连接的几种方式
[转载]原文出处http://blog.163.com/ny_lonely/blog/static/188924273201161112931892/ 1.配置文件链接. 利用VS.NET开发平台 ...
- iOS-实现最简单的画线功能 . 转
前提:CoreGraphics.framework - (void)viewDidLoad { [super viewDidLoad]; UIImageView *imageView=[[UIImag ...