温馨提示×

Linux SQLPlus命令大全

小樊
32
2025-12-16 17:56:36
栏目: 云计算

Linux下 SQL*Plus 命令速查与实用示例

一 连接与登录

  • 登录数据库
    • 常规登录:sqlplus username/password@tnsname
    • 本机操作系统认证:sqlplus / as sysdba
    • 先不登录再连:sqlplus /nolog,随后 connect username/password@tnsnameconn / as sysdba
  • 常用登录参数
    • 静默模式:sqlplus -S /nolog(不回显登录横幅与提示,适合脚本)
  • 退出与断开
    • 退出会话:exitquit
    • 断开连接保留窗口:disconnect
      以上登录与退出方式、静默参数及切换连接的写法适用于 Linux 终端下的 Oracle 客户端交互。

二 脚本执行与文件操作

  • 执行脚本
    • 执行本地或指定路径脚本:@ script.sql
    • 等价写法:start script.sql
    • 在脚本中调用同目录子脚本:@@ nested.sql(相对路径便捷)
  • 编辑与保存
    • 编辑缓冲区/文件:edit(默认编辑缓冲区,可带文件名)
    • 保存缓冲区到文件:save file.sql
    • 从文件读入到缓冲区:get file.sql
  • 缓冲区浏览与执行
    • 查看缓冲区:list(可简写 l
    • 执行当前缓冲区:/(斜杠)或 run
  • 操作系统交互与注释
    • 执行 OS 命令:host!(如:host ls -l)
    • 注释一行:REMARK
      以上命令覆盖脚本执行、编辑、保存、加载与 OS 交互的高频用法,适合日常开发与批处理。

三 格式化与报表输出

  • 列与标题格式化(COLUMN)
    • 设置标题:COL column_name HEADING ‘标题’
    • 字符列宽:COL ename FORMAT a20
    • 数字千分位:COL sal FORMAT 99,990
    • 空值替换:COL comm NUL ‘0’
    • 显示属性查看/清除:COL column_name / CLEAR COLUMNS
  • 页眉页脚与分隔(TTITLE/BTITLE)
    • 页脚:BTITLE ‘页脚文本’;页眉:TTITLE ‘页眉文本’
  • 分组与汇总(BREAK/COMPUTE)
    • 去重/换页:BREAK ON deptno SKIP 1
    • 汇总计算:COMPUTE SUM OF sal ON deptno
  • 输出到文件(SPOOL)
    • 开始记录:SPOOL /path/out.txt
    • 结束记录:SPOOL OFF
      以上格式化命令可显著提升查询结果的可读性与报表效果,配合 BREAK/COMPUTE 能快速完成分组统计。

四 会话设置与常用变量

  • 常用 SET 项
    • 反馈与标题:SET FEEDBACK 6(或 OFF);SET HEADING ON
    • 行宽与页大小:SET LINESIZE 200SET PAGESIZE 100
    • 空值显示:SET NULL ‘NULL’
    • 自动提交:SET AUTOCOMMIT ON|OFF|n
    • 输出控制:SET SERVEROUTPUT ON(配合 DBMS_OUTPUT);SET TERMOUT OFF/ONSET TRIMSPOOL ON
    • 执行计时:SET TIMING ON
  • 替代变量与交互输入
    • 交互替换:SELECT * FROM emp WHERE empno = &empno;
    • 接收输入:ACCEPT v_name PROMPT ‘请输入姓名:’
    • 列值赋给变量:COL cnt NEW_VALUE v_cnt;随后可在脚本中使用 &v_cnt 引用
      这些设置项覆盖输出、交互、计时与自动化提交等常见需求,是脚本稳定与美观输出的关键。

五 Linux 脚本与运维示例

  • 静默执行脚本并写日志
    • 示例:
      #!/bin/bash
      sqlplus -S /nolog >startup.log <<'EOF'
      connect / as sysdba
      startup
      exit
      EOF
      
  • 读取变量并查询
    • 示例:
      #!/bin/bash
      read -p "Emp ID: " eid
      name=$(sqlplus -S /nolog <<EOF
      set heading off feedback off pagesize 0
      conn hr/hr
      select first_name||' '||last_name from employees where employee_id = '$eid';
      exit
      EOF
      )
      echo "Name: $name"
      
  • 使用 NEW_VALUE 返回计数
    • 示例:
      sqlplus -S /nolog <<'EOF'
      conn scott/tiger
      col cnt new_value v_cnt
      select count(*) cnt from emp;
      exit v_cnt
      EOF
      echo "Rows: $?"
      
  • 启停数据库与监听
    • 示例:
      sqlplus / as sysdba <<'EOF'
      shutdown immediate
      startup
      exit
      EOF
      
      lsnrctl status
      

以上示例展示了在 Shell 中静默调用 SQL*Plus、交互输入、NEW_VALUE 传参与数据库启停的实用写法,适合自动化运维与批处理任务。

0