求助,ORACLE儲存過程問題!!

2021-04-01 23:41:02 字數 2712 閱讀 2502

v_str varchar2(500);--將小寫金額存成字串

v_dxje varchar2(500);--最後的大寫金額

v_i number;--單位對應的位置

v_j number;--數的位置

v_bety varchar2(500);--單位數轉換成的大寫

v_dwcn varchar2(5001);--單位跟大寫數字的組合

--小寫金額轉大寫金額

v_dxje:=null;

v_num:=length(v_ycxbte);

v_str:=to_char(v_ycxbte);

v_i:=0;

while v_i <= v_num-1 loop

v_dwcn:=null;

v_j:=v_num-v_i;

select substr(v_str,v_j,1) into v_bety from dual;

--判斷大寫金額

case v_bety

when '0' then

v_dwcn:='零'||v_dwcn;

when '1' then

v_dwcn:='壹'||v_dwcn;

when '2' then

v_dwcn:='貳'||v_dwcn;

when '3' then

v_dwcn:='叄'||v_dwcn;

when '4' then

v_dwcn:='肆'||v_dwcn;

when '5' then

v_dwcn:='伍'||v_dwcn;

when '6' then

v_dwcn:='陸'||v_dwcn;

when '7' then

v_dwcn:='柒'||v_dwcn;

when '8' then

v_dwcn:='捌'||v_dwcn;

when '9' then

v_dwcn:='玖'||v_dwcn;

end case;

--判斷單位

case v_i

when 0 then

v_dwcn:=v_dwcn||'圓';

when 1 then

v_dwcn:=v_dwcn||'拾';

when 2 then

v_dwcn:=v_dwcn||'佰';

when 3 then

v_dwcn:=v_dwcn||'仟';

when 4 then

v_dwcn:=v_dwcn||'萬';

when 5 then

v_dwcn:=v_dwcn||'拾'; 

when 6 then

v_dwcn:=v_dwcn||'佰';

when 7 then

v_dwcn:=v_dwcn||'仟';

when 8 then

v_dwcn:=v_dwcn||'億';

when 9 then

v_dwcn:=v_dwcn||'拾';

when 10 then

v_dwcn:=v_dwcn||'佰';

when 11 then

v_dwcn:=v_dwcn||'仟';

when 12 then

v_dwcn:=v_dwcn||'萬';

end case;

v_dxje:=v_dwcn||v_dxje;

v_i:=v_i+1;

end loop;

select replace(v_dxje,'零拾','零') into v_dxje from dual;

select replace(v_dxje,'零佰','零') into v_dxje from dual;

select replace(v_dxje,'零仟','零') into v_dxje from dual;

select replace(v_dxje,'零零零','零') into v_dxje from dual;

select replace(v_dxje,'零零','零') into v_dxje from dual;

select replace(v_dxje,'零億零萬零元','億元') into v_dxje from dual;

select replace(v_dxje,'億零萬零元','億元') into v_dxje from dual;

select replace(v_dxje,'零億零萬','億') into v_dxje from dual;

select replace(v_dxje,'零萬零元','萬元') into v_dxje from dual;

select replace(v_dxje,'萬零元','萬元') into v_dxje from dual;

select replace(v_dxje,'零億','億') into v_dxje from dual;

select replace(v_dxje,'零萬','萬') into v_dxje from dual;

select replace(v_dxje,'零元','元') into v_dxje from dual;

select replace(v_dxje,'零零','零') into v_dxje from dual;   

v_dxje:=v_dxje||'整';

這個是裡面的片斷,但是無法編譯,請問高手問題出在**!!

我用的是pl/sql工具。

Oracle 儲存過程問題

pl sql block structure 為什麼儲存過程中用不到 declare 但是還要有這個東西?a 儲存過程只是過程的一種,其他的要用到 為什麼在過程中寫select一定要加into?a 因為oracle認為過程中寫select不加into是沒有意義的 oracle中如何判斷null a ...

Oracle 儲存過程問題

今天在寫儲存過程時,發現oracle儲存過程報錯太模糊。不能指定到某一個具體行。不知道各位有沒有更好的除錯oracle儲存過程的方法和工具。create or replace procedure sp loadunsettledwatertask exp date in varchar,過期日期 r...

Oracle儲存過程許可權問題

儲存過程分成兩種許可權 1.定義者許可權 authid definer 2.呼叫者許可權 authid current user 預設的情況下使用的是定義者許可權。1。定義者許可權使用遇到的問題 當使用定義者許可權時候,不管是你自己去call,還是其他使用者去call,效果是一樣的,都是用你的許可權...

Oracle 儲存過程許可權問題

今天在寫儲存過程時遇到一個不大不小的問題,pl sql報 表或者試圖不存在,但是問題關鍵是單獨執行sql 四沒有問題的,人也很無奈,經查閱資料得知,是dba許可權問題。因為角色在函式 儲存過程 觸發器中都是失效的,也就是說,使用者從角色繼承過來的許可權,不能在函式 儲存過程 觸發器中使用。在函式 儲...

Oracle儲存過程呼叫儲存過程

oracle儲存過程呼叫有返回結果集的儲存過程一般用遊標的方式,宣告一個遊標,把結果集放到遊標裡面,然後迴圈遊標 declare newcs sys refcursor cs1 number cs2 number cstype table rowtype table列的個數和newcs返回的個數一樣...