在Golang中执行SQL Plus命令

时间:2018-05-02 04:25:43

标签: go sqlplus

我需要在Golang中使用Sql Plus运行.sql文件,它会创建一个名为tb_data_20180502104923.sql的表和一个文件。我将.sql脚本命名为set headsep off set pagesize 0 set trimspool on set trimout on create table tb_data_20180502104923 as select * from tb_data; spool tb_data_20180502104923.txt SELECT data_id||';'||data_content FROM tb_data_20180502104923; spool off ,内容如下:

os/exec

我在func main(){ cmd := exec.Command("sqlplus -s admin/123#@172.10.1.211:1521/orcl < tb_data_20180502104923.sql") var out, stderr bytes.Buffer cmd.Stdout = &out cmd.Stderr = &stderr err := cmd.Run() if err != nil { log.Fatalf("Error executing query. Command Output: %+v\n: %+v, %v", out.String(), stderr.String(), err) } } 这样试过这个:

2018/05/02 11:06:46 Error executing query. Command Output: 
: , fork/exec sqlplus -s admin/123#@172.10.1.1:1521/orcl < tb_data_20180502104923.sql: no such file or directory
exit status 1

其中返回一条错误消息:

cmd := exec.Command

如果我将cmd := exec.Command("sqlplus", "-s", "admin/123#@172.10.1.211:1521/orcl", "< tb_data_20180502104923.sql") 语句更改为:

tb_data_20180502104923

它没有给我任何回报,无论是tabel还是文件import numpy as np import matplotlib.pyplot as plt import pandas as pd from sklearn.cross_validation import train_test_split 未创建。

我在哪里做错了,或者在Golang中无法使用Sql Plus?如果不可能,还有其他办法可以做我需要的吗?

1 个答案:

答案 0 :(得分:0)

好吧,没关系,看起来只是我对如何使用os/exec的理解不足。

所以如果有人不知道如何使用它,请在这里解决我自己的问题。

我改变了

cmd := exec.Command("sqlplus", "-s", "admin/123#@172.10.1.211:1521/orcl", "< tb_data_20180502104923.sql")

cmd := exec.Command("bash", "-c", "sqlplus -s admin/123#@172.10.1.211:1521/orcl < tb_data_20180502104923.sql")

第一个参数bash是您要使用的Shell类型,

第二个参数-cbash的参数,

,第三个参数是我想要执行的command

好吧,如果我错了,请纠正我。