zoukankan      html  css  js  c++  java
  • oracle 小知识

    1.给数字加上千分位分隔符

      select to_char(11111111111111111.25,'FM999,999,999,999,999,990.00') from dual;

    另外:select to_char(0.3,'99.00') from dual 结果:‘   .30’;select to_char(0.3,'90.00') from dual 结果:‘  0.30’

    2.显示单引号字符

    (1)select 'it''s a bird' as phrase from dual;

    (2)select q'(it's a bird)' as phrase from dual;

    3.关于日期的获取

    取当前日期前一个月的第一天的日期

    SELECT last_day(add_months(SYSDATE, -2)) + 1  FROM dual;
     
    取当前日期前一个月的最后一天的日期
    SELECT last_day(add_months(SYSDATE, -1)) FROM dual;
     
    本月的第一天和最后一天
    select to_char(trunc(sysdate,'MONTH'),'yyyy-mm-dd') First_DayOfMonth,to_char(last_day(trunc(sysdate,'MONTH')),'yyyy-mm-dd') Last_DayOfMonth  from dual;
     
    任意日期的最后一天
    SELECT LAST_DAY(DATE'2016-09-23') FROM DUAL;
    4.select 字段加双引号“字段”问题

      1、oracle表和字段是有大小写的区别。oracle默认是大写,如果我们用双引号括起来的就区分大小写,如果没有,系统会自动转成大写。

      2、我们在使用navicat使用可视化创建数据库时候,navicat自动给我们加上了“”。
    5.oracle中唯一性约束unique与主键/主码primary key的区别在于:
      Primary key既限制了唯一性又不允许为空;而unique只限制了非空字段的唯一性,它是允许为空的,而且允许重复的空值。
    6.关于NULL
      NULL空值是比较特殊的类型,在进行数据处理时应给予关注或做NVL非空处理。
      不能用 = 或 <> 与空值判断,而应是IS/NOT NULL;NOT/IN()数据包含空值均为空;与空值比较时始终为真;order by字段包含空值则空值在末尾......
    7.between...and...前后为同一值时,sql 结果集为0。
      SELECT * FROM A009 WHERE COL3 BETWEEN '001' AND '001';
    8. TRUNC(number,num_digits)
      trunc是一种函数,功能是截取日期或数字,返回指定的值(根据num_digits决定)。
    9. 执行存储过程
    (1)exec procedure_test;
    (2)begin
           procedure_test;
           end;
           /
    10. Oracle中执行存储过程call和exec区别

    在sqlplus中这两种方法都可以使用: 

    exec pro_name(参数1..); call pro_name(参数1..); 

    区别: 
    1. 但是exec是sqlplus命令,只能在sqlplus中使用;call为SQL命令,没有限制. 

    2. 存储过程没有参数时,exec可以直接跟过程名(可以省略()),但call则必须带上().
    11. 修改oracle用户密码永不过期
    1.  

      查看用户的proifle是哪个,一般是default:

      sql>SELECT username,PROFILE FROM dba_users;

    2.  

      查看指定概要文件(如default)的密码有效期设置:

      sql>SELECT * FROM dba_profiles s WHERE s.profile='DEFAULT' AND resource_name='PASSWORD_LIFE_TIME';

    3.  

      将密码有效期由默认的180天修改成“无限制”:

      ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;

      修改之后不需要重启动数据库,会立即生效。

    4.  

      修改后,还没有被提示ORA-28002警告的帐户不会再碰到同样的提示;

      已经被提示的帐户必须再改一次密码,举例如下:

       $sqlplus / as sysdba

      sql> alter user smsc identified by <原来的密码> ----不用换新密码

     12. 修改oracle用户密码
    以SYSDBA身份登陆时可以修改其他用户的密码,比如:
    SQL> alter user user01 identified by user01;
    13.多个case...when...语句时,如果case条件有重叠,则遵循前面优先的原则进行判断。
    14.给表重命名
       ALTER TABLE old_name RENAME TO new_name
    15.取整数
    --1.取整(大)    
        select ceil(-1.001) value from dual   ;

    --2.取整(小)   

    select floor(-1.001) value from dual  ; 

    --3.取整(截取) 

    select trunc(-1.002) value from dual    ;   

    --4.取整(舍入)   

            select round(-1.001) value from dual;

    16.在同一个 PLSQL窗口中,不能同时定义执行多个触发器,否则会报PLS-01003错误

    17.oracle数据库对象命名可以有“.”小数点符号,但使用时必须加双引号。如:create table "tab.tab1"

    18.对于较大数据量的表,create新表要比update表速度快得多

    19.存储过程调试需在测试窗口

    20.分组合并字符串:

    select id,WMSYS.WM_CONCAT(oid) oid
    from table1
    group by id

     21.regexp_like http://blog.csdn.net/qq_21909121/article/details/73469118
    --查询value中以1开头60结束的记录并且长度是7位
    select * from gyj where value like '1____60';
    select * from gyj where regexp_like(value,'1....60');
     
    22.PLSQL窗口执行多条数据操作语句时,每条语句后未commit,需所有语句执行完最后在窗口功能按钮一次提交。
     
  • 相关阅读:
    ORA-01935: missing user or role name
    ORA-00923: FROM keyword not found where expected
    ORA-00933: SQL command not properly ended
    ORA_12514:TNS:listener does not currently know of service requested in connect descriptor
    ORA-00918: column ambiguously defined
    ORA-01789: 查询块具有不正确的结果列数
    ORA-01789: query block has incorrect number of result columns
    ORA-01747
    ORA-01843: not a valid month
    ORA-00904: "I_LEVEL": invalid identifier
  • 原文地址:https://www.cnblogs.com/bolang100/p/6074205.html
Copyright © 2011-2022 走看看