重大提醒!!!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表,設置claid列FOREIGN KEY約束,引用class表中的claid列
//這就是一個外鍵約束 create table student ( id number(4) primary key, name varchar2(10), claid number(3) references class(claid));
2.刪除student表claid列的外鍵約束
alter table student drop constraint 約束名;
3.為student表claid列添加外鍵約束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_tbs01、my_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_tb的stu_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_id為1的在校表現數據
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存儲過程,返回20與6的和與積
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;
