【问题标题】:Cannot use variable in select statement [duplicate]不能在选择语句中使用变量[重复]
【发布时间】:2020-03-16 13:58:14
【问题描述】:

我只需要在 Oracle SQL 中使用 var 作为一些值,如下所示:

    date = '21-Sep-10'

    SELECT * 
    FROM (
          SELECT * 
          FROM  table2
          WHERE some_date = date 
         ) table1
    WHERE table1.due_date = date;

我怎样才能正确地做到这一点?

谢谢!

【问题讨论】:

标签: sql oracle oracle-sqldeveloper


【解决方案1】:

这取决于您使用的工具。在 SQL*Plus 中,您可以在它前面加上 &

SELECT * FROM table WHERE id = &tmp;

在其他一些工具(SQL Developer、TOAD)中,这将是:

SELECT * FROM table WHERE id = :tmp;

如果您在同一个查询中多次使用同一个变量,请在其前面加上两个&符号:

SQL> set linesize 200
SQL> set ver off
SQL> select *
  2  from (select *
  3        from emp
  4        where deptno = &&deptno
  5       )
  6  where deptno = &&deptno;

     EMPNO ENAME      JOB              MGR HIREDATE        SAL       COMM     DEPTNO
---------- ---------- --------- ---------- -------- ---------- ---------- ----------
      7782 CLARK      MANAGER         7839 09.06.81       2450                    10
      7839 KING       PRESIDENT            17.11.81       5000                    10
      7934 MILLER     CLERK           7782 23.01.82       1300                    10

SQL>

但是,如果您再次运行相同的查询,则不会提示您输入变量(因为它是“记住的”):

SQL> /

     EMPNO ENAME      JOB              MGR HIREDATE        SAL       COMM     DEPTNO
---------- ---------- --------- ---------- -------- ---------- ---------- ----------
      7782 CLARK      MANAGER         7839 09.06.81       2450                    10
      7839 KING       PRESIDENT            17.11.81       5000                    10
      7934 MILLER     CLERK           7782 23.01.82       1300                    10

SQL>

您需要先取消定义

SQL> undefine deptno
SQL> /
Enter value for deptno: 20

     EMPNO ENAME      JOB              MGR HIREDATE        SAL       COMM     DEPTNO
---------- ---------- --------- ---------- -------- ---------- ---------- ----------
      7369 SMITH      CLERK           7902 17.12.80        800                    20
      7566 JONES      MANAGER         7839 02.04.81       2975                    20
      7788 SCOTT      ANALYST         7566 09.12.82       3000                    20
      7876 ADAMS      CLERK           7788 12.01.83       1100                    20
      7902 FORD       ANALYST         7566 03.12.81       3000                    20

SQL>

【讨论】:

  • ,感谢您的回答。您的方法与 promt condition 相关。我已经修改了示例,请看一下。我需要在一个 select 语句中多次使用 var。
  • SQL Developer 支持替换 (&var) 和绑定 (:var)
  • 不客气,ppostnov。我添加了更多示例;请看一下。 |是的,@thatjeff,我知道,谢谢你纠正我。
猜你喜欢
  • 1970-01-01
  • 2015-03-02
  • 1970-01-01
  • 1970-01-01
  • 2021-08-19
  • 2016-05-19
  • 2011-04-20
  • 1970-01-01
  • 2014-03-08
相关资源
最近更新 更多