【问题标题】:Is it possible to pass a single query to SQLplus?是否可以将单个查询传递给 SQLplus?
【发布时间】:2021-06-23 17:47:45
【问题描述】:

我经常需要在我的一个数据库中的某个表上运行单个查询,我宁愿不必创建一个文件并将其作为脚本调用,如果我不需要的话,我宁愿不做任何事情。

我希望能够将查询作为这样的字符串直接发送到 sqlplus

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

而不必创建一个只包含一个查询的文件并调用它

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

有人知道这是否可行吗?

【问题讨论】:

  • 这能回答你的问题吗? sqlplus statement from command line
  • 如果每次都是同一个查询,你为什么想要将查询保存在.sql文件中?如果每次都是不同的查询,那么简单地启动sqlplus然后在sql提示符下输入查询有什么问题?无论哪种方式,您认为通过将查询放在用于启动 sqlplus 的同一命令行上可以完成什么?

标签: oracle sqlplus


【解决方案1】:

除了 mathguy 的回答,用linux shells, 您可以像这样使用运算符here-string

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

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

【讨论】:

    【解决方案2】:

    我相信sqlplus 命令不接受 SQL 语句(作为字符串)作为命令行参数。您可以以交互方式或批量运行sqlplus(提供.sql 文件作为输入)。

    但是,您可以使用操作系统工具执行您所要求的操作。我不知道这在 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@******** ~]$ 
    

    【讨论】:

      【解决方案3】:

      永远不要在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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-12-05
        • 2018-06-14
        • 1970-01-01
        • 2021-07-13
        • 2011-06-03
        • 2018-04-17
        • 2019-04-21
        相关资源
        最近更新 更多