您可以定义NUMBER变量没问题:
SQL> VARIABLE myNum NUMBER;
SQL> EXEC :myNum := 123.456;
PL/SQL procedure successfully completed.
SQL> print myNum;
MYNUM
----------
123.456
还支持许多其他类型。这是VARIABLE命令的USAGE帮助文本:
Usage: VAR[IABLE] [ [ 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';
...它更像是C / C ++中的#define。你不能把它当成一个变量;它只是每次SQL * Plus看到&first_name时粘贴的文本。
当你这样做时......
variable first_name CHAR;
exec :first_name:= 'Joe';
select * from customer where name = :first_name;
您正在创建一个可以操作的实际变量。
请注意,如果您在定义中使用CHAR(没有大小),则第一个分配将决定其大小,之后您不能再使用它。如果将其定义为CHAR(50),则它总是长度为50个字符并用空格填充。这可能会让人感到困惑,因此我建议在大多数情况下使用VARCHAR2作为字符串。