Oracle數據庫代碼指令簡介


 

  重大提醒!!!oracle里面的查詢,一定要把查詢名大寫!!!就算你創建的時候是小寫字母,查詢的時候也一定要大寫!!!

 

這是oracle的課后作業,弄懂這些也差不多了吧,不懂的可以去看我的SQL sever數據庫的博客那個寫的詳細。視頻以后有時間錄~ 

 

登錄數據庫

//方法一
sqlplus 用戶名

//方法二
sqlplus sys@orcl   as 用戶名

 清屏

clear scr

 查看表的結構屬性

desc  表名

 

第一章

 1.查看當前數據庫控制文件的名稱與路徑

select name from v$controlfile;

2.查看表空間SYSTEM對應的數據文件信息

//dba_data_files是數據字典
select file_name,tablespace_name,autoextensible  from dba_data_files   where tablespace_name='SYSTEM';

3.查看當前數據庫所有數據文件信息

select file#,name,checkpoint_change#

4.查看正在使用的日志文件組

select group#,status from v$log;

5.使用DBA_TABLES數據字典查詢SCOTT用戶所有表的信息

select table_name,tablespace_name,owner
from dba_tables
where owner='SCOTT';

6.通過DESC DAB_TAB_COLUMN命令了解用戶表的字段信息結構

desc dba_tab_columns;

7.查詢EMP表中的字段ID、字段名和表名信息

select *from scott.emp;

8.通過DBA_INDEXES數據字典了解EMP表中的索引信息

select *  from  dba_indexes  where table_name='EMP';

 

第二章

1.使用SPOOL命令將SQL Plus中的輸出結果復制到result.txt文件中

//spool命令是執行語句的輸出結果會存到一個文件里面,輸完語句之后 /執行 ,最后可以spool off 關閉spool功能
spool result.txt
 select empno,ename,job,mgr,sal,deptno
 from scott.emp
 where sal<4000
/

2.scott用戶,查詢工資小於某金額的員工信息。該金額具體值由&salary決定

//這里用到&salary,下面我們會復制給它,算是變量吧,我們可以看到/執行之后讓我們輸入值了
select empno,ename,job,sal
from scott.emp
where sal<&salary

/
salary 的值:  4000

3.為ename列起別名“雇員姓名”並設置ename列顯示寬度15字符

column ename heading ‘雇員姓名’ format A15
 /

4.為列sal起別名“薪水”,使該列居中並設置此列為貨幣格式

column sal heading ‘薪水’ justify center format $99,999.99;

 /

5.消除sal列的屬性設置

column sal clear;

 

第三章

1.創建member表,兩個列一個id一個name

create table member(
Id number (4),
name varchar(10)
);

2.為member表name添加非空約束

alter table member modify name not null;

3.刪除member表中的非空約束

alter table member modify name null;

4.創建member2表(結構同member),為id列添加主鍵約束id_pk

create table member2
(id number(4),
name varchar(10) not null,
Constraint  id_pk  primary key (id));

5.刪除member2表的主鍵約束id_pk

alter table member2 drop constraint id_pk;

6.刪除member2表。重新創建member2表,為id列添加列級別主鍵約束(不命名)

create table member2 (
id number(4) primary key ,
name varchar(10) not null);

7.使用數據字典USER_CONSTRAINTS查詢member2表主鍵名稱。刪除主鍵。

//先查看主鍵名
select constraint_name,constraint_type
From user_constraints
Where table_name='MEMBER2';        --這里一定要大寫MEMBER2啊啊啊啊啊
//看到主鍵名了,可以刪了
alter table member2 drop 主鍵名;

8.為member表id列添加主鍵id_pk

alter table member add constraint id_pk primary key(id);

 

第四章

去下載這個事先寫好的數據庫代碼,執行一下,把表創建好  http://pan.baidu.com/s/1o8eAku2

 這個資料占用了student表,下面的代碼你們把student表換成student1,自己改個名

