关于sql:sqlplus语句来自命令行

sqlplus statement from command line

可以这样做吗?

$ 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"命令。可能是一个大的安全问题(或变成一个大的安全问题)。

我通常建议您创建一个文件或使用这里的文档,这样您就可以防止在UNIX/Linux中使用"ps-ef"命令查看用户名/密码。如果用户名/密码包含在脚本文件或SQL文件中,则可以使用适当的用户/组读取权限进行保护。然后,您可以在shell脚本中像这样将用户/传递保存在文件中:

1
2
3
4
5
sqlplus -s /nolog <<EOF
CONNECT USER/pass
SELECT blah;
quit
EOF


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

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

输出:

1
2
3
         1
----------
         1

请注意,这应该很重要,但这是运行在MacOSXSnowLeopard和Oracle11g上的。


我的版本

1
2
3
4
5
6
$ sqlplus -s username/password@host:port/service <<<"select 1 from dual;"


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

编辑:

对于多行,可以使用此

1
2
3
4
5
6
7
8
9
10
11
12
$ echo -e"select 1 from dual;
 select 2 from dual;"
| sqlplus -s username/password@host:port/service


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


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


我想这是尼克斯?

使用"此处文档":

1
2
3
sqlplus -s USER/pass <<+EOF
SELECT 1 FROM dual;
+EOF

编辑:我应该试试你的第二个例子。它也可以工作(即使在Windows中,也没有滴答声):

1
2
3
4
5
6
7
8
$ echo 'select 1 from dual;'|sqlplus -s USER/pw

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


$