命令行中的sqlplus语句

and*_*bd1 48 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

Dav*_*ann 51

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

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

sqlplus -s /nolog <<EOF
connect user/pass
select blah;
quit
EOF
Run Code Online (Sandbox Code Playgroud)


Gra*_*mmi 35

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

echo "select 1 from dual;" | sqlplus -s username/password@host:1521/service 
Run Code Online (Sandbox Code Playgroud)

输出:

         1
----------
         1
Run Code Online (Sandbox Code Playgroud)

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

  • +1 最后,答案!在查询末尾添加分号!您实际上可以运行 sqlplus,登录,然后运行命令 - 您不必输入凭据。我的问题是命令没有运行 - 行号一直在增加!现在我知道如何让它们运行——只需添加一个分号!谢谢! (3认同)
  • 这些引号在 Windows 上为我产生了 Oracle“SP2-0734:未知命令开头”“select 1 ...”错误。删除它们对我有用。 (2认同)

rof*_*rol 24

我的版本

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


         1
----------
         1
Run Code Online (Sandbox Code Playgroud)

编辑:

对于多线,您可以使用此功能

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


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


         2
----------
         2
Run Code Online (Sandbox Code Playgroud)


DCo*_*kie 9

我认为这是*nix?

使用"here document":

sqlplus -s user/pass <<+EOF
select 1 from dual;
+EOF
Run Code Online (Sandbox Code Playgroud)

编辑:我应该尝试你的第二个例子.它也有效(即使在Windows中,也没有):

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

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


$
Run Code Online (Sandbox Code Playgroud)