.登陸系統用戶
sqlplus 然后輸入系統用戶名和密碼
登陸別的用戶
conn 用戶名/密碼;
2.創建表空間
create tablespace 空間名
datafile 'c:\空間名' size 15M??--表空間的存放路徑,初始值為15M
autoExtend on next 10M??--空間的自動增長的值是10M
permanent online;??--永久使用
3.創建用戶
create user shi???--創建用戶名為shi
identified by scj??--創建密碼為scj
default tablespace 表空間名?--默認表空間名
temporary tablespace temp?--臨時表空間為temp
profile default???--受profile文件的限制
quota unlimited on 表空間名;?--在表空間下面建表不受限制
4.創建角色
create role 角色名 identified by 密碼;
5.給角色授權
grant create session to 角色名;--給角色授予創建會話的權限
grant 角色名 to 用戶名;?--把角色授予用戶
6.給用戶授予權限
grant create session,resource to shi;--給shi用戶授予所有權限
grant create table to shi;?--給shi用戶授予創建表的權限
7.select table_name from user_tables;?? 察看當前用戶下的所有表
8.select tablespace_name from user_tablespaces; 察看當前用戶下的 表空間
9.select username from dba_users;察看所有用戶名稱命令 必須用sys as sysdba登陸
Oracle 查看用戶權限數據字典視圖分為3大類, 用前綴區別,分別為:USER,ALL 和 DBA,許多數據字典視圖包含相似的信息。
USER_*:有關用戶所擁有的對象信息,即用戶自己創建的對象信息
ALL_*:有關用戶可以訪問的對象的信息,即用戶自己創建的對象的信息加上其他用戶創建的對象但該用戶有權訪問的信息
DBA_*:有關整個數據庫中對象的信息
(這里的*可以為TABLES, INDEXES, OBJECTS, USERS等。
1.查看所有用戶:
select * from dba_users;
select * from all_users;
select * from user_users;
2.查看用戶系統權限:
select * from dba_sys_privs;
select * from all_sys_privs;
select * from user_sys_privs;
3.查看用戶對象權限:
select * from dba_tab_privs;
select * from all_tab_privs;
select * from user_tab_privs;
4.查看所有角色:
select * from dba_roles;
5.查看用戶所擁有的角色:
select * from dba_role_privs;
select * from user_role_privs;
6.查看當前用戶的缺省表空間
select username,default_tablespace from user_users;
7.查看某個角色的具體權限,如grant connect,resource,create session,create view to TEST;查看RESOURCE具有那些權限,用SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE='RESOURCE';
?
10.創建表
create table 表名
(
id int not null,
name varchar2(20) not null
)tablespace 表空間名??--所屬的表空間
storage
(
?? initial 64K???--表的初始值
?? minextents 1???--最小擴展值
?? maxextents unlimited??--最大擴展值
);
11.--為usrs表添加主鍵和索引
alter table users
add constraint pk primary key (ID);
12.為已經創建users表添加外鍵
alter table users
? add constraint fk_roleid foreign key (roleid)
? references role(role_id) on delete cascad;?--下邊寫主表的列
???on delete cascad是創建級聯
13.把兩個列連接起來
select concat(name,id) from 表名;??--把name和id連接起來
14.截取字符串
select column(name,'李') from 表名;??--把name中的‘李’去掉
15.運行事務之前必須寫
set serveroutput on;??--打開輸入輸出(不寫的話,打印不出信息)
16.while的應用
declare???--聲明部分
ccc number:=1;??--復職
a number:=0;
begin???--事務的開始
while ccc<=100 loop?--循環
if((ccc mod 3)=0) then?--條件
?dbms_output.put_line(ccc||',');??? --打印顯示
?a:=a+ccc;
end if;???--結束if
ccc:=ccc+1;
end loop;??--結束循環
dbms_output.put_line(a);?
end;???--結束事務
/???
17.select into ?的用法?--只能處理一行結果集
declare
? name varchar(30);
begin
?select username into name
?from users
?where id=2;
dbms_output.put_line('姓名為:'||name);
end;
/
18.利用%rowtype屬性可以在運行時方便的聲明記錄變量和其他結構
Set serveroutput on;
Declare
?? utype hr.employees%rowtype;
Begin
Select * into utype from hr.employees where employee_id=194;
Dbms_output.put_line('姓名'|| utype.first_name);
Dbms_output.put_line('生日'|| utype.last_name);
end;
/???--%rowtype想當于復制一個表
19.游標的定義和使用
Declare
Cursor ucur is select * from users; --聲明游標
Us users%rowtype;--定義與游標想匹配的變量
Begin
Open ucur;--打開游標
Fetch ucur into us;
While ucur %found loop --使用循環遍歷游標的查詢結果
Dbms_output.put_line('姓名:'||us.username||'生日'||us.brithday);
Fetch ucur into us;
End loop;
Close ucur; --關閉游標
End;
=======================================
%found在前一條的fetch語句至少對應數據庫的一行時,%found屬性值為true,否則為false;
% notfound 在前一條fetch語句沒有對應的數據庫行時,%notfound屬性值為true,否則為false;
%isopen 在游標打開時%isopen屬性值為true;否則為false;
%rowcount顯示迄今為止從顯示游標中取出的行數
20.
刪除
drop tablespace 空間名 including contents;?--刪除表空間和里面的內容
drop table 表名???--刪除表
drop user 用戶名??--刪除用戶
insert into student(stuid,stuname,age,birthday)values(stu_sn.nextval,'lisi',21,to_date('1989-09-08','yyyy-mm-dd'));
insert into student(stuid,stuname,age,birthday)values(stu_sn.nextval,'wangwu',21,to_date('1989-09-08','yyyy-mm-dd'));
insert into student(stuid,stuname,age,birthday)values(stu_sn.nextval,'zhaoliu',20,to_date('1990-09-08','yyyy-mm-dd'));
insert into exam(stuid,subid,grade)values(1,2,70);
insert into exam(stuid,subid,grade)values(2,1,45);
insert into exam(stuid,subid,grade)values(2,2,70);