1.創建student表,設置claidFOREIGN KEY約束,引用class表中的claid

//這就是一個外鍵約束
     create table student (
     id number(4) primary key,
     name varchar2(10),
     claid number(3) references class(claid));

2.刪除studentclaid列的外鍵約束

alter table student drop constraint 約束名;

3.為studentclaid列添加外鍵約束cla_fk,引用同前,並且指定外鍵約束的引用類型為CASCADE

alter table student 
Add constraint claid_fk foreign key (claid)
References class (claid) on delete cascade ;

4.查看student表中所有的約束信息

select constraint_name, constraint_type,deferred, deferrable,status
From user_constraints
Where table_name=’STUDENT’;

5.將mem表中的CHECK約束設置為禁止狀態

ALTER TABLE mem MODIFY CONSTRAINT id_ck  DISABLE;

6.查看mem表約束狀態

select constraint_name,constraint_type,status
 from user_constraints
 where table_name='MEM';

 

第五章

去下載這個事先寫好的數據庫代碼,執行一下,把表創建好  http://pan.baidu.com/s/1o8eAku2

 

1.從scores表中查詢出課程平均成績低於課程最高平均值的課程編號和平均成績

select cno,avg(sscore) from scores
group by cno
having avg(sscore)<(select max(avg(sscore) ) from scores group by cno);    --having只是針對函數來使用的,詳情見http://www.w3school.com.cn/sql/sql_having.asp

2.從scores表中查詢性別為“女”的學生成績信息,包括學號、課程編號和分數列,並按成績升序排列

select sno,cno,sscore from scores 
Where sno in ( select sno from student where ssex=’女’)
order by sscore;

3.查詢大於課程編號為1102中任意一個成績的成績信息

Select sno ,cno, sscore from scores
Where sscore>any (select sscore from scores where cno=’1102’ )

4.查詢大於課程編號1102中所有成績的成績信息

select sno ,cno ,sscore from scores where 
Sscore>all(select sscore feom scores where cno =’1102’ );

 

 

第六章

去下載這個事先寫好的數據庫代碼,執行一下,把表創建好  http://pan.baidu.com/s/1gfimpmN

 

1.從SCORES表中查詢非“JSP課程設計”課的成績信息

//exists是返回值為真的情況下就執行
select * from SCORES where exists(select cno from course where course.cno=scores.cno and course.cname!='JSP課程設計');

2.將北京籍學生的分數下調5%

update scores set sscore=sscore*0.95 where sno in (select sno from student where sadrs='北京');

3.使用內連接從student表和class表中查詢學生學號、姓名和班級名稱

select s.sno,s.sname,cl.claname from student s inner join class cl on s.claid=cl.claid;

4.使用scores表和scgrade表,查詢學號、成績和相應等級

select sno,sscore,grade from scores s inner join scgrade sc on s.sscore between sc.loscore and sc.hiscore;

5.使用自然連接查詢學生信息及所在的班級名稱

select * from student natural join class;

6.使用student作為主表,連接scores表,查詢出學生學號、姓名和課程編號,並按課程編號降序排列

select s.sno,s.sname,s.claid from student s left outer join scores sc on (s.sno=sc.sno) order by s.claid desc;

 

第七章

1.在EMP表中,查詢工資最高的第6位到第10位的員工姓名和工資信息

select * from(select Rownum rn, ENAME,SAL from(select * from emp order by SAL desc)where Rownum<=10 )where rn>=6

2.student表中sadrs為北京、天津和南京的數據添加到new_student表中

--創建new_student表
create table new_student( sno number(
6), sname varchar2(20) not null, ssex varchar2(3), sbirth date, sadrs varchar2(7), claid number(3), constraint nsno_pk primary key(sno), constraint ncla_fk foreign key(claid) references class(claid) )

--插入數據
insert into new_student
select * from student
where sadrs IN ('北京','天津','南京');

