/*
@author:brunowu
@date:20080416
@desc:輸入乙個編號,找到下乙個自動編號的值,如輸入99,下乙個編號就為:1a,
*/procedure p_gen_cusno
(v_cusnocode_in varchar2,--輸入自編號
o_cusnocode out varchar2--下乙個自動編號)as
sub_a varchar2(1);
sub_b varchar2(1);
v_cusnocode varchar2(2);
v_ascii_a number;
v_ascii_b number;
begin
if length(v_cusnocode_in)<>2 then --如果輸入的值長度不為2,直接退出
goto eend;
end if;
v_cusnocode:=substr(v_cusnocode_in,1,2);
sub_a:=substr(v_cusnocode,1,1);
sub_b:=substr(v_cusnocode,2,1);
if v_cusnocode='99' then
o_cusnocode:='1a';
goto eend;
end if;
if v_cusnocode='9z' then
o_cusnocode:='a1';
goto eend;
end if;
if v_cusnocode='zz' then
o_cusnocode:='aa';
goto eend;
end if;
select a.ascii_a into v_ascii_a from dual
left join
( select ascii(sub_a) as ascii_a from dual
)a on 1=1;
select a.ascii_b into v_ascii_b from dual
left join
( select ascii(sub_b) as ascii_b from dual
)a on 1=1;
-- 00~99 1a~9z
--1第一位為數字,第二個為數字或字母
if (v_ascii_a >=48 and v_ascii_a<=57) and( (v_ascii_b >=48 and v_ascii_b<=57) or (v_ascii_b >=65 and v_ascii_b<=90) ) then
-- 1.1 第二個為字母
if v_ascii_b>=65 and v_ascii_b<=90 then
if v_ascii_a =48 then --開為為0,直接到 "1a"
o_cusnocode:='1a';
goto eend;
elsif v_ascii_b =90 then --如果尾數為'z'
o_cusnocode:=chr(v_ascii_a+1)||'a';
goto eend;
else
o_cusnocode:=sub_a||chr(v_ascii_b+1);
goto eend;
end if ;
-- 1.2 第二個為數字
else
o_cusnocode:=to_char(to_number(v_cusnocode)+1,'00');
goto eend;
end if;
end if;
-- a1~zz
if v_ascii_a >=65 and v_ascii_a<=90 then
if v_ascii_b=90 then --如果尾數為'z'
o_cusnocode:=chr(v_ascii_a+1)||'1';
goto eend;
elsif v_ascii_b=57 then --如果尾數為'9'
o_cusnocode:=sub_a||'a';
goto eend;
else
o_cusnocode:=sub_a||chr(v_ascii_b+1);
goto eend;
end if;
end if;
<>
null;
end;
Oracle帶引數的儲存過程
一 需求 為指定的員工,漲100塊錢的工資 並且列印漲前和漲後的薪水。二 帶引數儲存過程 給指定的員工漲 100,並且列印漲前和漲後的薪水 如何呼叫 begin raisesalay 7839 raisesalay 7566 commit end create orreplace procedure...
Oracle 帶引數的儲存過程
1 建立儲存過程 create procedure updatedemo ageparam in number asbegin update demo set age ageparam commit end 2 傳參執行 begin updatedemo 20 end 3 為儲存過程設定引數的預設值...
oracle儲存過程 帶引數的儲存過程
帶引數的儲存過程 舉例 為指定的員工漲100元的工資,列印漲前和漲後的工資 如果帶參,需要指定是輸入引數還是輸出引數 create orreplace procedure raisesalary eno in number as 定義乙個變數儲存漲前的薪水,引用emp中sal的型別作為psal的型別...