定义变量Oracle脚本

时间:2017-11-29 15:16:26

标签: sql oracle popup oracle-sqldeveloper

我正在尝试在Oracle SQL脚本中使用变量。在How to declare variable and use it in the same SQL script? (Oracle SQL)帖之后,我将变量定义如下:

DEFINE dummyvar INT := 1;
SELECT '&dummyvar' FROM DUAL;
然而,这导致弹出窗口在执行脚本时要求一个值(当重用一个变量时,它会一直生成要求输入值的弹出窗口)。当定义变量的值时,是否可以防止弹出窗口的生成?所以在上面的例子中我想阻止生成弹出窗口;当变量定义为:

DEFINE dummyvar INT;
SELECT '&dummyvar' FROM DUAL;

可能会生成一个弹出窗口以进入弹出窗口。

这用于在SQL Developer中执行脚本。

感谢。

1 个答案:

答案 0 :(得分:0)

每当您运行存储的查询或脚本时,SQL * Plus会将变量值替换为每个替换变量引用变量(格式为& variable或&& variable)。在您使用UNDEFINE变量之前,SQL * Plus不会提示您输入此变量中的变量值。

如果已定义变量的值扩展到多行(使用SQL * Plus命令延续字符),则SQL * Plus将使用空格替换每个连续字符和回车符。例如,SQL * Plus解释

DEFINE TEXT = 'ONE-
TWO-
THREE'

作为

DEFINE TEXT = 'ONE TWO THREE'

您应该避免使用可能与传递给它们的值相同的名称定义变量,因为可能会出现意外结果。如果为定义的变量提供的值与变量名匹配,则使用匹配变量的内容而不是提供的值。

SQL * Plus启动时预定义了一些变量。输入DEFINE以查看其定义。

实施例

要将值MANAGER分配给变量POS,请键入:

DEFINE POS = MANAGER

如果您执行包含对& POS的引用的命令,则SQL * Plus会将值DESER替换为& POS,并且不会提示您输入POS值。

要将CHAR值20分配给变量DEPARTMENT_ID,请键入:

DEFINE DEPARTMENT_ID = 20

即使输入数字20,SQL * Plus也会为DEPARTMENT_ID指定一个CHAR值,该值包含两个字符,即2和0。

要列出DEPARTMENT_ID的定义,请输入

DEFINE DEPARTMENT_ID
DEFINE DEPARTMENT_ID = "20" (CHAR)

此结果显示DEPARTMENT_ID的值为20。