创建用户,表空间,角色,授予用户角色权限
1.以系统管理员身份登录 sql plus
conn scott/tiger as sysdba; --scott用户以sysdba的身份登录
2.创建新用户,修改新用户密码
create user zhangfei identified by zf123; --注意用户不要为关键字
alter user zhangfei identified by zff123;
3.给该用户分配一个表空间
create tablespace ts_zf datafile 'f: t_ppkk.dbf' size 200M; --datafile 后面是表空间的物理存储路径,文件的后缀名随意
alter user zhangfei default tablespace ts_zf;
4.分配空间后暂时还不能登录,没有登录权限,需分配权限
grant create table,create session, create view,create sequence,unlimited tablespace to zhangfei; --session是登录数据库权限
conn zhangfei/zff123; --可以登录数据库
5.简化版授予权限,由于自带三张标准角色,所以可以直接通过角色授予使得用户可以登录数据库并可以操作表,序列,过程,触发器,索引,簇
grant connect,resource to zhangfei;
revoke connect,resource from zhangfei ; --撤销权限
6.授予用户tuba在t_class表上的select权限
create user tuba identified by tutu;
grant select on t_class to tuba ;
--用户tuba可以查询用户zhangfei创建的表t_class 数据了
select * from zhangfei.t_class; --可以查到数据,如果在表名前没有所属用户名, 查不到数据,报错:表或试图不存在
7.创建角色
create role rolename;
8.授予角色在t_class表上的select权限
grant select on t_class to 角色名 ;
========================================================================================
create table t_class(
tc_id number(5) ,
tc_name varchar2(30) ,
createdate date
)
create table t_user(
t_id number(5) ,
t_name varchar2(30) ,
tc_id number(5)
)
将orcle一些使用总结了一下
1.日期: 默认日期格式(DD-MON-RR 日-月-年) insert into t_class('29-9月-18')
添加日期字段: alert table t_class add(learndate date);
修改字段: alert table t_class modify(column1 number not null ) -- modify 修改数据类型,以及是否为空 column1 列名
alert table t_class rename column filed_name to new_filed_name; --rename 修改字段名
删除字段: alert table t_class drop(column)
插入日期格式数据: to_date()函数
insert into t_class values(1001,'class1',to_date('2018-9-28','yyyy-mm-dd'));
insert into t_class values(1002,'class2',to_date('2018-9-28','yyyy-mm-dd'));
显示正常年月日的日期:
select to_char(createdate,'yyyy-mm-dd') from t_class;
add_months(date,m) 给日期加月份数
select * from t_class where createdate between add_months(sysdate,-2) and sysdate; --近两个月的数据
months_between(date1,date) 两个月份相差的月份数 date1-date 可以存在小数
select months_between(sysdate,'30-9月-18') from dual;
2.查询区间数据 利用伪列(rownum)
前10行数据,加别名
select tc_id 班级号, tc_name 班级名, createdate 班级创建时间 from t_class where rownum<=10;
3-5条数据
select tc_id,tc_name from ( select tc.*,rownum as rowno from t_class tc ) where rowno between 3 and 5;
3.利用旧表创建新表,不要数据
create table t_base
as
select * from t_class where 1=2;
向新表插入数据 : insert into t_base select * from t_class where tc_id>1001;
4.对表结构进行操作:
create alter drop
5.对表数据进行操作:
insert update delete select truncate(截断表,快速删除表中所有数据,对于有主外建的表,索引之类的不要用这个,不会触发触发器,少用)
6.数据提交,撤回
commit rollback savepoint(标记事务中可以回滚的点)
===========================================================================================
1.集合操作符:将两个查询的结果组合成一个结果(列数要相同,对应列的数据类型要兼容)
minus 从第一个查询结果中排除第二个查询中出现的行 intersect 查询它们的公共行 union union all 将两个结果集合并在一起 ( 区别:union 去重,union all 不去重)
select tc_id from t_class
minus | intersect | union
select tc_id from t_user
查询数据需要去重直接用distinct;
select distinct tc_name from t_class;
2.连接运算符 ||
select '班级编号:'|| tc_id||',班级名:'||tc_name from t_class;
3.round
1、数字类型,四舍五入
select round(23.498) from dual; --23
select round(23.498 , 2 ) from dual; --23.50
2.日期类型
select round(to_date('2018-9-30','yyy-mm-dd'),'yy') from dual; -- 01-1月-19 (明年)
select round(to_date('2018-9-10','yyy-mm-dd'),'dy') from dual; -- 09-9月-18 (周一至周三,上周日)
select round(to_date('2018-9-10','yyy-mm-dd'),'dy') from dual; -- 09-9月-18 (周四-周日,本周日)
3.trunc
1、数字类型,不四舍五入,直接取位数值
select trunc(23.578) from dual; --23
select trunc(23.478 , 2 ) from dual; --23.47
2.日期类型,日期取整
select trunc(to_date('2018-9-10','yyy-mm-dd')) from dual; -- 10-9月-16
select trunc(to_date('2018-9-10','yyy-mm-dd'),'yyyy') from dual; -- 01-1月-18 年初
select trunc(to_date('2018-9-10','yyy-mm-dd'),'mm') from dual; -- 01-9月-18 月初
select trunc(to_date('2018-9-10','yyy-mm-dd'),'dd') from dual; -- 10-9月-18 当前日期
=====================================================================================
1.函数 将 , 替换成 ', 一,二,三, 变成 ‘一’,‘二’,‘三’
create or replace function func_replace(czd varchar2)
return varchar2
as
resul varchar2(1000);
begin
resul:= ''''|| substr(replace(czd,',',''','''),0,instr(replace(czd,',',''','''),',',-1)-1);
dbms_output.put_line(resul);
return resul;
end func_replace;
-- set serveroutput on 显示函数输出结果
declare
kk varhcar2(100);
begin
kk:=' 一,二,三, ';
kk :=func_replace(kk);
dbms_output.put_line(kk);
end;
2.过程
create or replace procedure pro_class(tt number) --默认为 in
as
tm varchar2(20);
begin
select tc_name into tm
from t_class where tc_id = tt;
dbms_output.put_line('班级编号:'|| tm);
exception
when no_data_found then
dbms_output.put_line('班级编号未找到');
end pro_class;
--执行
execute pro_class(1008);