- 浏览: 469466 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
mrshen:
很棒,在其他大神的博客上理清了思路看懂之后,来lz这里用例子学 ...
RED-BLACK(红黑)树的实现TreeMap源码阅读 -
a939639017:
yanf4j check不下来 ?
Java nio 2.0 AIO -
hellostory:
又是抄来的 - -
mysql分表方案 -
davidluoye:
为什么不说下支持的数据库呢?
模糊查询的优化 -
oliveevilo:
表示没看懂
Synchronized和java.util.concurrent.locks.Lock的区别
方式1:
CREATE OR REPLACE PROCEDURE demo(salary IN NUMBER) AS cursor_name INTEGER; rows_processed INTEGER; BEGIN cursor_name := dbms_sql.open_cursor; dbms_sql.parse(cursor_name, 'DELETE FROM emp WHERE sal > :x', dbms_sql); dbms_sql.bind_variable(cursor_name, ':x', salary); rows_processed := dbms_sql.execute(cursor_name); dbms_sql.close_cursor(cursor_name); EXCEPTION WHEN OTHERS THEN dbms_sql.close_cursor(cursor_name); END; CREATE OR REPLACE PROCEDURE exec(STRING IN varchar2) AS cursor_name INTEGER; ret INTEGER; BEGIN cursor_name := DBMS_SQL.OPEN_CURSOR; --DDL statements are executed by the parse call, which --performs the implied commit DBMS_SQL.PARSE(cursor_name, string, DBMS_SQL); ret := DBMS_SQL.EXECUTE(cursor_name); DBMS_SQL.CLOSE_CURSOR(cursor_name); END; execute immediate "drop table tab_temp";
方式2:
CREATE OR REPLACE PROCEDURE copy(source IN VARCHAR2, destination IN VARCHAR2) is -- This procedure copies rows from a given source table to a -- given destination table assuming that both source and -- destination tables have the following columns: -- - ID of type NUMBER, -- - NAME of type VARCHAR2(30), -- - BIRTHDATE of type DATE. id NUMBER; name VARCHAR2(30); birthdate DATE; source_cursor INTEGER; destination_cursor INTEGER; ignore INTEGER; BEGIN -- prepare a cursor to select from the source table source_cursor := dbms_sql.open_cursor; DBMS_SQL.PARSE(source_cursor, 'SELECT id, name, birthdate FROM ' || source, DBMS_SQL); DBMS_SQL.DEFINE_COLUMN(source_cursor, 1, id); DBMS_SQL.DEFINE_COLUMN(source_cursor, 2, name, 30); DBMS_SQL.DEFINE_COLUMN(source_cursor, 3, birthdate); ignore := DBMS_SQL.EXECUTE(source_cursor); -- prepare a cursor to insert into the destination table destination_cursor := DBMS_SQL.OPEN_CURSOR; DBMS_SQL.PARSE(destination_cursor, 'INSERT INTO ' || destination || ' VALUES (:id, :name, :birthdate)', DBMS_SQL); -- fetch a row from the source table and -- insert it into the destination table LOOP IF DBMS_SQL.FETCH_ROWS(source_cursor) > 0 THEN -- get column values of the row DBMS_SQL.COLUMN_VALUE(source_cursor, 1, id); DBMS_SQL.COLUMN_VALUE(source_cursor, 2, name); DBMS_SQL.COLUMN_VALUE(source_cursor, 3, birthdate); -- bind the row into the cursor that inserts into the -- destination table -- You could alter this example to require the use of -- dynamic SQL by inserting an if condition before the -- bind. DBMS_SQL.BIND_VARIABLE(destination_cursor, 'id', id); DBMS_SQL.BIND_VARIABLE(destination_cursor, 'name', name); DBMS_SQL.BIND_VARIABLE(destination_cursor, 'birthdate', birthdate); ignore := DBMS_SQL.EXECUTE(destination_cursor); ELSE -- no more row to copy EXIT; END IF; END LOOP; -- commit and close all cursors COMMIT; DBMS_SQL.CLOSE_CURSOR(source_cursor); DBMS_SQL.CLOSE_CURSOR(destination_cursor); EXCEPTION WHEN OTHERS THEN IF DBMS_SQL.IS_OPEN(source_cursor) THEN DBMS_SQL.CLOSE_CURSOR(source_cursor); END IF; IF DBMS_SQL.IS_OPEN(destination_cursor) THEN DBMS_SQL.CLOSE_CURSOR(destination_cursor); END IF; RAISE; END;
方式3:
declare stmt varchar2(200); dept_no_array dbms_sql.Number_Table; c number; dummy number; begin dept_no_array(1) := 10; dept_no_array(2) := 20; dept_no_array(3) := 30; dept_no_array(4) := 40; dept_no_array(5) := 30; dept_no_array(6) := 40; stmt := 'delete from emp where deptno = :dept_array'; c := dbms_sql.open_cursor; dbms_sql.parse(c, stmt, dbms_sql.native); dbms_sql.bind_array(c, ':dept_array', dept_no_array, 1, 4); dummy := dbms_sql.execute(c); dbms_sql.close_cursor(c); exception when others then if dbms_sql.is_open(c) then dbms_sql.close_cursor(c); end if; raise; end; declare stmt varchar2(200); empno_array dbms_sql.Number_Table; empname_array dbms_sql.Varchar2_Table; c number; dummy number; begin for i in 0 .. 9 loop empno_array(i) := 1000 + i; empname_array(I) := get_name(i); end loop; stmt := 'insert into emp values(:num_array, :name_array)'; c := dbms_sql.open_cursor; dbms_sql.parse(c, stmt, dbms_sql.native); dbms_sql.bind_array(c, ':num_array', empno_array); dbms_sql.bind_array(c, ':name_array', empname_array); dummy := dbms_sql.execute(c); dbms_sql.close_cursor(c); exception when others then if dbms_sql.is_open(c) then dbms_sql.close_cursor(c); end if; raise; end; declare stmt varchar2(200); emp_no_array dbms_sql.Number_Table; emp_addr_array dbms_sql.Varchar2_Table; c number; dummy number; begin for i in 0 .. 9 loop emp_no_array(i) := 1000 + i; emp_addr_array(I) := get_new_addr(i); end loop; stmt := 'update emp set ename = :name_array where empno = :num_array'; c := dbms_sql.open_cursor; dbms_sql.parse(c, stmt, dbms_sql.native); dbms_sql.bind_array(c, ':num_array', empno_array); dbms_sql.bind_array(c, ':name_array', empname_array); dummy := dbms_sql.execute(c); dbms_sql.close_cursor(c); exception when others then if dbms_sql.is_open(c) then dbms_sql.close_cursor(c); end if; raise; end;
方式4:
declare c number; d number; n_tab dbms_sql.Number_Table; indx number := -10; begin c := dbms_sql.open_cursor; dbms_sql.parse(c, 'select n from t order by 1', dbms_sql); dbms_sql.define_array(c, 1, n_tab, 10, indx); d := dbms_sql.execute(c); loop d := dbms_sql.fetch_rows(c); dbms_sql.column_value(c, 1, n_tab); exit when d != 10; end loop; dbms_sql.close_cursor(c); exception when others then if dbms_sql.is_open(c) then dbms_sql.close_cursor(c); end if; raise; end; declare c number; d number; n_tab dbms_sql.Number_Table; d_tab1 dbms_sql.Date_Table; v_tab dbms_sql.Varchar2_Table; d_tab2 dbms_sql.Date_Table; indx number := 10; begin c := dbms_sql.open_cursor; dbms_sql.parse(c, 'select * from multi_tab order by 1', dbms_sql); dbms_sql.define_array(c, 1, n_tab, 5, indx); dbms_sql.define_array(c, 2, d_tab1, 5, indx); dbms_sql.define_array(c, 3, v_tab, 5, indx); dbms_sql.define_array(c, 4, d_tab2, 5, indx); d := dbms_sql.execute(c); loop d := dbms_sql.fetch_rows(c); dbms_sql.column_value(c, 1, n_tab); dbms_sql.column_value(c, 2, d_tab1); dbms_sql.column_value(c, 3, v_tab); dbms_sql.column_value(c, 4, d_tab2); exit when d != 5; end loop; dbms_sql.close_cursor(c);
发表评论
-
navicat快捷键
2013-01-05 09:47 13891.ctrl+q 打开查询窗口2.ctrl ... -
mysql分表方案
2012-09-05 22:29 9105一、 概述分表是个目前算是比较炒的比较流行的概念,特别是在 ... -
mysql扩展至分库分表
2012-09-05 21:47 4046MySQL互联网Oracle企业应 ... -
批量修改SEQUENCE,序列同时增加10000
2012-06-26 16:40 1637select 'alter sequence ' || t1. ... -
oracle执行计划
2011-08-23 14:13 1179本文全面详细介绍oracle执行计划的相关的概念,访问数据 ... -
Oracle分页,Oracle中rownum与rowid的理解
2011-08-15 21:33 1880一、 oracle ... -
oracle--如何分析执行计划
2011-08-15 21:31 4258例1: 假设LARGE_TABLE ... -
Oracle优化----索引原理篇
2011-08-15 21:22 9992006-04-04 15:09 1561人阅读 评论(0) ... -
ORACLE执行计划
2011-06-22 17:27 15121 ,什么是执行计划 所谓执行计划,顾名思义,就是对一 ... -
MYSQL 字符
2011-04-23 00:05 1038因为不知道什么时候 ... -
ORACLE用户管理
2011-04-22 14:40 1397这里将介绍Oracle修改用户权限的实现过程,包括一些权限管 ... -
数据库表设计细节
2011-04-11 22:48 1965数据库建表原则 数据 ... -
数据库设计的14个技巧
2011-04-11 22:19 10041. 原始单据与实体之间的关系 可以是一对一、一对多、多对 ... -
ORACLE xmltype 遍历
2011-03-14 16:05 1994DECLARE var XMLType; ... -
ORACLE EXCEPTION总结
2011-03-14 14:53 1420文章分类:数据库 关键字: oracle 一 ORACLE ... -
Oracle存储过程解析XML,并把数据持久化
2011-03-14 14:52 1907需要解析的xml文件:people.xml 1 < ... -
oracle对大对象类型操作:blob,clob,nclob,bfile
2011-03-14 14:49 18513-4 Lob类型 ... -
impdp expdp使用小结
2011-03-11 17:29 2315\ 最近我们迁移数据库,其中涉及到了数据迁移 sql ... -
oracle表空间限额不足问题解决
2011-03-11 16:37 1300web程序访问数据库是,总是报 表空间“hnsd”限额不 ... -
ORACLE JOB
2011-03-11 15:56 1179、设置初始化参数 job_qu ...
相关推荐
Oracle 动态SQL是数据库编程中的一个重要概念,它允许在运行时构建和执行SQL语句,从而提高了灵活性和适应性。动态SQL的使用通常在处理不确定的查询结构、执行基于条件的DML操作或者需要根据运行时信息生成SQL语句时...
根据给定文件的信息,以下是对“Oracle动态SQL4方法分析与应用.pdf”文档中所涉及知识点的详细说明: Oracle动态SQL技术: 动态SQL技术允许在程序执行时根据用户的输入构造SQL语句,它在编写程序时不需要确定具体的...
Oracle数据库作为当前企业级应用中广泛使用的数据库系统之一,其提供的动态SQL功能允许开发者在程序运行时构造和执行SQL语句,这种灵活性为程序开发提供了极大的便利。本文将探讨Oracle中的动态SQL实现机制,重点...
Oracle动态SQL是数据库编程中的一种技术,它允许在运行时构建和执行SQL语句,而不是在编译时确定。这在处理不确定的数据操作或者需要根据用户输入或程序逻辑动态生成SQL语句时非常有用。Oracle数据库提供了多种方式...
oracle动态sql例子,适用于存储过程中拼接sql
在Oracle数据库管理中,动态执行SQL语句是一种强大的功能,允许开发者在运行时构建和执行SQL语句,这对于处理不确定或变化的数据结构尤其有用。本文将深入探讨Oracle中动态执行SQL的四种主要方法,并通过具体示例...
Oracle数据库系统提供了对动态SQL的支持,这是一种在程序运行时构建和执行SQL语句的编程技术,对于实现数据库操作的灵活性具有重要作用。本文将探讨Oracle本地动态SQL的使用方法和技巧。 动态SQL的使用场景广泛,它...
### 基于Oracle高性能动态SQL程序开发 #### 一、引言 在现代数据库管理系统中,Oracle以其强大的功能和广泛的适用性而受到许多企业和开发者的青睐。在Oracle的编程环境中,动态SQL作为一种灵活的解决方案,能够...
动态 SQL 技术是一种高级的程序设计技术, 在程序开发 时,不知道要使用哪些字段或查询条件,而在程序执行时才能 构造出来。 遇到这种情况时使用动态 SQL 技术就能很好的满 足要求,这种技术具有很好的通用性,功能...
"msmmPrj.rar_The Oracle_oracle dynamic sql"这个压缩包文件很可能包含了关于使用Oracle动态SQL的详细教程或项目代码,特别是通过SQLDA(SQL Descriptor Area)进行数据交互的方法。 SQLDA,全称为SQL描述符区域,...
### Oracle 动态 SQL 执行详解 在 Oracle 数据库中,动态 SQL 提供了一种灵活的方式来执行不预先定义好的 SQL 语句。这种方式允许开发者在运行时构建 SQL 语句并执行它们,这对于处理未知数据结构或需要动态生成...
oracle SQL查询工具oracle SQL查询工具oracle SQL查询工具oracle SQL查询工具oracle SQL查询工具oracle SQL查询工具oracle SQL查询工具oracle SQL查询工具oracle SQL查询工具oracle SQL查询工具oracle SQL查询工具...
Oracle和SqlServer语法区别 Oracle和SqlServer是两种流行的关系型数据库管理系统,它们之间存在着一些语法区别。了解这些区别对于开发者来说非常重要,因为它可以帮助他们更好地迁移到新的数据库管理系统。下面将...
Oracle数据库中的动态SQL应用方法是开发高效数据库查询程序的关键技术之一。动态SQL允许在程序运行时根据需要构建和执行SQL语句,增强了程序的灵活性和适应性,特别适合处理不确定或变化的数据操作需求。本文主要...
在Oracle数据库的开发中,动态SQL扮演着重要的角色,尤其在处理不确定的或复杂的查询需求时。动态SQL与静态SQL的主要区别在于,静态SQL在编译时即确定了SQL语句,而动态SQL则在运行时根据条件构建和执行。Oracle的PL...
### Oracle SQL Developer 使用教程 #### 一、Oracle Database Home Page 的使用 在开始介绍 Oracle SQL Developer 的使用之前,我们先来看看如何使用 Oracle Database Home Page。这部分内容非常重要,因为它是...
Oracle与SQLServer的SQL语法差异,用简单易懂的语言和实例对Oracle和Sql Server语法之间的差异进行了对比分析,更加适用于入门的人
Oracle数据库SQL语句跟踪器,通常被称为SQL Monitor,是一种强大的工具,用于监控和分析数据库中的SQL语句执行情况。在Oracle环境中,理解SQL语句的行为是优化数据库性能的关键。SQL Monitor提供实时视图,帮助DBA...
对ORACLE-SQL进行一些布局优化,更新它的格式
1. oraociei11.dll:这是Oracle Call Interface (OCI) 的动态链接库,是Oracle数据库访问接口的核心,用于应用程序与Oracle数据库交互。 2. orannzsbb11.dll:这是Oracle Net Services的缓冲区管理器,负责数据在...