Oracle声明变量语法

Oracle声明变量语法,oracle,Oracle,使用“SQL Navigator”将SQL转换为Oracle,以便在声明变量时测试并运行语法问题。我读过其他相关的文章,但似乎没有任何效果 目标是以YYYYMMDD格式的字符串形式将变量“strDate”设置为当前日期 我尝试过的代码是: declare strDate := TO_CHAR(sysdate, 'YYYYMONDD'); BEGIN SELECT ColumnA a, ColumnB b, ColumnC c from table1, table2 where stringc

使用“SQL Navigator”将SQL转换为Oracle,以便在声明变量时测试并运行语法问题。我读过其他相关的文章,但似乎没有任何效果

目标是以YYYYMMDD格式的字符串形式将变量“strDate”设置为当前日期

我尝试过的代码是:

declare 
strDate := TO_CHAR(sysdate, 'YYYYMONDD');

BEGIN
SELECT ColumnA a, ColumnB b, ColumnC c
from table1, table2
where stringcolumn = strDate;
end;
错误结果为: “ORA-06550;第2行第10列:…在预期….时遇到符号“=”

还尝试:

var strDate varchar2(8)
exec :strDate := TO_CHAR(sysdate, 'YYYYMONDD')

BEGIN
SELECT....;
end;

查询本身是一个联合查询,我可以使用硬编码的值运行各个“部分”。由于某种原因,它似乎无法接受变量。

正确的语法应该是:

declare 
   DateFrom varchar2(20):= TO_CHAR(sysdate, 'YYYYMONDD');
...

那不应该是
varchar2(9)
,而不是
date
;因为它被设置为
to_char
?这样它就不再抛出相同的错误,而是说,“在这个SELECT语句中应该有一个INTO子句…”@user1330259-这是一个完全不同的问题;将一个问题转化为几个问题,或者转化为PL/SQL教程,这是不公平的。
select
的PL/SQL版本为。但是,还不完全清楚您是否真的希望在PL/SQL块中使用它-这取决于您希望如何处理
select
检索到的数据。请理解并为该加载项道歉。谢谢你的参考。第二个版本应该可以使用(除了你的格式模型是9个字符,而不是8个字符;你是指MM而不是MON吗?);但是如何在查询中使用该变量,会出现什么错误?我猜你后来并没有把它称为
:strDate
。是的,我是说MM-很好,谢谢!更正了上面的:strDate vs:DateFrom。在第二个版本中,您可以在查询中使用bind变量作为普通SQL,像
中的stringcolumn=:strDate那样引用它,而不使用
开始/结束
。看起来您可能添加了PL/SQL包装器来允许变量?但不知道SQL Navigator是否支持
var