安裝Oracle Instant Client
/opt/oracle/instantclient
。sudo ln -s /opt/oracle/instantclient/sqlplus /usr/bin/sqlplus
。配置環境變量
編輯~/.bashrc
或/etc/profile.d/oracle.sh
,添加:
export ORACLE_HOME=/opt/oracle/instantclient
export LD_LIBRARY_PATH=$ORACLE_HOME:$LD_LIBRARY_PATH
export PATH=$ORACLE_HOME:$PATH
執行source
使配置生效。
連接數據庫
-- 本地連接(SYSDBA權限)
CONNECT / AS SYSDBA
-- 遠程連接
CONNECT username/password@//hostname:port/service_name
常用命令
功能 | 命令示例 | 說明 |
---|---|---|
查詢 | SELECT * FROM employees; |
基礎查詢 |
創建表 | CREATE TABLE test (id NUMBER, name VARCHAR2(50)); |
定義表結構 |
插入數據 | INSERT INTO test VALUES (1, 'Alice'); |
插入單行數據 |
批量導出 | SPOOL /tmp/data.csv SELECT * FROM employees; SPOOL OFF |
導出結果到CSV文件 |
使用變量
-- 定義變量
VARIABLE emp_id NUMBER
EXEC :emp_id := 100;
-- 使用變量查詢
SELECT * FROM employees WHERE employee_id = :emp_id;
條件與循環
-- 簡單條件判斷
BEGIN
IF :emp_id > 50 THEN
DBMS_OUTPUT.PUT_LINE('ID大于50');
END IF;
END;
/
-- 循環示例(打印1-10)
BEGIN
FOR i IN 1..10 LOOP
DBMS_OUTPUT.PUT_LINE(i);
END LOOP;
END;
/
存儲過程調用
-- 創建存儲過程
CREATE OR REPLACE PROCEDURE update_salary (p_id NUMBER, p_salary NUMBER) AS
BEGIN
UPDATE employees SET salary = p_salary WHERE employee_id = p_id;
END;
/
-- 調用存儲過程
EXEC update_salary(101, 5000);
美化輸出
-- 設置列寬和分隔符
SET LINESIZE 100
SET COLSEP '|'
SET HEADING ON
SET PAGESIZE 20
-- 導出為CSV格式(12C及以上)
SET MARK CSV ON DELIMITER ',' QUOTE ON
SPOOL output.csv
SELECT * FROM departments;
SPOOL OFF
錯誤處理
-- 腳本執行錯誤時退出
WHENEVER SQLERROR EXIT SQL.SQLCODE
WHENEVER OSERROR EXIT
-- 示例:帶錯誤檢查的腳本
BEGIN
EXECUTE IMMEDIATE 'INVALID SQL'; -- 會觸發錯誤
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('錯誤代碼: ' || SQLCODE);
DBMS_OUTPUT.PUT_LINE('錯誤信息: ' || SQLERRM);
END;
/
SELECT ANY TABLE
等)。/home/user/script.sql
)。ARRAYSIZE 5000
提升效率。參考資料: