Oracle大型資料庫系統課程 — 查詢資料庫

程式碼解釋筆記

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
-- 將後續的所有操作及結果紀錄到"1.LST"檔案裡
SQL>spool 1

-- 將指令前的提示符號設定成"SQL>"。
Oracle#set sqlprompt "SQL>"

-- 查看SQL指令幫助
SQL>help index

-- 顯示了SQL的指令幫助菜單
Enter Help [topic] for help.

@ COPY PAUSE SHUTDOWN
@@ DEFINE PRINT SPOOL
/ DEL PROMPT SQLPLUS
ACCEPT DESCRIBE QUIT START
APPEND DISCONNECT RECOVER STARTUP
ARCHIVE LOG EDIT REMARK STORE
ATTRIBUTE EXECUTE REPFOOTER TIMING
BREAK EXIT REPHEADER TTITLE
BTITLE GET RESERVED WORDS (SQL) UNDEFINE
CHANGE HELP RESERVED WORDS (PL/SQL) VARIABLE
CLEAR HOST RUN WHENEVER OSERROR
COLUMN INPUT SAVE WHENEVER SQLERROR
COMPUTE LIST SET XQUERY
CONNECT PASSWORD SHOW

-- 設定每行最多能顯示100個字元
SQL>set linesize 100

-- 設定最多能顯示30筆查詢結果
SQL>set pagesize 30

-- 查看目前登入的使用者名稱,是"SCOTT"
SQL>show user
USER 為 "SCOTT"

-- 從"emp"表格的"ename"(名字)和"sal"(薪資)這兩個欄位查詢資料
SQL>select ename,sal
2 from emp;

ENAME SAL
---------- ----------
SMITH 800
ALLEN 1600
WARD 1250
JONES 2975
MARTIN 1250
BLAKE 2850
CLARK 2450
KING 5000
TURNER 1500
JAMES 950
FORD 3000
MILLER 1300

已選取 12 個資料列.

-- 嘗試用"system"帳號和錯誤的密碼"aa"登入,顯示了登入失敗
SQL>conn system/aa
ERROR:
ORA-01017: invalid username/password; logon denied

警告: 您已不再與 ORACLE 相連

-- 再次查看目前登入的使用者名稱,可以看到目前並沒有登入進任何帳號
SQL>show user
USER 為 ""

-- 改用正確的密碼"takming"登入,成功登入了
SQL>conn system/takming
已連線.

-- 查看目前登入的使用者名稱可以看到是"SYSTEM"沒錯
SQL>show user
USER 為 "SYSTEM"

-- 從"socc.emp"表格的"ename"(名字)、"job"(職位)、"sal"(薪資)這三個欄位查詢資料,但因為找不到表格所以顯示錯誤
SQL>select ename,job,sal
2 from socc.emp;
from socc.emp
*
ERROR 在行 2:
ORA-00942: 表格或視觀表不存在

-- 用"edit"指令來修改上一次執行成功或未成功的SQL命令,隨後會自動開啟文本編輯器並顯示最後一次打的指令,手動更正輸入錯誤的指令後儲存可以直接關掉
SQL>edit
已將 file afiedt.buf 寫入

-- 更正後的指令
1 select ename,job,sal
2* from scott.emp
SQL>/

-- 正常顯示查詢結果了
ENAME JOB SAL
---------- --------- ----------
SMITH CLERK 800
ALLEN SALESMAN 1600
WARD SALESMAN 1250
JONES MANAGER 2975
MARTIN SALESMAN 1250
BLAKE MANAGER 2850
CLARK MANAGER 2450
KING PRESIDENT 5000
TURNER SALESMAN 1500
JAMES CLERK 950
FORD ANALYST 3000
MILLER CLERK 1300

已選取 12 個資料列.

-- 關閉spool並保存所有操作及結果到"1.LST"檔案裡
SQL>spool off

原程式碼實作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
SQL>spool 1
Oracle#set sqlprompt "SQL>"
SQL>help index

Enter Help [topic] for help.

@ COPY PAUSE SHUTDOWN
@@ DEFINE PRINT SPOOL
/ DEL PROMPT SQLPLUS
ACCEPT DESCRIBE QUIT START
APPEND DISCONNECT RECOVER STARTUP
ARCHIVE LOG EDIT REMARK STORE
ATTRIBUTE EXECUTE REPFOOTER TIMING
BREAK EXIT REPHEADER TTITLE
BTITLE GET RESERVED WORDS (SQL) UNDEFINE
CHANGE HELP RESERVED WORDS (PL/SQL) VARIABLE
CLEAR HOST RUN WHENEVER OSERROR
COLUMN INPUT SAVE WHENEVER SQLERROR
COMPUTE LIST SET XQUERY
CONNECT PASSWORD SHOW


SQL>set linesize 100
SQL>set pagesize 30
SQL>show user
USER 為 "SCOTT"
SQL>select ename,sal
2 from emp;

ENAME SAL
---------- ----------
SMITH 800
ALLEN 1600
WARD 1250
JONES 2975
MARTIN 1250
BLAKE 2850
CLARK 2450
KING 5000
TURNER 1500
JAMES 950
FORD 3000
MILLER 1300

已選取 12 個資料列.

SQL>conn system/aa
ERROR:
ORA-01017: invalid username/password; logon denied


警告: 您已不再與 ORACLE 相連
SQL>show user
USER 為 ""
SQL>conn system/takming
已連線.
SQL>show user
USER 為 "SYSTEM"
SQL>select ename,job,sal
2 from socc.emp;
from socc.emp
*
ERROR 在行 2:
ORA-00942: 表格或視觀表不存在


SQL>edit
已將 file afiedt.buf 寫入

1 select ename,job,sal
2* from scott.emp
SQL>/

ENAME JOB SAL
---------- --------- ----------
SMITH CLERK 800
ALLEN SALESMAN 1600
WARD SALESMAN 1250
JONES MANAGER 2975
MARTIN SALESMAN 1250
BLAKE MANAGER 2850
CLARK MANAGER 2450
KING PRESIDENT 5000
TURNER SALESMAN 1500
JAMES CLERK 950
FORD ANALYST 3000
MILLER CLERK 1300

已選取 12 個資料列.

SQL>spool off