1

私は研修生の開発者であり、他の人のコードを担当しているため、私の仕事のほとんどは彼らの作業を変更することになります。Oracle 10g で Report builder を使用しています。

式に次の設定があります。

function get_addressFormula return Char is
begin
if :payee_ctc_id is not null then
begin
 select  a.address
        ,a.address2
        ,a.address3
        ,g.location
            ,g.ppostcode
 into    :address1
        ,:address2
        ,:address3
        ,:address4
        ,:postcode

 from ctc_address a
     ,geo_locations g

 where a.addresstypeid = 1  
 and   a.costcentreid = :payee_ctc_id
 and   g.locationid = a.locationid
 and   a.addressid = (select max(i.addressid)   
                      from  ctc_address i
            where i.costcentreid = :payee_ctc_id
            and   i.addresstypeid = 1);

exception
    when others then
      return null;

    while trim(:address1) is null and (trim(:address2) is not null or trim(:address2)  is not null or trim(:address4) is not null)
    loop
      :address1 := :address2; 
      :address2 := :address3; 
      :address3 := :address4; 
      :address4 := '';
    end loop;

    while trim(:address2) is null and (trim(:address3) is not null or trim(:address4) is not null)
    loop
      :address2 := :address3; 
      :address3 := :address4; 
      :address4 := '';
    end loop;

    while trim(:address3) is null and trim(:address4) is not null
    loop
      :address3 := :address4; 
      :address4 := '';
    end loop;

end;
else
 begin
  <else code>
 end;
 end if;

return 'y';
end;

これは、最後の else ブロックを除くすべての機能です。no_data_found を試しましたが、まだ機能しません。

@トンボーン。どうすればいいのかわかりません。これまでのところ、ほとんど運がなかったので、RAISE でいくつかのグーグルを実行しました。

4

1 に答える 1

4

ブロック構造を参照してください。

<< label >> (optional)
DECLARE    -- Declarative part (optional)
  -- Declarations of local types, variables, & subprograms

BEGIN      -- Executable part (required)
  -- Statements (which can use items declared in declarative part)

[EXCEPTION -- Exception-handling part (optional)
  -- Exception handlers for exceptions (errors) raised in executable part]
END;

BEGIN/ENDfor eachが必要ですEXCEPTION

if :payee_id is not null then    
   begin
      <Select statement which place results into placeholders>
   exception
      when NO_DATA_FOUND then
         return null;
   end;
   <code>    
else
   <else code>
end if;

また、 aがWHEN OTHERS続かないの使用はコードの悪臭であることに注意してください。すべてのエラーを無視したくないので、具体的に記述してください。通常、キャッチしたいのは.RAISENO_DATA_FOUND

于 2013-10-21T13:24:50.497 に答える