微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我正在尝试写一个简单的查询,其中我声明一些变量,然后在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 / sqlsql中有两种单独的语言,分别有两个引擎.您可以在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命令.由于表为空,因此未选择行.

原文地址:https://www.jb51.cc/mssql/82554.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