`
chashui
  • 浏览: 12139 次
  • 性别: Icon_minigender_1
  • 来自: 宁波
社区版块
存档分类
最新评论

Oracle语句、函数汇总

阅读更多

(一)删除表中所有数据:

 方法一: delete from 表名;

 方法二: truncate table 表名;  //  速度更快

 

(二)A表数据复制B(表复制):                                

1、创建表时复制:

create table c as select * from b;    // as 是关键字不能省略

create table d(username) as select username from a;

create table d(username) as select username from a;

2、表已经存在,仅记录复制

insert into b(select * from a);    // 全复制

insert into b(username)  select username from a;   // 有选择的复制

insert into b(username)(select username from a);

 

(三) top n 问题(orcale没有该关键字)

SELECT ... FROM ... WHERE ... AND rownum <= 10 

//  rownum 是隐式游标,rownum <= 10   类似于 top 10

如果有 order by 的处理方法(可以使用临时表):

SELECT * FROM  (
     SELECT A.*, rownum r FROM
          (
          SELECT *
          FROM Articles
          ORDER BY PubTime DESC        
//
蓝色部分可以改为任意的select
          ) A 
     WHERE rownum <= PageUpperBound
     ) B
WHERE r > PageLowerBound;         //  r
rownum的别名

 

(四)oracle同时向多表插入数据

All表示非短路运算,即满足了第一个条件也得向下执行查看是否满足其它条件,而First是短路运算找到合适条件就不向下进行

INSERT ALL
WHEN prod_category=’B’ THEN
INTO book_sales(prod_id,cust_id,qty_sold,amt_sold)
VALUES(product_id,customer_id,sale_qty,sale_price)
WHEN prod_category=’V’ THEN
INTO video_sales(prod_id,cust_id,qty_sold,amt_sold)
VALUES(product_id,customer_id,sale_qty,sale_price)
WHEN prod_category=’A’ THEN
INTO audio_sales(prod_id,cust_id,qty_sold,amt_sold)
VALUES(product_id,customer_id,sale_qty,sale_price)
SELECT prod_category ,product_id ,customer_id ,sale_qty,sale_price
FROM sales_detail;

 

(五)Merge into用法:

如果条件匹配就更新,不存在就插入

语法为:
MERGE INTO table
USING data_source
ON (condition)
WHEN
MATCHED THEN update_clause      //  匹配则更新
WHEN
NOT MATCHED THEN insert_clause;  // 不匹配则插入记录
举例:
MERGE INTO course c
USING (
SELECT course_name, period, course_hours
        FROM course_updates
) cu
ON (c.course_name = cu.course_name
AND c.period = cu.period)
WHEN MATCHED THEN
UPDATE  SET c.course_hours = cu.course_hours
WHEN NOT MATCHED THEN
INSERT (c.course_name, c.period, c.course_hours)

VALUES (cu.course_name, cu.period, cu.course_hours);

备注:on后面的条件语句查询出的结果集必须大于1

 

(六)oracle多表关联更新

如果要将test1表与test2no字段相等的记录的name字段更新为与test2表中的name字段的值.

update test1 a set name=(select name from test2 b where a.no=b.no) where

exists(select name from test2 b where a.no=b.no);

 

(七)Oracle A表向B表导入数据(存储过程):

  存储过程如下:

create or replace procedure TestProc is

begin

  for c in (select id, name from test2)  loop

    insert into test(id,name) values(c.id, c.name);

  end loop;

end TestProc;

执行存储过程:

Exec TestProc;

 

(八)Oracle多表级联删除方法

Oracle可以实现级联删除,不可以级联更新; 级联更新可以通过触发器实现。

方法1:创建约束时设定级联删除

(但一般由于各种原因或出于各种考虑在创建数据库时没有设定级联删除)

方法二:创建约束时没有使用级联删除,在需要使用级联删除时,删除原来的外键约束,重建带级联删除的约束(相当于把已有的表修改为可以级联的表) 

方法三:使用触发器(创建时没有级联删除)

(比较灵活,可以根据自己编写的程序进行,引用的不是唯一主键也可以)

SQL

CREATE OR REPLACE TRIGGER "FG123"."TER_OV"

BEFORE

DELETE ON "ORDERCOMBINE" FOR EACH ROW   // 删除

BEGIN

DELETE   FROM   VIPForm  WHERE   VIPForm.V_Id=:OLD.FormerId;

END;

SQL

CREATE OR REPLACE TRIGGER ID_TRG

AFTER

UPDATE ON AAA FOR EACH ROW    // 更新

BEGIN

UPDATE BBB SET a=:NEW.a WHERE a=:OLD.a;

END;

 

(九)Concat() 函数:

update tab1 set user_email = concat(name,'@byzh.com') where user_id = '2713'

CONCAT 连接字符,相当于 || ;两个或者多个字符串连接 用 || 比较好。

例如:select concat('aa'||' ','bb') from tab1;   // 字符aa 空格、bb 连接

 

(十)DBMS_OUTPUT.put()与DBMS_OUTPUT.put_line()区别:

语句:
declare
begin
  DBMS_OUTPUT.put( "--put--");   //不换行输出
  DBMS_OUTPUT.put_line( "--putline-- ");  //换行输出
end;

在SQL Plus中:
SQL>set serveroutput on     // 设置客户端显示输出
SQL>exec dbms_output.put_line('***'); 

 

(十一)Oracle常用的系统函数:

字符:length ,  replace, substr , ltrim ,rtrim , trim

日期:Sysdate , current_date , next_day

转换:to_char, to_date, to_number

聚集函数:sum,avg,max, min,count

其他:user,decode,nvl

分享到:
评论
1 楼 tanzuai 2013-05-16  
简单,明了,清晰

相关推荐

    ORACLE函数大全汇总详解(20100915补充修订版)

    ORACLE函数大全汇总详解(20100915补充修订版) 函数是一种有零个或多个参数并且有一个返回值的程序。在SQL中Oracle内建了一系列函数,这些函数都可被称为SQL或PL/SQL语句

    Oracle语句优化规则汇总

    ORACLE优化器、共享SQL语句、选择最有效率的表名顺序、使用DECODE函数来减少处理时间等等53种方法!

    oracle常用函数汇总(分享)

    一、运算符算术运算符:+ – * / 可以在select 语句中使用连接运算符:|| select deptno|| dname from dept; 比较运算符:&gt; &gt;= = != &lt; &lt;= like between is null in逻辑运算符:not and or 集合运算符: ...

    Oracle Exception汇总(自定义Oracle异常)

    Oracle Exception汇总(自定义Oracle异常) 使用方法举例: Exception When no_data_found then Dbms_output.put_line(‘no_data_found’); ACCESS_INTO_NULL 为对象赋值前必需初始化对象。对应ORA-06530错误。 CASE...

    大数据Oracle理论+SQL+面试问题汇总+BI理论

    本课程适应从事大数据行业开发人员或数据库开发人员以及BI开发人员,其中包含有ORACLE的理论基础知识,OracleSQL语句详细讲解、面试问题汇总、BI理论知识。汇总了Oracle在开发中常用到的各种函数如分析函数、开窗...

    达梦和oracle的差异说明

    达梦和oracle的差异说明,关键字汇总,示例说明;

    数据分层汇总交叉报表SQL语句实现方法

    在管理系统中,管理人员往往需要对业务数据进行不同需求的分层汇总,并产生各种形式交叉报表。为了实现此类报表,程序员需要构造层次结构非常复杂的SQL语句,甚至使用前台编程工具或其它报表工具来完成。 以下通过二...

    Oracle查询优化改写技巧与案例

    第5~12章是提高部分,讲解了正则表达式、分析函数、树形查询及汇总函数的用法。这部分知识常用于对一些复杂需求的实现及优化改写。最后两章介绍日常的优化改写案例。这部分是前面所学知识的扩展应用。, 如果您是开发...

    Oracle中用GROUPING SETS分组自定义汇总

    使用GROUP BY语句时,你一般得不到多级总数。可以用GROUP BY GROUPING SETS来代替GROUP BY CUBE。你可以应用来指定你感兴趣的总数组合。因为它不必计算它不需要集合(也不会产生太多结果),所以对SQL引擎来说更为...

    Oracle查询优化改写技巧与案例2.zip

    第5~12章是提高部分,讲解了正则表达式、分析函数、树形查询及汇总函数的用法。这部分知识常用于对一些复杂需求的实现及优化改写。最后两章介绍日常的优化改写案例。这部分是前面所学知识的扩展应用。, 如果您是开发...

    oracle常用操作SQL语句

    汇总oracle一些常用SQL语句,比如:用户解锁、修改用户密码、锁表、视图恢复、定时任务、物化视图、触发器、带参游标、常用函数、执行计划、字符串/时间各种运算、HTTP请求、SQL优化等

    oracle查询优化改写技巧与案例

    第5~12章是提高部分,讲解了正则表达式、分析函数、树形查询及汇总函数的用法。这部分知识常用于对一些复杂需求的实现及优化改写。最后两章介绍日常的优化改写案例。这部分是前面所学知识的扩展应用。, 如果您是开发...

    SQLServer与Oracle语法差异汇总.docx

    从存储过程 自定义函数格式 游标 变量 赋值 语句结束符 大小写 Select 语法 Update语法 Delete语法 动态SQL语句 TOP用法 等各方面对比两个数据库的差异

    Oracle查询优化改写 技巧与案例_高清带书签版本

    第5~12章是提高部分,讲解了正则表达式、分析函数、树形查询及汇总函数的用法。这部分知识常用于对一些复杂需求的实现及优化改写。最后两章介绍日常的优化改写案例。这部分是前面所学知识的扩展应用。 如果您是开发...

    PLSQL使用大全,涵盖各种语法常用sql函数

    覆盖oracle里面所有常见函数用法,以及常见sql语句,感觉非常使用,并且是DBA的必备资料

    常见oracle问题的总结

    常见的oracle问题汇总,如下所示: 1. Oracle安裝完成后的初始口令? 2. ORACLE9IAS WEB CACHE的初始默认用户和密码? 3. oracle 8.0.5怎么创建数据库? 4. oracle 8.1.7怎么创建数据库? 10. 用什么语句查询字段呢? ...

Global site tag (gtag.js) - Google Analytics