使用declare在Oracle中声明局部变量

使用declare在Oracle中声明局部变量,oracle,loops,plsql,Oracle,Loops,Plsql,在MS SQL和Sybase中,我们将查询计数分配给变量,如下所示 declare @rate_count int select count(1) "Count" = @rate_count from (select DISTINCT RATE_CODE from APPROVED_RATE RATE where RATE.RATE_CHNG_IND = 'Y') 然而,在甲骨文中,我甚至不能声明?有什么帮助吗 因为取决于返回的值,而循环开始时 while (@rate_count &

在MS SQL和Sybase中,我们将查询计数分配给变量,如下所示

declare @rate_count int
select count(1) "Count"  =   @rate_count
from 
(select DISTINCT RATE_CODE from APPROVED_RATE RATE
where RATE.RATE_CHNG_IND = 'Y')
然而,在甲骨文中,我甚至不能声明?有什么帮助吗 因为取决于返回的值,而循环开始时

while (@rate_count > 1)
Begin
--

End

你当然可以申报

Declare 

rate_count number; 

begin 

select count(1) into rate_count
from 
(select DISTINCT RATE_CODE from APPROVED_RATE RATE
where RATE.RATE_CHNG_IND = 'Y');


dmbs_output.put_line(rate_count);
end;

在Oracle中,您可以像以下一样使用:

SQL> set serveroutput on;
SQL> declare 
 rate_count int;
begin 
 select count(1) "Count" into rate_count from (select DISTINCT RATE_CODE from APPROVED_RATE RATE where RATE.RATE_CHNG_IND = 'Y');
 dbms_output.put_line('Your Rate Count is : '||rate_count);
end;

Oracle不允许我们在块的declare部分执行SQL语句。因此,您需要做的是:

declare 
    rate_count pls_integer;
begin
    select count(DISTINCT RATE_CODE) 
    into rate_count 
    from APPROVED_RATE RATE
    where RATE.RATE_CHNG_IND = 'Y';

    while rate_count > 1 loop
        ....
这段时间要小心。除非你减少计数或有其他退出条件,否则代码将永远循环。也许你的意思是:

for idx in 1 .. rate_count loop