8

我有一个在 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 块,但我试图避免由于各种原因不得不这样做。

有什么方法可以在不转换为 PL/SQL 块的情况下使用 TOAD 来做到这一点?

4

5 回答 5

12

我认为这将完成您想要的。您可以声明一个绑定变量,向其中插入一个值,然后在以后的语句中使用它。

variable l_var varchar2(1);

begin
  select dummy
    into :l_var
    from dual;
end;

select *
  from dual
 where dummy = :l_var;
于 2009-12-22T19:04:29.723 回答
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.
于 2017-01-20T16:08:57.847 回答
0

我不再积极使用 TOAD,但应该有一些机制来设置绑定参数的值,即select such-and-such from somewhere where ID = :myid;每次发生时,TOAD 都会为该参数提供相同的值。

或者,您可以创建会话上下文值或 PL/SQL 包变量(注意:与重写整个代码以使用 PL/SQL 不同)。看到这个问题

于 2009-12-22T17:00:37.270 回答
0

如果以正确的方式使用,TOAD 中的“计算字段”功能实际上非常强大。它只不过是一个附加到查询本身的“令牌”脚本编辑器。它只能通过查询设计编辑器使用,而不是来自本机编辑器,它允许您直接编写 SQL。

作为提示,下次您创建在 TOAD 中设计的查询并需要创建复杂的 WHERE 或子查询时,请尝试“计算字段”功能并使用 FORMS 选项基本上将您的条件附加到给定的列或查询。你会惊讶于它的强大。它有助于使您的 SQL 查询保持可读的格式。

于 2015-04-02T02:01:38.413 回答
0

当我使用 CASE 句子名称 AS Ticket 的结果进行“分组”时,Toad 显示错误,提示 Ticket in not a valid item,

SELECT 
CASE WHEN ( amt_1 >= 10000000                             ) THEN  'R100000'
     WHEN ( amt_1 <   9000000 and amt_1 >=  8000000       ) THEN  'R090000'
     WHEN ( amt_1 <   8000000 and amt_1 >=  7000000       ) THEN  'R080000'
     WHEN ( amt_1 <   7000000 and amt_1 >=  6000000       ) THEN  'R070000'
     WHEN ( amt_1 <   6000000 and amt_1 >=  5000000       ) THEN  'R060000'
     WHEN ( amt_1 <   5000000 and amt_1 >=  4000000       ) THEN  'R050000'
     WHEN ( amt_1 <   4000000 and amt_1 >=  3000000       ) THEN  'R040000'
     WHEN ( amt_1 <   3000000 and amt_1 >=  2000000       ) THEN  'R030000'
     WHEN ( amt_1 <   2000000 and amt_1 >=  1000000       ) THEN  'R020000'
     WHEN ( amt_1 <   1000000 and amt_1 >=  500000        ) THEN  'R010000'
     WHEN ( amt_1 <    500000 and amt_1 >=  100000        ) THEN  'R005000'
     WHEN ( amt_1 <    100000                             ) THEN  'R001000'             
END  as Ticket,    
CAST ( SUM(AMT_1/100) AS DECIMAL(10,2) )  
Count(*)     
FROM BASE24.PTLF 
GROUP BY  Ticket
                   
于 2021-11-24T23:55:18.993 回答