安装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
提升效率。参考资料: