oracle - sql中很有用小知识点

     在Oracle中,只有DML才会开启一个事务。也就是说Insert,Update,Delete这些都会开启一个事务,并且该事务在commit/rollback/ddl命令时会自动结束。

1.获取特定数据的前几位

select substr(recordid,1,2) from syscode where rownum < 5;


2.获取指定条数的数据

select recordid from syscode where rownum < 5;

3.获取指定格式的ID
  function getsmssendid return varchar2 is
    v_getsmssendid smssend.smssendid%type;
  begin
    select 'SMSSEND' || lpad(seq_smssend.nextval, 13, '0')
      into v_getsmssendid
      from dual;
    return v_getsmssendid;
  end;

 类似这样的效果: SMSSEND0000000000001

 

4.去掉数据里的tab键

update temp_lj set ac10 = replace(ac10,chr(9),'');
  commit;

 

5.更新,修改表中数据

select a.*,rowid from a

select a.* from a for update

以上两种都可以修改数据,但是第二种会锁表

 

6.控制查询导出的数量个数

View Code
 1 --function中的部分代码
 2 v_num     smallint default 10;--查询就只能查询10条
 3 begin
 4     if p_type = 'B' then--即导出,就可以查出所有
 5       v_num := 0;
 6     end if;
 7     v_NT_test := NEW nt_test();
 8   
 9     for c_ag in (select a.agentid,
10                         a.recommendagentid,
11                         getagentstatus(a.agentstatus) agentstatus,
12                         a.agentcode,
13                         a.agentname,
14                         A.agentlevelcode,
15                         a.hiredate,
16                         a.casemainid
17                    from agenthis a
18                   where a.bizyearmonth = p_month
19                     and a.agentstatus = 'AGENTSTATUS_09'
20                     and a.branchid = p_branchid
21                     and (a.agentcode = p_agentcode or p_agentcode is null)
22                     and (rownum <= v_num or v_num = 0)
23                  
24                  ) loop

 

7.数据导入到excel时,长数字会出现科学计算法(即省略部分数字不显示)

excel中出现科学计算法的那一列,将那列选中,鼠标右击选中设置单元格样式,将常规改成文本就OK了

 

8.日期

select to_char(sysdate, 'YYYY' ) || '年' ||
       
         to_char(sysdate, 'MM' ) || '月' ||
       
         to_char(sysdate, 'DD' ) || '日' 日期
       
         from dual
 

 

9.查询出数据,丢失了小数点前面的0,例如本来应该是0.0508,查出却是 .0508

select  to_char('.0508','fm90.0000')  from dual; 可解决

结果:0.0508 (说明:.0508就是表中的一列数,在数据库存的时候就是这样的)

fm9999999900.99,表示整数部分最多10位,00表示小数点前面有两个0,小数部分最多2位(并且会自动四舍五入),fm表示去掉转位字符串后前面的空格,不加fm,0.0508前面会有空格。

 

posted on 2012-06-20 23:31  lovebeauty  阅读(343)  评论(0编辑  收藏  举报

导航