首页 文章

简单的Oracle变量SQL赋值

提问于
浏览
7

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

这是我到目前为止所做的:

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

其中我得到了答复:

ORA-06550:第1行,第63列:PLS-00103:遇到以下其中一项时遇到符号“文件结束”:begin function package pragma procedure子类型使用表单当前游标详细信息:DECLARE startDate DATE:= to_date('03 / 11/2011','dd / mm / yyyy');第1行错误ORA-06550:第1行第63列:PLS-00103:遇到以下其中一项时遇到符号“文件结束”:begin function package pragma procedure子类型使用表单当前游标

我很想知道如何做这么简单的任务!

5 回答

  • 12

    你能试试这个:

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

    请记住,Oracle的PL / SQL是 not SQL .

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

  • 5

    这是一个旧帖子,但万一有人偶然发现(就像我刚才那样),你可以用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;
    
  • 0

    要完成您在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中使用它,您需要通过“Execute as script”而不是典型的“Execute语句”命令来运行它 .

相关问题