
Oracle PL/SQL编程
文章平均质量分 77
304的的哥
一个被产品经理耽误的,摄影师
展开
-
oracle 不要乱用between and
<br />//需求://查询出用户在没有出差的时候录入的信息//分析://子查询:我们可以显查询出那些在出差时录入信息的用户id,和时间//主查询:我们从用户明细表中检索信息,条件是,用户id和write_date不在子查询查到的id和时间////用户明细表with tmp_a as( select 1 id,to_date('20100405','yyyymmdd') write_date,'tttttt1' text from dual union all原创 2011-05-10 21:51:00 · 2731 阅读 · 0 评论 -
oracle中group by的扩展
<br /> <br /> <br /> 扩展了的group by子句.我们都知道,group by子句用于将查询结果分组。下面是未扩展的group by子句SQL> select job,sum(sal) 2 from emp 3 group by job;JOB SUM(SAL)--------- ----------ANALYST 6000CLERK 4150MANAGER 8275原创 2011-03-21 16:53:00 · 1617 阅读 · 1 评论 -
取出包含某几个指定字符的列
<br />with tab as(select 111 name,'aaa' subject from dual union allselect 111,'bbb' from dual union allselect 111,'ccc' from dual union allselect 222,'aaa' from dual union allselect 222,'bbb' from dual union allselect 222,'ccc' from dual union原创 2011-03-22 15:32:00 · 1620 阅读 · 0 评论 -
oracle nullif函数的使用
<br />//题目: ID NAME ------------ 1 张 1 王 2 赵//结果:ID NAME--------1 张 王2 赵//解法一:with t as( select 1 id, '张' name from dual union all select 1 id, '王' name from dual union all select 1 id, '李' name fr原创 2011-05-11 20:37:00 · 3894 阅读 · 0 评论 -
oracle 将天数(1-366)转换为日期
//在平时的应用中,我们很多地方都使用了日期函数to_date()//但是我们对日期函数的格式知道得很少,或者说我们根本就不会去研究它//然而,知道日期格式是多么的重要//下面是一个具体的应用://有一张表,有年字段year,时期字段type,期数term,如下ID year type term---------------------1 2010 R 12 2010 R 2. . . .. . . .N 2010 R原创 2011-05-11 21:03:00 · 2960 阅读 · 0 评论 -
oracle 闰年判断
<br />//闰年最直接的判断是:能被4整除且不能被100整除,或者能被400整除的年份create or replace procedure pro_leap_year(year_in in number)as v_mod1 number(4) :=mod(year_in,4); v_mod2 number(4) :=mod(year_in,100); v_mod3 number(4) :=mod(year_in,400);begin if ((v_mod1=0原创 2011-05-13 07:45:00 · 3741 阅读 · 0 评论 -
oracle 学会怎么样分解复杂的问题
<br />//问题表TEST:ID 姓名 消费 日期 退休标志(1-在岗,2-退休)004 张三 20 2010-05-11 1007 李四 50 2010-06-23 1002 王五 10 2010-06-23 2004 张三 100 2010-07-20 2//按退休标志分组,统计消费人次和金额,结果为:退休标志 消费人次 消费1 1 502 3 130//注:张三在2010-07-20已退休,之前的在岗消费则以退休来统计人次和消费金额//解法://原创 2011-05-14 21:40:00 · 1428 阅读 · 0 评论 -
oracle 求差集的方法
//一个表有一个ID字段,是主键并且是递增的,现在需要一条SQL把这个表没有的ID查出来//例如ID的记录如下:ID124579//我们SQL需要把3,6,8这三个值查出来//这是一个典型的求集合的差集问题:with ta as( select 1 id from dual union all select 2 from dual union all select 4 from dual union all select 5 fro原创 2011-05-15 07:22:00 · 3129 阅读 · 0 评论 -
oracle 用过程获得表的字段
<br />//在存储过程里面,我们常常将从一个表里面查询到的字段数据复制给一写变量,//然后调用包里面的函数dbms_output.put_line()来将其打印出来;//下面是一个实例:procedure show_employee(empno_in in emp.empno%type) as v_sign number; v_empno emp.empno%type; v_ename emp.ename%type; v_deptno emp.d原创 2011-05-14 08:42:00 · 1843 阅读 · 0 评论 -
oracle wmsys.wm_concat函数
wmsys.wm_concat函数,oracle 10g引入的;作用:连接字符串,也可以用于将多行数据,转换为一行。1.用于行列转换SQL> select * from a; ITEMID TYPEID TYPENAME----------- ------------------------- ---------- 1 2 bbb 2原创 2011-03-29 21:47:00 · 8425 阅读 · 3 评论 -
oracle 分析问题时细心观察数据的规律
<br />//数据如下:F_YP_ID F_ITEM_CODE F_CS_CODE F_CS_NO F_AVG_CS ID1859412 91 19 1 饱和烃 86851859412 91 20 1 -32.156 86861859412 91 19 2 芳烃 86871859412 91 20 2 -32.133 86881859412 91 19 3 非烃 86891859412 91 20 3 -32.121 86901原创 2011-05-18 22:04:00 · 1504 阅读 · 0 评论 -
oracle 求阶乘
<br />//求阶乘//数学里面最直接的阶乘定义就是,将这个数n乘以n-1,再乘以n-1-1,一直乘到1,//所得到的结果就是n的阶乘:n!=n*(n-1)*(n-1)*...*2*1,这里要注意:0!=1//下面定义一个球阶乘的函数:create or replace function fun_factorial(num number)return number is result number:=1;begin if num<0 then原创 2011-05-17 17:10:00 · 5087 阅读 · 0 评论 -
oracle where 1=1
oracle中有些逻辑判断,其貌不扬,但是作用可不小;1.where 1=1:将返回一个true值,既条件为真。还有其他的写法:where 0=0;where 'a'='a'等;·常由程序(c++,java,c#等)生成,where条件中 1=1 之后的条件是通过 if 块动态变化的。 String sql="select * from table_name where 1=1"; if( conditon 1) { sql=sql+" and var2=val原创 2011-03-29 22:21:00 · 4210 阅读 · 0 评论 -
oarcle lag()分析函数
lag()是一个分析函数,oracle 8i引入的,8i以后的版本都可用。用此函数,你可以一次性从表中查询多条数据,而不需要将此表自连接。它返回表中的当前行,如果想要得到下一行的数据,得用到lead()函数。语法:lag ( expression [, offset [, default] ] )over ( [ query_partition_clause ] order_by_clause )expression :可以包含oracle内置函数,但不能是任何分析函数。offset :可选参数,是表中与当翻译 2011-03-30 18:42:00 · 4366 阅读 · 0 评论 -
oracle lead()函数
<br /> <br />ead()是一个分析函数,适用于oracle 8i以后的版本,<br />使用这个函数,你可以一次性从表中查询多条记录,<br />而不需要进行表的自连接。<br />返回值:返回与当前行偏离offset行的列值。<br />语法:<br /> lead ( expression [, offset [, default] ] )<br /> over ( [ query_partition_clause ] order_by_clause )<br />exp翻译 2011-03-31 10:55:00 · 2291 阅读 · 0 评论 -
oracle 分组统计
<br />问题:<br />期限 利率 金额1年 0.5 1001年 0.4 2001年 0.5 501年 0.3 2002年 0.5 1002年 0.4 2002年 0.5 502年 0.3 200结果:期限 最大利率 最大利率总金额 金额---- -------- -------------- ----1年 0.5 150 550 <br />解法:<br />with tab as( select原创 2011-04-01 16:08:00 · 1455 阅读 · 0 评论 -
oracle row_number分析函数
oracle 分许函数 row_number(),返回一个整数值(>=1);语法格式:1.row_number() over (order by col_1[,col_2 ...])作用:按照col_1[,col_2 ...]排序,返回排序后的结果集,此用法有点像rownum,为每一行返回一个不相同的值:select rownum,ename,job, row_number() over (order by rownum) row_numberfrom emp; ROWNUM翻译 2011-04-01 17:20:00 · 3210 阅读 · 0 评论 -
oracle substr()函数
<br /> <br />In Oracle/PLSQL, the substr functions allows you to extract a substring from a string.<br />The syntax for the substr function is:<br />substr( string, start_position, [ length ] )<br />string is the source string.<br />start_position is the p转载 2011-04-02 17:09:00 · 2463 阅读 · 4 评论 -
insert语句中sequence的使用方法
我们常常在表中需要插入一些自动增长的值;一方面,我们可以手动添加这些值,另一方面,oracle提供的sequence可以帮助我们实现插入的值自动增长,而不需要我们手动的提供值,我们需要做的就是设置好sequence的初值和增长值即可。关于序列的定义和参数设置,请参考:http://blog.youkuaiyun.com/BOBO12082119/archive/2011/01/08/6124597.aspx下面是一个实例:create table goods( goods_id varchar2(5)原创 2011-04-02 20:32:00 · 30406 阅读 · 4 评论 -
oracle 左连接实例
<br />//数据Aid name 1 test12 test23 test3Bid name code 11 test1 '001' 12 test1 '002' 13 test2 '004' //结果a.id b.code 1 '001' 2 '004' 3 null//方法一:先左连接,在去掉重复的数据with ta as( select 1 id,'test1' name from du原创 2011-05-23 20:18:00 · 1582 阅读 · 0 评论 -
oracle merge into小实例
//前天碰到一个问题,关于两张表更新的。//帖子位置:http://topic.youkuaiyun.com/u/20110411/20/e18563e0-8d78-4c57-b91a-da7c1219e513.html//当时不知道怎么做,昨天看书,以及昨天晚上看到一位优快云友友回答了相似的问题。//才弄明白oracle中merge的使用。//下面构造一个相似的实例,来看一下oracle中merge的用法//测试表以及数据//product_types:产品类型表select * fro原创 2011-04-13 12:30:00 · 1760 阅读 · 0 评论 -
oracle procedure 小实例
<br />//根据提供员工编号查询员工信息create or replace procedure pro_show_employee(empno_in in emp.empno%type)as v_sign number; v_empno emp.empno%type; v_ename emp.ename%type; v_deptno emp.deptno%type;begin select 1 into v_sign from dual原创 2011-04-13 18:05:00 · 2421 阅读 · 0 评论 -
oracle dbtimezone与os时区不一致的解决办法
Connected to Oracle Database 10g Enterprise Edition Release 10.1.0.2.0 Connected as sys //查看数据库时区SQL> select dbtimezone from dual;DBTIMEZONE----------+00:00 //查看系统时间SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from原创 2011-04-12 14:25:00 · 5859 阅读 · 0 评论 -
oracle 数值类型都转换为number类型存储
oracle中所有的数值类型除了binary_float和binary_double之外,其他的数据类型都转换为number类型存储。number类型是一种变长格式,长度范围[0~22],精度可达38numeric(p,s):完全映射至number(p,s),p默认为38decimal(p,s)或dec(p,s):完全映射至number(p,s)integer或int:完全映射至number(38)smallint:完全映射至number(38)float(b):映射至number类型double prec原创 2011-04-12 16:09:00 · 3840 阅读 · 0 评论 -
oracle sys_connect_by_path实现行列转换
<br />//原帖:http://topic.youkuaiyun.com/u/20110412/16/3eec4221-d1f7-4cd2-95d0-27f3ff086632.html?77362//前几天,一优快云友友问了一个行列转换的问题。//问题之后的几分钟之内,好多优快云友友都给出了正确答案。//但是,这位兄弟的一句话让大家很是郁闷://"诺诺的答谢 楼上各位大大。。。只是纠结的说下:oracle版本没到10g。。。没有wm_concat"//wm_concat函数是10g才引入的。原创 2011-04-16 06:56:00 · 3014 阅读 · 0 评论 -
oracle 求平分price后的查询
//数据:id num price1 1 52 2 143 1 64 4 20//结果:id num price1 1 52 1 73 1 74 1 65 1 56 1 57 1 58 1 5//解法:with a as( select 1 id,1 num,5 price from dual union all原创 2011-06-08 06:38:00 · 1596 阅读 · 0 评论 -
oracle 构造与已知表结构相同的表问题
<br />//构造一个与已知表就够相同的表,我们常用的方法为://create table t_name as//select col_name from t_exists//where 1=0;//这种构造方法,减少了我们的工作量,带了很大的方便;//但是你知道吗?这种构造表的方法,仅仅是构造表的结构与//已知表结构相同,其他的关于表、列的约束,列的默认值,注释//等这些都没有复制过来。create table student( stu_no number原创 2011-04-25 14:48:00 · 1401 阅读 · 0 评论 -
oracle 解决匹配的几种方法
<br />//数据with ta as( select 1 id,'f1,f2' fid from dual union all select 2,'f4,f5,f6' from dual),tb as( select 'f1' fid,'name1' fname from dual union all select 'f2','name2' from dual union all select 'f3','name3' from dual u原创 2011-04-24 15:22:00 · 2674 阅读 · 2 评论 -
oracle 根据行列号取值
<br />//数据 A B C-- -- --a1 b1 c1a2 b2 c2a3 b3 c3//结果:row col value-- --- ----- 1 1 a1 1 2 b1 1 3 c1 2 1 a2 2 2 b2 2 3 c2 3 1 a3 3 2 b3 3 3 c3--with tb as(原创 2011-04-24 17:57:00 · 1573 阅读 · 0 评论 -
oracle SQL*PLUS - SET Statement
<br />Set sqlplus system settings and defaults.Syntax: SET option value SHO[W] optionOptions: most of the options listed below have an abbreviated and a long form e.g. APPINFO or APPI will do the same thing--APPI[NFO]{ON|OFF|tex转载 2011-04-24 10:35:00 · 1634 阅读 · 0 评论 -
oracle %type和%rowtype小实例
<br />//%type//如果声明的变量是直接映射到数据库的某一列上,那么就可以使用%type关键字将变量//锚定到这个列上。这样做有什么好处呢?//比如://declare v_ename scott.emp.ename%type;//当数据类型发生变化时,此方法显得非常灵活。//如果更改了列的长度,那么锚定到该列上的所有变量都会自动更改其长度;//假设我们将v_ename定义为varchar2(10),那么当emp表中的ename列发生变化时,//我们得手动将v_en原创 2011-04-27 21:03:00 · 3506 阅读 · 2 评论 -
oracle row_number分析函数简化了我们的很多操作
//问题:CI MSISDN CNT18802 13009060195 918830 13009060195 118837 13009060195 218829 13009063333 518830 13009063333 718847 13009063333 4//结果:CI MSISDN CNT18802 13009060195 918830 13009063333 7//此问题是想把MSISDN相同的项的CNT查询出来//碰到此问题,原创 2011-04-30 15:56:00 · 1350 阅读 · 0 评论 -
oracle 通过rownum实现分页
<br />//rownum是一个伪列,是oracle系统自动为查询返回结果的每行分配的编号,第一行为1,第二行为2,以此类推。。。。//一个oracle分页,至少要包含三层(除非不用order by,暂时可以用2层实现),模板为select temp2.* from( select rownum num,temp1.* from( SQL query ) temp1 where rownum<=n1)temp2 where temp转载 2011-05-01 15:40:00 · 3459 阅读 · 0 评论 -
oracle 累计求和
//将当前行某列的值与前面所有行的此列值相加,即累计求和:with t as( select 1 val from dual union all select 3 from dual union all select 5 from dual union all select 7 from dual union all select 9 from dual)select val, sum(val) over (原创 2011-05-03 06:48:00 · 2401 阅读 · 0 评论 -
oracle union all和order by一起使用
//有时候,我们会将进过排序(order by)后的结果集与//其他经过排序的结果集进行合并(union or union all)//比如:select * from tb where length(id)=5 order by id descunion allselect * from tb where length(id)=10 order by id asc//通常情况下,上面的查询将会得到下面的错误提示://ORA-00933: SQL command not prop原创 2011-05-05 11:26:00 · 6311 阅读 · 0 评论 -
oracle自定义函数
--=============================--author:yeeXun--date:发表于 @2010年12月25日 10:54:00--address:Jau 17-304--==============================Oracle函数,分为系统函数和自定义函数,这里介绍自定义函数。函数用于返回特定数据,可以返回一个或多个值。在一个函原创 2010-12-25 10:54:00 · 3284 阅读 · 0 评论 -
Oracle binary_float和binary_double
--=================================--author:_yeeXun--date:发表于 @2010年12月29日 09:17:00--address Jau 17-304--=================================Oracle中引入了两种新的数据类型:binary_float和binary_double。这两种数据类原创 2010-12-29 09:17:00 · 2969 阅读 · 0 评论 -
Oracle 日期、空值、约束小实例
SQL> desc customers;Name Type Nullable Default Comments ----------- ------------ -------- ------- -------- CUSTOMER_ID INTEGER FIST_NAME VARCHAR原创 2011-01-08 20:19:00 · 1788 阅读 · 0 评论 -
oracle 11g中regexp_count函数
在Oracle 11g 中,可以使用REGEXP_COUNT 函数。REGEXP_COUNT 返回在源串中出现的模式的次数,作为对REGEXP_INSTR 函数的补充。需要注意的是,尽管COUNT 是一个集合函数,它操作的是行组,但REGEXP_COUNT 是一个单行函数,它分别计算每一行。REGEXP_COUNT 的语法如下所示: REGEXP_COUNT ( source_char原创 2011-03-15 15:46:00 · 3963 阅读 · 0 评论 -
oracle中connect by和start with的使用
select [level],column,expression,...from table_name[where where_clause][[start with start_condition][connect by prior prior_condition]];level:一个伪列,代表位于查询的第几层。start_condition:定义层次化查询的起点。pri原创 2011-03-19 16:37:00 · 3750 阅读 · 3 评论