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)(学习笔记)的更多相关文章

  1. Java程序猿的JavaScript学习笔记(汇总文件夹)

    最终完结了,历时半个月. 内容包含: JavaScript面向对象特性分析,JavaScript高手必经之路. jQuery源代码级解析. jQuery EasyUI源代码级解析. Java程序猿的J ...

  2. Java程序猿的JavaScript学习笔记(8——jQuery选择器)

    计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...

  3. Java程序猿的JavaScript学习笔记(3——this/call/apply)

    计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...

  4. Java程序猿的JavaScript学习笔记(1——理念)

    计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...

  5. Java程序猿的JavaScript学习笔记(10—— jQuery-在“类”层面扩展)

    计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...

  6. Java程序猿的JavaScript学习笔记(12——jQuery-扩展选择器)

    计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...

  7. Java程序猿的JavaScript学习笔记(9—— jQuery工具方法)

    计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...

  8. Java程序猿的JavaScript学习笔记(6——面向对象模拟)

    计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...

  9. Java程序猿的JavaScript学习笔记(5——prototype和Object内置方法)

    计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...

随机推荐

  1. spring---transaction(3)---源代码分析(事务的管理器PlatformTransactionManager)

    写在前面 由于实现事务功能的方式各不相同,Spring进行了统一的抽象,形成了PlatformTransactionManager事务管理器顶级接口(平台事务管理器),事务的提交.回滚等操作全部交给它 ...

  2. JSONP跨域访问百度实现搜索提示小案例

    一.JSONP简介 JSONP 全称 JSON with padding(填充式 JSON 或参数式 JSON),JSONP实现跨域请求的原理,就是动态创建<script>标签,然后利用& ...

  3. Node.js学习笔记(2) - Node.js安装及入门hello world

    今天来简单的记录一下Node.js的安装配置以及简单的入门 一.Node.js的安装 1.windows下的安装 windows下的安装很简单,只需要去官网http://nodejs.org中,找到w ...

  4. ecshop功能目录

    右上 开店向导 1设置商店的一些基本信息 商店的名字.地址.配送方式.支付方式等 2给商店添加一些商品 商品的名称.数量.分类.品牌.价格.描述等 3恭喜您,您的网店可以使用了!下面是一些常用功能的链 ...

  5. 详解Google Chrome浏览器(操作篇)(上)

    开篇概述 在上篇博客中详解Google Chrome浏览器(理论篇)一文中,主要讲解了Chrome 搜索引擎使用.Chrome安装和基本操作.Chrome 基本架构.多线程等原理性问题,这篇将重点讲解 ...

  6. SQL Server 中添加表注释

    今天在创建完表之后,发现没有办法给表添加注释说明,字段的注释可以在建表的时候就添加,上网查了一下使用SQL给表添加注释的方法,方法如下: -- 表加注释 EXEC sys.sp_addextended ...

  7. 转:如何解决“My mac 64-bit”问题

    童鞋们都知道Xcode会根据当前SDK在Run按钮旁边的选项栏中显示适合的Simulator供开发者选择,如下图: 但是有时候则错误显示“My mac 64-bit” ,这个明显不是我们想要的,如下图 ...

  8. Arduino + SmartAirFilter 制作智能感应的 PM 空气净化器

    先说 SmartAirFilters 知道 SmartAirFilters 源自微博上转发的非常火的那个帖子,和动辄七八千元的商用产品比,几百元的 SmartAirFilters(下面简称电扇) 确实 ...

  9. (原)用WebBrowser浏览Office Web Apps Server,除去“下载”按钮

    对,没错,如果你按关键字找到这篇随笔了,相信一定知道背景,以及我所说的是什么. 上一段子代码. private void timerHideButton_Tick(object sender, Eve ...

  10. [PHP] ubuntu16.04下 Phpstorm发布项目到apache

    reference to : http://blog.csdn.net/qq_23937195/article/details/72953308 在网上找的不靠谱,倒腾了大半天的,终于找到正确姿势QA ...