shell中怎么获取存储过程的输出参数给变量

shell中怎么获取存储过程的输出参数给变量,第1张

#下面的代码是对于从oracle的sqlplus返回变量值给shell的例子

output=`sqlplus -s unitele/lemontea <<EOF

set heading off feedback off verify off

drop function test_get_param_value_p

CREATE OR REPLACE function test_get_param_value_p

(

is_citycode in varchar2

)

return varchar2

is

on_value varchar2(100)

begin

on_value :='100000'

dbms_output.put_line(on_value)

dbms_output.put_line(is_citycode)

return on_value

end

/

select test_get_param_value_p('501') from dual

exit

EOF

`

echo "Oracle的输出变量值:"$output

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++=

存储过程 myproc(in_num in number,out_num out number)

sql脚本模板

先编辑一个mysql.sql文件,内容如下:

------------

var nret number

execute :nret := 0--初始化

call myproc(in_code,:nret)--执行存储过程,in_code会被替换掉

/

select 'retcode[' || :nret || ']retcode' from dual--显示结果

/

quit

-------------

SHELL脚本mysh.sh,内容如下

-------------

#./mysh.sh 123

cd /home/myshell

sed "s/in_code/$1/" mysql.sql >mysql01.sql

#根据sql脚本模板生成实际脚本

sqlplus usr/pwd@db result$1.txt

#执行sql脚本并把结果输入result$1.txt

echo ok!

-------------

在LINUX下执行./mysh.sh 123,生成result123.txt,myproc输出参数在'retcode['和']retcode'之间。

本文介绍 MySQL 8.0 shell 子模块 Util 的两个导入特性 importTable/import_table(JS和python 版本的命名差异)、importJson/import_json的使用方法。

其中 import_table 是通过传统 MySQL 协议来通信,Import_json 是通过 X 插件协议来通信。MySQL 一直以来提供导入文件 SQL 命令 load data infile(单线程)以及对应的可执行文件 mysqlimport(多线程)。

比如我导入 100W 行示例数据到表 ytt.tl1,花了 24 秒。这个已经是 MySQL 默认导入来的最快的。分析那我们现在看下 mysqlimport 工具的升级版,mysqlshell 的 util 工具集。

使用这两个工具之前,必须得临时开启 local_infile 选项。1. import_table建立 3306 端口的新连接我这里切换为 python 模式清空掉示例表 Ytt.tl1import_table 有两个参数,第一个参数定义导入文件的路径,第二个定义相关选项,比如导入的格式,并发的数量等。定义文件路径(参数1)定义选项(参数2)执行导入:只花了不到 17 秒,比传统 mysqlimport 快了不少。

我们上面指定了显式指定了字段分隔符,那有没有已经定义好的组合格式呢? 答案是有的,选项 dialect 可以指定以下格式:csv,tsv,json,csv-unix那么上面的导入,我们可以更简单,改下变量 y_options1 的定义导入时间差不多。这里要说明下,dialect 选项的优先级比较低,比如添加了'linesTerminatedBy':'\r\n', 则覆盖他自己的'\n'。

选项 diaelect 还有一个可选值为 json,可以直接把 json 结果导入到文档表里。比如我新建一张表 tl1_json重新定义文件以及导入选项。导入 JSON 数据速度也还可以,不到 24 秒。那导入 json 数据,就必须得提到以 X 插件协议通信的工具 import_json了。2. imort_json我们切换到 mysqlx 端口import_json 参数和 Import_table 参数类似,这里我改下选项我在手册上没有看到多线程的选项,所以单线程跑 35 秒慢了些。查看刚刚导入的数据import_json 不仅仅可以导入 Json 数据,更重要的是可以在 BSON 和 JSON 之间平滑的转换,有兴趣的同学可以去 TRY 下。

若要将大量的数据值插入到数据库的一个或多个表中,使用insert into语句来实现将是一项无聊的工作。

1、LOAD DATA通过读取本地文件系统上的文件,可以将大量数据添加到数据库中。

mysql>LOAD DATA INFILE ‘datafile.txt’ INTO TABLE db2.table_name

mysql>LOAD DATA INFILE ‘datafile.txt’ INTO TABLE db2.table_name FIELDS TERMINATED BY ‘,’ OPTIONALLY ENCLOSED BY ‘”‘

mysql>load data infile “file.txt” into table table_name fields terminated by ‘\t’ (sid,name)

2、还有一个mysqlimport命令可以批量增加,mysqlimport直接从文件读取批量数据。它相当于LOAD DATA语句的一个接口。

mysqlimport可以自动生成一个LOAD DATA语句,该语句把filename.txt文件中的数据装入table_name表中。

mysqlimport根据文件名导入表名,即将文件名第一个圆点前的所有字符作为表名。例如,文件class.txt被装入class表中。

例如:

mysqlimport -L -uroot -proot db01 table_name.txt;

mysqlimport -local table_name filename.txt;

3、datafile.txt内容:

“1”,”a string”,”100.20″

“2”,”a string containing a , comma”,”102.20″

“3”,”a string containing a \” quote”,”102.20″

“4”,”a string containing a \”, quote and comma”,”102.20″

4、假如你有x表,导入了一个y表,将y表数据插入x表:

insert into x select * from y


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/6095432.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-14
下一篇 2023-03-14

发表评论

登录后才能评论

评论列表(0条)

保存