3.使用MERGE語句實現以student1為基准,對student2表以sno列作為關聯更新sname

merge  into student2 s2
using student1 s1
on (s2.sno=s1.sno)
when matched then
    update set s2.sname=s1.sname;

4.將兩表中sno列不相同的student1表的記錄添加到student2表中

merge  into student2 s2
using student1 s1
on (s2.sno=s1.sno)
when not matched then
    insert values(s1.sno,s1.sname,s1.ssex,s1.sbirth,s1.sadrs);

5.將student3表中性別為“女”的學生姓名更新到student4表,將student3表中籍貫為“北京”的學生信息插入到student4

merge  into student4 s4
using student3 s3
on (s3.sno=s4.sno)
when matched then
    update set s4.sname=s3.sname
    where s3.ssex=''
where not matched then
    insert values(s3.sno,s3.sname,s3.ssex,s3.sbirth,s3.sadrs)
    where s3.sadrs='北京';

6.將member1表的數據添加到member2表中,而不檢查數據是否已經存在

merge  into member2 m2
using member1 m1
on (1=0)
where not matched then
    insert values(m1.id,m1.name);
 

7.使用member1表作為源表來更新member2表的姓名,同時刪除member2表中id大於2的數據

merge  into member2 m2
using member1 m1
on (m1.id=m2.id)
when matched then
    update set m2.name=m1.name
    delete where m2.id>2;

 

第八章

1.創建名稱為orclspace的表空間,設置數據文件mydata01.dbf初始大小10M,每次自動增長2M,最大容量為30M

create tablespace orclspace
datafile 'C:\oracle\files\mydata01.dbf'
size 10M
autoextend on next 2M
maxsize 30M

2.通過數據字典dba_tablespaces查看orclspace表空間的屬性

select
tablespace_name, 
logging, 
allocation_type, 
extent_management, 
segment_space_management
FROM dba_tablespaces
WHERE tablespace_name='ORCLSPACE';

3.為orclspace表空間增加1個新的數據文件mydata02.dbf,大小10M,不自動擴展

alter tablespace orclspace
add datafile
'C:\mydata02.dbf'
size 10M
AUTOEXTEND OFF;

4.修改數據文件mydata02.dbf的大小為15M

alter database
datafile
'C:\mydata02.dbf'
resize 15M;

5.將數據文件的原名稱與路徑修改為新名稱與路徑

alter tablespace orclspace offline
alter tablespace orclspace
rename datafile 'C:\orclspace.dbf'
to 
'C:\oraclefile\myoraclespace.dbf';

6.創建tempspace臨時表空間,設置臨時數據文件mytemp01.dbf初始大小10MB,每次自動增長2MB,最大容量為20MB

CREATE  TEMPORARY  TABLESPACE  tempspace
TEMPFILE  'C:\mytemp01.dbf'
SIZE  10M
AUTOEXTEND  ON  NEXT 2M  MAXSIZE  20M;

7.設置系統默認臨時表空間為tempspace。查詢結果

ALTER DATABASE  DEFAULT  TEMPORARY  TABLESPACE TEMPSPACE;

8.刪除臨時表空間組tempgroup1。分別刪除表空間my_temp_tbs01my_temp_tbs02及其數據文件

CREATE  TEMPORARY  TABLESPACE  tempspace1
TEMPFILE  'C:\tempspace1.dbf'  SIZE  10m
TABLESPACE GROUP  tempgroup1;

CREATE  TEMPORARY  TABLESPACE  tempspace2
TEMPFILE  'C:\tempspace2.dbf'  SIZE  10m
TABLESPACE GROUP  tempgroup1;

drop tablespace tempspace1 including contents and datafiles;
drop tablespace tempspace2 including contents and datafiles;

9.將數據庫的還原表空間切換為undospace。查看結果

CREATE UNDO TABLESPACE undospace
DATAFILE  'C:\undospace.dbf'
SIZE  10M;
show parameter undo_tablespace;

 

