用户
sys 无所不能
system
scott 当前用户
创建用户
create user 用户名 identified by 密码;
查看当前账户
show user;
切换账户
conn / as sysdba 切换为超管
查用户表
select * from scott.emp;
查看所有用户
select * from All_users;
用户登录
conn 用户名/密码
删除用户
drop user <user_name> cas
权限
系统权限
登录权限,是系统权限,不级联
对象权限
收回对象权限,级联
给用户授权
grant 权限名 to 用户名;
登录权限
grant create session(登录权限) to 用户;
建表权限
grant create table to 用户;
建表空间权限
grant unlimited tablespace to 用户;
收回权限
revoke create session from 用户;
用户1给用户2授登录权限
sys给用户1给用户2授权登录的权限
grant create session to 用户1 with admin option;系统权限
grant select on 表名 to 用户 with grant option;对象权限
用户1给用户2授登录权限
收回用户1登录权限,用户2可登录
系统权限,不级联
查询权限
grant select on 表名 to 用户;
查询不完全表权限
grant select(列名1,列名2) on 表名 to 用户;
角色
创建角色
create role 角色名 ;
角色授权
grant create session to 角色;
grant create table to 角色;
grant create tablespace to 角色;
建的表只存在于自己创建的表空间
将角色给用户
grant 角色 to 用户;
系统默认角色
connection/connect(角色)
resource
dba
一般只用前两个
字典
可供查询
对象权限:select * from dba_tab_privs
系统权限:select * from dba_sys_privs
查看用户系统权限:select * from dba_sys_privs where grantee=‘用户’;
查看角色权限:select * from dba_role_privs where grantee=‘用户’;
表空间
创建表空间
create tablespace xiong_tablespace
datafile ‘d:\xiong.dbf’
size 10M;
查看文件,文件不需要存在
使用表空间
给用户指定默认的表空间
create user xiongsi identified by 123456 default tablespace xiong_tablespace;
没有指定,默认在user表空间
建表时指定表空间
create table aaa(…) tablespace xiong_tablespace;
对表空间不受限制的权限
unlimited tablespace
plsql
在sql语句中增加了变量,流程控制,函数
语法
declare
定义变量
begin
功能性sql语句(不能单独执行select)
end
eg:
declare
v_name varchar(50);
begin
v_name:='小红';
dbms_output.put_line(v_name);
end;
/
:= 赋值运算符
打开输出功能
set serveroutput on;
declare
v_name varchar(50);
begin
select ename into v_name from emp where empno=7782;
dbms_output.put_line(v_name);
end;
/
declare
v_name varchar2(50);
begin
v_name:='&输入姓名';
dbms_output.put_line(v_name);
end;
/
打开输入功能
输出部门中工资最高的人的名字职位
declare
v_deptno number(5);
v_ename varchar2(20);
v_job varchar2(30);
begin
v_deptno:=&输入部门编号;
select ename,job into v_ename,v_job from emp where sal=
(
select max(sal) from emp where deptno=v_deptno
);
dbms_output.put_line(v_deptno||'部门工资最高员工'||v_ename||'名字'||v_job);
end;
/
declare
v_name varchar2(20);
begin
select ename into v_name from emp where empno=&empno;
dbms_output.put_line(v_ename);
end;
/
同样功能
declare
v_name emp.ename%type;
begin
select ename into v_name from emp where empno=&empno;
dbms_output.put_line(v_ename);
end;
/
存一行数据,刚好是表的所有列
1、表有多少列,就定义几个变量
2、
declare
v_emprow emp%rowtype;
begin
select * into v_emprow from emp where empno=&empno;
dbms_output.put_line(v_emprow.ename||v_emprow.deptno);//输出要写完整你要输出的列
end;
/
定义自己的类型 记录集类型
declare
type MyType is record
(
t_empno emp.empno%type,
t_ename emp.ename%type
);
v_emprow MyType;
begin
select empno,ename into v_emprow from emp where empno=&empno;
dbms_output.put_line(v_emprow.t_ename||v_emprow.t_empno);
end;
/
emp %rowtype 行类型
emp.sal%type 和emp表中sal类型一样
record 记录集类型