【问题标题】:Simple Oracle variable SQL Assignment简单的 Oracle 变量 SQL 赋值
【发布时间】:2011-12-23 19:18:54
【问题描述】:

尽管花了一个小时研究,我似乎无法弄清楚如何正确定义一个变量,然后在你的 SQL 中使用它。

这是我迄今为止制作的:

DECLARE startDate DATE := to_date('03/11/2011', 'dd/mm/yyyy');

我得到了答复:

ORA-06550:第 1 行,第 63 列:PLS-00103:遇到符号 预期以下情况之一时的“文件结尾”:

begin function package pragma procedure subtype type use form current 光标

详细信息:DECLARE startDate DATE := to_date('03/11/2011', 'dd/mm/yyyy');第 1 行出现错误 ORA-06550:第 1 行,第 63 列: PLS-00103:在期待其中之一时遇到符号“文件结尾” 以下:

begin function package pragma procedure subtype type use form current 光标

我很想知道如何完成如此简单的任务!

【问题讨论】:

  • 变量是客户端构造。您需要告诉我们您使用的是什么客户端。

标签: oracle variables plsql toad


【解决方案1】:

解决方案

DEF  startDate = to_date('03/11/2011', 'dd/mm/yyyy');
Select &startDate from dual;

【讨论】:

    【解决方案2】:

    这是一篇旧帖子,但如果有人偶然发现此问题(就像我刚才所做的那样),您可以使用 CTE 来处理:

    with params as (
          select date '2011-11-03' as startdate
          from dual
         )
    select . . .
    from params cross join
         . . .
    

    几乎相同的语法适用于 SQL Server(减去 date 特定的内容和 from dual)。

    【讨论】:

      【解决方案3】:

      您的变量声明是正确的。

      DECLARE 关键字用于定义 PL/SQL 块中作用域的变量(其主体由BEGINEND; 分隔)。你想如何使用这个变量?

      以下 PL/SQL 适合我:

      DECLARE 
          startDate DATE := to_date('03/11/2011', 'dd/mm/yyyy');
          reccount INTEGER;
      BEGIN
          SELECT count(*) INTO reccount 
              FROM my_table tab 
              WHERE tab.somedate < startDate;
          dbms_output.put_line(reccount);
      END;
      

      您还可以使用DEFINE 语句来使用简单的字符串替换变量。它们适用于 SQL/PLUS 或 TOAD 等客户端。

      DEFINE start_date = "to_date('03/11/2011', 'dd/mm/yyyy')"
      SELECT COUNT(*) from my_table tab where tab.some_date < &start_date;
      

      【讨论】:

      • 那么有没有办法像在 MS SQL 中那样简洁地做到这一点,它是一个简单的declare @varible set @variable?我想稍后在WHERE 子句中使用该变量,我该怎么做?我如何将变量打印到屏幕上?
      • 我不熟悉MS SQL,但如果你指的是某种全局变量,可以在包中定义一个变量,从而使其对所有包的成员可见,即使全局变量是您可能想要避免的东西。您可以使用dbms_output.put_line 将变量打印到屏幕。
      • 不是一个全局变量——只是一个普通的变量,我可以分配然后以后使用
      • 我之前已经发布过这个,但不确定这是你想要的。您还可以使用DEFINE 语句插入简单的字符串替换变量。有关示例,请参阅我更新的答案。
      【解决方案4】:

      要完成您在 Toad 中尝试的操作,您根本不需要声明变量。只需包含以冒号开头的变量,Toad 将在您执行查询时提示您输入变量的值。例如:

      select * from all_tables where owner = :this_is_a_variable;
      

      如果这最初不起作用,请右键单击编辑器中的任意位置并确保选中“提示替换变量”。

      如果你真的想和 SQL Server 处理变量的方式类似(或者你希望能够在 SQL*Plus 中做同样的事情),你可以这样写:

      var this_is_a_variable varchar2(30); 
      
      exec :this_is_a_variable := 'YOUR_SCHEMA_NAME';
      
      print this_is_a_variable;
      
      select * from all_tables where owner = :this_is_a_variable;
      

      但是,要在 Toad 中完成这项工作,您需要通过“作为脚本执行”而不是典型的“执行语句”命令来运行它。

      【讨论】:

        【解决方案5】:

        请记住,Oracle 的 PL/SQL 不是 SQL。

        PL/SQL 是一种过程语言。 SQL 不是程序性的,但您可以定义用户可以通过“&var”语法输入的“变量”(参见http://www.orafaq.com/node/515)。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2023-02-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多