基本語法
1.過程和業(yè)務(wù)變量
CREAT OR REPLACE PROCEDURE procedure_name(I_param in CHAR,
O_param out VARCHAR2,
O_param0 out VARCHAR2) IS
-------------------------------調(diào)試變量------------------------------
v_msg varchar2(200); --返回信息
v_error integer;
v_object varchar2(50) default 'procedure_name'; --標(biāo)記操作對象
-------------------------------業(yè)務(wù)變量-------------------------------
--用于處理業(yè)務(wù)的臨時變量
v_date char(8); --業(yè)務(wù)時間
v_name1 number(19,4); --業(yè)務(wù)變量1
v_name2 varchar(20) ; --業(yè)務(wù)變量2
2.業(yè)務(wù)處理
BEGIN
--------------------------------業(yè)務(wù)處理-------------------------------
-----------變量賦值--
O_param0 := 0
O_param := '開始執(zhí)行'; -- :=用于賦值来庭,=用于判斷
v_date:=I_param; --in類型的變量
-----------創(chuàng)建臨時表(有時會用到)--
execute immediate 'truncate table table_name';
-----------可能用到的結(jié)構(gòu)--
for idx in (select t.* from table1 t) loop
v_name1 := idx.name1;
v_name2 := idx.name2;
if to_date(v_date,'yyyymmdd')+1>=num then
v_date := to_char(to_date(v_date,'yyyymmdd')+5,'yyyymmdd');
end if;
insert into table_name(var1,var2)
select var1,var2 from t1
where not exists(select * from table_name d
where d.var1=v_date); --exists用于挑選table_name中的數(shù)據(jù)
commit; --注意要commit葫笼,否則數(shù)據(jù)庫中不會變
end loop;
-----------主表table_mian--
insert into table_mian
(var1,
case
when t.var like '%-12-01%' then -- %通配符
'2019-12-3'
else
coalesce(t.var,'2019-11-01') -- coalesce按順序選擇非null值
end var2祥国,-- end后面還可以繼續(xù)case
'@'
select t.* from table_name t
left join table1 a
where t.id=a.id;
commit;
3.錯誤處理
-------------------------------業(yè)務(wù)結(jié)束------------------------------
O_param0 := 0 -- 即正常運行為0
O_param :='執(zhí)行成功'
EXCEPTION
when OTHERS then
O_param0 := SQLCODE; -- 錯誤碼
O_param := O_param || SQLERRM; --SQLERRM錯誤代碼錯誤信息
ROLLBACK; --回調(diào),回調(diào)沒有commit或者commit出錯的部分
v_error := O_param0;
v_msg := O_param;
-- 一般還會將錯誤信息寫入log
END;
oracle視圖惊畏,主要用于表的查詢轧飞,可結(jié)合存儲過程使用
--------------------------------基本語法-----------------------------
create or replace view view_name as
select t.var1,
t.var2
from t_name t
left join t1_name a
where t.id=a.id;