oracle的初步学习
来源:互联网 发布:java两个时间相减 编辑:程序博客网 时间:2024/05/21 07:00
1.写在 前面的话, 因为一般不会出现 不学 一点 sql 的知识就直接写oracle 的情况,于是 笔者 以下 只是 粗略的 列举 oracle 和 sql server 的区别,
2. 首先 oracle 是比 sqls(sql server)稍微 复杂的 系统,用于处理的也是 十分大型 的项目,自然 语句方面就会 比 sqls 多一点,而且 更加的 细致一点,安全方面 也是划分了十分 细致的 权限,顶级的 用户: sys --system 两个高级 "管理者",scott---hr 两个“普通的”
3.直接上 代码:
ORACLE---用户方面的 操作:
3.1允许 增加数据库用户:
create user test11(名字) identified by test (密码)
3.2用户授权:
grant connect,resource,dba to test11;
grant sysdba to test11;
3.3--改密码
alter user system indentified by test;
->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
16、更改数据库用户的密码:(将sys与system的密码改为test.)
alter user sys indentified by test;
》》》》》》》》》》》》》》》》》》》》》》》》》》》
4. 表的 操作 :
--增加一列
alter table product add nowtime date;
--改变某一列的 数据类型
alter table product modify nowtime varchar2(10)
--代替
select replace('abcdaaa','a','h') from dual-- 把 a 全部 换成了h
时间的 问题-- 一直是 十分的 麻烦的 一个 方面:
1. 格式问题:update product set nowtime='12-2月-16'where id=1
2. select add_months(sysdate,1) 新日期 from dual;--把月份加1
-- sysdate 就是 系统的 时间
算月份的差值 和 时间中的 某一部分
select MONTHS_between(sysdate,'03-8月-15') 新日期 from dual;
select sysdate ,extract(year from sysdate)年from dual;
3. --转化函数
select to_char(sysdate,'yyyy-mm-dd')日期,
sysdate-1 差值 from dual;
字符串 转化为 int: select to_number('123')+2 from dual
显示格式的转化: select to_date('2011/01/02','yyyy-mm-dd') from dual
》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
5. 到了 十分的 复杂 的聚合函数部分:
5.1 小计:select a.deptno,a.ename
,sum(a.sal) from emp a
group by rollup(a.deptno,a.ename)--小计,把 一列的数值 相加
正常 情况下 :
5.2: 得到一个无重复的
select decode -- 就是一个 if -else if
(lag(deptno)over(order by deptno),
deptno,
to_number(null),-- decode 提出 相同重复的 字段
deptno )dept,--lag获取上一个 字段的 n 行数据
ename
from emp
5.3 --每个部门 》1981年的人数
select count(*),e.deptno as dd from emp e
where extract(year from e.hiredate)='1981'
group by e.deptno-- 还是 和sqls 一样的,group 和count max 这种 必须同时存在, 可以没有 count之类,
5.4:排位的 rank()
select sal,
rank()over(--统计的区间
order by sal desc ) rank from emp s where s.deptno=10 --根据 什么排位 的对象
5.5:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>..
6.新出现的 一些类型
::;
1.dept%rowtype--某一行一样的 类型
declare
v_de dept%rowtype;--dept 的所有列
begin--开始赋值的时候 就需要用begin
v_de.deptno:=50; -- := 就是 赋值
v_de.dname:='adminstrator';
v_de.loc:='beijing';
insert into dept values v_de;
end;
table 类型四个很 有趣的 类型
declare
type etno is table of number(4);-- 这个 etno 就是 只有一个int 列
type etname is table of emp.ename%type; -- 一个 和 ename一样类型的列
v_no etno;-- 定义一个 v_no的类型就是 etno 的 数组
v_name etname;
begin
v_no(1):=7521; -- 直接赋值
v_no(0):=7369;
v_no(2):=7566;
select ename into v_name(0) from emp-- 还是 赋值
where empno=v_no(0);
select ename into v_name(1) from emp
where empno=v_no(1);
select ename into v_name(2) from emp
where empno=v_no(2);
dbms_output.put_line('编号:'||v_name(0));
end;
》》》》》》》》》》》》》》》》》》》》》》》
7.面向对象的 sql
-->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
--面对对象的 sql
create or replace type b_b as object
(
price number(5),
quantity varchar2(14),
realpay number(5),-- 实际付款
// 定义的方法
member function getMustpay return number,--应付款
);
-- 给 对象类实体 一个定义
create or replace type body b_b is
member function getMustpay return number
is -- 给 方法 具体的 实现 语句
begin
return self.price*self.quantity;
end;
end;
declare v_o:=b_b(5,12,100);
begin 调用
dbms_output.put_line('是:'|| v_o.getMustpay);
end;
》》》》》》》》》》》》》》》》》》》》
7.自增和分页和 控制流程的语句
7.1 循环:loop
declare
i number(1):=1;
begin
loop
i:=i+1; dbms_output.put_line('第2:'||i);
if i>5 then
dbms_output.put_line('out');
exit;
end if;
end loop;
end;
————————————————————————————
declare
i number(1):=1;
begin
while i<5 loop
i:=i+1;
end loop;
dbms_output.put_line(i);
end;
》》自增序列:
create sequence seqq2
start with 1
increment by 1;
create table tmp2(
id number(2) primary key
)
insert into tmp2 values(
seqq2.nextval)
》》》》》》》》》》》》》》》》》》》
分页:select * from tmp2 where
id not in
(select * from tmp2 a where rownum<3)
and rownum<2*2 所有的表都存在的 一个 rownum
8. 一个 循环的写法:
declare
begin
for i in 1..100 loop
dbms_output.put_line('编号的值为:'||i);
end loop;
end;
9.--批量的 插入
create table tb_d(
id number(6) primary key
);
declare
type t_r is record(
id number(6),
value varchar2(10)
);
type t_t_t is table of t_r
index by binary_integer;
v_t t_t_t;
begin
for i in 1..500 loop
v_t(i).id:=i;
end loop;
forall i in v_t.first..v_t.last loop
insert into tb_d values(v_t(i)id);
end;
10.
select * from tb_v;
alter table tb_v add sex number(2);
commit;-- 注意 一定要提交
删除 某一列的
alter table tb_v drop column sex;
- oracle的初步学习
- oracle 初步学习笔记
- Oracle初步学习
- oracle学习的初步总结以及date 类型的运用
- oracle 的select初步
- oracle数据字典初步学习
- 【02.26】linux下oracle 初步配置的学习
- 编程的初步学习
- json的初步学习
- Smarty的初步学习
- json的初步学习
- OpenMP的学习初步
- 模板的初步学习
- bash的初步学习
- AsyncTask的初步学习
- startActivityForResult的初步学习
- redis的初步学习
- 树的初步学习
- php字符串相加
- POJ2723
- android三种方法实现监听事件
- Codeforces Round #367 (Div. 2)
- 圆形图片
- oracle的初步学习
- ETL工具kettle原理简介
- android 读取WebView缓存及清理WebView缓存
- D - Robberies
- C++学习009预处理器指令符号 # ## #@ 符号的使用
- ListView和ScrollView冲突,只显示一行的问题
- PHP 10进制转62进制
- spring-mvc开发模式相关配置
- String fname="%e6%8e%88%e6%9d%832"; url转码成中文