我有一个在TOAD中执行的SQL脚本。目前,我只是陈述了声明,因此:
select such-and-such from somewhere;
delete other-thing from somewhere-else;
等等。一些where子句最终会重复,因为我有复杂的内部查询来获取特定的ID来操作。我想在变量中捕获脚本开头的ID,然后在后续where子句中使用该变量。所以像这样:
variable MY_ID = select the-ID from somewhere;
select such-and-such from somewhere where ID = @MY_ID;
显然,我正在编写语法,但这正是我正在寻找的。但是我不确定这是否可以在TOAD脚本中使用。我知道我可以将整个事物转换为PL / SQL块但是我试图避免因各种原因而不得不这样做。
使用TOAD以任何方式执行此操作而不转换为PL / SQL块?
答案 0 :(得分:9)
我认为这将实现你想要的。您可以声明一个绑定变量,在其中插入一个值,然后在将来的语句中使用它。
variable l_var varchar2(1);
begin
select dummy
into :l_var
from dual;
end;
select *
from dual
where dummy = :l_var;
答案 1 :(得分:1)
我使用SQL * PLUS替换变量。他们得到了TOAD的支持。 您可以按F5执行此代码。
COLUMN VAR NEW_VALUE VAR_VALUE
SELECT 'SOMETHING' VAR FROM DUAL; --this sets 'VAR_VALUE' = 'SOMETHING'
SELECT '&VAR_VALUE' FROM DUAL; --this uses the value set by the previous stmt.
答案 2 :(得分:0)
我不再主动使用TOAD,但应该有一些机制来设置绑定参数的值,即select such-and-such from somewhere where ID = :myid;
,这样每次发生时,TOAD为该参数提供相同的值。
或者,您可以创建会话上下文值或PL / SQL包变量(注意:与重写整个代码以使用PL / SQL不同)。见this question
答案 3 :(得分:0)
如果以正确的方式使用,TOAD中的“计算字段”功能实际上非常强大。它只不过是一个将其自身附加到Query本身的“令牌”脚本编辑器。它只能通过查询设计编辑器获得,而不能从本机编辑器中获得,它允许您直接编写SQL。
作为提示,下次创建在TOAD中设计的查询并需要创建复杂的WHERE或子查询时,请尝试“计算字段”功能并使用FORMS选项将您的条件基本上附加到给定列或查询。你会惊讶它有多强大。它有助于使您的SQL查询保持良好的可读格式。