Oracle 在PL/SQL中将变量声明为日期

Oracle 在PL/SQL中将变量声明为日期,oracle,plsql,oracle11g,Oracle,Plsql,Oracle11g,我很好奇为什么PL/SQL不允许我将变量声明为datetime,以及我的备选方案是什么。我正在使用Oracle 11 VARIABLE some_date date; 我得到以下错误消息,指示var的合法类型,不包括日期: Usage: VAR[IABLE] [ <variable> [ NUMBER | CHAR | CHAR (n [CHAR|BYTE]) | VARCHAR2 (n [CHAR|BYTE]) | NCHAR | NCHAR (n) | NVARCHAR2 (

我很好奇为什么PL/SQL不允许我将变量声明为datetime,以及我的备选方案是什么。我正在使用Oracle 11

VARIABLE some_date date;
我得到以下错误消息,指示var的合法类型,不包括日期:

 Usage: VAR[IABLE] [ <variable> [ NUMBER | CHAR | CHAR
(n [CHAR|BYTE]) |
VARCHAR2 (n [CHAR|BYTE]) | NCHAR | NCHAR (n) |
NVARCHAR2 (n) | CLOB | NCLOB | REFCURSOR |
BINARY_FLOAT | BINARY_DOUBLE ] ]
用法:VAR[IABLE][[NUMBER | CHAR | CHAR (n[字符|字节])| VARCHAR2(n[CHAR | BYTE])| NCHAR | NCHAR(n)| NVARCHAR2(n)| CLOB | NCLOB | REFCURSOR| 二进制浮点数|二进制双精度]] 我可能可以通过将日期模拟为字符串或长表示来解决这个问题,但我真的很好奇为什么会这样


谢谢

我想你是说SQL*Plus而不是PL/SQL,对吗?
您可以使用
VARCHAR2
并在PL/SQL代码中使用
to_char()。您所需要的只是declare块中的变量名和类型,其余部分由PL/SQL处理

$DECLARE
$  some_date DATE;
$BEGIN
$  -- other code
$END;

在PL/SQL中,关键字
变量
与上下文无关。它用于创建绑定变量 绑定变量是在环境中创建的,而不是在PL/SQL块的声明性部分中创建的。PL/SQL块中声明的变量仅在执行该块时可用。执行块后,释放变量使用的内存。但是,即使在执行块之后,也可以访问绑定变量。因此,在创建绑定变量时,绑定变量可以由多个子程序使用和操作。与任何其他变量一样,它们可以在SQL语句和PL/SQL块中使用。这些变量可以作为运行时值传入或传出PL/SQL子程序

例如,对于变量:

VARIABLE b_result DATW
BEGIN
  SELECT JOIN_DATE INTO :b_result
  FROM employees WHERE employee_id = 144;
END;
/
PRINT b_result
我觉得对你来说,这一击会起作用的

DECLARE
  some_date DATE;
BEGIN
  -- other code
END;

是的,但是为什么他们不允许约会呢??它们还允许在表中使用其他数据类型。基本上,为什么允许的var数据类型只是表中可用数据类型的子集?
变量是一个变量,而不是PL/SQL变量。您可以将它用作普通SQL中的绑定变量,也可以用作SQLPlus(或SQL Developer)中PL/SQL中的绑定变量。不过,这与PL/SQL没有直接关系。