2009-10-28 85 views
39

是否可以这样做?来自命令行的sqlplus语句

$ sqlplus -s user/pass "select 1 from dual"
$ echo "select 1 from dual" | sqlplus -s user/pass

我知道我可以把select 1 from dual在文件中,这样做:
$ sqlplus -s user/pass @myFile.sql

,但我想知道如果它实际上需要创建一个文件只是为了满足sqlplus

+1

可能的重复 - http://stackoverflow.com/questions/638705/how-can-i-issue-a-single-command-from-the-command-line-through-sql-plus – vapcguy 2016-06-07 21:30:34

回答

45

只要知道在Unix/Linux上,任何可以运行“ps -ef”命令的用户都可以看到你的用户名/密码,如果直接将它放在命令行上。可能是一个很大的安全问题(或者变成一个很大的安全问题)。

我通常建议创建一个文件或使用here文档,以便在Unix/Linux中使用“ps -ef”命令保护用户名/密码不被查看。如果用户名/密码包含在脚本文件或sql文件中,则可以使用适当的用户/组读取权限进行保护。然后,你可以保留用户/像这样的文件中通过在shell脚本:

sqlplus -s /nolog <<EOF 
connect user/pass 
select blah; 
quit 
EOF 
+0

并非总是如此,这取决于Oracle的版本和操作系统,但可能是一个很好的标准遵循 – dpbradley 2009-10-29 13:02:26

+0

太糟糕了heredoc's在DOS中不容易http://stackoverflow.com/questions/1015163/heredoc- for windows-batch – rogerdpack 2015-02-18 20:54:01

+0

奇怪的是,为什么命令行泄漏并不是简单地在sql客户端程序本身中处理的,因为这样做很简单:在main()函数中,将命令行参数复制到新变量中,并且覆盖旧的args/argv [],并且没有命令行可见(或者 - 也许只有几分之一毫秒) - 为什么oracle不实现该解决方案? – 2017-03-04 14:19:26

6

我认为这是* nix?

使用 “立即文档”:

sqlplus -s user/pass <<+EOF 
select 1 from dual; 
+EOF 

编辑:我应该想你的第二个例子。它的工作原理也一样(即使在Windows中,SANS蜱):

$ echo 'select 1 from dual;'|sqlplus -s user/pw 

     1 
---------- 
     1 


$ 
24

我能够通过只是确保有我的select语句的结束分号来执行您的具体查询。 (输出是实际的,删除了连接参数。)

echo“select one from dual;” | SQLPLUS -s用户名/密码@主机:1521 /服务

  1 
---------- 
     1 

不,是应该的问题,但文件sqlplus在Mac OS X雪豹运行和服务器的Oracle 11g。

+0

+1,但请注意,如果您在SQL * Plus中做了适度复杂的任何操作,则通常会生成一些SET指令,如果您希望执行单行命令,这将变得很麻烦。 – dpbradley 2009-10-28 20:22:01

+0

+1这是一个有用的单线程,以快速运行简单查询 – 2014-03-27 15:01:13

+0

+1最后,答案!将分号添加到查询的末尾!您实际上可以运行sqlplus,登录,然后运行命令 - 您不必在凭证中输入管道。我的问题是命令没有运行 - 行号不断增加!现在我知道如何让它们运行 - 只需添加一个分号!谢谢! – vapcguy 2016-06-07 21:29:41

20

我的版本

$ sqlplus -s username/[email protected]:port/service <<< "select 1 from dual;" 


     1 
---------- 
     1 

编辑:

为多,你可以使用这个

$ echo -e "select 1 from dual; \n select 2 from dual;" | sqlplus -s username/[email protected]:port/service 


     1 
---------- 
     1 


     2 
---------- 
     2 
+0

我*真的*喜欢这个,但它似乎不工作在tcsh – dldnh 2014-03-18 15:27:25