Oracle的sql*plus是與oracle進行互動的用戶端工具。在sql*plus中,可以運行sql*plus命令與sql*plus語句。
我們通常所說的DML、DDL、DCL語句都是sql*plus語句,它們執行完後,都可以儲存在一個被稱為sql buffer的記憶體地區中,並且只能儲存一條最近執行的sql語句,我們可以對儲存在sql buffer中的sql 語句進行修改,然後再次執行,sql*plus一般都與資料庫打交道。
除了sql*plus語句,在sql*plus中執行的其它語句我們稱之為sql*plus命令。它們執行完後,不儲存在sql buffer的記憶體地區中,它們一般用來對輸出的結果進行格式化顯示,以便於製作報表。
下面就介紹一下一些常用的sql*plus命令:
1)無登入進入SQL命令列狀態
>sqlplus /nolog
SQL>
2)以指定帳號登入資料庫
>sqlplus [使用者名稱]/[使用者密碼]@[本地服務名]
或
>sqlplus [使用者名稱]/[使用者密碼]@[伺服器IP]:[伺服器連接埠,通常為1521]/[SID]
如果帳號是sysdba,命令列需增加參數 as sysdba,如
>sqlplus [使用者名稱]/[使用者密碼]@[本地服務名] as sysdba
3)執行SQL指令檔
SQL>start [sql檔案]
或
SQL>@ [sql檔案]
4)重新運行上一次啟動並執行sql語句
SQL>/
5)將顯示的內容輸出到指定檔案
SQL> SPOOL [檔案名稱]
在螢幕上的所有內容都包含在該檔案中,包括你輸入的sql語句。
如要關閉spool輸出,運行如下命令:
SQL> SPOOL OFF
只有關閉spool輸出,才會在輸出檔案中看到輸出的內容。
6)顯示一個表的結構
SQL> desc table_name
7)顯示當前環境變數的值:
SQL> Show all
8)顯示當前在建立函數、預存程序、觸發器、包等對象的錯誤資訊
SQL> Show error
當建立一個函數、預存程序等出錯時,變可以用該命令查看在那個地方出錯及相應的出錯資訊,進行修改後再次進行編譯。
9)顯示初始化參數的值:
SQL> show PARAMETERS [parameter_name]
10) 顯示資料庫的版本:
SQL> show REL[EASE]
11)顯示SGA的大小
SQL> show SGA
12)顯示當前的使用者名稱
SQL> show user
13)建立使用者並付許可權
SQL> create user [使用者名稱] identified by [密碼] default tablespace [預設的資料表空間名];
SQL> grant connect,resource to [使用者名稱];
或SQL> grant create session, create table to [使用者名稱];
connect只有create session許可權,這是串連資料庫的基本許可權;resource是開發人員許可權,至於其中包含的內容可以查詢系統資料表中的具體內容:
SQL> select * from role_sys_privs where role='RESOURCE';
resource一般包括如下許可權:
CREATE SEQUENCE
CREATE TRIGGER
CREATE CLUSTER
CREATE PROCEDURE
CREATE TYPE
CREATE OPERATOR
CREATE TABLE
CREATE INDEXTYPE
如果要修改密碼,則運行如下命令:
SQL> alert user [使用者名稱] identified by [新密碼];
14)建立使用者並付許可權
SQL> drop user [使用者名稱] cascade;
如果該urer剛建立沒有表等對象,可以使用drop user命令刪除,否則要使用drop user cascade命令刪除,此時會將該使用者擁有的對象一同刪除。
15)常用函數
sysdate -- 當前日期時間
lower(utl_raw.cast_to_raw(DBMS_OBFUSCATION_TOOLKIT.MD5(INPUT_STRING => '888888'))) -- md5加密
concat('a','b') -- 合并兩個字串
'a' || 'b' || 'c' -- 合并多個字串
to_date('2011-01-01 20:28:03','YYYY-MM-DD HH24:MI:SS') -->字串轉換為date類型,參考ORACLE中date類型欄位的處理 見
to_char(t.create_date,'YYYY-MM-DD HH24:MI:SS') -->日期轉換為字串
16) 一些特殊的表的查詢
尋找指定使用者的所有表(注意使用者名稱用大寫):select * from all_tables where OWNER = '【USERNAME】';
結果中列TABLESPACE_NAME的值為資料表空間的名稱
尋找指定表的所有約束:select * from all_constraints where TABLE_NAME = '【TABLE_NAME】';
尋找指定表的所有外鍵:select * from all_constraints where TABLE_NAME = '【TABLE_NAME】' and CONSTRAINT_TYPE = 'R';
對於CONSTRAINT_TYPE的值,R -- 外鍵、P -- 主鍵、U -- 唯一性限制式、C -- 一般約束(如某列不可為空)
尋找指定使用者的所有預存程序和函數:select * from all_procedures where OWNER = '【USERNAME】';
地中OBJECT_TYPE列的值為FUNCTION代表函數,值為PROCEDURE代表格儲存體過程
指定索引:select /*+ index(tablename index_name)*/ from tablename
特別注意:
1)用SQL Plus命令列運行sql檔案,建表語句內不能有空行,否則報語法錯誤
2)用SQL Plus命令列運行sql檔案,檔案內若包含中文,檔案格式必須為ANSI(GBK),設為UTF-8會中文亂碼