﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-业精于勤荒于嬉，行成于思毁于随-随笔分类-Oracle相关问题积累</title><link>http://www.blogjava.net/produ/category/54761.html</link><description>&lt;h2&gt;见证学习的轨迹，记录闪光的想法&lt;/h2&gt;</description><language>zh-cn</language><lastBuildDate>Mon, 16 May 2016 14:14:49 GMT</lastBuildDate><pubDate>Mon, 16 May 2016 14:14:49 GMT</pubDate><ttl>60</ttl><item><title>oracle_锁机制</title><link>http://www.blogjava.net/produ/archive/2015/08/04/430527.html</link><dc:creator>都较瘦</dc:creator><author>都较瘦</author><pubDate>Tue, 04 Aug 2015 07:37:00 GMT</pubDate><guid>http://www.blogjava.net/produ/archive/2015/08/04/430527.html</guid><wfw:comment>http://www.blogjava.net/produ/comments/430527.html</wfw:comment><comments>http://www.blogjava.net/produ/archive/2015/08/04/430527.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/produ/comments/commentRss/430527.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/produ/services/trackbacks/430527.html</trackback:ping><description><![CDATA[淘到一篇好文章，标记一下<br /><br /><a href="http://www.cnblogs.com/gengyulong/archive/2011/04/07/2007586.html">http://www.cnblogs.com/gengyulong/archive/2011/04/07/2007586.html<br /><br /></a><img src ="http://www.blogjava.net/produ/aggbug/430527.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/produ/" target="_blank">都较瘦</a> 2015-08-04 15:37 <a href="http://www.blogjava.net/produ/archive/2015/08/04/430527.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle_casewhen语句和decode函数</title><link>http://www.blogjava.net/produ/archive/2015/08/01/430528.html</link><dc:creator>都较瘦</dc:creator><author>都较瘦</author><pubDate>Sat, 01 Aug 2015 07:43:00 GMT</pubDate><guid>http://www.blogjava.net/produ/archive/2015/08/01/430528.html</guid><wfw:comment>http://www.blogjava.net/produ/comments/430528.html</wfw:comment><comments>http://www.blogjava.net/produ/archive/2015/08/01/430528.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/produ/comments/commentRss/430528.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/produ/services/trackbacks/430528.html</trackback:ping><description><![CDATA[<div>casewhen语句和decode函数的作用很相似，都可以实现对查询的结果进行判断，从而返回指定的值</div><div></div><div><strong>case when</strong></div><div>用法示例1：</div><div>&nbsp;&nbsp;&nbsp;&nbsp;case 列名</div><div>&nbsp;&nbsp;&nbsp;&nbsp;when 值 then</div><div>&nbsp;&nbsp;&nbsp;&nbsp;&#8230;</div><div>&nbsp;&nbsp;&nbsp;&nbsp;[else 值]</div><div>&nbsp;&nbsp;&nbsp;&nbsp;end [as 别名]</div><div></div><div>实例：</div><div>&nbsp;&nbsp;&nbsp;&nbsp;case status</div><div>&nbsp;&nbsp;&nbsp;&nbsp;when 1 then</div><div>&nbsp;&nbsp;&nbsp;&nbsp;&#8216;锁定&#8217;</div><div>&nbsp;&nbsp;&nbsp;&nbsp;when 2 then</div><div>&nbsp;&nbsp;&nbsp;&nbsp;&#8216;关闭&#8217;</div><div>&nbsp;&nbsp;&nbsp;&nbsp;else</div><div>&nbsp;&nbsp;&nbsp;&nbsp;&#8216;正常&#8217;</div><div>&nbsp;&nbsp;&nbsp;&nbsp;end as 状态</div><div></div><div>用法示例2：</div><div>&nbsp;&nbsp;&nbsp;&nbsp;case</div><div>&nbsp;&nbsp;&nbsp;&nbsp;when 表达式</div><div>&nbsp;&nbsp;&nbsp;&nbsp;then 值</div><div>&nbsp;&nbsp;&nbsp;&nbsp;&#8230;</div><div>&nbsp;&nbsp;&nbsp;&nbsp;[else 值]</div><div>&nbsp;&nbsp;&nbsp;&nbsp;end</div><div></div><div>实例：</div><div>&nbsp;&nbsp;&nbsp;&nbsp;case when age&gt;18 then &#8216;成年&#8217;</div><div>&nbsp;&nbsp;&nbsp;&nbsp;when age &lt; 18 then &#8216;未成年&#8217;</div><div>&nbsp;&nbsp;&nbsp;&nbsp;else &#8216;不合法&#8217;</div><div>&nbsp;&nbsp;&nbsp;&nbsp;end</div><div></div><div><strong>decode</strong></div><div>用法示例：</div><div>&nbsp;&nbsp;&nbsp;&nbsp;decode(列名，值1，结果1，值2，结果2&#8230; 默认值）</div><div>实例：<br />&nbsp;&nbsp;&nbsp;&nbsp;decode(class,&#8217;1&#8242;,&#8216;一班&#8217;,&#8217;2&#8242;,&#8217;二班&#8217;,&#8217;三班&#8217;)</div><img src ="http://www.blogjava.net/produ/aggbug/430528.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/produ/" target="_blank">都较瘦</a> 2015-08-01 15:43 <a href="http://www.blogjava.net/produ/archive/2015/08/01/430528.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle_基础知识整理</title><link>http://www.blogjava.net/produ/archive/2015/07/28/430519.html</link><dc:creator>都较瘦</dc:creator><author>都较瘦</author><pubDate>Tue, 28 Jul 2015 03:04:00 GMT</pubDate><guid>http://www.blogjava.net/produ/archive/2015/07/28/430519.html</guid><wfw:comment>http://www.blogjava.net/produ/comments/430519.html</wfw:comment><comments>http://www.blogjava.net/produ/archive/2015/07/28/430519.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/produ/comments/commentRss/430519.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/produ/services/trackbacks/430519.html</trackback:ping><description><![CDATA[<div><strong>用户<br /><br /></strong></div><div></div><div>一：系统用户：</div><div>1：sys，system，sys的权限大于system</div><div>2：sysman</div><div>3：scott，默认密码：tiger</div><div>使用自带sql/plus登陆，格式：[username/psaaword] @服务名 as 角色[sysdba/sysoper]</div><div></div><div><br />二：用户的切换</div><div>当在sql/plus中登录之后，使用connect 用户名/密码 来切换用户</div><div></div><div><br />三：查看当前用户</div><div>show user，命令语句可以不添加分号，之后会显示当前已登录的用户信息，除了这种方式，还可以使用数据库自带的数据字典来查看信息</div><div></div><div><strong>*数据字典就是数据库自带的表，可以直接查看结构和数据</strong></div><div>dba_users和user_users，查看系统用户</div><div></div><div><br />scott用户</div><div>默认情况下是被锁定的，启用用户</div><div>alter user 用户名 account unlock</div><div><br /><hr /></div><div><strong>表空间</strong></div><div></div><div>表空间就是数据库存放数据的逻辑区域</div><div></div><div><br />类型：</div><div>永久表空间：一般存放表，视图等持久内容</div><div>临时表空间：存放数据库执行过程中的临时操作</div><div>UNDO表空间：存放历史数据，一般存放事物提交之前的历史数据</div><div></div><div><br />数据字典</div><div>dba_tablespaces或者user_tablespaces</div><div>前者对应系统管理员级别用户的表空间，后者对应一般用户的表空间，查看用户的默认表空间</div><div>需要在dba_users或者user_users表中查看</div><div></div><div><br />修改表空间</div><div>alter user 用户名 default/temporary tablespaces 新的表空间名</div><div></div><div><br />创建表空间</div><div>永久表空间 create [TEMPORARY] tablespace 表空间名 datafile &#8216;文件名&#8217; size XX</div><div>默认创建永久表空间，添加[TEMPORARY]选项，则会生成临时表空间</div><div></div><div>示例：创建永久表空间create tablespace test_p1 datafile &#8216;test_p1.dbf&#8217; size 10M</div><div>示例：创建临时表空间create TEMPORARY tablespace test_t1 datafile &#8216;test_t1.dbf&#8217; size 10M</div><div></div><div><br />查看永久表空间</div><div>数据字典dba_data_files，查看数据文件</div><div></div><div><br />查看临时表空间</div><div>数据字典dba_temp_files，查看数据文件</div><div></div><div><br />修改表空间状态</div><div>状态：联机/脱机，联机是默认状态，脱机状态的表空间不可以使用</div><div>alter tablespace 表空间名 online/offline</div><div>可以通过dba_tablespaces或者user_tablespaces数据字典的status字段确认表空间状态</div><div></div><div>状态：只读/读写，默认是可以读写，要修改可以该状态，该表空间必须处于联机状态</div><div>alter tablespace 表空间名 read only/read write</div><div></div><div><br />修改数据文件</div><div>在表空间中添加/删除数据文件</div><div>alter tablespace 表空间名 add/drop datafile &#8216;文件名&#8217; [size XX]</div><div></div><div><br />删除表空间</div><div>drop tablespace 表空间名，该选项只是删除表空间，如果需要同时删除表空间包含的文件，</div><div>那么需要在命令最后添加inculding contents</div><div><br /><hr /></div><div><strong>数据表</strong></div><div></div><div>数据类型</div><div><br />1：字符型</div><div>char（n）：固定长度，最长2000</div><div>nchar（n）：固定长度，按照unicode编码存放，最长1000，适用于存储汉字</div><div></div><div>varchar2（2）：变长字符类型，节省空间，最长4000</div><div>nvarchar2（2）：变长字符类型，节省空间，支持unicode，最长2000</div><div></div><div><br />2：数据型</div><div>number（p，s）：p代表有效数字，s代表小数位数</div><div>s可正可负</div><div></div><div>float（n）：主要存储二进制数字</div><div></div><div><br />3；日期类型</div><div>date：精确到秒，已经基本满足日常使用</div><div>timestamp：精确到小数秒</div><div></div><div><br />4：其他</div><div>blob：存放4G数据，以二进制形式存储</div><div>clob，存放4G数据，以字符串形式存储</div><div></div><div>对表的基本操作</div><div><br /><strong>创建表</strong></div><div>基本语法：</div><div>create table 表名</div><div>(</div><div>列名 数据类型,&#8230;</div><div>)</div><div></div><div><br /><strong>修改表</strong></div><div>1：添加字段</div><div>语法</div><div>alter table 表名 add 字段名 数据类型</div><div>示例</div><div>alter table user add cellphone number(11,0)</div><div></div><div><br />2：修改字段类型(修改时表中不可以存放数据)</div><div>语法</div><div>alter table 表名 modify 字段名 数据类型</div><div>alter table user modify cellphone char(11)</div><div></div><div><br />3：删除字段</div><div>语法</div><div>alter table 表名 drop column 字段名</div><div></div><div><br />4：修改字段名</div><div>语法</div><div>alter table 表名 rename column 旧字段名 to 新字段名</div><div></div><div>5：修改表名</div><div>语法</div><div>rename 旧表名 to 新表名</div><div></div><div><br />5：删除表</div><div>删除表数据（截断一个表）</div><div>truncate table 表名</div><div></div><div>删除表结构连同其数据</div><div>drop table 表名</div><div></div><div><br /><strong>操作表中的数据</strong></div><div>1：新增记录</div><div>insert into 表名(列名1,列名2,列名3&#8230;) values(值1，值2，值3&#8230;)</div><div>列名和值需要一一对应，如果不写列名，那么代表为所有字段添加值</div><div></div><div>*sysdate关键字，代表当前日期</div><div>*插入字符串的时候，需要添加单引号</div><div></div><div><br />2：设定默认值</div><div>在创建表的时候，可以为指定字段设定默认的值</div><div>create table 表名</div><div>(</div><div>id number(6,0),</div><div>reg_date date default sysdate</div><div>)</div><div></div><div><br />3：修改默认值</div><div>alter table user modify cellphone default &#8221;;</div><div></div><div><br />4：复制表</div><div>1)：创建表时就复制，复制结构和数据</div><div>create table 新建表表名 as select 列1，列2&#8230;|* from 所要复制表的表名</div><div>2)：在新增时添加来自其他表的内容</div><div>insert into 表名(列1，列2&#8230;) select 列1，列2&#8230;|* from 所要复制表的表名</div><div>和新增一条记录类似，但是values关键字被替换成目标表的列，数据来源不是手动指定，而是来自其他表</div><div></div><div><br />5：修改表数据</div><div>update 表名 set 列1=值1，列2=值2&#8230; [where 条件&#8230;]</div><div></div><div>无条件更新，也就是全表更新</div><div>update user set username=&#8217;new_name&#8217;（更新的时候要注意，列和值的类型要匹配，全表更细是有风险的操作，谨慎操作）</div><div></div><div>有条件更新</div><div>update user set username=&#8217;other_name&#8217; where id=123456</div><div></div><div><br />6：删除表数据</div><div>delete from 表名 [where 条件&#8230;]</div><div></div><div>无条件删除</div><div>delete from user（删除全表数据，但是效率上不如truncate操作快）</div><div></div><div>条件删除</div><div>delete from user where id=123456</div><div><br /><hr /></div><div><strong>约束</strong></div><div></div><div>作用：来定义记录中数据的规则，哪些字段必须输入，字段的内容。以此来保持数据的完整性</div><div></div><div><br />1：非空约束</div><div></div><div>创建表时添加该约束</div><div>create table 表名</div><div>(</div><div>id number(6,0) NOT NULL,</div><div>&#8230;</div><div>)</div><div></div><div>*只能在列级设置，不能在表级设置，并且非空约束是没有约束名称</div><div></div><div>修改表的约束</div><div>alter table 表名 modify 列名 类型 NOT NULL，但是如果表中的数据存在违反非空约束的记录，那么会修改失败</div><div></div><div>去除非空约束</div><div>alter table 表名 modify 列名 类型 NULL</div><div></div><div><br />2：主键约束</div><div></div><div>主键约束：确保记录在表中的唯一性，主键可以由一个或者多个字段组成，并且一个表中只能有一个主键约束</div><div></div><div><br />创建表时添加该约束，列级</div><div>create table 表名</div><div>(</div><div>id number(6,0) PRIMARY KEY,</div><div>&#8230;</div><div>);</div><div></div><div><br />创建表示添加该约束，表级</div><div>create table 表名</div><div>(</div><div>id number(6,0),</div><div>username varchar2(50),</div><div>&#8230;</div><div>constraint pk primary key(id,username)</div><div>);</div><div></div><div>*使用一个字段作为主键无需指定主键的名字，而多个主键需要指定主键的名称</div><div></div><div><br />查看约束</div><div>用到了一个数据字典user_constraint</div><div>select constraint_name from user_constraint where table_name=&#8217;XXX&#8217;</div><div></div><div>在修改表时添加该约束</div><div>alter table 表名 add constraint 主键名 primary key(指定为主键的列)</div><div></div><div>修改约束名称</div><div>alter table 表名 rename constraint 旧名字 to 新名字</div><div></div><div><br />3：外键约束</div><div>创建表的时候添加外键关联，列级</div><div>create table 表名(从表)</div><div>(</div><div>id number(6,0) primary key,</div><div>username varchar2(50),</div><div>type_id varchar2(5) references 表名(主表)(主表字段，只能是主键)</div><div>)</div><div></div><div>或者，表级</div><div></div><div>create table 表名(从表)</div><div>(</div><div>id number(6,0) primary key,</div><div>username varchar2(50),</div><div>constraint 外键名 foreign key(从表外键列名) reference 主表名(主表列名)[ON DELETE CASCADE]，可选项是级联删除，主表记录删除，从表相应记录也会被删除)</div><div><strong>*外键只能来自主表的主键（或者是null），并且类型必须一致</strong></div><div></div><div><br />在修改时添加外键约束</div><div>alter table user add constraint fk_id foreign key(id) references user_info(id)[ON DELETE CASCADE]</div><div></div><div><br />4：唯一约束</div><div>作用：保证字段值的唯一性</div><div></div><div>和主键的区别：允许空值，允许有多个</div><div></div><div>创建表的时候添加唯一约束，列级</div><div>create table 表名(从表)</div><div>(</div><div>id number(6,0) primary key,</div><div>username varchar2(50),</div><div>type_id varchar2(5) UNIQUE</div><div>)</div><div></div><div>或者，表级</div><div></div><div>create table 表名</div><div>(</div><div>id number(6,0) primary key,</div><div>username varchar2(50),</div><div>constraint 唯一约束名 unique(列名);</div><div>)</div><div></div><div><strong>*每个唯一约束都有自己的名字，不可以联合多个字段设置唯一约束</strong></div><div></div><div><br />在修改表时添加唯一约束</div><div>alter table 表名 add constraint 约束名 unique(id )</div><div></div><div><br />5：检查约束</div><div>作用：限制数据的录入，同一个表中可以存在多个</div><div>create table 表名，列级</div><div>(</div><div>id number(6,0) primary key,</div><div>username varchar2(50),</div><div>age number(3,0) check(age &gt;0)</div><div>)</div><div></div><div>或者，表级</div><div></div><div>create table 表名</div><div>(</div><div>id number(6,0) primary key,</div><div>username varchar2(50),</div><div>age number(3,0),</div><div>constraint 检查约束名 check(age &gt;0)；</div><div>)</div><div></div><div>在修改表时添加检查约束</div><div>alter table 表名 add constraint 约束名 check(salary&gt;0)</div><div></div><div><br />6：禁用/启用和删除约束的方法</div><div></div><div>启用/禁用约束</div><div>alter table 表名 disable|enable constraint 约束名</div><div></div><div><br />7：删除约束</div><div>1：</div><div>alter table 表名 drop constraint 约束名</div><div></div><div>2：</div><div>alter table 表名 drop primary key[cascade] 约束名，添加可选项，连同外键的级联删除</div><img src ="http://www.blogjava.net/produ/aggbug/430519.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/produ/" target="_blank">都较瘦</a> 2015-07-28 11:04 <a href="http://www.blogjava.net/produ/archive/2015/07/28/430519.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle_函数over(Partition by…) </title><link>http://www.blogjava.net/produ/archive/2015/07/24/430518.html</link><dc:creator>都较瘦</dc:creator><author>都较瘦</author><pubDate>Fri, 24 Jul 2015 02:53:00 GMT</pubDate><guid>http://www.blogjava.net/produ/archive/2015/07/24/430518.html</guid><wfw:comment>http://www.blogjava.net/produ/comments/430518.html</wfw:comment><comments>http://www.blogjava.net/produ/archive/2015/07/24/430518.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/produ/comments/commentRss/430518.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/produ/services/trackbacks/430518.html</trackback:ping><description><![CDATA[<div>项目中出现过row_number() over(partition by b.seriesmark order by b.seriesmark)的用法，比较困惑，下面这篇文章解决了我的问题，收录一下。<br /><br /><a href="http://www.cnblogs.com/sumsen/archive/2012/05/30/2525800.html" target="_blank" title="戳我"><strong>戳我</strong></a></div><img src ="http://www.blogjava.net/produ/aggbug/430518.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/produ/" target="_blank">都较瘦</a> 2015-07-24 10:53 <a href="http://www.blogjava.net/produ/archive/2015/07/24/430518.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle_查询日期是否过期（大于等于某日期）</title><link>http://www.blogjava.net/produ/archive/2015/03/24/423786.html</link><dc:creator>都较瘦</dc:creator><author>都较瘦</author><pubDate>Tue, 24 Mar 2015 06:35:00 GMT</pubDate><guid>http://www.blogjava.net/produ/archive/2015/03/24/423786.html</guid><wfw:comment>http://www.blogjava.net/produ/comments/423786.html</wfw:comment><comments>http://www.blogjava.net/produ/archive/2015/03/24/423786.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/produ/comments/commentRss/423786.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/produ/services/trackbacks/423786.html</trackback:ping><description><![CDATA[今天开发CRM的一个小功能，需求大概是这样的：<strong>有一张存储客户信息的表，这个表中有一个列代表着该用户的&#8220;提醒时间&#8221;，它意为：如果当前时间大于等于这个值，那么该用户就需要在展示的时候被标记为&#8220;需要提醒&#8221;，并且需要展示需要提醒的条数。</strong><br /><hr />其实这个问题不应该是个大问题，只不过本人oracle比较薄弱，需要进行记录，以便后查。<br />经过调查，我发现了如下几个函数对于实现本需求有帮助：:<br /><p><strong>1：符号判断函数 sign</strong></p><p><strong>函数语法：</strong><br />sign(n)</p><p><strong>函数说明：</strong><br />取数字n的符号,大于0返回1,小于0返回-1,等于0返回0</p><p><strong>示例：</strong><br />一、select sign( 100 ),sign(- 100 ),sign( 0 ) from dual;</p><p>　　SIGN(100) SIGN(-100) SIGN(0)<br />　　&#8212;&#8212;&#8212;- &#8212;&#8212;&#8212;- &#8212;&#8212;&#8212;-<br />　　1 -1 &nbsp;0</p><div>二、a=10，b=20&nbsp;<br />　　则sign(a-b)返回-1<br /><br /><strong>2：值比较函数 decode<br /></strong><strong>函数说明：<br /></strong>根据条件返回相应值<br /><strong>示例：<br /></strong><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all">　　decode(条件,值1,翻译值1,值2,翻译值2,...值n,翻译值n,缺省值)　　<br />　　该函数的含义如下：　　<br />　　<span style="color: #0000FF; ">IF</span>&nbsp;条件<span style="color: #808080; ">=</span>值1&nbsp;<span style="color: #0000FF; ">THEN</span><br />　　<span style="color: #0000FF; ">RETURN</span>(翻译值1)<br />　　ELSIF&nbsp;条件<span style="color: #808080; ">=</span>值2&nbsp;<span style="color: #0000FF; ">THEN</span><br />　　<span style="color: #0000FF; ">RETURN</span>(翻译值2)<br />　　......<br />　　ELSIF&nbsp;条件<span style="color: #808080; ">=</span>值n&nbsp;<span style="color: #0000FF; ">THEN</span><br />　　<span style="color: #0000FF; ">RETURN</span>(翻译值n)　　<br />　　<span style="color: #0000FF; ">ELSE</span><br />　　<span style="color: #0000FF; ">RETURN</span>(缺省值)<br />　　<span style="color: #0000FF; ">END</span>&nbsp;<span style="color: #0000FF; ">IF</span><br />或：<br />　　<span style="color: #0000FF; ">when</span>&nbsp;<span style="color: #FF00FF; ">case</span>&nbsp;条件<span style="color: #808080; ">=</span>值1&nbsp;<span style="color: #0000FF; ">THEN</span><br />　　<span style="color: #0000FF; ">RETURN</span>(翻译值1)<br />　　ElseCase&nbsp;条件<span style="color: #808080; ">=</span>值2&nbsp;<span style="color: #0000FF; ">THEN</span><br />　　<span style="color: #0000FF; ">RETURN</span>(翻译值2)<br />　　......<br />　　ElseCase&nbsp;条件<span style="color: #808080; ">=</span>值n&nbsp;<span style="color: #0000FF; ">THEN</span><br />　　<span style="color: #0000FF; ">RETURN</span>(翻译值n)　　<br />　　<span style="color: #0000FF; ">ELSE</span><br />　　<span style="color: #0000FF; ">RETURN</span>(缺省值)<br />　　<span style="color: #0000FF; ">END</span></div>感觉这两个函数就足够了，那么现在理清楚写sql的思路：<br />比较每条记录的&#8220;提醒时间&#8221;，过期或者到期就意味着需要设置提醒。<br /><strong>1：先比较两个时间</strong><br />表：crm_lwh_custinfo<br />字段：remind_date(Date)<br /><br /><div><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">1</span>&nbsp;<span style="color: #FF00FF; ">sign</span>(to_date(t.remind_date,<span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">yyyy.mm.dd</span><span style="color: #FF0000; ">'</span>)<span style="color: #808080; ">-</span>to_date(sysdate,<span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">yyyy.mm.dd</span><span style="color: #FF0000; ">'</span>))</div></div><br />根据sign函数的返回值进一步设置sql要返回的值<br /><strong>2：根据sign函数的返回值，通过decode函数设定sql要返回的值<br /></strong>过期或者到期都用1标识，未到期，也就是默认值用0标识<br /><div><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">1</span>&nbsp;<span style="color: #0000FF; ">select</span>&nbsp;decode(<span style="color: #FF00FF; ">sign</span>(to_date(t.remind_date,<span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">yyyy.mm.dd</span><span style="color: #FF0000; ">'</span>)<span style="color: #808080; ">-</span>to_date(sysdate,<span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">yyyy.mm.dd</span><span style="color: #FF0000; ">'</span>)),<span style="color: #808080; ">-</span><span style="color: #800000; font-weight: bold; ">1</span>,<span style="color: #800000; font-weight: bold; ">1</span>,<span style="color: #800000; font-weight: bold; ">0</span>,<span style="color: #800000; font-weight: bold; ">1</span>,<span style="color: #800000; font-weight: bold; ">0</span>)&nbsp;<br />&nbsp; &nbsp;&nbsp;<span style="color: #0000FF; ">as</span>&nbsp;need_remind&nbsp;&nbsp;<span style="color: #0000FF; ">from</span>&nbsp;crm_lwh_custinfo&nbsp;t&nbsp;</div><br />如果你看到这里觉得有什么更好的办法，或者觉得这种写法有什么不足，欢迎留言。</div></div><img src ="http://www.blogjava.net/produ/aggbug/423786.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/produ/" target="_blank">都较瘦</a> 2015-03-24 14:35 <a href="http://www.blogjava.net/produ/archive/2015/03/24/423786.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>