加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql – 在Select语句中声明和设置变量

发布时间:2020-12-12 16:10:34 所属栏目:MsSql教程 来源:网络整理
导读:我正在尝试写一个简单的查询,其中我声明一些变量,然后在Oracle中的select语句中使用它们.我以前在SQL Server中可以执行以下操作: DECLARE @date1 DATETIMESET @date1 = '03-AUG-2010'SELECT U.VisualIDFROM Usage u WITH(NOLOCK)WHERE U.UseTime @Date1 从搜
我正在尝试写一个简单的查询,其中我声明一些变量,然后在Oracle中的select语句中使用它们.我以前在SQL Server中可以执行以下操作:
DECLARE @date1   DATETIME
SET @date1 = '03-AUG-2010'

SELECT U.VisualID
FROM Usage u WITH(NOLOCK)
WHERE U.UseTime > @Date1

从搜索完成后,您将无法在Select语句中声明和设置变量.这是正确的还是我妈的东西?

解决方法

从搜索完成后,您将无法在Select语句中声明和设置变量.这是正确的还是我错过的东西?

在Oracle PL / SQL和SQL中有两种单独的语言,分别有两个引擎.您可以在PL / SQL中嵌入SQL DML,这将为您提供变量.如下面的匿名PL / SQL块.注意/结束不是PL / SQL的一部分,但是告诉SQL * Plus发送前一个块.

declare 
    v_Date1 date := to_date('03-AUG-2010','DD-Mon-YYYY');
    v_Count number;
begin
    select count(*) into v_Count
    from Usage
    where UseTime > v_Date1;
    dbms_output.put_line(v_Count);
end;
/

问题是,相当于您的T-SQL代码的块将无法正常工作:

SQL> declare 
  2      v_Date1 date := to_date('03-AUG-2010','DD-Mon-YYYY');
  3  begin
  4      select VisualId
  5      from Usage
  6      where UseTime > v_Date1;
  7  end;
  8  /
    select VisualId
    *
ERROR at line 4:
ORA-06550: line 4,column 5:
PLS-00428: an INTO clause is expected in this SELECT statement

要将PL / SQL中的查询结果传递给匿名块,存储过程或存储函数,必须声明,打开并返回到调用程序. (超越这个问题的范围编辑:见Get resultset from oracle stored procedure)

连接到数据库的客户端工具可能拥有自己的绑定变量.在SQL * Plus中:

SQL> -- SQL*Plus does not all date type in this context
SQL> -- So using varchar2 to hold text
SQL> variable v_Date1 varchar2(20)
SQL>
SQL> -- use PL/SQL to set the value of the bind variable
SQL> exec :v_Date1 := '02-Aug-2010';

PL/SQL procedure successfully completed.

SQL> -- Converting to a date,since the variable is not yet a date.
SQL> -- Note the use of colon,this tells SQL*Plus that v_Date1
SQL> -- is a bind variable.
SQL> select VisualId
  2  from Usage
  3  where UseTime > to_char(:v_Date1,'DD-Mon-YYYY');

no rows selected

注意上面是SQLPlus,可能不会(可能不会)在Toad PL / SQL开发人员等工作.从变量和exec开始的行是SQLPlus命令.它们不是SQL或PL / SQL命令.由于表为空,因此未选择行.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读