是否可以这样做?来自命令行的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
是否可以这样做?来自命令行的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
只要知道在Unix/Linux上,任何可以运行“ps -ef”命令的用户都可以看到你的用户名/密码,如果直接将它放在命令行上。可能是一个很大的安全问题(或者变成一个很大的安全问题)。
我通常建议创建一个文件或使用here文档,以便在Unix/Linux中使用“ps -ef”命令保护用户名/密码不被查看。如果用户名/密码包含在脚本文件或sql文件中,则可以使用适当的用户/组读取权限进行保护。然后,你可以保留用户/像这样的文件中通过在shell脚本:
sqlplus -s /nolog <<EOF
connect user/pass
select blah;
quit
EOF
并非总是如此,这取决于Oracle的版本和操作系统,但可能是一个很好的标准遵循 – dpbradley 2009-10-29 13:02:26
太糟糕了heredoc's在DOS中不容易http://stackoverflow.com/questions/1015163/heredoc- for windows-batch – rogerdpack 2015-02-18 20:54:01
奇怪的是,为什么命令行泄漏并不是简单地在sql客户端程序本身中处理的,因为这样做很简单:在main()函数中,将命令行参数复制到新变量中,并且覆盖旧的args/argv [],并且没有命令行可见(或者 - 也许只有几分之一毫秒) - 为什么oracle不实现该解决方案? – 2017-03-04 14:19:26
我认为这是* nix?
使用 “立即文档”:
sqlplus -s user/pass <<+EOF
select 1 from dual;
+EOF
编辑:我应该想你的第二个例子。它的工作原理也一样(即使在Windows中,SANS蜱):
$ echo 'select 1 from dual;'|sqlplus -s user/pw
1
----------
1
$
我能够通过只是确保有我的select语句的结束分号来执行您的具体查询。 (输出是实际的,删除了连接参数。)
echo“select one from dual;” | SQLPLUS -s用户名/密码@主机:1521 /服务
1
----------
1
不,是应该的问题,但文件sqlplus在Mac OS X雪豹运行和服务器的Oracle 11g。
我的版本
$ 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
我*真的*喜欢这个,但它似乎不工作在tcsh – dldnh 2014-03-18 15:27:25
可能的重复 - 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