第九章

1.使用IF-ELSE統計表emp中部門編號為30的員工人數

DECLARE
    v_count NUMBER(4);
BEGIN
    SELECT count(*) INTO v_count FROM emp
    WHERE deptno = 30;
    IF v_count > 0 THEN
        DBMS_OUTPUT.PUT_LINE('部門編號為30的員工人數:'||v_count||'');
    ELSE
        DBMS_OUTPUT.PUT_LINE('不存在部門編號為30的員工信息');
    END IF;
END;

2.使用CASE條件語句判斷成績61分所處的等級

DECLARE
  score BINARY_INTEGER := 61;
BEGIN
  CASE
  WHEN  score >= 90  THEN  DBMS_OUTPUT.PUT_LINE('優秀');
  WHEN  score >= 80  THEN  DBMS_OUTPUT.PUT_LINE('良好');
  WHEN  score >= 60  THEN  DBMS_OUTPUT.PUT_LINE('及格');
  ELSE  DBMS_OUTPUT.PUT_LINE('不及格');
  END CASE;
END;

3.使用FOR循環語句輸出數值1~10

BEGIN
    FOR i IN 1 .. 10  
    LOOP
        DBMS_OUTPUT.PUT_LINE(i);
    END LOOP;
END;

4.使用非系統異常處理違反完整性約束條件的錯誤

DECLARE
  v_deptno dept.deptno%TYPE := &dept_no;
  e_deptno EXCEPTION;
  PRAGMA EXCEPTION_INIT(e_deptno, -2292); 
BEGIN
  DELETE FROM dept WHERE deptno = v_deptno;
EXCEPTION
  WHEN e_deptno THEN
    DBMS_OUTPUT.PUT_LINE('違反數據完整性約束');
  WHEN OTHERS THEN
    DBMS_OUTPUT.PUT_LINE(sqlcode||'----'||sqlerrm);
END;

5.編寫程序,計算1+2+3+ +30的值。在求和的過程中,如果發現結果超出了100,則拋出異常,並停止求和

DECLARE
  result INTEGER := 0;
  out_of_range EXCEPTION;
  PRAGMA EXCEPTION_INIT(out_of_range,-20001);
BEGIN
  FOR i IN 1 .. 20  LOOP
    result := result + i;
    IF result > 100 THEN
      RAISE_APPLICATION_ERROR(-20001,'當前的計算結果為'||result||',已經超出范圍!');
    END IF;
  END LOOP;
EXCEPTION
  WHEN out_of_range THEN
    DBMS_OUTPUT.PUT_LINE('錯誤代碼'||SQLCODE);
    DBMS_OUTPUT.PUT_LINE('錯誤信息'||SQLERRM);
END;

 

第十章

1.創建嵌套表類型stu_perf_type,存儲學生在校表現,用在學生表stu_tbstu_perf

CREATE TYPE stu_perf_type IS TABLE OF VARCHAR2(20);/
CREATE TABLE stu_tb (
stu_id  NUMBER(4),
stu_name  VARCHAR2(10),
stu_score  NUMBER(6,2),
stu_perf  stu_perf_type)
NESTED TABLE stu_perf   STORE  AS  s_p_tb;

2.查詢stu_tb表中2號同學的在校表現數據

DECLARE
  s_tb stu_perf_type;
BEGIN
  SELECT stu_perf INTO s_tb FROM stu_tb
    WHERE stu_id = 2; 
  FOR i IN 1..s_tb.COUNT  LOOP 
     DBMS_OUTPUT.PUT_LINE('學生在校情況:'||s_tb(i));
  END LOOP;
END;

3.修改表stu_tb中的stu_id1的在校表現數據

DECLARE
  s_tb stu_perf_type := stu_perf_type('WEB班', '表現一般', 'C#班', '表現優異');  
BEGIN
  UPDATE stu_tb SET stu_perf = s_tb
    WHERE stu_id = 1;
