当前位置:  数据库>oracle
本页文章导读:
    ▪Oracle学习《一》      1. oracle数据分组进行取值select * from (select a.*,rownum r from cc_quiz_round a ) s where s.r>5 and s.r<10initcap 首字符大写select initcap('tarena') from dual;concat 连接字符串select concat(first_name , last_name) from s_emp;.........
    ▪orcal中添加split函数      1.创建表类型CREATE OR REPLACE TYPE "TYPE_SPLIT"   as table of varchar2(4000) ; 2.创建split 函数 CREATE OR REPLACE FUNCTION split(p_list VARCHAR2,               &nb.........
    ▪oracle 创建表空间和用户      --创建表空间create tablespace JSZHANG_TABLESPACEdatafile 'D:\oracle\product\10.2.0\oradata\orcl\JSZHANG_TABLESPACE.dbf' size 500Mautoextend on next 100M maxsize unlimited logging   extent management local autoallocatesegment space manage.........

[1]Oracle学习《一》
    来源:    发布时间: 2013-10-16

1. oracle数据分组进行取值
select * from (select a.*,rownum r from cc_quiz_round a ) s where s.r>5 and s.r<10

initcap 首字符大写

select initcap('tarena') from dual;



concat 连接字符串

select concat(first_name , last_name) from s_emp;等效于||



substr 求子串

select substr('this is a good day',2,3) from dual;--从第二位开始往后取三位,而不是从第二位取到第三位



select substr('tarenasd0603',-2) from dual; (取后两个字符)



SELECT ROUND(45.73) FROM DUAL;--四舍五入  只精确一位



SELECT TRUNC(89.88) FROM DUAL;--舍位

add('现在时间','value')  value 系数是月数
SELECT ADD_MONTHS(SYSDATE,5) FROM DUAL;--在现在的基础上加5 months




SELECT ADD_MONTHS(SYSDATE,5*12) FROM DUAL;--在系统的时间上晚5年 这里的晚是指现在是10年,结果是15年



SELECT ADD_MONTHS(SYSDATE,-5*12) FROM DUAL;--系统的时间早5年 这里的早是指现在是10年,结果是05年

SELECT LAST_DAY(SYSDATE) FROM DUAL;--获取系统最后一天alter session set nls_language='AMERICAN';



SELECT NEXT_DAY(SYSDATE,'Friday') FROM DUAL;--"ORA-01846: 周中的日无效"SELECT ROUND(SYSDATE,'minute') FROM DUAL;



不是四舍五入,过了半旧留下,不过的省略 关键字包括 year month day SELECT TRUNC(SYSDATE,'DAY') FROM DUAL;



--例子:

本月月初的日期:

select last_day(add_months(sysdate, -1)) from dual;

本月的最后一秒:

select trunc(add_months(sysdate,1),'month') - 1/24/60/60 from dual

本周星期一的日期:

select trunc(sysdate,'day')+1 from dual

年初至今的天数:

select ceil(sysdate - trunc(sysdate, 'year')) from dual;

查看当前用户

select user from dual

取余数
select mod(ID,3) from cc_quiz_round

<1>.SYSDATE:返回系统日期
<2>.MONTHS_BETWEEN:返回两个日期间隔的月数
       select months_between('02-2月-06','02-2月-06') from dual;
<3>.ADD_MONTHS:在指定日期基础上加上相应的月数
       select add_months('02-2月-06',8) from dual;
<4>.NEXT_DAY:返回某一日期的下一个指定日期
       select next_day('1-2月-12','星期一')  next_day from dual;
<5>.LAST_DAY:返回指定日期当月最后一天的日期
       select  last_day('1-2月-12') last_day from dual;


<1>NVL(表达式1,表达式2)函数:该函数功能是空值转换,把空值转换为其他值,解决空值问题。如果表达式1为空,则表达式2就是要转换成的值。
注意:数据格式可以是日期、字符、数字,但数据类型必须匹配
      select nvl(null,1) from dual;
      select nvl(2,1) from dual;
  www.2cto.com  
<2>.NVL2(表达式1, 表达式2, 表达式3)函数:该函数是对第一个参数进行检查。如果第一个参数不为空,则输出第二个参数,如果第一个参数为空,则输出低三个参数,表达式1可以为任何数据类型。
      select nvl2(null,1,2) from dual;
      select nvl2(3,1,2) from dual;
 
<3>.NULLIF(表达式1,表达式2)函数:该函数主要完成两个参数的比较。当两个参数不相等时,返回值是第一个参数值;当两个参数相等时,返回值是空值。
      select nullif(1,1) from dual;
       
<4>.COALESCE(表达式1, 表达式2, ... 表达式n)函数:该函数是对NVL函数的扩展。COALESCE函数功能是返回第一个不为空的参数,参数个数不受限制。
      select coalesce(null,null,0,1) from dual;

      <5>.CASE表达式:
SELECT last_name, commission_pct,
(CASE commission_pct
WHEN 0.1  THEN '低'
WHEN 0.2  THEN '中'
WHEN 0.3  THEN '高'
ELSE '无'  www.2cto.com  
END)   Commission
FROM employees
WHERE commission_pct IS NOT NULL
ORDER BY last_name;
 
<6>.DECODE函数:
DECODE(字段|表达式, 条件1,结果1[,条件2,结果2…,][,缺省值])
select id,STATUS, decode(STATUS,0,'关闭',1,'开启') from cc_cw_config

复制表:create table emp_copy
       As select * from emp;
但如果想复制表结构,不想复制数据:
Create table emp_copy
As select * from emp
Where 1=2;


, 情景查询
(1)      decode()函数
decode(value_expression,search_value,result_value,default_value)
 
参数含义:
value_expression;表示将要与搜索值比较的值或表达式
search_value;表示将要搜索的值
result_value:表示search_value参数与value相等时value_expression参数的取值结果
default_value;表示search_value参数与value不相等时value_expression参数的取值结果
   www.2cto.com  
例句:select name ,sal,decode(deptno,’10’,’会计部’,’20’,’研发部’,’30’,’销售部’,’其他部门’) from emp
 
(2)      case表达式
    语法格式如下:
Case search_expression
When expression_1 then display_result_1
When expression_2 then display_result_2
……
When expression_n then display_result_n
Else default_display_result
End
 
参数意义如下:
search_expression:表示用于检索的表达式,一般情况下是表中的列名称
expression_1,……,expression_n:表示用于比较的表达式
display_result_1,……..,display_result_n:表示用于比较的表达式与search_expression参数匹配时应该显示的结果。
 
例句:select ename,sal,
     Case deptno
         When 10 then ‘会计部’
         When 20 then ‘研发部’
          Else ‘其他部门’
End
From emp;
 
与简单的case表达式相比,搜索表达式的每一个条件都可以不同,因此更加具有灵活性,搜索case表达式的语法格式如下:
Case  www.2cto.com  
When expression_1 then display_result_1
When expression_2 then display_result_2
……
When expression_n then display_result_n
Else default_display_result
End
 
例句:select ename.case
When hiredate<’1-7月-01’ then ‘老员工’
When hiredate>’1-7月-01’ and hiredate<=’1-7月-02’ then ‘普通员工’
When hiredate>’1-7月-02’ then ‘新员工’
End from emp;




触发器创建

create or replace trigger zhang_trg
before insert or update

on zhang_zh
referencing NEW as NEW OLD as OLD
for each row
declare
last_seq number;
last_insertVal number;
begin
---判断是否已经存在插入的值
if(:New."ID" is null)
then
select "ZH_SEQ".nextval into :new."ID" from dual;
else
---去序列中下一个值
select last_number -1
into last_seq
from user_sequences
where upper(sequence_name)=upper('ZH_SEQ');

去数据表中新增加的值
select :new."ID"
into last_insertVal
from dual;
---判断如果新加的值大于序列的值,继续去下一个值进行赋值
while(last_insertVal>last_seq)
loop
select "ZH_SEQ".nextval into last_seq
from dual;
end loop;
end if;
end ;


注 order by 后面若是中文,排序的标准时拼音


简单的说row_number()从1开始,为每一条分组记录返回一个数字,这里的ROW_NUMBER() OVER (ORDER BY xlh DESC) 是先把xlh列降序,再为降序以后的没条xlh记录返回一个序号。
示例:
xlh           row_num
1700              1
1500              2
1085              3
710                4

row_number() OVER (PARTITION BY COL1 ORDER BY COL2) 表示根据COL1分组,在分组内部根据 COL2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的)

