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

相关文章

Java使用jar命令配置服务器端口的完整指南

《Java使用jar命令配置服务器端口的完整指南》本文将详细介绍如何使用java-jar命令启动应用,并重点讲解如何配置服务器端口,同时提供一个实用的Web工具来简化这一过程,希望对大家有所帮助... 目录1. Java Jar文件简介1.1 什么是Jar文件1.2 创建可执行Jar文件2. 使用java

C#使用Spire.Doc for .NET实现HTML转Word的高效方案

《C#使用Spire.Docfor.NET实现HTML转Word的高效方案》在Web开发中,HTML内容的生成与处理是高频需求,然而,当用户需要将HTML页面或动态生成的HTML字符串转换为Wor... 目录引言一、html转Word的典型场景与挑战二、用 Spire.Doc 实现 HTML 转 Word1

Java中的抽象类与abstract 关键字使用详解

《Java中的抽象类与abstract关键字使用详解》:本文主要介绍Java中的抽象类与abstract关键字使用详解,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、抽象类的概念二、使用 abstract2.1 修饰类 => 抽象类2.2 修饰方法 => 抽象方法,没有

MyBatis ParameterHandler的具体使用

《MyBatisParameterHandler的具体使用》本文主要介绍了MyBatisParameterHandler的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参... 目录一、概述二、源码1 关键属性2.setParameters3.TypeHandler1.TypeHa

Spring 中的切面与事务结合使用完整示例

《Spring中的切面与事务结合使用完整示例》本文给大家介绍Spring中的切面与事务结合使用完整示例,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考... 目录 一、前置知识:Spring AOP 与 事务的关系 事务本质上就是一个“切面”二、核心组件三、完

使用docker搭建嵌入式Linux开发环境

《使用docker搭建嵌入式Linux开发环境》本文主要介绍了使用docker搭建嵌入式Linux开发环境,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录1、前言2、安装docker3、编写容器管理脚本4、创建容器1、前言在日常开发全志、rk等不同

使用Python实现Word文档的自动化对比方案

《使用Python实现Word文档的自动化对比方案》我们经常需要比较两个Word文档的版本差异,无论是合同修订、论文修改还是代码文档更新,人工比对不仅效率低下,还容易遗漏关键改动,下面通过一个实际案例... 目录引言一、使用python-docx库解析文档结构二、使用difflib进行差异比对三、高级对比方

sky-take-out项目中Redis的使用示例详解

《sky-take-out项目中Redis的使用示例详解》SpringCache是Spring的缓存抽象层,通过注解简化缓存管理,支持Redis等提供者,适用于方法结果缓存、更新和删除操作,但无法实现... 目录Spring Cache主要特性核心注解1.@Cacheable2.@CachePut3.@Ca

C#下Newtonsoft.Json的具体使用

《C#下Newtonsoft.Json的具体使用》Newtonsoft.Json是一个非常流行的C#JSON序列化和反序列化库,它可以方便地将C#对象转换为JSON格式,或者将JSON数据解析为C#对... 目录安装 Newtonsoft.json基本用法1. 序列化 C# 对象为 JSON2. 反序列化

RabbitMQ 延时队列插件安装与使用示例详解(基于 Delayed Message Plugin)

《RabbitMQ延时队列插件安装与使用示例详解(基于DelayedMessagePlugin)》本文详解RabbitMQ通过安装rabbitmq_delayed_message_exchan... 目录 一、什么是 RabbitMQ 延时队列? 二、安装前准备✅ RabbitMQ 环境要求 三、安装延时队