oracle 含參帶游標的儲存過程

2021-08-26 07:07:41 字數 2331 閱讀 7449

系統中有個模組的基礎資料需要導到資料庫,由於資料量比較大,而且**內容分布較凌亂。就先將資料匯入臨時表,然後根據臨時表進行有效的檢索並新增到對應的表中。今天下午寫了個含有引數,帶游標的儲存過程。算是把這個問題給解決了。

本人需求大致如下:現有臨時表"sheet1$",資料是直接從excel的sheet1中讀取然後自定義的,所以表名比較怪異。還有兩張表分別是f_template,f_content.表結構如下:

create table f_template

(tpl_id varchar2(20) primary key,

tpl_name varchar2(100) ,

work_type varchar2(10) ,

vol_level varchar2(15) ,

org_id varchar2(10) ,

create_date timestamp)

create table f_content

(rc_id varchar2(20) primary key,

project_name varchar2(100),

content varchar2(2000),

control_measure varchar2(2500),

is_public varchar2(10),

tpl_id varchar2(20),

foreign key tpl_id references to f_template(tpl_id))

alter table f_content

add constraint fk_content_template 

foreign key(tpl_id) references f_template(tpl_id);

create or replace procedure pro_insert_temp

(tplid in number,--風險辨識範本id

rcid  in number,--風險辨識範本內容id

worktype in varchar2,--風險型別

orgid in varchar2--市局組織id)as

cur_tplid number :=tplid;--將輸入引數tplid賦值給當前

cur_rcid  number :=rcid; --將輸入引數rcid賦值給當前

tplname "sheet1$".a%type;--風險辨識專案

last_tplname "sheet1$".a%type :='def';--上一風險辨識專案

pubmark "sheet1$".b%type;--是否公共

projectname "sheet1$".c%type;--辨識專案

content "sheet1$".d%type;--辨識內容

measure "sheet1$".e%type;--控制措施

cursor c_sheet is select a,b,c,d,e from "sheet1$";

begin

open c_sheet ;--開啟游標

loop

fetch c_sheet into tplname, pubmark, projectname, content, measure;--游標下移

exit when c_sheet %notfound;--退出條件

if(last_tplname='def' or last_tplname <> tplname) --判斷是否同一風險辨識範本,不是則進入

then

cur_tplid:=cur_tplid+1;  --範本id自增長

insert into f_template(tpl_id,tpl_name,work_type,org_id,create_date)--新增範本

values(cur_tplid ,tplname ,worktype ,orgid,sysdate);

last_tplname:=tplname;     

end if; 

cur_rcid:=cur_rcid+1;--範本內容id自增長

insert into f_content(rc_id,project_name,content,control_measure,is_public,tpl_id)

values(cur_rcid,projectname,content,measure,pubmark,cur_tplid);--新增範本內容記錄

end loop;--游標迴圈結束

close c_sheet;--關閉游標

end pro_insert_temp;--儲存過程結束

exec pro_insert_temp(0,0,'變電檢修','3');

oracle帶游標的儲存過程

create or replace procedure xs test add19 is bachelor edu varchar2 2000 new bachelor edu varchar2 2000 aa varchar2 2000 bb varchar2 2000 edu length in...

oracle 帶游標的儲存過程

如果各位以前從來沒有寫儲存過程,可得仔細了,因為在進行儲存過程編寫的時候,新手很容易出錯,非常容易。執行儲存過程各個oracle客戶端是不是樣的 可能你在網上看到的是呼叫exec,但是你再怎以呼叫你都執行不了,原因何在,因為exec是pl sql develop裡面的乙個程式,而你當前使用oracl...

二十 游標的屬性及帶參游標

declare cursor emp cur is select from emp 宣告游標 emp var emp rowtype 宣告變數 變數emp var是表emp的行型別 begin if emp cur isopen then 判斷游標是否開啟 loop fetch emp cur in...