`
tangzililiang
  • 浏览: 17028 次
  • 性别: Icon_minigender_1
  • 来自: 成都
文章分类
社区版块
存档分类
最新评论

oracle 动态sql 绑定变量

阅读更多
--无绑定变量的非SQL查询
DECLARE

  v_sql varchar2(4000);
BEGIN   --使用EXECUTE IMMEDIATE执行动态SQL,最后提交事物
  v_sql := 'CREATE TABLE account('||' id NUMBER(3) NOT NULL,'||
        'name VARCHAR2(50) NOT NULL,'||' balance NUMBER(8,2) NOT NULL,'||
        ' btime DATE NOT NULL)';
  EXECUTE IMMEDIATE v_sql;
  v_sql :='INSERT INTO account (id,name,balance,btime)'||
        ' VALUES (1,''张三'',2000.1,TO_DATE(''12-02-2008'',''dd-mm-yyyy''))';
  EXECUTE IMMEDIATE v_sql;
    v_sql :='INSERT INTO account (id,name,balance,btime)'||
        ' VALUES (2,''李四'',530,TO_DATE(''10-12-2008'',''dd-mm-yyyy''))';
  EXECUTE IMMEDIATE v_sql;
    v_sql :='INSERT INTO account (id,name,balance,btime)'||
        ' VALUES (3,''王五'',1631,TO_DATE(''11-05-2007'',''dd-mm-yyyy''))';
  EXECUTE IMMEDIATE v_sql;
    v_sql :='INSERT INTO account (id,name,balance,btime)'||
        ' VALUES (4,''小强'',910.3,TO_DATE(''12-04-2008'',''dd-mm-yyyy''))';
  EXECUTE IMMEDIATE v_sql;
    v_sql :='INSERT INTO account (id,name,balance,btime)'||
        ' VALUES (5,''小周'',8700,TO_DATE(''11-11-2008'',''dd-mm-yyyy''))';
  EXECUTE IMMEDIATE v_sql;
EXCEPTION
  WHEN OTHERS THEN
       DBMS_OUTPUT.PUT_LINE(SQLERRM);
END;

drop table account


--带固定数目绑定变量的非SQL查询
DECLARE

  v_sql     varchar2(4000);

  v_balance account.balance%TYPE;

  v_name account.name%TYPE;
BEGIN       --使用EXCUTE IMMEDIATE语句执行SQL字符串,使用USING将绑定变量与输入的ID和账户金额进行绑定,
            --将更新后的账户名称与账户余额返回到变量中
  v_sql := 'UPDATE account SET balance=:balance WHERE id=:id'||
        ' RETURNING name,balance INTO:1,:2';
  EXECUTE IMMEDIATE v_sql
     USING &balance,&id          --把绑定参数的值传给绑定变量在sql语句中分别有指定
     RETURNING INTO v_name, v_balance;        --返回的数据传给两个定义变量
  IF SQL%NOTFOUND THEN      --假如没找到就抛出一个异常
     RAISE_APPLICATION_ERROR(-20001,'无效的账户ID');
  END IF;
  COMMIT;
  DBMS_OUTPUT.PUT_LINE(v_name || '  ' || v_balance);
EXCEPTION                   
  WHEN OTHERS THEN
       DBMS_OUTPUT.PUT_LINE(SQLERRM);
END;


--带固定数目列和绑定变量的SQL查询
DECLARE
     
       TYPE account_table_type IS TABLE OF account%ROWTYPE INDEX BY BINARY_INTEGER;
     
       account_table account_table_type;
     
       account_cursor SYS_REFCURSOR;
     
       v_sql   varchar2(4000);
BEGIN
       v_sql := 'SELECT * FROM account WHERE TO_CHAR(btime,''YYYY'') = :year';  --通过年份使用绑定变量
       OPEN account_cursor FOR v_sql USING &year;       --open。。for执行sql字符串,使用using进行变量绑定
       FETCH account_cursor BULK COLLECT INTO account_table;         --执行下一条
       IF account_table.COUNT = 0 THEN        --集合长度等于0就抛出异常
          RAISE_APPLICATION_ERROR(-20001,'未找到数据');
       END IF;
       FOR i IN 1..account_table.COUNT LOOP   --把集合中内容打印出来
           DBMS_OUTPUT.PUT_LINE(account_table(i).name || '  ' || account_table(i).balance);
       END LOOP;
       CLOSE account_cursor;                  --关闭游标
EXCEPTION
       WHEN OTHERS THEN
            DBMS_OUTPUT.PUT_LINE(SQLERRM);
END;
分享到:
评论

相关推荐

    oracle 数据库的绑定变量特性及应用

    绑定变量的目的和命名用方法

    Java中Oracle操作绑定变量使用用户工具模块解决方案

    Java中Oracle操作绑定变量使用用户工具模块解决方案

    在Java中实现Oracle变量的绑定方法 .doc

    在Java中实现Oracle变量的绑定方法 .doc 在Java中实现Oracle变量的绑定方法 .doc

    查找未使用绑定变量sql.sql

    查找未使用绑定变量sql.sql

    oracle 的绑定变量

    不使用绑定变量可能会使OLTP 数据库不堪重负,资源被SQL解析严重耗尽,系统运行缓慢。  当一个用户与数据库建立连接后,会向数据库发出操作请求,即向数据库送过去SQL语句。Oracle 在接收到这些SQL后,会先对这个...

    Oracle数据库绑定变量特性及应用

    结合实例说明Oracle数据库绑定变量特性及应用。合理的使用绑定变量,可以大大提高SQL性能

    基于Oracle的SQL优化 Part1

    《基于Oracle的SQL优化》从Oracle处理SQL的本质和原理入手,由浅入深、系统地介绍了Oracle数据库里的优化器、执行计划、Cursor和绑定变量、查询转换、统计信息、Hint和并行等这些与SQL优化息息相关的本质性内容,并...

    基于Oracle的SQL优化 Part2

    《基于Oracle的SQL优化》从Oracle处理SQL的本质和原理入手,由浅入深、系统地介绍了Oracle数据库里的优化器、执行计划、Cursor和绑定变量、查询转换、统计信息、Hint和并行等这些与SQL优化息息相关的本质性内容,并...

    ORACLE的SQL编程规范

    SQL编程规范 ORACLE 包括怎么使SQL更加高效 例如怎么绑定变量等

    ORACLE优化SQL语句,提高效率

     Oracle在内部执行了许多工作: 解析SQL语句, 估算索引的利用率, 绑定变量 , 读数据块等。  (5)在SQL*Plus , SQL*Forms和Pro*C中重新配置ARRAYSIZE参数, 能够增加每次数据库访问的检索数据量 ,建议值为200。  ...

    Oracle DBA调优技术学习笔记

    Oracle 12c-优化 Hint详解.pdf Oracle 12c-优化 Oracle 索引技术.pdf Oracle 12c 执行计划.pdf ...Oracle 12c 使用绑定变量 VS 不使用绑定变量.pdf Oracle 12c 自动工作负载信息库AWR.pdf Oracle 12c 常用SQL.pdf

    ORACLE SQL性能优化系列

    第一组的两个SQL语句是相同的(可以共享),而第二组中的两个语句是不同的(即使在运行时,赋于不同的绑定变量相同的值) a. select pin , name from people where pin = :blk1.pin; select pin , name from people ...

    Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

    8.9.1 动态SQL 221 8.9.2 嵌套分析函数 222 8.9.3 并行 223 8.9.4 PGA大小 224 8.10 组织行为 224 8.11 小结 224 第9章 Model子句 225 9.1 电子表格 225 9.2 通过Model子句进行跨行引用 226 9.2.1 示例数据...

    oracle SQL性能优化

    ORACLE在内部执行了许多工作: 解析SQL语句, 估算索引的利用率, 绑定变量 , 读数据块等; (5) 在SQL*Plus , SQL*Forms和Pro*C中重新设置ARRAYSIZE参数, 可以增加每次数据库访问的检索数据量 ,建议值为200 (6) ...

    Oracle中Using用法

    Oracle 动态SQL介绍以及using用法示例

    SQLTools for Oracle-开源

    它还支持SQL * Plus命令的基本子集(连接/断开连接,绑定和定义变量)。 它可与Oracle 8i / 9i / 10g / 11g数据库一起使用。 需要Oracle Client 32bit。 有关更多信息,请访问http://www.sqltools.net以获得更多...

    Oracle培训视频(杨老师录制)

    教程名称:Oracle培训视频(杨老师录制)课程目录:【】视频10:oracle备份恢复一【】视频11:oracle备份恢复二【】视频12:共享池结构1【】视频13:共享池之sql重用【】视频14:共享池之绑定变量【】视频15:共享池...

    【数据库维护】-oracle远程维护程序

    通过远程连接Oracle数据库的方式实现对数据库进行管理维护 ... 7) 获取SQL语句中绑定变量的信息。 8) 查询REDO日志切换速度。 9) 表空间自动添加数据文件(仅支持ASM)。 10) 生成SQL语句优化建议。

    通过LogMiner包监控正在运行的sql

    如何跟踪某应用下发生的sql操作细节,可参考另一篇(看不到绑定变量的具体值但更简单)。 一、安装Oracle LogMiner包: $sqlplus '/as sysdba' SQL> @?/rdbms/admin/dbmslm.sql --用来创建DBMS_LOGMNR包,该包用来...

Global site tag (gtag.js) - Google Analytics