在PL / SQL中将var声明为日期

时间:2012-10-31 16:39:57

标签: oracle plsql oracle11g

我很好奇为什么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 ] ]

我可以通过将日期模拟为字符串或长表示来解决此问题,但我真的很好奇为什么会出现这种情况。

由于

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

例如对于VARIABLE:

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;