在 Oracle SQL 开发人员中使用一次临时变量

Using a temporary variable once in Oracle SQL Developer

我有一个查询需求。它需要 select 列表中不存在于列中的每个数字。目前,我可以正常工作。此查询 returns 18332000 之间不存在于 ATTR table.

中的每个数字
SELECT LEVEL + 1833
FROM   DUAL
CONNECT BY LEVEL <= (2000 - 1833)
MINUS
SELECT ID_TX
FROM   ATTR
WHERE  ID_TX BETWEEN 1834 AND 2000;

我想做的是尽可能让用户友好。为此,我可以输入两个变量,STARTING_IDLIST_LENGTH。现在我的查询看起来像这样。

SELECT LEVEL + &STARTING_ID
FROM   DUAL
CONNECT BY LEVEL <= &LIST_LENGTH
MINUS
SELECT ID_TX
FROM   ATTR
WHERE  ID_TX BETWEEN &STARTING_ID AND &STARTING_ID + &LIST_LENGTH;

起初,我使用的是&&,但后来我只能使用一次该查询。 UNDEFINE 无法放置在代码块中,而且也没有清理我的变量。现在我的问题是它认为每个 & 变量都是不同的,所以它让用户输入 5 个变量而不是 2.

如何使我仍然使用临时变量(有或没有弹出窗口输入变量),但人 运行 查询只需要输入两个值 183367?

尝试使用“&&”而不是一个“&”。

如果单个与符号前缀与未定义的变量一起使用,则您在提示符下输入的值不是 stored.So 一旦值被替换,变量将被丢弃并保持未定义。如果该变量被引用两次,即使在同一条语句中,也会提示您两次。

如果您使用“&&”,则会存储该值,因此系统只会提示您一个。

如何使用 : 作为提示?

SELECT LEVEL + :STARTING_ID
FROM   DUAL
CONNECT BY LEVEL <= :LIST_LENGTH
MINUS
SELECT ID_TX
FROM   ATTR
WHERE  ID_TX BETWEEN :STARTING_ID AND :STARTING_ID + :LIST_LENGTH;

这使用了绑定变量的概念。因此,用户可以输入必要的值并继续。

有点胡扯,但如果你想要替代变量的提示,那么你可以使用绑定变量,但只需使用这样的替代变量来填充它们:

(运行 它作为脚本使用 F5 而不是作为语句使用 Ctrl+Enter)

VARIABLE list_length NUMBER;
VARIABLE start_value NUMBER;

BEGIN
  :list_length := &ll;
  :start_value := &sv;
END;
/

SELECT LEVEL + :start_value
FROM   DUAL
CONNECT BY LEVEL <= :list_length
MINUS
SELECT ID_TX
FROM   ATTR
WHERE  ID_TX BETWEEN :start_value + 1 AND :start_value + :list_length;

否则,只需使用绑定变量(即脚本底部的查询)。