简单的Oracle变量SQL赋值

m.e*_*son 8 oracle variables toad plsql

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

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

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

其中我得到了答复:

ORA-06550:第1行,第63列:PLS-00103:遇到以下某种情况时遇到符号"文件结束":

begin function package pragma procedure子类型使用form current cursor

详情:DECLARE startDate DATE:= to_date('03/11/2011','dd/mm/yyyy'); 第1行错误ORA-06550:第1行第63列:PLS-00103:遇到以下某种情况时遇到符号"文件结束":

begin function package pragma procedure子类型使用form current cursor

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

Xav*_*ica 14

您的变量声明是正确的.

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

以下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;
Run Code Online (Sandbox Code Playgroud)

您还可以使用该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;
Run Code Online (Sandbox Code Playgroud)

  • 那么有没有办法像在MS SQL中一样简洁地执行它,它是一个简单的`declare @varible set @ variable`?我想稍后在`WHERE`子句中使用变量,我该怎么做?我怎样才能将变量打印到屏幕上? (3认同)

All*_*lan 5

要完成您在Toad中尝试的操作,您根本不需要声明变量.只需在变量前面加上冒号,Toad会在执行查询时提示您输入变量的值.例如:

select * from all_tables where owner = :this_is_a_variable;
Run Code Online (Sandbox Code Playgroud)

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

如果你真的希望这样做与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;
Run Code Online (Sandbox Code Playgroud)

但是,要在Toad中使用它,您需要通过"Execute as script"而不是典型的"Execute语句"命令来运行它.