我正在尝试在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中执行脚本。
感谢。
答案 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。