---rank()over(order by 列名排序)的结果是不连续的,如果有4个人,其中有3个是并列第1名,那么最后的排序结果结果如:1 1 1 4
---dense_rank()over(order by 列名 排序)的结果是连续的,如果有4个人,其中有3个是并列第1名,那么最后的排序

    
[2]orcal中添加split函数
    来源:    发布时间: 2013-10-16
1.创建表类型
CREATE OR REPLACE TYPE "TYPE_SPLIT"   as table of varchar2(4000) ;
2.创建split 函数
CREATE OR REPLACE FUNCTION split(p_list VARCHAR2,
                                 p_sep  VARCHAR2 := ',') RETURN type_split
  PIPELINED IS
  l_idx  PLS_INTEGER;
  v_list VARCHAR2(4000) := p_list;
BEGIN
  IF p_list IS NULL
     OR p_list = '' THEN
    RETURN;
  END IF;
  LOOP
    l_idx := instr(v_list, p_sep);
    IF l_idx > 0 THEN
      PIPE ROW(substr(v_list, 1, l_idx - 1));
      v_list := substr(v_list, l_idx + length(p_sep));
    ELSE
      PIPE ROW(v_list);
      EXIT;
    END IF;
  END LOOP;
  RETURN;
END split;
3. 使用场景 我们经常使用in进行查询如
SELECT t.*
  FROM stu t
 WHERE t.useId IN ('12,23,34');