END;

4.使用嵌套循環輸出stu_tb2表中所有同學的在校表現信息

DECLARE
  s_tb stu_cond_type; 
BEGIN
  SELECT stu_cond INTO s_tb FROM stu_tb2
    WHERE stu_id = 2; 
  DBMS_OUTPUT.PUT_LINE('學生2表現情況:');
  FOR i IN 1..s_tb.COUNT LOOP   
    DBMS_OUTPUT.PUT_LINE(s_tb(i));
  END LOOP;
END;

5.檢索EMP表。使用LOOP循環語句遍歷游標,輸出指定部門編號(比如10)的員工信息(empno,ename,sal,deptno)。不用輸出漢字,字母就可以

DECLARE
   CURSOR cursor_emp (dept_no NUMBER := 10) 
       IS SELECT * FROM emp WHERE deptno = dept_no;
   row_emp emp%ROWTYPE;
BEGIN
  OPEN cursor_emp(10);
  LOOP
    FETCH cursor_emp INTO row_emp; 
    EXIT WHEN cursor_emp%NOTFOUND; 
    DBMS_OUTPUT.PUT_LINE('當前檢索第'||cursor_emp%ROWCOUNT|| '行:員工號--'||row_emp.empno|| ',姓名--'|| row_emp.ename|| ',工資--'|| row_emp.sal|| ',部門編號--'|| row_emp.deptno);
  END LOOP;
  CLOSE cursor_emp;
END;

6.使用FOR循環,實現上一題功能,輸出20號部門的員工信息。體會兩種循環使用的異同

DECLARE
    CURSOR cursor_emp(dept_no NUMBER := 10)
    IS SELECT * FROM emp WHERE deptno = dept_no;
BEGIN
    FOR row_emp IN cursor_emp LOOP
        DBMS_OUTPUT.PUT_LINE('員工號:'||row_emp.empno||',姓名:'||row_emp.ename || ',工資:'|| row_emp.sal|| ',部門編號:'|| row_emp.deptno);
    END LOOP;
END;

7.使用顯示游標更新emp表數據,將工資低於4000元的員工工資增加100

DECLARE
  CURSOR cursor_emp IS   SELECT sal FROM emp WHERE sal < 4000
      FOR UPDATE;
  v_sal emp.sal%TYPE; 
BEGIN
  OPEN cursor_emp;
  LOOP
    FETCH cursor_emp INTO v_sal;
    EXIT WHEN cursor_emp%NOTFOUND;
    UPDATE emp SET sal=sal+100  WHERE CURRENT OF cursor_emp;
  END LOOP;
  CLOSE cursor_emp;
END;

 

 

第十一章

1.使用嵌套循環輸出stu_tb表中所有同學的在校表現信息

DECLARE
  s_tb stu_perf_type;
BEGIN
  SELECT stu_perf INTO s_tb FROM stu_tb
    WHERE stu_id = 1; 
  FOR i IN 1..s_tb.COUNT  LOOP 
     DBMS_OUTPUT.PUT_LINE('學生在校情況:'||s_tb(i));
  END LOOP;
END;

2.使用TO_CHAR()函數將當前日期轉換為''yyyy-mm-dd hh24:mi:ss'格式的字符串 

select  to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss ')  from dual;

3.創建帶有OUT參數的get_birth_claname()函數,根據姓名返回學生出生日期和所在班級名稱的功能。運行函數,返回任一名學生的出生日期和班級名稱

CREATE OR REPLACE FUNCTION get_ birth_claname (name IN VARCHAR2)
RETURN NUMBER
AS
v_claid  student.claid%TYPE;   
BEGIN
SELECT claid INTO v_claid  FROM student
WHERE sname = name; 
RETURN v_claid;
EXCEPTION
WHEN NO_DATA_FOUND THEN
RAISE_APPLICATION_ERROR(-20003, '該學生不存在');
END;

