shell SQL 变量 Oracle shell调用SQL操作DB
注意 :
v\\\$ 用法, “v\\\$session ” ""不能用
sqlplus -S / as sysdba << EOF
set pagesize 0
set verify off
set feedback off
set echo off
col coun new_value v_coun
select count(*) coun from dual;
EOF
value="$?"VALUE=`sqlplus -s / as sysdba <<EOFset pagesize 0 feedback off verify off heading off echo off numwidth 5select count(*) from v\\\$session;exit;
EOF`if [ "$VALUE" -gt 0 ]
thenecho "The number of rows is $VALUE."elseecho "There is no row in the table."
fi
if [ $value == 0 ];
then
echo "222222222"
else
echo "1111111111"
fi
Oracle shell调用SQL操作DB
操作Oracle数据库可以使用sqlplus连接数据库之后,再交互式的使用数据库。另一种非交互的方式就是通过shell直接执行sql命令,可以直接在shell CLI端口执行命令,或者是通过shell脚本的方式。从sql命令的输入方式上,这种非交互的方式又可以分为两种,一种是命令行直接输入,另一种是sql文件输入。
1. 命令行直接输入方式这种方式就是把要执行的命令直接传给sqlplus,-S是指silent模式。注意此处的反斜杠转义。
sqlplus -S '/ as sysdba' << EOF
set pagesize 0 feedback off verify off heading off echo off
SELECT value FROM v\$parameter WHERE name = 'background_dump_dest';
exit
EOF
使用脚本的话,如下所示,注意反斜杠。
if test $# -lt 1thenecho You must pass a SIDexit
fiORACLE_SID=$1; export ORACLE_SID
DUMP_DIR=`sqlplus -S '/ as sysdba' << EOF
set pagesize 0 feedback off verify off heading off echo off
SELECT value FROM v\\$parameter WHERE name = 'background_dump_dest';
exit
EOF`echo ${DUMP_DIR}2. 通过文件输入方式这种方式是先把sql语句存储在一个文件中,这时就不需要反斜杠了,而且输入文件必须要以.sql为后缀。
[oracle@node ~]$ cat /tmp/sqllines.sql
set pagesize 0 feedback off verify off heading off echo off
SELECT value FROM v$parameter WHERE name = 'background_dump_dest';
exit[oracle@node ~]$ sqlplus -s "/ as sysdba" @/tmp/sqllines
/u01/app/oracle/diag/rdbms/live/live/trace
这种方式同样可以写成一个shell脚本。
[oracle@node ~]$ cat /tmp/sql
if test $# -lt 1thenecho You must pass a SIDexit
fiORACLE_SID=$1; export ORACLE_SID
echo "
set pagesize 0 feedback off verify off heading off echo off
SELECT value FROM v\$parameter WHERE name = 'background_dump_dest';
exit
">/tmp/plsql_scr.sql# --------------------------------
# Execute plsql script
# --------------------------------if [ -s /tmp/plsql_scr.sql ]; thenecho -e "Running SQL script to find out bdump directory... \n"$ORACLE_HOME/bin/sqlplus -s "/ as sysdba" @/tmp/plsql_scr.sql >/tmp/plsql_scr_result.log
fiecho " Check the reslut "
echo "------------------------"
cat /tmp/plsql_scr_result.logexit
sqlplus -s / as sysdba <<eof
@test.sql
EOF第二个EOF前面有没有exit效果都一样。 也就是说缺省就是exit
test.sql里最后加不加commit效果都一样,exit缺省的时候就是提交(这个可以控制)test.sql 名字如果是带空格t est.sql,怎么办?
(下面是好多sql文件进行遍历)
【1】
cat database.sh
ls *sql | while read line;do
sqlplus -s / as sydsba <<eof
@"$line"
EOF【2】
cat database.sh
for line in `ls *sql` ;do
sqlplus -s / as sydsba <<eof
@"$line"
EOF
done用while循环,而不用for in 是因为如果文件名有空格,ls *sql出来以后,line取值是按照空格或者换行符作为间隔符号,
所以一个文件名会被空格分成为2个值使用;而用while read 则是只按照换行符作为间隔符号,所以一个文件名不会被分割。这就是这两种方式的区别。下面的sqlplus 下面执行@"line",变量line需要加双引号,防止文件名被空格分割解析sqlplus 的两种方式对比对比:
【1】
#cat test.sql
insert into test values(sysdate);
commit;#cat database.sh
ls *sql | while read line;do
sqlplus -s / as sydsba <<eof
@"$line"
EOF上面的exit退出动作是由EOF完成的【2】
#cat test.sql
insert into test values(sysdate);
commit;
exit;#cat database.sh
ls *sql | while read line;do
sqlplus -s / as sydsba @"$line"
上面的exit退出动作,只能在test.sql中完成。
在这种情况下如果不在test.sql中加exit,那么循环会在第一次sqlplus 执行的时候阻塞,直到被手工处理以后,才能进入到下一次循环。
如果当前服务器安装的有oracle数据库,配置环境变量后可以直接使用sqlplus,如果没有则需要安装客户端和sqlplus包。shell脚本中通过sqlplus -S dbuser/dbpass@host/dbname连接上数据库后,一般所做的操作就是在脚本中下载表中的数据到本地或者是在脚本中调用oracle存储过程,再通过crontab启动定时任务调用shell脚本去跑数据,下文将详细介绍这两种的使用方法:sqlplus常用参数设置
set feedback off; --回显本次sql命令处理的记录条数,缺省为onset verify off; --是否显示替代变量被替代前后的语句set heading off; --是否显示字段的名称set echo off; --显示sqlplus中的每个sql命令本身,缺省为onset pagesize 0; --输出每页行数,缺省为24(每24行产生一个空行),为了避免分页,设定为0set linesize 200; --可以设置的大点,防止一行长度不够set trimspool on; --去除重定向(spool)输出每行的拖尾空格,缺省为offset colsep ','; --设置分隔符为逗号,这样csv文件里才不会冗余到一个单元格里spool用法
spool是sqlplus中用来保存或打印查询结果,主要把sql查询结果保存到本地文件中,格式为:spool 文件路径 参数(参数可省略,不添加参数默认为replace)参数为:create: 创建指定文件名的新文件;如指定文件存在,则报文件存在错误
replace:如果指定文件存在则覆盖替换;不存在,则创建,replace为spool默认选项
append:向指定文件名中追加内容;如指定文件不存在,则创建
用法:spool /opt/proc_log/table_name.csv appendsql查询脚本spool offshell脚本连接sqlplus,导出数据库里的数据到本地
举例导出文件为csv文件,其它文件一样方法一:设置分隔符set colsep ',',表字段之间以逗号为分隔符
#!/bin/bash
source ~/.bash_profile#设置ORACLE的相关环境,如果在bash_profile已经添加了环境变量,不需要再添加以下两行
export ORACLE_HOME=/安装路径下的/oracle/product/11.2.0/db_1
export PATH=$PATH:$ORACLE_HOME/bindbuser=appuser
dbpass=$(echo "VGVzdDIwMjJfcHcK"|base64 -d)
dbinfo=192.168.23.01/orcl#定义变量存放返回信息,避免回显
msg=`
#通过sqlplus连接数据库
sqlplus -S $dbuser/$dbpass@$dbinfo << eof
#设置分隔符set colsep ',';set pagesize 0;set trimspool on;set linesize 200;set feedback off;set verify off;set heading on;set echo off;
#打印数据到csv文件spool /opt/proc_log/table_name.csv
#spool无法打印字段名,特添加此操作在文件中增加字段名称select 'TABLE_ID'||','||'TABLE_NAME'||','||'TMP_TABLE_NAME'||','||'LOAD_MODE'||','||'EFFECTIVE_DATE'||','||'EXPIRY_DATE'||','||'MD5_TABLE_NAME'from dual;
#查询sqlselect * from Table_List;
#关闭打印spool off
#退出exit;
eof
`
exit 0
方法二:采用拼接手工控制输出格式,可以对各种字段进行预处理,常使用该方法
#!/bin/bash
source ~/.bash_profile#设置ORACLE的相关环境,如果在bash_profile已经添加了环境变量,不需要再添加以下两行
export ORACLE_HOME=/安装路径下的/oracle/product/11.2.0/db_1
export PATH=$PATH:$ORACLE_HOME/bindbuser=appuser
dbpass=$(echo "VGVzdDIwMjJfcHcK"|base64 -d)
dbinfo=192.168.23.01/orclmsg=`
sqlplus -S $dbuser/$dbpass@$dbinfo << eofset pagesize 0;set trimspool on;set linesize 200;set feedback off;set verify off;set heading on;set echo off;spool /opt/proc_log/table_name.csvselect 'TABLE_ID'||','||'TABLE_NAME'||','||'TMP_TABLE_NAME'||','||'LOAD_MODE'||','||'EFFECTIVE_DATE'||','||'EXPIRY_DATE'||','||'MD5_TABLE_NAME'from dual;select TABLE_ID||','||TABLE_NAME||','||TMP_TABLE_NAME||','||LOAD_MODE||','||EFFECTIVE_DATE||','||EXPIRY_DATE||','||MD5_TABLE_NAME from Table_List;spool offexit;
eof
`
exit 0
shell脚本连接sqlplus,调用存储过程抓取返回值
#!/bin/bash
source ~/.bash_profile#设置ORACLE的相关环境,如果在bash_profile已经添加了环境变量,不需要再添加以下两行
export ORACLE_HOME=/安装路径下的/oracle/product/11.2.0/db_1
export PATH=$PATH:$ORACLE_HOME/bindayno=date +%Y-%m-%d
dbuser=appuser
dbpass=$(echo "VGVzdDIwMjJfcHcK"|base64 -d)
dbinfo=192.168.23.01/orclmsg=`
sqlplus -S $dbuser/$dbpass@$dbinfo <<eofset feedback off;set verify off;set heading off;set echo off;
#定义存储过程返回值var vo_code number;
#定义存储过程返回信息var vo_msg varchar2(400);
#调用存储过程,使用变量获取返回信息call procname($dayno, :vo_code, :vo_msg);
#返回存储过程代码给msgselect :vo_code from dual;exit;
eof
`
echo ${msg}
exit 0
相关文章:
shell SQL 变量 Oracle shell调用SQL操作DB
注意 : v\\\$ 用法, “v\\\$session ” ""不能用 sqlplus -S / as sysdba << EOF set pagesize 0 set verify off set feedback off set echo off col coun new_value v_coun select count(*) coun from dual; EOF value"$?"VALUE…...
【校招VIP】java线程池考点之核心线程数
考点介绍: 线程池是这一两年java大厂提问频度飙升的考点,需要从池子的概念理解相关参数和方法 java线程池考点之核心线程数-相关题目及解析内容可点击文章末尾链接查看! 一、考点试题 1、请列举一下启动线程有哪几种方式,之后再…...
[每周一更]-(第61期):Rust入门策略(持续更新)
一门语言的学习,就要从最基本的语法开始认识,再分析不同语言的区别,再加上实战,才能更快的学会,领悟到作者的设计思想; 介绍 Rust编程练习 开发工具VSCode及插件 社区驱动的 rust-analyzerEven Better T…...
线程安全问题的原因及解决方案
要想知道线程安全问题的原因及解决方案,首先得知道什么是线程安全,想给出一个线程安全的确切定义是复杂的,但我们可以这样认为:如果多线程环境下代码运行的结果是符合我们预期的,即在单线程环境应该的结果,…...
基于matlab中点放炮各类地震波时距曲线程序
完整程序: clear all dx50;x-500:dx:500;%炮检距 h100;V11500; theta25*pi/180; V2V1/sin(theta); t1sqrt(x.*x4*h*h)/V1;%反射波时距曲线 t2abs(x)./V1;%直达波时距曲线 %折射波时距曲线 xm2*h*tan(theta);%求盲区 k1; for i1:length(x) if x(i)<-xm …...
vue中el-dialog 中的内容没有预先加载,因此无法获得内部元素的ref 的解决方案 使用强制提前加载dialog方法
问题描述 在没有进行任何操作的时候,使用 this.$refs.xxxx 无法获取el-dialog中的内部元素,这个问题会导致很多bug,其中目前网络上也有许多关于这个问题的解决方案,但是大多数是使用el-dialog中的open在dialog打开的时候使用thi…...
vue-h5移动Web的rem配置
H5移动的适配方案 rem rem适配方案是兼容性比较好的移动端适配方案,rem支持大部分的移动端系统和机型。 rem是相对于根元素的字体大小的单位。本质上就是一个相对单位,和em的区别是:em是依赖父元素的字体来计算,rem是依赖根元素…...
企业级数据仓库-数仓实战
数仓实战 安装包大小 安装清单 环境搭建 一、环境搭建01(机器准备) 准备好三台虚拟机,并进行修改hostname、在hosts文件增加ip地址和主机名映射 。 1、设置每个虚拟机的hostname vi /etc/sysconfig/network 修改HOSTNAMEnode02修改hostna…...
Spring Boot 下载文件(word/excel等)文件名中文乱码问题|构建打包不存在模版文件(templates等)
Spring Boot 下载文件(word/excel等)文件名中文乱码问题|构建打包不存在模版文件(templates等) 准备文件,这里我放在resource下的templates路径 在pom中配置构建打包的资源,更新maven 如果使用了assembly打包插件这样配置可能仍不生效&#…...
Ansible数组同步至Shell脚本数组中
1、ansible中定义数组,我以 ccaPojectList 数组为例子,如下图数组内容 2、需要写一个j2模板的Shell脚本,在j2模板的Shell脚本中引用ansible的 ccaPojectList 数组,大致如下图: {% for item in ccaPojectList %} "{{ item }…...
私域流量的优势
私域流量是指由自身品牌或个人拥有并具备完全掌控权的流量资源。它相比于传统的广告推广,拥有独特的优势。 首先,私域流量能够更加精准地定位目标用户,实现精准传播。不再盲目投放广告,而是通过建立自身社群、粉丝群,获…...
Java 中“1000==1000”为false,而”100==100“为true?
如果你运行下面的代码: Integer a 1000, b 1000; System.out.println(a b);//1Integer c 100, d 100; System.out.println(c d);//2你会得到: false true基本知识:我们知道,如果两个引用指向同一个对象,用表示它们是相等的。如果两…...
片上网络(1)概述
前言 NoC:On-Chip Networks,片上网络。 由于多核乃至众核时代的到来,用于连接它们的可扩展、低延迟、大带宽的通信结构变得至关重要。 在核心较少时,总线Bus和矩阵/交叉开关Crossbar是主要的互联结构。总线可以提供较低的传输延迟…...
使用 React Native 针对 Android 进行开发
🎬 岸边的风:个人主页 🔥 个人专栏 :《 VUE 》 《 javaScript 》 ⛺️ 生活的理想,就是为了理想的生活 ! 目录 概述 通过安装所需工具开始使用 React Native 创建新的 React Native 项目 本指南将有助于开始使用 Windows 上的…...
LeetCode 每日一题 2023/9/11-2023/9/17
记录了初步解题思路 以及本地实现代码;并不一定为最优 也希望大家能一起探讨 一起进步 目录 9/11 630. 课程表 III9/12 1462. 课程表 IV9/13 2596. 检查骑士巡视方案9/14 1222. 可以攻击国王的皇后9/15 LCP 50. 宝石补给9/16 198. 打家劫舍9/17 9/11 630. 课程表 II…...
Linux系统调试篇——GDBSERVER远程调试
文章目录 安装 GDBSERVERgdbserver 用法具体步骤 本篇讲解如何使用gdbserver对目标开发板上的程序进行远程调试。 安装 GDBSERVER 首先在开发板上安装 gdbserver: apt install gdbservergdbserver 用法 gdbserver用法描述: Usage: gdbserver [OPTION…...
前端实现打字效果
前端实现打字效果 不带光标 只一次播放 HTML <!-- 需要在初始化的时候不显示文字 --> <div id"typing"></div>CSS #typing {position: relative;font-size: 24px;font-family: Arial, sans-serif;padding: 10px; }JS const text "要显…...
Unix和Linux、GNU和GPL、RHEL和Centos、Debian和Ubuntu
文章目录 Unix和LinuxGNU和GPLGNU/Linux名称的来源RHEL和CentosDebian和Ubuntu 以上都是操作系统,服务器操作系统、桌面操作系统。 对于刚刚接触Linux系统或者从事运维相关工作的人来说,肯定会听过很多名词,但是不知道他们的区别和联系&#…...
InfiniBand vs 光纤通道,存储协议的选择
数字时代,数据量爆发增长,企业越来越迫切地追求高吞吐量、低延迟和更高性能的网络基础设施,存储协议的选择变得愈发至关重要。在众多存储协议中,InfiniBand和光纤通道备受关注。本文旨在深入探讨InfiniBand和光纤通道作为存储协议…...
第2章_freeRTOS入门与工程实践之单片机程序设计模式
本教程基于韦东山百问网出的 DShanMCU-F103开发板 进行编写,需要的同学可以在这里获取: https://item.taobao.com/item.htm?id724601559592 配套资料获取:https://rtos.100ask.net/zh/freeRTOS/DShanMCU-F103 freeRTOS系列教程之freeRTOS入…...
wordpress后台更新后 前端没变化的解决方法
使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…...
线程与协程
1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指:像函数调用/返回一样轻量地完成任务切换。 举例说明: 当你在程序中写一个函数调用: funcA() 然后 funcA 执行完后返回&…...
抖音增长新引擎:品融电商,一站式全案代运营领跑者
抖音增长新引擎:品融电商,一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中,品牌如何破浪前行?自建团队成本高、效果难控;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...
江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命
在华东塑料包装行业面临限塑令深度调整的背景下,江苏艾立泰以一场跨国资源接力的创新实践,重新定义了绿色供应链的边界。 跨国回收网络:废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点,将海外废弃包装箱通过标准…...
PL0语法,分析器实现!
简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...
3-11单元格区域边界定位(End属性)学习笔记
返回一个Range 对象,只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意:它移动的位置必须是相连的有内容的单元格…...
20个超级好用的 CSS 动画库
分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码,而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库,可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画,可以包含在你的网页或应用项目中。 3.An…...
[ACTF2020 新生赛]Include 1(php://filter伪协议)
题目 做法 启动靶机,点进去 点进去 查看URL,有 ?fileflag.php说明存在文件包含,原理是php://filter 协议 当它与包含函数结合时,php://filter流会被当作php文件执行。 用php://filter加编码,能让PHP把文件内容…...
Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement
Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement 1. LAB环境2. L2公告策略2.1 部署Death Star2.2 访问服务2.3 部署L2公告策略2.4 服务宣告 3. 可视化 ARP 流量3.1 部署新服务3.2 准备可视化3.3 再次请求 4. 自动IPAM4.1 IPAM Pool4.2 …...
【FTP】ftp文件传输会丢包吗?批量几百个文件传输,有一些文件没有传输完整,如何解决?
FTP(File Transfer Protocol)本身是一个基于 TCP 的协议,理论上不会丢包。但 FTP 文件传输过程中仍可能出现文件不完整、丢失或损坏的情况,主要原因包括: ✅ 一、FTP传输可能“丢包”或文件不完整的原因 原因描述网络…...
