Oracle| sqlplus的非交互式使用

2024-06-09 12:18

本文主要是介绍Oracle| sqlplus的非交互式使用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  • sqlplus交互界面存在的问题
  • sqlplus的两种非交互式使用方式
    • 1 通过外部命令文件
    • 2 通过标准输入
  • 利用管道做兴许处理
  • 须要注意的地方
  • 一个简单的脚本
  • 1 sqlplus交互界面存在的问题

    sqlplus是ORACLE数据库的最重要的官方命令行client软件。是DBA的必备工具,使用它能够完毕差点儿所有的管理任务。然而。sqlplus的交互界面并非很友好,输入命令时不具有历史命令记录功能。默认的输出结果更是不堪入目。

    在易用性方面,sqlplus确实比mysqlclient差了不少。

    既然sqlplus交互模式存在这么多的不便。那么不如干脆直接使用非交互模式使用它,再借助操作系统提供的shell工具集来协助完毕更复杂的任务。sqlplus本身就是支持非交互式使用的,并且支持的很好,符合一般的Unix设计哲学:从标准输入读取命令。把结果写到标准输出

    2 sqlplus的两种非交互式使用方式

    sqlplus在非交互模式下,能够从两个地方为其提供sql命令:一是通过外部文件,而是通过标准输入。

    2.1 通过外部命令文件

    sqlplus username/password@serverIP/侦听服务名 @命令文件名称
    

    以下举一个样例。
    命令文件名称为 1.sql。内容例如以下:

    select count(*) from dba_objects;
    exit;

    运行命令为:

    sqlplus sys/***@172.16.2.190/xgdb.db001.xigang @1.sql
    

    此时运行完毕会把结果输出。
    这样的外部命令文件的方式。须要建立单独的物理文件来存储命令。适合常常使用的大批量管理任务。

    2.2 通过标准输入

    既然sqlplus从标准输入来读取命令,那么就能够利用管道把命令发送给它。

    echo 命令 | sqlplus username/password@serverIP/侦听服务名
    

    这样的方式不须要在命令中包括 exit;,因为sqlplus运行后自己主动退出。以下是个样例:

    echo 'select count(*) from dba_objects;' | sqlplus sys/***@172.16.2.190/xgdb.db001.xigang as sysdba
    

    这样运行后结果输出到屏幕。因为sql语句是bash命令的參数。而整个命令行能够通过bash方便的历史记录来反复调用。又能够方便的使用上下箭头来反复使用运行过的sql语句了。

    3 利用管道做兴许处理

    既然sqlplus把结果输出到了标准输出,那么就能够借助管道,使用sed,awk等文字处理工具来得到想要的输出。

    echo -e 'set pagesize 0\nselect table_name,owner from dba_tables;' | sqlplus -S sys/***@172.16.2.190/xgdb.db001.xigang as sysdba | awk '{printf("%-10d%-30s%-20s\n",NR,$1,$2);}'
    

    4 须要注意的地方

    使用外部文件时,文件里的命令与交互式使用全然同样,无需操心。

    • 使用echo + 管道输入时,要避免 bash 元字符的干扰。一定要把sql命令使用单引號或双引號保护起来。

      当sql命令中有单引號时。应选择使用双引號保护。如

    echo  "insert into t1(name) values('奥巴马');" | sqlplus ...
    
  • 因为$在双引號里也会被当成元字符。所以须要对其进行转义

  • echo "select * from v\$nls_valid_values where parameter='LANGUAGE';" | sqlplus ...
    
  • 另外,sqlplus不同意把sqlplus指令和sql命令混合在一行使用。

    并且sql命令必须以;结尾。这样必须使用echo -e 选项来开启把”\n”解释成换行符。

    比如

  • echo -e 'set pagesize 0\nset linesize 100\nselect * from dba_objects;' | sqlplus ...
    

    5 一个简单的脚本

    上述命令行方式尽管能够方便的通过bash的历史记录功能调用运行过的sql语句,可是命令行中除了sql语句还有大量的其它内容,显得繁琐。所以。写一个小脚本(文件名称为sql)会让调用起来很方便,例如以下:

    #!/bin/bash -
    if [ $# -ne 1 ]
    thenecho "Usage: $0 'SQL statement'"
    elseSQL="set pagesize 0\nset linesize 300\n$1"echo -e "$SQL"echo -e "$SQL" | sqlplus -S sys/***@172.16.2.190/xgdb.db001.xigang as sysdba
    fi
    

    这样调用起来就像以下一样。

    sql 'select * from dba_objects;'
    

    这样显得很干净利落。并且也不会在历史命令中记下ORACLE的账户信息,相对也安全。


    非交互模式例子:
    在这里插入图片描述

    参考:
    https://www.cnblogs.com/mengfanrong/p/5367748.html

这篇关于Oracle| sqlplus的非交互式使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1045158

相关文章

vue使用docxtemplater导出word

《vue使用docxtemplater导出word》docxtemplater是一种邮件合并工具,以编程方式使用并处理条件、循环,并且可以扩展以插入任何内容,下面我们来看看如何使用docxtempl... 目录docxtemplatervue使用docxtemplater导出word安装常用语法 封装导出方

Linux换行符的使用方法详解

《Linux换行符的使用方法详解》本文介绍了Linux中常用的换行符LF及其在文件中的表示,展示了如何使用sed命令替换换行符,并列举了与换行符处理相关的Linux命令,通过代码讲解的非常详细,需要的... 目录简介检测文件中的换行符使用 cat -A 查看换行符使用 od -c 检查字符换行符格式转换将

使用Jackson进行JSON生成与解析的新手指南

《使用Jackson进行JSON生成与解析的新手指南》这篇文章主要为大家详细介绍了如何使用Jackson进行JSON生成与解析处理,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 核心依赖2. 基础用法2.1 对象转 jsON(序列化)2.2 JSON 转对象(反序列化)3.

使用Python实现快速搭建本地HTTP服务器

《使用Python实现快速搭建本地HTTP服务器》:本文主要介绍如何使用Python快速搭建本地HTTP服务器,轻松实现一键HTTP文件共享,同时结合二维码技术,让访问更简单,感兴趣的小伙伴可以了... 目录1. 概述2. 快速搭建 HTTP 文件共享服务2.1 核心思路2.2 代码实现2.3 代码解读3.

Elasticsearch 在 Java 中的使用教程

《Elasticsearch在Java中的使用教程》Elasticsearch是一个分布式搜索和分析引擎,基于ApacheLucene构建,能够实现实时数据的存储、搜索、和分析,它广泛应用于全文... 目录1. Elasticsearch 简介2. 环境准备2.1 安装 Elasticsearch2.2 J

使用C#代码在PDF文档中添加、删除和替换图片

《使用C#代码在PDF文档中添加、删除和替换图片》在当今数字化文档处理场景中,动态操作PDF文档中的图像已成为企业级应用开发的核心需求之一,本文将介绍如何在.NET平台使用C#代码在PDF文档中添加、... 目录引言用C#添加图片到PDF文档用C#删除PDF文档中的图片用C#替换PDF文档中的图片引言在当

Java中List的contains()方法的使用小结

《Java中List的contains()方法的使用小结》List的contains()方法用于检查列表中是否包含指定的元素,借助equals()方法进行判断,下面就来介绍Java中List的c... 目录详细展开1. 方法签名2. 工作原理3. 使用示例4. 注意事项总结结论:List 的 contain

C#使用SQLite进行大数据量高效处理的代码示例

《C#使用SQLite进行大数据量高效处理的代码示例》在软件开发中,高效处理大数据量是一个常见且具有挑战性的任务,SQLite因其零配置、嵌入式、跨平台的特性,成为许多开发者的首选数据库,本文将深入探... 目录前言准备工作数据实体核心技术批量插入:从乌龟到猎豹的蜕变分页查询:加载百万数据异步处理:拒绝界面

Android中Dialog的使用详解

《Android中Dialog的使用详解》Dialog(对话框)是Android中常用的UI组件,用于临时显示重要信息或获取用户输入,本文给大家介绍Android中Dialog的使用,感兴趣的朋友一起... 目录android中Dialog的使用详解1. 基本Dialog类型1.1 AlertDialog(

Python使用自带的base64库进行base64编码和解码

《Python使用自带的base64库进行base64编码和解码》在Python中,处理数据的编码和解码是数据传输和存储中非常普遍的需求,其中,Base64是一种常用的编码方案,本文我将详细介绍如何使... 目录引言使用python的base64库进行编码和解码编码函数解码函数Base64编码的应用场景注意