
Oracle编程
文章平均质量分 63
junmail
实事求是、坦诚稳重、团结自信、务实创新
展开
-
To_Date函数用法
spl> select * from emp where dates between to_date('2007-06-12 10:00:00', 'yyyy-mm-dd hh24:mi:ss') and to_date('2007-06-12 10:00:00', 'yyyy-mm-dd hh24:mi:...原创 2014-11-07 11:04:40 · 845 阅读 · 0 评论 -
Oracle自定义类型使用一例
一、创建自定义类型create type t_air as object(id int ,name varchar(20));create table test(id int ,person t_air);insert into test values(1,t_air(1,'23sdf')); 二、删除自定义类型方法一一般的正常删除顺序,先删除使用type的相关表,然后删除typedr...2008-10-22 16:28:10 · 464 阅读 · 0 评论 -
Oracle存储过程实例
/*不带任何参数存储过程*/create or replace procedure out_date isbegin dbms_output.put_line(sysdate);end out_date;--测试SQL> set serveroutput on;SQL> exec out_date;/*带IN和out参数的存储过程*/create or rep...2008-10-22 15:30:54 · 154 阅读 · 0 评论 -
Oracle的异常处理
oracle提供了预定义例外、非预定义例外和自定义例外三种类型。其中预定义例外用于处理常见的oracle错误;非预定义例外用于处理预定义所不能处理的oracle错误;自定义例外处理与oracle错误无关的其他情况。Oracle代码编写过程中,如果捕捉例外则会在plsql块内解决运行错误,否则将错误传递到调用环境。 常用预定义例外 为了处理各种常见的oracle错误,plsql为开...原创 2008-10-22 14:40:22 · 184 阅读 · 0 评论 -
识别低效的语句
SELECT EXECUTIONS , DISK_READS, BUFFER_GETS, ROUND((BUFFER_GETS-DISK_READS)/BUFFER_GETS,2) Hit_radio, ROUND(DISK_READS/EXECUTIONS,2) Reads_per_run, SQL_TEXT FROM V$SQLAREA WHERE EXECUTIONS&g...原创 2008-10-15 09:04:04 · 228 阅读 · 0 评论 -
wmsys.wm_concat、sys_connect_by_path、自定义函数实现行列转换
构建测试表:create table TABLE1( ID INTEGER, NAME VARCHAR2(10))create table TABLE2( ID INTEGER, ROLE VARCHAR2(10))insert into TABLE1 (ID, NAME) values (1, '张三');insert into TABLE1 (ID,...2008-10-08 16:35:49 · 198 阅读 · 0 评论 -
PL/SQL Developer使用技巧
1、PL/SQL Developer记住登陆密码 在使用PL/SQL Developer时,为了工作方便希望PL/SQL Developer记住登录Oracle的用户名和密码; 设置方法:PL/SQL Developer 7.1.2 ->tools->Preferences->Oracle->Logon History , “Store history”是默认勾选的...原创 2008-10-07 15:18:53 · 349 阅读 · 0 评论 -
Oracle 绑定变量
在oracle 中,对于一个提交的sql语句,存在两种可选的解析过程, 一种叫做硬解析,一种叫做软解析.一个硬解析需要经解析,制定执行路径,优化访问计划等许多的步骤.硬解释不仅仅耗费大量的cpu,更重要的是会占据重要的们闩(latch)资源,严重的影响系统的规模的扩大(即限制了系统的并发行), 而且引起的问题不能通过增加内存条和cpu的数量来解决。之所以这样是因为门闩是为了顺序访问以及修改一些内...原创 2008-10-06 10:53:13 · 130 阅读 · 0 评论 -
使用 WMSYS.WM_CONCAT 进行列转换
select t.rank, t.Name from t_menu_item t; 10 CLARK 10 KING 10 MILLER 20 ADAMS 20 FORD 20 JONES 20 SCOTT 20 SMITH 30 ALLEN 30 BLAKE 30 JAMES 30 MARTIN 30 TURNER 30 WARD --------------------------------...原创 2008-09-10 14:13:24 · 178 阅读 · 0 评论 -
人民币大小写转换function
create or replace function F_upper_money(p_num in number default null)return nvarchar2 isResult nvarchar2(100);num_round nvarchar2(100) :=to_char(abs(round(p_num,2)));num_left nvarchar2(100);num_right...2008-01-16 17:22:56 · 482 阅读 · 0 评论 -
Oracle 数据类型
数据类型参数描述char(n)n=1 to 2000字节定长字符串,n字节长,如果不指定长度,缺省为1个字节长(一个汉字为2字节)varchar2(n)n=1 to 4000字节可变长的字符串,具体定义时指明最大长度n,这种数据类型可以放数字、字母以及ASCII码字符集(或者EBCDIC等数据库系统接受的字符集标准)中的所有符号。如果数据长度没有达到最大值n,Oracle 8i会根据数据大小自动调...2008-01-08 15:35:54 · 95 阅读 · 0 评论 -
常用PL/SQL代码收集
1、删除一个用户下的所有表;begin for operation in (select 'DROP TABLE ' || table_name as droptable from user_tables) loop execute immediate operation.droptable;end loop;end; 2、嵌套表结合bulk collect的用法dec...原创 2008-08-21 13:54:40 · 406 阅读 · 0 评论 -
Oracle自定义函数实例
--没有参数的函数create or replace function get_user return varchar2 is v_user varchar2(50);begin select username into v_user from user_users; return v_user;end get_user;--测试方法一select get_user fr...2008-10-22 16:35:58 · 589 阅读 · 0 评论 -
PLSQL学习笔记
在网上看到的一个比较好的PLSQL学习笔记,放在这里方便以后查找!原创 2008-10-23 16:58:04 · 142 阅读 · 0 评论 -
Oracle中的MD5加密
一、技术点 1、 DBMS_OBFUSCATION_TOOLKIT.MD5 DBMS_OBFUSCATION_TOOLKIT.MD5是MD5编码的数据包函数,但偶在使用select DBMS_OBFUSCATION_TOOLKIT.MD5(input_string =>'abc') a from Dual时,却有错误提示,看来该函数只能直接在程序包中调用,不能直接应用于SELECT语...原创 2014-02-15 10:18:22 · 135 阅读 · 0 评论 -
oracle行列转换总结
最近论坛很多人提的问题都与行列转换有关系,所以我对行列转换的相关知识做了一个总结,希望对大家有所帮助,同时有何错疏,恳请大家指出,我也是在写作过程中学习,算是一起和大家学习吧。行列转换包括以下六种情况: *列转行 *行转列 *多列转换成字符串 *多行转换成字符串 *字符串转换成多列 *字符串转换成多行下面分别进行举例介绍。首先声明一点,有些例子需要如下10g及以后才有的知识: a。掌握mode...原创 2014-02-15 10:18:10 · 112 阅读 · 0 评论 -
Oracle数据库中的''与NULL的关系
在Oracle数据库中''与NULL是等价的。均表示空值,而不是类似其他数据库上''表示空串,NULL表示空值。 ORACLE允许任何一种数据类型的字段为空,除了以下两种情况:1、主键字段(primary key),2、定义时已经加了NOT NULL限制条件的字段 说明:1、NULL等价于没有任何值、是未知数。2、NULL与0、空字符串、空格都不同。3、对...原创 2014-02-15 10:17:52 · 707 阅读 · 1 评论 -
快速删除重复的记录
做项目的时候,一位同事导数据的时候,不小心把一个表中的数据全都搞重了,也就是说,这个表里所有的记录都有一条重复的。这个表的数据是千万级的,而且是生产系统。也就是说,不能把所有的记录都删除,而且必须快速的把重复记录删掉。 对此,总结了一下删除重复记录的方法,以及每种方法的优缺点。为了陈诉方便,假设表名为Tbl,表中有三列col1,col2,col3,其中col1,col2是主键,并且...原创 2014-02-15 10:17:35 · 103 阅读 · 0 评论 -
Oracle的rownum原理和使用
Oracle的rownum原理和使用在Oracle中,要按特定条件查询前N条记录,用个rownum就搞定了。 select * from emp where rownum <= 5 而且书上也告诫,不能对rownum用">",这也就意味着,如果你想用 select * from emp where rownum > 5 则是失败的。要知道为什么会失败,则需要了解row...原创 2014-02-15 10:17:21 · 89 阅读 · 0 评论 -
ORACLE中查询某个字段包含回车换行符
很简单,但是很多人一下估计还不一定知道。select * from system.test_tab1 where name like '%'||chr(13)||chr(10)||'%'原创 2013-04-11 15:42:02 · 13554 阅读 · 0 评论 -
ORACLE触发器(转)
本篇主要内容如下: 8.1 触发器类型 8.1.1 DML触发器 8.1.2 替代触发器 8.1.3 系统触发器 8.2 创建触发器 8.2.1 触发器触发次序 8.2.2 创建DML触发器 8.2.3 创建替代(INSTEAD OF)触发器 8.2.3 创建系统事件触发器 8.2.4 系统触发器事件属性 8.2.5 使用触发器谓...原创 2013-03-06 23:58:28 · 122 阅读 · 0 评论 -
oracle 常见日期函数
日期函数:add_months(d,n) 日期d加n个月last_day(d) 包含d的月份的最后一天的日期month_between(d,e) 日期d与e之间的月份数,e先于dnew_time(d,a,b) a时区的日期和时间d在b时区的日期和时间next_day(d,day) 比日期d晚,由day指定的周几的日期sys...2008-05-23 15:41:37 · 104 阅读 · 0 评论 -
使用forall语句的bulk dml操作
在oracle 8i或更高版本的forall语句中,oracle提供了非常有意义的dml增强特性。Forall告诉PL/SQL运行期引擎批量绑定一个或多个集合的所有元素到sql语句中,这个动作是在发送信息到sql引擎之前发生。 为什么批量dml 是非常有用的呢?因为在oracle数据库中,plsql与sql引擎是紧密联系的,尽管我们可以在oracle数据库中使用java 语言,但是在oracl...原创 2008-11-13 17:27:20 · 265 阅读 · 0 评论 -
判断俩个值的大小函数sign
比较大小select decode(sign(变量1-变量2),-1,变量1,变量2) from dual; --取较小值sign()函数根据某个值是0、正数还是负数,分别返回0、1、-1取最大值select greatest('3', '5') from dual ...原创 2008-11-10 11:13:45 · 1734 阅读 · 0 评论 -
Oracle 触发器应用
触发器是特定事件出现的时候,自动执行的代码块。类似于存储过程,但是用户不能直接调用他们。 功能: 1、 允许/限制对表的修改 2、 自动生成派生列,比如自增字段 3、 强制数据一致性 4、 提供审计和日志记录 5、 防止无效的事务处理 6、 启用复杂的业务逻辑 开始 create trigger biufer_employees_department_id before insert or upd...原创 2008-11-06 15:37:37 · 193 阅读 · 0 评论 -
oracle的timestamp类型使用
我们都知道date和timestamp都是对日期和时间的表示,只是两种类型的精确度不同,前者精确到秒,后者精确到小数秒(fractional_seconds_precision),可以是 0 to 9,缺省是6。但是对date类型的运算很简单,有很多函数可用来处理;而两个timestamp的差则是很直观地显示为多少天+多少小时+多少分钟+多少秒+多少小数秒, SQL> create t...原创 2008-07-31 13:21:42 · 7885 阅读 · 0 评论 -
Oracle存储过程返回结果集的一个例子
一、创建包create or replace package PTEST is type testCursorType is ref cursor; procedure getTestInfo(testCursor out testCursorType);end;二、创建包体create or replace package body PTEST is procedure ge...2008-07-22 16:00:56 · 197 阅读 · 0 评论 -
第六章 PL/SQL与Oracle间交互(3)
12、游标变量的限制目前,游标变量有以下限制: 不能在包中声明游标变量。例如,下面的声明就是不允许的:CREATE PACKAGE emp_stuff AS TYPE empcurtyp IS REF CURSOR RETURN emp%ROWTYPE; emp_cv empcurtyp; -- not allowedEND emp_stuff; 处...2008-07-12 15:27:44 · 225 阅读 · 0 评论 -
第六章 PL/SQL与Oracle间交互(2)
四、使用游标FOR循环 在大多数需要使用显式游标的情况下,我们都可以用一个游标FOR循环来代替OPEN、FETCH和CLOSE语句。游标FOR循环隐式地声明了一个 %ROWTYPE类型的记录作为它的循环索引,打开游标,然后反复执行把结果集中的行放到索引中去,最后在所有行都被处理完成后关闭游标。思考下面PL/SQL块例子,它能从一个实验中计算出结果,然后把结果保存在一张临时表中。FOR循环的...2008-07-12 15:24:01 · 142 阅读 · 0 评论 -
第六章 PL/SQL与Oracle间交互 ( 1 )
一、PL/SQL支持的SQL一览 PL/SQL扩展了SQL,变得更加强大和易用。我们可以用PL/SQL灵活安全地操作Oracle数据,因为它支持所有的SQL数据操作语句(除了EXPLAIN PLAN),事务控制语句,函数,伪列和操作符。PL/SQL还支持动态SQL,能让我们动态地执行SQL数据定义,数据控制和会话控制语句。除此之外, PL/SQL还遵循ANSI/ISO的SQL标准。 1...2008-07-12 15:21:02 · 114 阅读 · 0 评论 -
第五章 PL/SQL集合与记录(4)
十四、利用BULK COLLECTION子句为集合赋值 关键字BULK COLLECT会通知SQL引擎在将数据返回给PL/SQL引擎之前,把输出的数据批量地绑定到一个集合。我们可以在SELECT INTO、FETCH INTO和RETURNING INTO子句中使用BULK COLLECT。语法如下: ... BULK COLLECT INTO collection_name[, ...2008-07-12 15:18:36 · 206 阅读 · 0 评论 -
第五章 PL/SQL集合与记录(3)
十一、避免集合异常 大多情况下,如果我们引用了一个集合中不存在的元素,PL/SQL就会抛出一个预定义异常。例如: DECLARE TYPE numlist IS TABLE OF NUMBER; nums numlist; -- atomically nullBEGIN /* Assume execution continues despite the raised e...2008-07-12 15:15:15 · 130 阅读 · 0 评论 -
第五章 PL/SQL集合与记录(2)
八、在SQL语句中使用PL/SQL的集合类型 集合允许我们用PL/SQL来操作复杂的数据类型。我们的程序能计算下标索引值,并在内存中处理指定的元素,然后用SQL语句把结果保存到数据库中。 1、关于嵌套表的例子例一:创建与PL/SQL嵌套表对应的SQL类型 在SQL*Plus中,我们可以创建与PL/SQL嵌套表和变长数组相对应的SQL类型: SQL> CREATE ...2008-07-12 15:10:17 · 130 阅读 · 0 评论 -
第五章 PL/SQL集合与记录(1)
一、什么是集合 集合就是相同类型的元素的有序合集。它一个通用的概念,其中包含了列表、数组和其他相似的数据类型。每一个元素都有唯一的下标来标识当前元素在集合中的位置。PL/SQL提供了以下几种集合类型:索引表,也称为关联数组,可以让我们使用数字或字符串作下标来查找元素。(这有点和其他语言中的哈希表相类似。) 嵌套表可以容纳任意个数的元素,使用有序数字作下标。我们可以定义等价的SQL类型,把...2008-07-12 15:07:10 · 132 阅读 · 0 评论 -
第二章 PL/SQL基础(2)
四、PL/SQL命名规范 同样的命名规约适用于所有的PL/SQL程序,规约涉及的内容包括常量、变量、游标、异常、过程、函数和包。命名可能是简单的,加以限定的,远程的或是既加以限定又是远程的。例如,我们也许可能用到以下几种调用过程raise_salary的方式: raise_salary(...); -- simpleemp_actions.raise_salary(...); ...2008-07-12 15:02:38 · 178 阅读 · 0 评论 -
第二章 PL/SQL基础(1)
一、字符集在PL/SQL程序中,允许出现的字符集包括: 大小写字母(A-Z和a-z) 数字(0-9) 符号( ) + - * / < > = ! ~ ^ ; : . ’ @ % , " # $ & _ | { } ? [ ] 制表符、空格和回车符 PL/SQL对大小写不敏感,所以,除了在字符串和字符中,小写字母和它对应的大写字母是等价的。 二、词法单元...2008-07-12 14:48:29 · 176 阅读 · 0 评论 -
第三章 PL/SQL数据类型
一、预定义数据类型 Oracle的数据类型可以分为四类,分别是标量类型,复合类型,引用类型和LOB类型。标量类型没有内部组件;而复合类型包含了能够被单独操作的内部组件;引用类型类似于3G语言中的指针,能够引用一个值;LOB类型的值就是一个lob定位器,能够指示出大对象(如图像)的存储位置。下图是在PL/SQL中可以使用的预定义类型,其中标量类型又分为四类:数字、字符、布尔和日期/时间。...2008-07-12 14:44:42 · 397 阅读 · 0 评论 -
第一章 PL/SQL一览
一、理解PL/SQL的主要特性了解PL/SQL最好的方法就是从简单的实例入手。下面的程序是用于处理一个网球拍订单的。首先声明一个NUMBER类型的变量来存放现有的球拍数量。然后从数据表inventory中把球拍的数量检索出来。如果数量大于零,程序就会更新inventory表,并向purchase_record表插入一条购买记录,如果数量不大于零,程序会向purchase_record表插入一条...2008-07-12 14:37:35 · 116 阅读 · 0 评论 -
第七章 控制PL/SQL错误
一、错误控制一览在PL/SQL中,警告或错误被称为异常。异常可以是内部(运行时系统)定义的或是用户定义的。内部定义的案例包括除零操作和内存溢出等。一些常见的内部异常都有一个预定义的名字,如ZERO_DIVIDE和STORAGE_ERROR等。对于其它的内部异常,我们可以手动为它们命名。 我们可以在PL/SQL块、子程序或包的声明部分自定义异常。例如,我们可以定义一个名为insufficien...2008-07-12 15:37:05 · 167 阅读 · 0 评论 -
第八章 PL/SQL子程序
一、什么是子程序子程序就是能够接受参数并被其他程序所调用的命名PL/SQL块。PL/SQL子程序有两种类型,过程和函数。一般地,过程用于执行一个操作,而函数用于计算一个结果值。与未命名或匿名PL/SQL块一样,子程序也有声明部分,执行部分和一个可选的异常处理部分。声明部分包含类型、游标、常量、变量、异常和嵌套子程序的声明。这些内容都是本地的,在程序退出时会自动销毁。执行部分包含赋值语句、流程...2008-07-12 15:40:20 · 231 阅读 · 0 评论