你可以定义NUMBER
变量没问题:
SQL> VARIABLE myNum NUMBER;
SQL> EXEC :myNum := 123.456;
PL/SQL procedure successfully completed.
SQL> print myNum;
MYNUM
----------
123.456
还支持许多其他类型。以下是USAGE
VARIABLE 命令的帮助文本:
Usage: VAR[IABLE] [ <variable> [ NUMBER | CHAR | CHAR (n [CHAR|BYTE]) |
VARCHAR2 (n [CHAR|BYTE]) | NCHAR | NCHAR (n) |
NVARCHAR2 (n) | CLOB | NCLOB | BLOB | BFILE
REFCURSOR | BINARY_FLOAT | BINARY_DOUBLE ] ]
如果您输入VARIABLE
(或仅输入VAR
)而不输入任何其他内容,SQL*Plus 将列出所有变量及其值。
附录:对比原始问题中的两种变量分配样式。
当你这样做...
define first_name = Joe
select * from customer where name = '&first_name';
...它更像是#define
C/C++ 中的一个。你不能把它当作一个变量来对待;它只是每次 SQL*Plus 看到时粘贴的文本&first_name
。
当你这样做...
variable first_name CHAR;
exec :first_name:= 'Joe';
select * from customer where name = :first_name;
您正在创建一个可以操纵的真实变量。
请注意,如果您CHAR
在定义中使用(没有大小),第一个分配将确定它的大小,之后您不能让它更长。如果您将其定义为CHAR(50)
长度始终为 50 个字符并用空格填充。这可能会让人感到困惑,所以我建议VARCHAR2
在大多数情况下使用字符串。