当前位置: 首页 > 面试题库 >

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

卢嘉誉
2023-03-14
问题内容

我试图编写一个简单的查询,在其中声明一些变量,然后在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中,是两种具有两种单独引擎的独立语言。您可以将SQL DML嵌入PL /
SQL中,这将为您提供变量。如下面的匿名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之外,必须声明,打开游标,然后将其返回给调用程序。

连接到数据库的客户端工具可能具有其自己的绑定变量。在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

请注意,以上内容是在SQL Plus中使用的,在Toad PL /
SQL开发人员中可能(可能不会)运行,等等。以variable和exec开头的行是SQL
Plus命令。它们不是SQL或PL /
SQL命令。由于表为空,因此未选择任何行。



 类似资料:
  • 问题内容: 我刚刚开始学习go lang,而对于在go lang中声明变量感到困惑 例如我已经声明,里面if … else语句。 但是终端出现错误 好像我在If语句中声明的任何内容都不起作用…我该如何解决? 问题答案: 因为变量仅在声明它们的范围内定义: 去玩 之间的区别,并是仅仅是分配和对变量的声明和分配新建分配FY语法 这个: 等效于: 您可能想要的是:

  • 问题内容: 以下Java代码无法编译。 为什么?在没有先声明的情况下,没有代码路径可导致程序将1分配给该路径。 我想到的范围可能仅限于第一条陈述,但后来我不明白为什么。如果我真的不想不必要地声明以提高性能怎么办?我不喜欢声明后不使用变量。 (您可能想争论一下,我不可以在第二条语句中简单地声明b ,在这种情况下,请想象一下它可能在其他地方处于循环中。) 问题答案: 为什么?如果没有先声明,没有代码路

  • 问题内容: 嗨,我在使用Java进行初始化时遇到问题,以下代码给了我一个编译错误,叫做:Expected instanceInt = 100; 但我已经宣布了 如果这些东西与堆栈和堆的东西有关,请用简单的术语进行解释,我是Java的新手,并且我对这些领域不了解。 问题答案: 您不能在课程中间使用语句。它必须与声明位于同一块或同一行中。 做您想要的事情的常用方法是: 声明期间的初始化 } 通常,如果

  • 当我试图运行我的BMI计算器时,我经常遇到这样一个错误“Cannot resolve method'println(java.lang.String,double)”当我试图运行我的BMI计算器时,我如何为一个double类型的变量声明一条语句?请帮帮我。这是我代码的链接

  • JSP 声明语句用于声明一个或多个变量、方法,以供后面的 Java 代码使用。您必须先对变量和方法进行声明,才能使用它们。 JSP 声明语法如下: <%! 声明语句 %> 等效于 示例 JSP脚本和声明的区别 JSP 脚本只能声明变量,不能声明方法。JSP 声明语句可以声明变量和方法。 JSP 脚本会把包含的内容转译插入到 Servlet 的 service() 方法中,也就是  中定义的变量是局

  • 一个 Perl 程序由一系列声明和语句组成。一个声明可以放在任何可以放语句的地方, 但是它的主要作用发生在编译时。有几个声明类似语句,有双重身份,但是大多数在 运行时是完全透明的。编译完之后,语句的主序列只执行一次。 和许多编程语言不同,Perl 并不要求明确的变量声明;变量只在第一次使用的时候才 存在,不管你是否曾声明它们。如果你试图从一个从未赋值的变量里面获取一个值,当你把 它当作数字时 Pe