命令行中的sqlplus语句

时间:2009-10-28 19:57:24

标签: sql oracle 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

4 个答案:

答案 0 :(得分:49)

请注意,在Unix / Linux上,如果您将命令行直接放在命令行上,那么可以运行“ps -ef”命令的任何人都可以看到您的用户名/密码。可能是一个很大的安全问题(或变成一个大的安全问题)。

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

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

答案 1 :(得分:30)

我可以通过确保select语句末尾有分号来执行您的确切查询。 (输出是实际的,删除了连接参数。)

echo "select 1 from dual;" | sqlplus -s username/password@host:1521/service 

输出:

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

请注意,这应该很重要,但这是在Mac OS X Snow Leopard和Oracle 11g上运行。

答案 2 :(得分:23)

我的版本

$ sqlplus -s username/password@host:port/service <<< "select 1 from dual;"


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

编辑:

对于多行,您可以使用此

$ echo -e "select 1 from dual; \n select 2 from dual;" | sqlplus -s username/password@host:port/service


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


         2
----------
         2

答案 3 :(得分:8)

我认为这是* nix?

使用“here document”:

sqlplus -s user/pass <<+EOF
select 1 from dual;
+EOF
编辑:我应该尝试你的第二个例子。它也有效(即使在Windows中,也没有):

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

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


$