
SQL/PLSQL
文章平均质量分 65
IT农夫
古人学问无遗力,
少壮工夫老始成。
纸上得来终觉浅,
绝知此事要躬行。
展开
-
Oracle 中VARRAY的 NOT NULL之惑
如果在定义VARRAY的时候带上NOT NULL限制,那么这个VARRAY的元素就不能为NULL.如下定义:CREATE OR REPLACE TYPE integer_varray AS VARRAY(5) OF INTEGER NOT NULL;/ 然后有一个PLSQL块如下:DECLARE -- Declare and initialize a null原创 2009-10-08 14:01:00 · 1922 阅读 · 1 评论 -
如何判断PLSQL中三种集合是否为空
用count判断联合数组(associative array),因为index-by table声明就初始化,用count判断不会引起异常。用cardinality判断嵌套表(nested table),因为nested table声明时如果没有被初始化,用count判断会引起异常,而nested table的最小下标不一定是1(经过delete后),所以不能用exists(1)判断 。只能用原创 2009-05-11 16:44:00 · 6615 阅读 · 2 评论 -
Oracle PLSQL的集合类型
转载:http://www.cnblogs.com/gkl0818/archive/2009/02/25/1397769.html Oracle collections一、Types of Collections 1、Associative arrays 数组 它是同种类型的一维、无边界的稀疏集合,只能用于转载 2009-05-05 16:09:00 · 6755 阅读 · 0 评论 -
PLSQL中显示游标使用的4个步骤
本例简单介绍一下游标处理的4个过程中涉及到的加锁,一致性读的问题.显式游标处理需四个 PL/SQL步骤:1 定义/声明游标:就是定义一个游标名,以及与其相对应的SELECT 语句。格式: CURSOR cursor_name[(parameter[, parameter]…)] [RETURN datatype] IS selec原创 2012-06-20 15:31:35 · 4895 阅读 · 2 评论 -
Oracle中如何用一条SQL快速生成10万条测试数据
转载 http://blog.youkuaiyun.com/yzsind/article/details/4967133做数据库开发或管理的人经常要创建大量的测试数据,动不动就需要上万条,如果一条一条的录入,那会浪费大量的时间,本文介绍了Oracle中如何通过一条SQL快速生成大量的测试数据的方法。产生测试数据的SQL如下:SQL> select rownum as id, 2转载 2012-04-20 14:08:41 · 4841 阅读 · 0 评论 -
Oracle 中用一个表的数据更新另一个表的数据
有下面两个表:将表tab1中id值与和表tab2中id值相同的行的val更新为tab2中val的值.select * from tab1;select * from tab2最容易犯的错误是:update tab1 set val=(select val from tab2 where tab1.id=tab2.id);更新完后的结果是:select * f原创 2012-05-04 15:49:47 · 24436 阅读 · 0 评论 -
在JAVA中使用Oracle的MERGE以及INSERT ALL语法
在JAVA开发中通常碰到这样的需求,如果一条数据在表中已经存在,对其做update,如果不存在,将新的数据插入.如果不使用Oracle提供的merge语法的话,可能先要上数据库select查询一下看是否存在,然后决定怎么操作,这样的话需要写更多的代码,同时性能也不好,要来回数据库两次.使用merge的话则可以一条SQL语句完成.下面是JAVA代码的示例:(这里简单起见,没有对异原创 2012-01-13 11:38:56 · 7200 阅读 · 0 评论 -
Oracle 表中的列带有default值的陷阱
在Oracle中,对于表的列可以为其指定默认值,这样在insert数据的时候,如果该列不出现在insert语句中的时候,会为其赋上默认值.注意这里是该列不出现在insert语句中,而不是该列的值为空值的时候.如下面的表:create table test(id number(10),name varchar2(20) default 'name')当用下面的SQL语句插入行的时候,会给na原创 2012-04-18 11:42:10 · 3581 阅读 · 0 评论 -
Oracle 中如何用一条SQL语句将“男的改为女的,女的改为男的”?
今天在群里碰到一个哥们问了一个问题:“问一个Sql,一个表中一个字段,sex char(4),里面存放的值是:男,女,这种形式,有很多条,用update把男修改成女,女修改成男,一条语句,怎么实现 ?”记录一下答案: UPDATE t SET sex= CASE WHEN (sex=1) THEN 0 WHEN (sex=0)原创 2012-02-14 20:58:39 · 6976 阅读 · 5 评论 -
什么是Oracle Key-Preserved Table和什么样的视图可以进行DML操作
在通过DML操作Oracle的视图的时候,有一个很重要的条件是操作的base表必须是Key-Preserved Table.那么,什么是Key-Preserved Table呢.Oracle给出的定义是:A table is key preserved if every key of the table can also be a key of the result of the joi原创 2012-04-25 12:45:15 · 4552 阅读 · 0 评论 -
Oracle 子程序参数模式,IN,OUT,NOCOPY
Oracle 子程序参数模式主要有IN,OUT,NOCOPY,IN和OUT可以组合,OUT和NOCOPY也可以组合使用.IN主要用于传入参数,可以是变量,常量,表达式,在子程序内部不能改变其值. DECLAREn NUMBER := 10;PROCEDURE do_something (n1 IN NUMBER) ISBEGINdbms_output.put_lin原创 2009-10-19 14:39:00 · 6921 阅读 · 0 评论 -
oracle-merge用法详解
转自 http://blog.chinaunix.net/u/12457/showart_346642.htmloracle-merge用法详解 Oracle9i引入了MERGE命令,你能够在一个SQL语句中对一个表同时执行inserts和updates操作. MERGE命令从一个或多个数据源中选择行来updating或inserting到一个或多个表.在Oracle 10g中转载 2009-09-24 15:15:00 · 4498 阅读 · 0 评论 -
Oracle 中时间的计算
Oracle中表示时间有DATE和TIMESTAMP,DATE可以存储年,月,日,小时,分钟,秒.TIMESTAMP是DATE的扩展,可以存储年,月,日,小时,分钟,秒,同时还可以存储秒的小数部分.秒的小数部分可以为9位即纳秒,默认为6为的微秒.表示时间差的为INTERVAL:INTERVAL YEAR TO MONTH 和INTERVAL DAY TO SECOND两种. 1,D原创 2010-07-16 17:45:00 · 5460 阅读 · 2 评论 -
如何得到JDBC Insert 语句执行后插入Oracle 数据库记录的主键
在应用中,很多时候会对表的主键用一个自动增涨的数来付值,如Oracle的sequence,插入后又想得到的主键的值。下面介绍一下相关的方法。1,用Oracle 的returning 语句。PreparedStatement sta = conn.prepareStatement("INSERT INTO LOGGING VALUES (TESTSEQ.NEXTVAL,SYSDATE)re原创 2009-10-07 19:23:00 · 7638 阅读 · 1 评论 -
IN,NOT IN,ANY和ALL用于比较子查询返回多行数据时你不知道的陷阱
本文简单讲述一下在使用IN,NOT IN,ANY,ALL等对从子查询中返回的数据做比较的时候一不小心就会犯的错误.测试的的数据如下:TEST表中有3条数据,其中id为3的行name的值为null.IDName1name12name23 1,IN在子查询不返回数据的时候得到结果是false,这个比较容原创 2012-04-17 11:54:37 · 4300 阅读 · 0 评论