`

PL/SQL执行动态SQL(二)

阅读更多
PL/SQL动态SQL

依据:
DBMS_SQL包:这个包提供了一种使用动态sql来访问数据库的方法。

示例
1.执行插入删除等DML语句
declare
  v_cursorid number;
  v_insertRecords varchar2(500);
  v_numrows integer;
begin
  v_cursorid := dbms_sql.open_cursor;
  v_insertRecords := 'delete from bizbusinessmenuinfo where menubizname=:bizname';
  dbms_sql.parse(v_cursorid,v_insertrecords,dbms_sql.native);
  dbms_sql.bind_variable(v_cursorid,':bizname','1');
  v_numrows := dbms_sql.execute(v_cursorId);
  dbms_output.put_line(v_numrows);
  exception
    when others then raise;
  dbms_sql.close_cursor(v_cursorid);
  commit;
end;


2.执行动态DDL
declare
  v_cursorid number;
  v_createTableString varchar2(500);
  v_numrows integer;
begin
  v_cursorid := dbms_sql.open_cursor;
  v_createTableString := 'create table bizbusinessbaseinfo(bizname varchar2(64),bizstatus char(1))';
  dbms_sql.parse(v_cursorid,v_createTableString,dbms_sql.native);
  v_numrows := dbms_sql.execute(v_cursorid);
  exception
    when others then
    if sqlcode!=-955 then raise;
    else
       dbms_output.put_line('talbe already exists');
    end if;
  dbms_sql.close_cursor(v_cursorId);
end;


3.动态查询query
declare
  v_cursorid number;
  v_selectrecords varchar2(500);
  v_numrows integer;
  v_bizname varchar2(64);
  v_bizstatus char(1);
begin
  v_cursorid := dbms_sql.open_cursor;
  v_selectrecords := 'select bizname,bizstatus from bizbusinessbaseinfo where bizname like :bizname';
  dbms_sql.parse(v_cursorid,v_selectrecords,dbms_sql.native);
  --dbms_sql.define_column绑定变量的时候,变量如果是字符串,需要执行长度,否则会出现错误: 有太多的 'DEFINE_COLUMN' 说明与此次调用相匹配 
  dbms_sql.define_column(v_cursorid,1,v_bizname,64);
  dbms_sql.define_column(v_cursorid,2,v_bizstatus,1);  
  dbms_sql.bind_variable(v_cursorid,':bizname','1%');
  v_numrows := dbms_sql.execute(v_cursorid);
  loop
    if dbms_sql.fetch_rows(v_cursorid)=0 then exit;
    end if;
    dbms_sql.column_value(v_cursorid,1,v_bizname);
    dbms_sql.column_value(v_cursorid,2,v_bizstatus);
    dbms_output.put_line(v_bizname||'  '||v_bizstatus);
  end loop;

  dbms_sql.close_cursor(v_cursorid);
end;


4.动态查询的dbms_sql.last_row_count和dbms_sql.last_row_id
这两个字段可以反映出当前检索的进度。在上面的查询中加入对这两个字段的输出,示例如下:
declare
  v_cursorid number;
  v_selectrecords varchar2(500);
  v_numrows integer;
  v_bizname varchar2(64);
  v_bizstatus char(1);

v_myrowid rowid;
v_totrow integer;
begin
  v_cursorid := dbms_sql.open_cursor;
  v_selectrecords := 'select bizname,bizstatus from bizbusinessbaseinfo where bizname like :bizname';
  dbms_sql.parse(v_cursorid,v_selectrecords,dbms_sql.native);
  --dbms_sql.define_column绑定变量的时候,变量如果是字符串,需要执行长度,否则会出现错误: 有太多的 'DEFINE_COLUMN' 说明与此次调用相匹配 
  dbms_sql.define_column(v_cursorid,1,v_bizname,64);
  dbms_sql.define_column(v_cursorid,2,v_bizstatus,1);  
  dbms_sql.bind_variable(v_cursorid,':bizname','1%');
  v_numrows := dbms_sql.execute(v_cursorid);

  v_numrows := dbms_sql.execute(v_cursorid);

  loop
    if dbms_sql.fetch_rows(v_cursorid)=0 then exit;
    end if;

    v_totrow := dbms_sql.last_row_count;
    v_myrowid := dbms_sql.last_row_id;
    dbms_output.put_line('the last row count is:'||v_totrow||
    '  the last rowid is:'||v_myrowid);

    dbms_sql.column_value(v_cursorid,1,v_bizname);
    dbms_sql.column_value(v_cursorid,2,v_bizstatus);
    dbms_output.put_line(v_bizname||'  '||v_bizstatus);
  end loop;
dbms_sql.close_cursor(v_cursorid);
end;

分享到:
评论

相关推荐

    pl/sql例题代码pl/sql例题代码pl/sql例题代码

    pl/sql例题代码pl/sql例题代码pl/sql例题代码

    pl/sql developer11.0

    pl/sql developer11.0下载 pl/sql developer11.0下载 pl/sql developer11.0下载

    Oracle PL/SQL程序设计(第5版)(套装上下册)

    《Oracle PL/SQL程序设计(第5版)(套装上下册)》基于Oracle数据库11g,从PL/SQL编程、PL/SQL程序结构、PL/SQL程序数据、PL/SQL中的SQL、PL/SQL应用构建、高级PL/SQL主题这6个方面详细系统地讨论了PL/SQL以及如何...

    Oracle PL/SQL语言初级教程

    Oracle公司已经将PL/SQL整合到Oracle 服务器和其他工具中了,近几年中更多的开发人员和DBA开始使用PL/SQL,本教程将以循速渐进的方式讲述PL/SQL基础语法,结构和组件、以及如何设计并执行一个PL/SQL程序,...

    PL/SQL Developer9.06

    PL/SQL Developer是一个集成开发环境,专门面向Oracle数据库存储程序单元的开发。如今,有越来越多的商业逻辑和应用逻辑转向了Oracle Server,因此,PL/SQL编程也成了整个开发过程的一个重要组成部分。PL/SQL ...

    PL/SQL User's Guide and Reference (官方CHM)

    PL/SQL, Oracle's procedural extension of SQL, is an advanced fourth-generation programming language (4GL). It offers modern features such as data encapsulation, overloading, collection types, ...

    pl/sql develpment 8 下载

    pl/sql 下载pl/sql 下载pl/sql 下载pl/sql 下载pl/sql 下载pl/sql 下载pl/sql 下载pl/sql 下载pl/sql 下载pl/sql 下载pl/sql 下载pl/sql 下载pl/sql 下载pl/sql 下载pl/sql 下载pl/sql 下载pl/sql 下载pl/sql 下载pl...

    pl/sql最新中文手册

    最新pl/sql7.0中文手册

    PL/SQL developer 12.07 注册码 可以使用

    PL/SQL developer 12.07 注册码 可以使用,不错,自己用过了,分享给大家

    一个对数据库的操作工具PL/SQLpl/sqL工具

    一个对数据库的操作工具PL/SQL,能够对ORACLE\SQL进行很好的帮助操作!

    Pl/Sql程序设计

    1、PL/SQL简介 2、PL/SQL基础 3、记录和表 4、在PL/SQL中使用SQL 5、内置SQL函数 6、游标 7、过程和函数 ...

    PL/SQL Developer v8.0.3 1510

    PL/SQL Developer 8.0.3 1510 含注册机 PL/SQL Developer is an Integrated Development Environment that is specifically targeted at the development of stored program units for Oracle Databases. Over ...

    Oracle PL/SQL程序设计(第5版)(下册)第二部分

    第16章 动态SQL和动态PL/SQL 492 目 录(下册) 第5部分 构造PL/SQL应用程序 第17章 过程、函数与参数 543 第18章 包 593 第19章 触发器 626 第20章 管理PL/SQL代码 685 第21章 PL/SQL的性能优化 753 第22章 I/O操作和...

    oracle10g_pl/sql

    oracle10g pl/sql完备教程,供初学者学习与开发者参考

    pl/sql64位

    很多时候你是不是为了32为的plsql的各种复杂配置烦恼,不要紧,现在下载64位的pl/sql,不需要繁琐的配置,让你更轻松

    PL/SQL免安装版

    PL/SQL Developer是一个集成开发环境,专门开发面向Oracle数据库的应用。PL/SQL也是一种程序语言,叫做过程化SQL语言(Procedural Language/SQL)。PL/SQL是Oracle数据库对SQL语句的扩展。在普通SQL语句的使用上增加...

    PL/SQL 程序设计

    PL/SQL 程序设计 本章主要重点:  PL/SQL概述  PL/SQL块结构  PL/SQL流程  运算符和表达式  游标  异常处理  数据库存储过程和函数  包  触发器

    PL/SQL Developer 客户端

    PL/SQL Developer是一个集成开发环境,专门开发面向Oracle数据库的应用。PL/SQL也是一种程序语言,叫做过程化SQL语言(Procedural Language/SQL)。PL/SQL是Oracle数据库对SQL语句的扩展。在普通SQL语句的使用上增加...

    PL/SqlDeveloper汉化版

    用PL/SQL 是 Oracle公司在标准 SQL 语言上进行一定的扩展而形成的一种数据库语言。它寄托于传统的 SQL 语句,同时又在功能上做了不少的扩充。PL/SQL 有着太多的优势,甚至让SQL 在它面前也黯然失色。 PL/SQL ...

    PL/SQL Developer V7.1.4

    PL/SQL Developer是一种集成的开发环境,专门用于开发、测试、调试和优化Oracle PL/SQL存储程序单元,比如触发器等。PL/SQL Developer功能十分全面,大大缩短了程序员的开发周期。强大的PL/SQL编辑器,完善的Debugger...

Global site tag (gtag.js) - Google Analytics