0

我很好奇为什么 PL/SQL 不允许我将 var 声明为 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 ] ]

我可能可以通过将日期模拟为字符串或长表示来解决这个问题,但我真的很好奇为什么会这样。

谢谢

4

3 回答 3

1

我猜你的意思是 SQL*Plus 而不是 PL/SQL,对吧?您可以使用 a并在您的 PL/SQL 代码中使用和VARCHAR2在两者之间进行转换。to_char()to_date()

于 2012-10-31T16:46:22.403 回答
0

不要使用 variable 关键字声明变量。您只需要声明块中的变量名和类型,PL/SQL 将负责其余的工作。

$DECLARE
$  some_date DATE;
$BEGIN
$  -- other code
$END;
于 2012-10-31T16:52:20.057 回答
0

在 PL/SQL 中,关键字VARIABLE与您的上下文无关。它用于创建绑定变量 绑定变量是在环境中创建的,而不是在 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;
于 2012-10-31T18:07:16.503 回答