oracle 是否可以将单个查询传递给SQLplus?

zsbz8rwp  于 2023-03-17  发布在  Oracle
关注(0)|答案(4)|浏览(147)

我经常需要在我的一个数据库中的某个表上运行一个查询,如果没有必要的话,我宁愿不必创建一个文件并将其作为脚本调用。
我希望能够将查询作为字符串直接发送到sqlplus,如下所示

sqlplus user/pass@hostname:port/service "select * from table"

而不必创建一个只保存该查询的文件并使用调用它

sqlplus user/pass@hostname:port/service @filename

有人知道这是否可行吗?

bvjxkvbb

bvjxkvbb1#

除了mathguy的答案,对于linux shells,你可以像这样使用运算符here-string

sqlplus user/pass@hostname:port/service <<< 'select * from table;'

不要忘记查询末尾的分号。

mlnl4t2r

mlnl4t2r2#

我认为sqlplus命令不接受SQL语句(作为字符串)作为命令行参数,您可以交互式或批处理(给定.sql文件作为输入)运行sqlplus
然而,你可以使用操作系统工具来做你所要求的事情,我不知道这在Windows中是如何工作的,但是在Unix/Linux中你可以使用here document。(出于隐私考虑,我屏蔽了密码和机器名,但除此之外,它是显示命令及其输出的屏幕截图)

[oracle@******** ~]$ sqlplus mathguy/********@orclpdb <<EOF
> select empno, ename, sal
> from   scott.emp
> where  deptno = 30;
> EOF

SQL*Plus: Release 12.2.0.1.0 Production on Fri Mar 26 15:15:30 2021

Copyright (c) 1982, 2016, Oracle.  All rights reserved.

Last Successful login time: Fri Mar 26 2021 15:14:40 -07:00

Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

SQL>   2    3  
     EMPNO ENAME             SAL
---------- ---------- ----------
      7499 ALLEN            1600
      7521 WARD             1250
      7654 MARTIN           1250
      7698 BLAKE            2850
      7844 TURNER           1500
      7900 JAMES             950

6 rows selected.

SQL> Disconnected from Oracle Database 12c Enterprise Edition Release 12.2.0.1.0
   - 64bit Production
[oracle@******** ~]$
2izufjch

2izufjch3#

永远不要在sqlplus命令旁边输入您的凭据,而是通过变量赋值使用/nolog选项,以便在其他人发出ps命令时显示凭据,例如

rec=$(sqlplus -S /nolog << EOF
conn un/pwd@mydb
set pages 1001
set linesize 500
set feedback off
SELECT * FROM tab;
exit
EOF
)
echo $rec
huwehgph

huwehgph4#

下面是Windows版本:

echo select 1 from dual; | sqlplus -s username/password@service

您可以使用它来实现Powershell脚本中的Docker健康检查等功能:

$chekdbsql = "`nselect 1 from dual;"
$chkdb = ""
$chkdb = ($chekdbsql | cmd /c "sqlplus username/password@service")
if ($chkdb.Contains("OPEN") -eq 'True'){
    exit 0
}
else {
    exit 1
}

相关问题