关于Linux脚本中调用达梦数据库disql执行SQL或SQL脚本的方法
本文于 322 天前发布,最后更新于 141 天前

一、前言

在Linux操作系统下使用shell脚本调用disql执行SQL或SQL脚本,是我们使用数据库一定会遇到的问题。有时需要直接执行SQL,有时需要执行SQL脚本,有时可以从dmdba用户调用,有时必须从root用户调用,总之,具体的情况不尽相同。本文就来详细介绍一下这些不同方式的具体方法。

二、详细教程

2.1 dmdba下操作

2.1.1 disql直接执行SQL

disql / as sysdba -e "select * from v\$instance;"

注意:“$”需要进行转义

2.1.2 disql执行SQL脚本

disql / as sysdba \`/home/dmdba/select.sql

注意:脚本中要加上 exit; 和 /。并且以SQL脚本的方式执行时“$”不需要转义,例如:

[dmdba@shine ~]$ cat select.sql 
select * from v$instance;
exit;
/

2.2 root用户下操作

2.2.1 disql直接执行SQL

su - dmdba -c "disql / as sysdba -e \"select * from v\\\$instance;\""

注意:从root直接调用的话,SQL中的“$”需要转义,同时转义符“\”本身也需要转义(所以加三个“\”)。

2.2.2 disql执行SQL脚本

su - dmdba -c "disql / as sysdba \\\`/home/dmdba/select.sql"

注意:同上,从root直接调用的话,“\`”同时需要转义,即“\\\`”。

2.2.3 切换dmdba用户执行shell脚本

su - dmdba -s /bin/bash select.sh

注意:select.sh要放到/home/dmdba目录下,内容如下:

disql / as sysdba -e "select * from v\$instance;"

脚本内容即 2.1.1 的命令。

三、进阶教程

有时我们在调用disql执行SQL时需要将内容输出到文件并保存,那么就需要用到如下的功能。

(1)重定向到文件

只需要在命令后边加上 > your_file.txt。

(2)隐藏disql连接数据库时的输出内容

disql -S

注意:disql的-S参数是隐藏标识符,需要在登录之前配置,所以-S参数要放到 / as sysdba 之前,例如:disql -S / as sysdba。【disql -S /@localhost:5235 as sysdba】

(3)查询时只要表头和数据

如图这张表,如果只需要将表头和数据重定向文本文件中,应该如何操作:

方法:-S+-C([pages]环境变量)

## 注:把pages的数值设置的比结果集的行数大,便可以把所有的数据放到一页中(示例中30>21)。
[dmdba@dameng ~]$ disql -S SYSDBA/'"Dameng@!23"' -C "set pages 30" -E "select * from test.course" > result.txt
[dmdba@dameng ~]$ cat result.txt 

COURSE_ID   COURSE_NAME                    COURSE_TYPE CREDITS TEACHER_ID  CLASSROOM COURSE_STATUS
----------- ------------------------------ ----------- ------- ----------- --------- -------------
1           计算机科学导论          3           6       6           209       1
2           数据结构与算法          3           3       5           107       3
3           软件工程实践             2           4       15          309       1
4           人工智能基础             2           7       3           207       2
5           数据库系统原理​       1           6       7           205       2
6           高等数学Ⅰ                1           5       13          109       3
7           概率论与数理统计       1           3       17          105       3
8           应用数学建模​​​    2           4       7           306       1
9           大学物理实验             3           9       2           202       3
10          量子物理前沿​​​​ 1           5       8           301       3
11          世界文学经典             3           8       20          404       1
12          中国近代史研究          2           9       9           309       3
13          西方哲学史​​​​    2           8       2           204       2
14          电路分析基础             1           1       17          406       2
15          机械设计原理             3           7       8           407       1
16          土木工程材料学          1           3       16          304       2
17          ​​微观经济学          3           5       8           107       1
18          公司财务管理             1           4       12          102       2
19          数字营销策略             1           5       17          208       3
20          ​​​​设计思维导论 3           6       7           307       1
21          建筑空间设计             3           6       8           105       3

四、配置文件设置环境变量

把需要添加的环境变量添加到文件$DM_HOME/bin/disql_conf/glogin.sql文件中

[dmdba@dameng ~]$ cat $DM_HOME/bin/disql_conf/glogin.sql 
SET ECHO OFF
SET HEA OFF
SET NEWPAGE NONE
SET FEED OFF
SET TIMING OFF

这样再使用disql时便会自动应用glogin.sql文件中的环境变量。

附录 disql常用环境变量

用 SET 命令设置环境变量,格式:set [变量名称] on|off,例如:

[dmdba@dameng ~]$ disql SYSDBA/'"******"' -C "set hea off newpage none" -e "select table_name from dba_tables where owner = 'TEST';"

服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间 : 101.915(ms)
disql V8
COURSE
FINAL_CALCULATION
GRADED_STUDENTS
GRADE_RANGES
RANKED_STUDENTS
SALES
STUDENT
STUDENT_SCORES
TEACHER
TEST
变量名称 属性 用途
AUTO[COMMIT] ON|OFF (缺省值) 设置自动提交
DEFINE c(默认的变量前缀是&)|ON (缺省 值)|OFF 定义本地变量
ECHO ON (缺省值)|OFF 显示脚本中正在执行的 SQL 语句
FEED[BACK] 6 (缺省值)|n|ON|OFF 显示当前 SQL 语句查询或修改的行数
HEA[DING] ON (缺省值)|OFF 显示列标题
LINESHOW ON (缺省值)|OFF 显示行号
PAGES[IZE] SET PAGES[IZE] <14(缺省值)|n> 设置一页有多少行数。
TIMING ON (缺省值)|OFF 显示每个 SQL 语句花费的执行时间
LONG 800(缺省值)|n 设置大字段类型显示的最大字节数
LINESIZE screem_length(缺省值,屏幕宽度)|n 设置屏幕上一行显示宽度
SERVEROUT[PUT] ON | OFF(缺省值)
[SIZE 20000(缺省值)|n]
[FOR[MAT] WRA[PPED]
| WOR[D_WRAPPED](缺省值)
| TRU[NCATED]]
在块中有打印信息时,是否打印,及打印的格式
TRIMS[POOL] OFF(缺省值)|ON 设置 spool 文件中每行的结尾空格
COLSEP text 设置列之间的分割符。缺省为一个空格
暂无评论

发送评论 编辑评论


|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