我很好奇为什么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 ] ]
我可以通过将日期模拟为字符串或长表示来解决此问题,但我真的很好奇为什么会出现这种情况。
由于
答案 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;