4.定義RESULT()函數計算兩個數值相除結果(商和余數),使用IN-OUT參數。運行,返回30/4的結果

CREATE OR REPLACE FUNCTION result
  (num1 NUMBER, num2 IN OUT NUMBER)
RETURN NUMBER
AS
  v_result NUMBER(6);
  v_remainder NUMBER;
BEGIN
  v_result := FLOOR(num1 / num2);
  v_remainder := MOD(num1, num2);
  num2 := v_remainder;
  RETURN v_result;
EXCEPTION
  WHEN ZERO_DIVIDE THEN
    DBMS_OUTPUT.PUT_LINE('錯誤信息:不能除0');
END;

 

 

 

第十二章

 

1.使用LOOP循環游標,取student表籍貫“北京”的同學的學號和姓名

Declare
 cursor stu_cur (v_sadrs varchar2)
is select sno,sname from student where sadrs = v_sadrs;
v_sno student.sno%type;
v_sname student.sname%type;
Begin
  open stu_cur('北京');
 loop
     fetch stu_cur into v_sno,v_sname;
     Exit when stu_cur%notfound;
     dbms_output.put_line('sno='||v_sno|| ',sname='||v_sname);
  End loop;
  close stu_cur;
End;

2.創建BEFORE類型觸發器trig_Before_Stu,要求只能由scott用戶對student表數據進行刪除操作(環境變量 user

CREATE OR REPLACE TRIGGER trig_Before_Stu
  BEFORE DELETE ON student
BEGIN
  IF user != 'SCOTT' THEN
     RAISE_APPLICATION_ERROR(-20001, '權限不足,不能進行刪除操作');
  END IF;
END;

3.創建BEFORE觸發器trig_OutPutScore,更新scores分數時顯示分數變化(原來分數##,現在分數##)。自行測試

CREATE OR REPLACE TRIGGER trig_OutPutScore
  BEFORE UPDATE ON scores
  FOR EACH ROW
DECLARE
  oldvalue NUMBER;
  newvalue NUMBER;
BEGIN
  oldvalue := :OLD.sscore; 
  newvalue := :NEW.sscore; 
  DBMS_OUTPUT.PUT_LINE('原來分數='||oldvalue|| ',現在分數='||newvalue);
END;

4.創建一個DDL觸發器trig_DenyDelObjForScott,禁止scott用戶使用DROP命令刪除自己模式中的對象

create or replace trigger trig_DenyDelOBjForScott
before drop on scott.schema
begin
    raise_addlication_error(-20000,'不能對scott用戶中的對象進行刪除操作');
end;

5.分別建立數據庫啟動觸發器trig_startup和數據庫關閉觸發器trig_shutdown,跟蹤數據庫啟動和關閉事件。發生啟動和關閉庫時,向表db_log中輸入信息(user,SYSDATE)

CREATE OR REPLACE TRIGGER trig_startup
AFTER STARTUP
ON DATABASE
BEGIN
  INSERT INTO db_log VALUES(user,SYSDATE);
END;
CREATE OR REPLACE TRIGGER trig_shutdown
BEFORE SHUTDOWN
ON DATABASE
BEGIN
  INSERT INTO db_log VALUES(user,SYSDATE);
END;

 

第十三章

 

1.基於student表創建視圖stu_v。(授予權限后返回到SCOTT用戶,再創建視圖)

CREATE OR REPLACE VIEW stu_v
AS   
SELECT * FROM student;

2.創建INSTEAD OF觸發器trig_DeleteScoreBySno,當在student表中刪除學生信息時,首先顯示這些學生的學號和姓名,再刪除這些學生信息,並從scores表刪除與之相關的成績信息 

CREATE OR REPLACE TRIGGER trig_DeleteScoreBySno
  INSTEAD OF DELETE
  ON stu_v
  FOR EACH ROW
BEGIN
  DBMS_OUTPUT.PUT_LINE('要刪除的信息[sno='||:OLD.sno|| ', sname='||:OLD.sname|| ']');
  DELETE scores WHERE sno = :OLD.sno;
  DELETE student WHERE sno = :OLD.sno;
END;

3.創建一個存儲過程proc_FindStudents,根據性別和籍貫返回學生編號、姓名、性別和籍貫

CREATE OR REPLACE PROCEDURE proc_FindStudents
  (sex IN VARCHAR2, adrs IN VARCHAR2)
AS
  CURSOR myCursor IS
    SELECT * FROM student WHERE ssex = sex AND sadrs = adrs;
  myrow myCursor%ROWTYPE;
BEGIN
  FOR myrow IN myCursor LOOP
    DBMS_OUTPUT.PUT_LINE('編號:'||myrow.sno||',姓名:'||myrow.sname||',性別:'||myrow.ssex||',籍貫:'||myrow.sadrs);
  END LOOP;
END;

4.調用存儲過程,返回籍貫為天津的女同學信息

exec proc_FindStudents('','天津');

5.創建過程proc_GetScoresBySno,根據指定學號返回該學生總成績

CREATE OR REPLACE PROCEDURE proc_GetScoresBySno
  (no IN NUMBER, result OUT NUMBER)
AS
BEGIN
  SELECT SUM(sscore) INTO result
  FROM scores WHERE sno = no;
END;

6.調用存儲過程統計學號為201102的學生總成績

VARIABLE AllScores NUMBER;
EXEC proc_GetScoresBySno(201102,:AllScores);
PRINT AllScores;

7.創建存儲過程proc_comp,包含兩個數值參數,返回兩個參數和到第一個參數,返回兩個參數的積到第二個參數

CREATE OR REPLACE PROCEDURE proc_comp
  (
    num1 IN OUT NUMBER,
    num2 IN OUT NUMBER
  )
AS
  v1 NUMBER;
  v2 NUMBER;
BEGIN
  v1 := num1 + num2;
  v2 := num1 * num2;
  num1 := v1;
  num2 := v2;
END;

8.調用proc_comp存儲過程,返回206的和與積

VARIABLE num1 NUMBER;  
VARIABLE num2 NUMBER;
EXEC :num1 := 20;    
EXEC :num2 := 6;
EXEC proc_comp(:num1,:num2);
PRINT num1 num2;     

 

 

第十四章

1.創建一個用戶,用戶名為testuser,密碼為testuser,默認表空間為system,臨時表空間為temp,為此用戶分配50M的表空間,此用戶默認鎖定

CREATE USER testuser
IDENTIFIED BY testuser
DEFAULT TABLESPACE system
TEMPORARY TABLESPACE temp
QUOTA 50M ON system
ACCOUNT LOCK;

2.把剛創建的testuser用戶解鎖

alter user testuser account unlock;

3.修改用戶testuser的密碼為test

alter user testuser identified by test;

4.授予用戶testuser連接數據庫的create session權限

grant create session to testuser;

5.授予用戶testuser創建表的權限,並允許testuser用戶授予此權限給其他用戶

grant create table to testuser
with admin option;

6.撤消testuser用戶的創建表的權限

revoke create table from testuser;

7.授予用戶testuser查詢scott.emp的權限

grant select on scott.emp to testuser;

8.撤消用戶testuser查詢scott.emp的權限

revoke select on scott.emp from testuser;

9.創建一個角色myrole

create role myrole;

10.為角色myrole授予對表scott.emp的SELECT和DELETE權限

grant select,delete on scott.emp to myrole;

11.為角色myrole授予創建表的權限

grant create any table to myrole;

12.創建一個用戶tuser,密碼tuser。為其授予連接數據庫的權限和角色myrole

create user tuser
identified by tuser;

grant create session,myrole to tuser;

13.授予用戶tuser查詢scott.dept表的權限

grant select on scott.dept to tuser;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM