Oracle数据处理,oracle大数据处理
DML语言 &:地址符;(PrepareStament) 批处理:插入--------一次将10号部门的员工插入新的表中; 其不必书写values语句;子查询中的值列表应与insert中子句中的列名对应; delete与truncate的区别:1;delete逐条删除,而truncate先摧毁表,然后在新建表; 2:主要区别是两种不同的语言; 3;delete不会释放空间,而truncate可以; 4:delete删除时会产生碎片,而truncate不会产生; 5:delete可以闪回,而truncate不可以闪回; set feedback off 命令:不显示执行语言; 执行硬盘上的sql脚本命令:如:@c:\sql.sql; 测试得出:delete操作速度快;DCL语言 Oracle的事物是自动开启,手动提交(显示:commit;隐式:正常退出,ddl语句) 回滚(显示:rollback;隐式:非正常退出,断电,宕机); 通过保存点savepoint能够更好控制事物;创建保存点的命令:savepoint 保存点名; Oracle支持的事物级别:READ COMMITED(default),SERIALIZABLE,READ ONLY;
DDL语言 对象有12个 表:创建表时需要权限,空间;我们可以通过子查询快速建表,可以通过add,modfiy,drop,rename实现对表字段的修改; Oracle的回收站:show recyclebin 查看回收站;purge recyclebin 清空回收站;并不是每个用户都有回收站,管理员没有回收站,普通用户才会有回收站; 如何将回收站的表取回?---闪回课程 表的约束:not null,unique,primary key,foreign key,check;一般创建表和创建约束分开,便于阅读; 约束的例子:
视图:从表中抽出的逻辑上相关的数据集合;目的:简化查寻; 不建议:通过视图对表的修改;create table student(pid number constraint student_PK primary key,sname varchar2(20) constraint student_name_notnull not null,gender varchar2(2) constraint student_gender check (gender in('男','女')),email varchar2(20) constraint student_email_unique uniqueconstraint student_email_notnull not null,deptno number constraint student_FK references dept(deptno) on delete cascade)
序列:sequences主要作用是给表的主键提供值,其有两个属性nextval,currval; 其特点:其是个数组,存在于内存当中; 数据不连续:回滚,系统异常--停电,多张表使用一个序列;
索引:提高查询速度; 如:create index myindex on emp(deptno,job); 同义词:别名
Oracle的plsql
操作Oracle最快的语言是plsql; 变量的类型:基础类型,引用性变量(%type),记录性变量(%rowtype); 其赋值方式有两种:“:=”和into关键字; set serveroutput on 命令:打开控制台打印输出; accept num prompt '请输入'命令是:接受键盘上输入的内容; plsql的if语句必须以 if end结束;
光标:cursor用于储存一个查询返回的多行数据;其属性:%isopen是否打开;%rowcount记录数;%notfound 没有记录; 使用cursor首先open和最后close;Oracle最多支持300个光标;show paremeters 查看参数设置; 案例:使用光标查询员工的姓名和薪水,并打印;给员工涨工资,总裁1000,经理800,其它400;其也需要手动提交事物; 带参数的光标:其定义,打开光标时带参数,其它用法和不带光标的用法相同; 案例:查询某个部门的员工姓名
例外:系统自带的例外,自定义的例外;在Java中异常是向上处理机制,而plsql不能向上抛, 在java中try。。catch。。finally 而plsql中只有try。。catch其写法是exception when 。。then。。。 在declare中自定义例外:例外名 exception; 使用raise跑出异常,异常会帮你自动关闭光标;
实例一:统计每年入职的人数; 实例二:为员工涨工资,从最低工资调起没人涨10%,但工资总额不能超过5万元;请计算涨工资的人数和涨工资后的工资总额,并输出涨工资人数和工资总额;
===================================================== 存储过程(没有返回值),存储函数(有返回值),触发器 Java不能直接调用plsql,而是写成存储过程,存储函数,让后用Java来调用; 创建存储过称:create[ or replace] procedure 过程名(参数列表) as plsql子程序体;参数类型及输入输出要标明;不要在存储函数,存储过程中不要提交事物; 调用存储过程的方法:exec 过程名();在另一个plsql中调用:begin 过程名();end;这两种方法; 创建存储函数:create[ or replace] procedure 过程名(参数列表) return 返回值类型 as plsql子程序体; 输出参数适用out,存储过程,存储函数都可以返回一个或者多个参数,其二者基本上没有区别; 实例一:查询某个部门中,所有员工的所有信息 需要包头和包体: 当返回的结果是集合,可以使用光标来实现;
使用行转列进行转换一下就可以了,脚本如下:
insert into othertable ( zddm, cjsj, f1110101, f1110102, f1110103 )select zddm, cjsj, sum(f1110101) f1110101, sum(f1110102) f1110102, sum(f1110103) f1110103 from (select zddm, cjsj, decode(xdm, '1110101', xsj, 0) f1110101, decode(xdm, '1110102', xsj, 0) f1110102, decode(xdm, '1110103', xsj, 0) f1110103 from table_name) a group by a.zddm, z.cjsj -- 如果是新建表的时候create table othertable asselect zddm, cjsj, sum(f1110101) f1110101, sum(f1110102) f1110102, sum(f1110103) f1110103 from (select zddm, cjsj, decode(xdm, '1110101', xsj, 0) f1110101, decode(xdm, '1110102', xsj, 0) f1110102, decode(xdm, '1110103', xsj, 0) f1110103 from table_name) a group by a.zddm, z.cjsj以上是数据项代码个数固定的时候可以这样转换,如果数据项代码个数不确定的话,就要使用动态SQL了,最好写个存储过程,每天来执行
有问题请追问,希望可以帮到你
一、大数据存储方式:
1. BLOB,二进制大数据
2. CLOB,文本类型大数据
3. BFILE(推荐),文件方式大数据,以连接(文件位置)方式存储,实际在数据库外
4. RAW,二进制大数据(ORACLE老版本的,9i后逐渐被BLOB/CLOB/BFILE代替)
二、大数据的处理内置函数
1. BLOB/CLOB/BFILE:DBMS_LOB包
2. RAW:UTL_RAW包