儲存過程1 包體的寫法

2021-04-15 13:00:55 字數 1277 閱讀 6477

由於專案中用到過一些儲存過程,以前都是別人寫。自己只管呼叫獲得返回值。現在清閒,沒事研究下。

packages裡面就是封裝好的儲存過程。由package和package body組成。每當建立乙個包的時候,就分別建立了這2個。其中package是暴露給我們外面可以用的。package body裡面除了有外面可以用的方法的實體。還可以寫一些自己內部的工具類。

我自己寫了乙個最簡單地的儲存過程。**如下:

這是寫在package裡面的。

create or replace package task_test is

function add(i_name varchar2 , i_id varchar2)return varchar2;

end task_test;

這是寫在package body裡面的。

create or replace package body task_test is

function add(i_name varchar2 , i_id varchar2)return varchar2 as pragma autonomous_transaction;

v_state varchar2(32767);

v_name varchar2(32767);

v_id varchar(32767);

begin

v_name:=i_name || '_temp';

v_id:=i_id || '_temp';

insert into temp_table(rend_num,temp_name,id)

values(1,v_name,v_id)

returning v_id into v_state;

commit;

return v_state;

exception

when others

then return -1;

end;

end task_test;

建立的時沒有什麼太大的區別。但是需要注意的是。暴露給外面可以呼叫的必須和裡面的實體一模一樣。也就是說,對於這個儲存過程來說,package body的add方法的as前面的必須和package一樣,否則編譯會抱錯。入參是唯讀的。如果在裡面需要做處理,必須另外寫乙個內部引數來處理。至於語法。。。。小弟學功甚淺,目前還沒研究透。不過基本思路和sql差不多。有sql的基礎,相信這個也不難。需要注意的是:每行結尾需要分號";",每個函式結尾都有"end;";,每個"if"對應乙個"end if;".也就是一一對應的關係吧.其他好像沒啥了.語法什麼的,擺渡一下就什麼都知道了. 

儲存過程寫法

引用 儲存過程呼叫 drop procedure if exists pro rep shadow rs delimiter rep shadow rs 用來處理資訊的增加,更新和刪除 每次只更新上次以來沒有做過的資料 根據不同的標誌位 需要乙個輸出的引數,如果返回為0,則呼叫失敗,事務回滾 如果返...

儲存過程寫法

引用 儲存過程呼叫 drop procedure if exists pro rep shadow rs delimiter rep shadow rs 用來處理資訊的增加,更新和刪除 每次只更新上次以來沒有做過的資料 根據不同的標誌位 需要乙個輸出的引數,如果返回為0,則呼叫失敗,事務回滾 如果返...

儲存過程寫法

建立儲存過程執行刪除操作 alter procedure dbo ad preempted timer asdeclare pid varchar 32 declare times date declare nowtime date declare difftime int 定義乙個游標 decla...