debian

debian中sqlplus脚本编写指南

小樊
45
2025-09-01 14:52:54
栏目: 云计算

Debian中SQLPlus脚本编写指南

一、基础准备

  1. 安装Oracle Instant Client

    • 从Oracle官网下载适合Debian的Instant Client包(含SQL*Plus),解压至/opt/oracle/instantclient
    • 创建符号链接:sudo ln -s /opt/oracle/instantclient/sqlplus /usr/bin/sqlplus
  2. 配置环境变量
    编辑~/.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使配置生效。

二、脚本基础语法

  1. 连接数据库

    -- 本地连接(SYSDBA权限)
    CONNECT / AS SYSDBA
    
    -- 远程连接
    CONNECT username/password@//hostname:port/service_name
    
  2. 常用命令

    功能 命令示例 说明
    查询 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文件

三、高级脚本技巧

  1. 使用变量

    -- 定义变量
    VARIABLE emp_id NUMBER
    EXEC :emp_id := 100;
    
    -- 使用变量查询
    SELECT * FROM employees WHERE employee_id = :emp_id;
    
  2. 条件与循环

    -- 简单条件判断
    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;
    /
    
  3. 存储过程调用

    -- 创建存储过程
    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);
    

四、格式优化

  1. 美化输出

    -- 设置列宽和分隔符
    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
    
  2. 错误处理

    -- 脚本执行错误时退出
    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;
    /
    

五、注意事项

  1. 权限问题:确保用户有执行脚本的权限(如SELECT ANY TABLE等)。
  2. 路径问题:脚本中引用文件时,使用绝对路径(如/home/user/script.sql)。
  3. 性能优化:大数据量导出时,使用ARRAYSIZE 5000提升效率。

参考资料:

0
看了该问题的人还看了