但是当查询的条数大于1000条时候就会报错。所以此时我们可以用上面的split进行查询
SELECT t.*
  FROM stu t,
       (SELECT column_value cv
          FROM TABLE(CAST(split('12,23,45,66') AS type_split))) a
 WHERE t.userId = a.cv
这其中,首先是将字符串'12,23,45,66'分割成四行,split('12,23,45,66')
然后,是把分割的值转换成 我们定义的分割类型type_split ;
cast(split('12,23,45,66')  as  type_split ) 这步貌似可以不用 然后,在table 下,转换成表。分割的字段名默认叫 column_value ;

本文链接


    
[3]oracle 创建表空间和用户
    来源:    发布时间: 2013-10-16

--创建表空间
create tablespace JSZHANG_TABLESPACE
datafile 'D:\oracle\product\10.2.0\oradata\orcl\JSZHANG_TABLESPACE.dbf' size 500M
autoextend on next 100M maxsize unlimited logging  
extent management local autoallocate
segment space management auto;

--创建用户  create user newtest              --创建用户名

  identified by "newtest"          --创建密码

  default tablespace JSZHANG_TABLESPACE      --默认表空间

  temporary tablespace TEMP     --临时表空间(默认的)

  profile DEFAULT                    --默认权限(下面给分配)

  quota unlimited on JSZHANG_TABLESPACE      --该用户在ydrsgl表空间里的配额不限

-- Grant/Revoke role privileges

  grant dba to newtest;            --分配管理员权限

-- Grant/Revoke system privileges

  grant unlimited tablespace to newtest; --开放所有的表空间对此用户

本文链接


    
最新技术文章:
▪current online redo log缺失后的恢复
▪ORA-600 2662错误解决实例
▪ORA-00600 2662错误解决方法
▪Oracle Hidden Parameter:_allow_resetlogs_corruption
▪Oracle诊断事件列表
▪Oracle 隐含参数 _disable_logging 详解
▪ORA-00600 [2662]错误解决过程
▪Oracle里常见的执行计划
▪Oracle里另外一些典型的执行计划
▪Oracle服务器自动备份
▪Oracle固定SQL的执行计划(一)---SQL Profile
▪Oracle固定SQL的执行计划(二)---SPM
▪同一环境下新建Standby RAC库
▪Oracle快速克隆安装
▪Oracle单实例启动多个实例
▪Oracle的PLSQL别名中文出现乱码解决方法
▪ORA-00379: no free buffers available in buffer pool DEFAULT ...
▪RMAN-06023: no backup or copy of datafile 16 found to restor...
▪RMAN还原数据库报错问题解决案例
▪OEL6.8_X86平台部署Oracle 10gR2检测失败问题
▪Oracle 性能优化建议
▪Oracle SQL语句优化心得
▪Oracle慢SQL监控脚本实现
▪Oracle dblink 查询 tns:无法解析指定的连接标识...
▪Red Hat Enterprise Linux 6使用udev配置Oracle ASM总结...
▪Linux6.6及以上版本配置Oracle ASM共享储存-UDEV
▪Oracle 12C 开启数据库归档模式
▪Solairs系统中配置Oracle 12c 开机启动
▪重建DBMS_STATS解决ORA-31626 ORA-21633以及ORA-04063 ORA...
▪Oracle ASMM 与AMM之间相互切换
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,