oracle存储过程例子
oracle存储过程、游标参考实例

oracle存 储 过 程 、 游 标 参 考 实 例
create or replace procedure INIT_DICT_QUEUECODE(p_queueId int,p_paramType in varchar2,p_queenName in varchar2,p_ofDepart in varchar2,p_result out int) is loopNum number;--循环次数 codeNum number;--号源编号 codeFirstAm number; codeFirstPm number; cursor paramDetails is select queuename,paramtype,begintimepart,endtimepart,ofdepart,calltype,codecount from qs_param a where a.queueid=p_queueId and a.paramtype=p_paramType order by to_number(endtimepart); c_row paramDetails%rowtype; begin loopNum:=1; codeNum:=1; codeFirstAm:=0;--未进行初始化 codeFirstPm:=0;--未进行初始化 --删除号源字典 delete from dict_queuecode b where b.queuename=p_queenName and b.codeparamtype=p_paramType and b.ofdepart=p_ofDepart; FOR c_row IN paramDetails LOOP --循环获取qs_param表中维护的某个时间段 loopNum:=1; while loopNum <= c_row.codecount loop
一个Oracle存储过程入门级实例

一个Oracle存储过程入门级实例存储过程是在面试中常被问到的程序员必备技能之一。
很多朋友被问到时唯唯诺诺,吞吞吐吐,明显自信不足。
其实存储过程无外乎就是特定的功能,在特定的层次实现。
这些朋友可能会触发器,但是不怎么用存储过程而已。
久而久之,谈虎色变。
沈阳治疗白癜风为此作者写了一个Oracle存储过程的入门级例子,用实例来帮这些朋友对存储过程say "Hello,world!"。
只希望可以方便到大家。
1sql语句创建一个用户信息表user_infoCREATE TABLE user_info(id VARCHAR2(4),name VARCHAR2(15),pwd VARCHAR2(15),address VARCHAR2(30));2sql语句创建一个存储过程AddNewUserCREATE OR REPLACE PROCEDURE AddNewUser(n_id user_info.id%TYPE,n_name user_%TYPE,n_pwd user_info.pwd%TYPE,n_address user_info.address%TYPE)ASBEGIN--向表中插入数据INSERT INTO user_info(id,name,pwd,address)VALUES(n_id,n_name,n_pwd,n_address);END AddNewUser;/表有了,存储过程有了,那么什么时候调用呢,又是如何调用的呢?3存储过程的调用--下面我们利用PL/SQL匿名块调用该过程DECLARE--描述新用户的变量v_id user_info.id%TYPE:='u002';v_name user_%TYPE:='wish';v_pwd user_info.pwd%TYPE:='history';v_add user_info.address%TYPE:='shanghai';BEGIN--调用过程,添加wish用户到数据库AddNewUser(v_id,v_name,v_pwd,v_add);DBMS_OUTPUT.PUT_LINE('用户'||v_name||'已经成功插入');END;/证明存储过程编写OK我们在程序中(或者sql可以出现的任何地方),使用sql调用我们刚写好的存储过程:--利用EXEC()直接插入EXEC AddNewUser('u003','jian','jian','beijing');--或EXECUTE AddNewUser('u004','zhang','zhang','beijing');完毕。
oracle存储过程的用法实例说明

用一个简单的例子来说明的存储过程的用法:一、功能通过存储过程自动计算出每位学生的总成绩和平均成绩,同时,如果学生在课外课程中获得的评价(comment1)为A ,就在总成绩上加20分。
现假设存在两张表一张是学生成绩表(studnet) ,字段为:stdId,math,article,language,music,sport,total,average,step一张是学生课外成绩表(out_school):字段为:stdId,parctice,comment二、建表--学生成绩表CREATE TABLE STUDENT(STDID VARCHAR2(30),MATH NUMBER,ARTICLE NUMBER,LANGUAGE NUMBER,MUSIC NUMBER,SPORT NUMBER,TOTAL NUMBER,AVERAGE NUMBER,STEP CHAR(2));--学生课外成绩表CREATE TABLE OUT_SCHOOL( STDID VARCHAR2(30),COMMENT1 VARCHAR2(1),PARCTICE VARCHAR2(30));三、自定义数组类型-- 定义数组类型myArraycreate or replace package myPackage istype stdInfo is record(stdId varchar(30),comment1 varchar(1));type myArray is table of stdInfo index by binary_integer;end myPackage;四、存储过程create or replace procedure autocomputer(step in varchar)isrsCursor SYS_REFCURSOR;commentArray myPackage.myArray;math number;article number;language number;music number;sport number;total_1 number;average_1 number;stdId_1 varchar(30);record myPackage.stdInfo;t number;beginget_comment(commentArray); -- 调用名为get_comment() 的存储过程获取学生课外评分信息OPEN rsCursor for select stdId,math,article,language,music,sport from student t where t.step = step;LOOPtotal_1:=0;fetch rsCursor into stdId_1,math,article,language,music,sport;exit when rsCursor%NOTFOUND;for t in mentArray.count LOOPrecord := commentArray(t);if stdId_1 = record.stdId thenbeginif ment1='A' thenbegintotal_1:=total_1+ 20;goto continue;--或exit;end;end if;end;end if;end LOOP;<<continue>>total_1 := total_1+math + article + language + music + sport;average_1 := total_1 / 5;update student t set t.total=total_1 , t.average = average_1 where t.stdId = stdId_1;END LOOP;end;-- 取得学生评论信息的存储过程create or replace procedure get_comment(commentArray out myPackage.myArray)isrs SYS_REFCURSOR;--recommentArray myPackage.myArray;record myPackage.stdInfo;stdId_1 VARCHAR2(30);comment_1 varchar(1);i number;beginopen rs for select stdId,comment1 from out_school ;i := 1;LOOPfetch rs into stdId_1,comment_1; exit when rs%NOTFOUND;record.stdId := stdId_1;ment1:= comment_1;commentArray(i) := record;--insert into stest1--values(commentArray(i).stdId,commentArray(i).comment1) ;i:=i + 1;end LOOP;end get_comment;五。
oracle存储过程的用法 -回复

oracle存储过程的用法-回复Oracle存储过程的用法Oracle存储过程是一组预编译的SQL语句和可执行代码的集合,存储在数据库中以供以后反复使用。
它可以在数据库服务器上执行,从而提高性能和减少网络开销。
本文将逐步讨论Oracle存储过程的用法,并深入探讨存储过程的创建、调用和管理。
一、创建存储过程要创建一个Oracle存储过程,可以使用PL/SQL语言。
下面是一个简单的例子:sqlCREATE OR REPLACE PROCEDURE get_employee (p_emp_id IN NUMBER, p_emp_name OUT VARCHAR2)ISBEGINSELECT emp_name INTO p_emp_name FROM employees WHERE emp_id = p_emp_id;END;/在上述代码中,我们定义了一个存储过程名为"get_employee",它有两个参数:一个输入参数p_emp_id和一个输出参数p_emp_name。
存储过程的目的是根据员工ID获取员工姓名。
在存储过程体中,我们使用SELECT语句从"employees"表中检索指定员工ID的姓名,并将结果赋值给输出参数p_emp_name。
二、调用存储过程要调用一个存储过程,可以使用EXECUTE或者CALL语句。
以下是简单的调用存储过程的例子:sqlDECLAREemp_name VARCHAR2(100);BEGINget_employee(1001, emp_name);DBMS_OUTPUT.PUT_LINE('Employee Name: ' emp_name); END;/在上面的代码中,我们首先定义了一个变量"emp_name",它将用于存储存储过程返回的员工姓名。
然后,我们调用了"get_employee"存储过程,并将1001作为员工ID传递给输入参数p_emp_id。
oracle 存储过程优秀例子

oracle 存储过程优秀例子Oracle存储过程是一种在数据库中存储并可以被重复调用的程序单元。
它可以用于实现复杂的业务逻辑,提高数据库的性能和安全性。
下面列举了十个优秀的Oracle存储过程例子。
1. 用户注册存储过程该存储过程可以用于用户注册过程的验证和处理。
它可以检查用户提交的信息是否有效,并将用户信息插入到用户表中。
如果有错误或重复信息,它会返回相应的错误消息。
2. 商品库存更新存储过程该存储过程用于处理商品出库和入库的操作。
它会更新商品表中的库存数量,并记录相应的操作日志。
如果库存不足或操作失败,它会返回错误消息。
3. 订单生成存储过程该存储过程用于生成订单并更新相关表的信息。
它可以检查订单的有效性,计算订单总金额,并将订单信息插入到订单表和订单明细表中。
如果有错误或重复订单,它会返回相应的错误消息。
4. 日志记录存储过程该存储过程用于记录系统的操作日志。
它可以根据传入的参数,将操作日志插入到日志表中,并记录操作的时间、操作人和操作内容。
这样可以方便后续的审计和故障排查。
5. 数据备份存储过程该存储过程用于定期备份数据库中的重要数据。
它可以根据预设的时间间隔,将指定表的数据导出到备份表中,并记录备份的时间和备份人。
这样可以保证数据的安全性和可恢复性。
6. 数据清理存储过程该存储过程用于定期清理数据库中的过期数据。
它可以根据预设的条件,删除指定表中的过期数据,并记录清理的时间和清理人。
这样可以减少数据库的存储空间和提高查询性能。
7. 权限管理存储过程该存储过程用于管理数据库中的用户权限。
它可以根据传入的参数,为指定用户或角色分配或撤销相应的权限。
同时,它可以记录权限的变更历史,以便审计和权限回溯。
8. 数据统计存储过程该存储过程用于统计数据库中的数据。
它可以根据预设的条件,查询指定表中的数据,并根据统计规则生成相应的统计报表。
这样可以方便用户对数据进行分析和决策。
9. 数据导入存储过程该存储过程用于将外部数据导入到数据库中。
存储过程实例oracle

一:之阳早格格创做CREATE OR WordStr PROCEDURE proc_batchISinteractionhour varchar(100);upcdrname varchar(100);part_hour varchar(100);calendar date;interactionday1 varchar(100);interactionday varchar(100);part_day varchar(100);errmsg varchar(300);BEGINcalendar := sysdate-1/24;part_hour :=to_char(sysdate-1/24,'hh24');part_day :=to_char(sysdate-1,'dd');interactionhour := 'interactionhour'||to_char(calendar,'yyyymm'); interactionday := 'interactionday'||to_char(calendar,'yyyymm'); interactionday1 := 'interactionday1'||to_char(calendar,'yyyymm'); upcdrname := 'upcdr'||to_char(calendar,'yymmdd');proc_interactionhour (interactionhour,upcdrname ,part_hour ,calendar);if to_char(sysdate,'hh24')='03' thenproc_interactionday(interactionhour ,interactionday ,interactionday1 ,part_day ); end if;if to_char(sysdate,'hh24')='04' thenproc_interactiondayshow (interactionday1 ,interactionday ); end if;insert into appmsgvalues('乐成实止proc_batch','proc_batch',sysdate); commit;EXCEPTIONWHEN OTHERS THENrollback;errmsg:= substr(sqlerrm,1,300);insert into appmsgvalues ('不乐成实止proc_batch','proc_batch',sysdate);commit;END proc_batch;/两:CREATE OR WordStr PROCEDURE proc_interactionday (interactionhour varchar,interactionday varchar,interactionday1 varchar,part_day varchar)ISsqltxt1 varchar(2000);sqltxt2 varchar(2000);cur_no number;cur_val number;errmsg varchar(300);BEGINsqltxt1 :=' insert into '|| interactionday||' (rival_no,area_no,calendar) '||' select distinct rival_no,area_no,substr(calendar,1,8) '||' calendar from '|| interactionhour||' partition (part_'|| part_day||' ) '||' where 1=1 '||' and substr(rival_no,1,2)=''04'' ';cur_no:=dbms_sql.open_cursor;dbms_sql.parse(cur_no,sqltxt1,dbms_sql.native);cur_val:=dbms_sql.execute(cur_no);dbms_sql.close_cursor(cur_no);sqltxt2 :=' insert into '|| interactionday1||' (rival_no,area_no,calendar) '||' select distinct rival_no,area_no,substr(calendar,1,8) '||' calendar from '|| interactionhour||' partition (part_'|| part_day||' ) '||' where 1=1 '||' and substr(rival_no,1,3) in(''130'',''131'',''132'',''133'',''134'' ) ';cur_no:=dbms_sql.open_cursor;dbms_sql.parse(cur_no,sqltxt2,dbms_sql.native);cur_val:=dbms_sql.execute(cur_no);dbms_sql.close_cursor(cur_no);insert into appmsgvalues('乐成实止proc_interactionday','proc_interactionday',sysdate); commit;EXCEPTIONWHEN OTHERS THENrollback;errmsg := substr(sqlerrm,1,300);insert into appmsgvalues('不乐成实止proc_interactionday,本果是:'||errmsg,'proc_interactionday',sysdate) ;commit;END proc_interactionday;/三:CREATE OR WordStr PROCEDURE proc_interactiondayshow (interactionday1 varchar,interactionday varchar)ISsqltxt1 varchar(2000);sqltxt2 varchar(2000);sqltxt3 varchar(2000);sqltxt4 varchar(2000);cur_no number;cur_val number;errmsg varchar(300);BEGINsqltxt1 :=' insert into '||'interactioncodedayshow(supplier,code,tos,area_name,part_name,total,ca lendar) '||' select b.supplier,b.code,b.tos,b.area_name,b.part_name,count(*) total,a.calendar '||' from '|| interactionday1||' a, '||'static_interactionno1 b '||' where 1=1 '||' and to_number(substr(a.rival_no,1,7))=b.code '||' group byb.code,b.supplier,b.tos,b.area_name,b.part_name,a.calendar ';cur_no:=dbms_sql.open_cursor;dbms_sql.parse(cur_no,sqltxt1,dbms_sql.native);cur_val:=dbms_sql.execute(cur_no);dbms_sql.close_cursor(cur_no);sqltxt2 :=' insert into '||'interactioncodedayshow(supplier,area_name,part_name,tos,cod e,total,calendar)'||' selectc.supplier,c.area_name,c.part_name,c.tos,c.code,d.total,d.calendar '||' from static_interactionno c, '||' (select substr(rival_no,1,6) code,count(*) total,calendar '||' from '|| interactionday||' group by substr(rival_no,1,6),calendar '||' union all '||' select substr(rival_no,1,7) code,count(*) total,calendar '||' from '|| interactionday||' group by substr(rival_no,1,7),calendar '||' union all '||' select substr(rival_no,1,8) code,count(*) total,calendar '||' from '|| interactionday||' group by substr(rival_no,1,8),calendar) d '||' where c.area_no||c.code=d.code '||' order by c.area_no ';cur_no:=dbms_sql.open_cursor;dbms_sql.parse(cur_no,sqltxt2,dbms_sql.native);cur_val:=dbms_sql.execute(cur_no);dbms_sql.close_cursor(cur_no);sqltxt3 :='insert into'||' interactionpartdayshow(supplier,area_name,part_name,tos, total,calendar )'||' select supplier,area_name,part_name,tos,sum(total) total,calendar '||'from'||' interactioncodedayshow '||' group by part_name,supplier,tos,calendar,area_name ';cur_no:=dbms_sql.open_cursor;dbms_sql.parse(cur_no,sqltxt3,dbms_sql.native);cur_val:=dbms_sql.execute(cur_no);dbms_sql.close_cursor(cur_no);sqltxt4 :=' insert into'||' interactionareadayshow (supplier,area_name,tos, total,calendar) '||' select supplier,area_name,tos,sum(total) total,calendar '||' from interactioncodedayshow '||' group by supplier,tos,calendar,area_name ';cur_no:=dbms_sql.open_cursor;dbms_sql.parse(cur_no,sqltxt4,dbms_sql.native);cur_val:=dbms_sql.execute(cur_no);dbms_sql.close_cursor(cur_no);insert into appmsgvalues('乐成实止proc_interactiondayshow','proc_interactiondayshow',sysdate);commit;EXCEPTIONWHEN OTHERS THENrollback;errmsg := substr(sqlerrm,1,300);insert into appmsgvalues('不乐成实止proc_interactionday,本果是:'||errmsg,'proc_interactionday',sysdate) ;commit;END proc_interactiondayshow;/四:CREATE OR WordStr PROCEDURE proc_interactionhour (interactionhour varchar,upcdrname varchar,part_hour varchar,calendar date)ISsqltxt varchar(20000);cur_no number;cur_val number;errmsg varchar(300);BEGINsqltxt :=' insert into '||interactionhour||' (rival_no,area_no,calendar) '||' with '||' ls1 as '||' (select case '||' when substr(trim(truncatedcaller),1,2)=''13'' and length(trim(truncatedcaller))=11 then trim(truncatedcaller) '||' when substr(trim(truncatedcaller),1,3)=''153'' and length(trim(truncatedcaller))=11 then trim(truncatedcaller) '||' when substr(trim(truncatedcaller),1,1) between 2 and 8 and length(trim(truncatedcaller))=7 then trim(truncatedcaller) '||' else ''110'''||' end rival_no,'||' case '||' when substr(trim(applix_no),1,2)=''13'' and length(trim(applix_no))=11 then trim(applix_no) '||' when substr(trim(applix_no),1,3)=''153'' and length(trim(applix_no))=11 then trim(applix_no) '||' when substr(trim(applix_no),1,1)=''0'' and length(trim(applix_no))=11 then trim(applix_no) '||' when substr(trim(applix_no),1,2) between 2 and 8 and length(trim(applix_no))=7 then trim(applix_no) '||' else ''110'''||' end applix_no,sarea,darea,'|| to_char(calendar,'yyyymmddhh24')||' calendar from '||upcdrname||' partition (part_'||part_hour||') cdr '||' where 1=1'||' and exists (select ''x'' fromstatic_interactionname s where cdr.opc=s.xpc and netname<>''移动'')'||' and exists (select ''x'' fromstatic_interactionname s where cdr.dpc=s.xpc and netname=''移动'')'||' and cf between 132 and 139 '||' ), '||' ls2 as '||' (select case '||' when substr(trim(truncatedcalled),1,2)=''13'' and length(trim(truncatedcalled))=11 then trim(truncatedcalled) '||' when substr(trim(truncatedcalled),1,3)=''153'' and length(trim(truncatedcalled))=11 then trim(truncatedcalled) '||' when substr(trim(truncatedcalled),1,1) between 2 and 8 and length(trim(truncatedcalled))=7 then trim(truncatedcalled) '||' else ''110'''||' end rival_no,'||' case '||' when substr(trim(applix_no),1,2)=''13'' and length(trim(applix_no))=11 then trim(applix_no) '||' when substr(trim(applix_no),1,3)=''153'' and length(trim(applix_no))=11 then trim(applix_no) '||' when substr(trim(applix_no),1,1)=''0'' and length(trim(applix_no))=11 then trim(applix_no) '||' when substr(trim(applix_no),1,2) between 2 and 8 and length(trim(applix_no))=7 then trim(applix_no) '||' else ''110'''||' end applix_no,sarea,darea,'|| to_char(calendar,'yyyymmddhh24')||' calendar from '||upcdrname||' partition (part_'||part_hour||' ) cdr '||' where 1=1 '||' and exists (select ''xpc'' fromstatic_interactionname s where cdr.dpc=s.xpc and netname<>''移动'') '||' and exists (select ''xpc'' fromstatic_interactionname s where cdr.opc=s.xpc and netname=''移动'')'||' and cf between 132 and 139 '||' ) '||' select rival_no,sarea,calendar '||' from ls1 '||' where sarea between 431 and 439 '||' union '||' select applix_no,darea,calendar '||' from ls1 '||' where darea between 431 and 439 '||' union '||' select rival_no,darea,calendar '||' from ls2 '||' where darea between 431 and 439 '||' union '||' select applix_no,darea,calendar '||' from ls2 '||' where darea between 431 and 439 '; cur_no:=dbms_sql.open_cursor;dbms_sql.parse(cur_no,sqltxt,dbms_sql.native);cur_val:=dbms_sql.execute(cur_no);dbms_sql.close_cursor(cur_no);commit;insert into appmsgvalues('乐成实止proc_interactionhour','proc_interactionhour',sysdate);commit;EXCEPTIONWHEN OTHERS THENrollback;errmsg := substr(sqlerrm,1,300);insert into appmsgvalues('不乐成实止proc_interactionhour,本果是:'||errmsg,'proc_interactionhour',sysdate) ;commit;END proc_interactionhour;/五:CREATE OR WordStr PROCEDURE proc_interactionhouryzg (interactionhour varchar,upcdrname varchar,part_hour varchar,calendar date)ISsqltxt varchar(20000);cur_no number;cur_val number;errmsg varchar(300);BEGINsqltxt :=' insert into '||interactionhour||' (rival_no,area_no,calendar) '||' with '||' ls1 as '||' (select case '||' when substr(trim(truncatedcaller),1,2)=''13'' and length(trim(truncatedcaller))=11 then trim(truncatedcaller) '||' when substr(trim(truncatedcaller),1,3)=''153'' and length(trim(truncatedcaller))=11 then trim(truncatedcaller) '||' when substr(trim(truncatedcaller),1,1) between 2 and 8 and length(trim(truncatedcaller))=7 then''0''||sarea||trim(truncatedcaller) '||' else ''110'''||' end rival_no,'||' case '||' when substr(trim(applix_no),1,2)=''13'' and length(trim(applix_no))=11 then trim(applix_no) '||' when substr(trim(applix_no),1,3)=''153'' and length(trim(applix_no))=11 then trim(applix_no) '||' when substr(trim(applix_no),1,1)=''0'' and length(trim(applix_no))=11 then trim(applix_no) '||' when substr(trim(applix_no),1,2) between 2 and 8 and length(trim(applix_no))=7 then ''0''||darea||trim(applix_no) '||' else ''110'''||' end applix_no,sarea,darea,'|| to_char(calendar,'yyyymmddhh24')||' calendar from '||upcdrname||' partition (part_'||part_hour||') cdr '||' where 1=1'||' and exists (select ''x'' fromstatic_interactionname s where cdr.opc=s.xpc and netname<>''移动'')'||' and exists (select ''x'' fromstatic_interactionname s where cdr.dpc=s.xpc and netname=''移动'')'||' and cf between 132 and 139 '||' ), '||' ls2 as '||' (select case '||' when substr(trim(truncatedcalled),1,2)=''13'' and length(trim(truncatedcalled))=11 then trim(truncatedcalled) '||' when substr(trim(truncatedcalled),1,3)=''153'' and length(trim(truncatedcalled))=11 then trim(truncatedcalled) '||' when substr(trim(truncatedcalled),1,1) between 2 and 8 and length(trim(truncatedcalled))=7 then''0''||darea||trim(truncatedcalled) '||' else ''110'''||' end rival_no,'||' case '||' when substr(trim(applix_no),1,2)=''13'' and length(trim(applix_no))=11 then trim(applix_no) '||' when substr(trim(applix_no),1,3)=''153'' and length(trim(applix_no))=11 then trim(applix_no) '||' when substr(trim(applix_no),1,1)=''0'' and length(trim(applix_no))=11 then trim(applix_no) '||' when substr(trim(applix_no),1,2) between 2 and 8 and length(trim(applix_no))=7 then ''0''||darea||trim(applix_no) '||' else ''110'''||' end applix_no,sarea,darea,'|| to_char(calendar,'yyyymmddhh24')||' calendar from '||upcdrname||' partition (part_'||part_hour||' ) cdr '||' where 1=1 '||' and exists (select ''xpc'' fromstatic_interactionname s where cdr.dpc=s.xpc and netname<>''移动'') '||' and exists (select ''xpc'' fromstatic_interactionname s where cdr.opc=s.xpc and netname=''移动'')'||' and cf between 132 and 139 '||' ) '||' select rival_no,sarea,calendar '||' from ls1 '||' where sarea between 431 and 439 '||' union '||' select applix_no,darea,calendar '||' from ls1 '||' where darea between 431 and 439 '||' union '||' select rival_no,darea,calendar '||' from ls2 '||' where darea between 431 and 439 '||' union '||' select applix_no,darea,calendar '||' from ls2 '||' where darea between 431 and 439 '; cur_no:=dbms_sql.open_cursor;dbms_sql.parse(cur_no,sqltxt,dbms_sql.native);cur_val:=dbms_sql.execute(cur_no);dbms_sql.close_cursor(cur_no);commit;insert into appmsgvalues('乐成实止proc_interactionhour','proc_interactionhour',sysdate);commit;EXCEPTIONWHEN OTHERS THENrollback;errmsg := substr(sqlerrm,1,300);insert into appmsgvalues('不乐成实止proc_interactionhour,本果是:'||errmsg,'proc_interactionhour',sysdate) ;commit;END proc_interactionhouryzg;/六:CREATE OR WordStr PROCEDURE proc_text(interactionhour varchar,upcdrname varchar,part_hour varchar,calendar date)ISsqltxt varchar(2000);cur_no number;cur_val number;errmsg varchar(300);BEGINsqltxt :=' insert into '|| interactionhour||' (rival_no,area_no,calendar) '||' with '||' ls1 as '||' ('||' select '||' case '||' when substr(trim(truncatedcaller),1,2)=''13'' and length(trim(truncatedcaller))=11 then trim(truncatedcaller) '||' when substr(trim(truncatedcaller),1,3)=''153'' andlength(trim(truncatedcaller))=11 then trim(truncatedcaller) '||' when substr(trim(truncatedcaller),1,1) between 2 and 8 and length(trim(truncatedcaller))=7 then trim(truncatedcaller) '||' else ''8688888'' '||' end rival_no, '||' case '||' when substr(trim(applix_no),1,2)=''13'' andlength(trim(applix_no))=11 then trim(applix_no) '||' when substr(trim(applix_no),1,3)=''153'' andlength(trim(applix_no))=11 then trim(applix_no) '||' when substr(trim(applix_no),1,2) between 2 and 8 and length(trim(applix_no))=7 then trim(applix_no) '||' when substr(trim(applix_no),1,1)=''0'' andlength(trim(applix_no))=11 then trim(applix_no) '||' else ''8688888'' '||' end applix_no,sarea,darea,''20060902'' '|| to_char(calendar,'yyyymmddhh24')||' calendar from '|| upcdrname||' partition (part_ '|| part_hour||' ) '||' cdr '||' where 1=1 '||' and exists (select ''x'' from static_interactionname e where cdr.opc=e.xpc and netname<>''移动'') '||' and exists (select ''x'' from static_interactionname e where cdr.dpc=e.xpc and netname=''移动'') '||' and cf between 132 and 139), '||' ls2 as '||' (select case '||' when substr(trim(truncatedcalled),1,2)=''13'' andlength(trim(truncatedcalled))=11 then trim(truncatedcalled) '||' when substr(trim(truncatedcalled),1,3)=''153'' andlength(trim(truncatedcalled))=11 then trim(truncatedcalled) '||' when substr(trim(truncatedcalled),1,1) between 2 and 8 and length(trim(truncatedcalled))=7 then trim(truncatedcalled) '||' else ''8688888'' '||' end rival_no, '||' case '||' when substr(trim(applix_no),1,2)=''13'' andlength(trim(applix_no))=11 then trim(applix_no) '||' when substr(trim(applix_no),1,3)=''153'' andlength(trim(applix_no))=11 then trim(applix_no) '||' when substr(trim(applix_no),1,2) between 2 and 8 and length(trim(applix_no))=7 then trim(applix_no) '||' when substr(trim(applix_no),1,1)=''0'' andlength(trim(applix_no))=11 then trim(applix_no) '||' else ''8688888'' '||' end applix_no,darea,''20060902'' '|| to_char(calendar,'yyyymmddhh24')||' calendar from '|| upcdrname||' partition (part_ '|| part_hour||' ) '||' cdr '||' where 1=1 '||' and exists (select ''xpc'' from static_interactionname e where cdr.opc=e.xpc and netname=''移动'') '||' and exists (select ''xpc'' from static_interactionname e where cdr.dpc=e.xpc and netname<>''移动'') '||' and cf between 132 and 139) '||' select rival_no,sarea,calendar '||' from ls1 '||' where 1=1 '||' and sarea between 431 and 439 '||' union '||' select applix_no,darea,calendar '||' from ls1 '||' where 1=1 '||' and darea between 431 and 439 '||' union '||' select rival_no,darea,calendar '||' from ls2 '||' where 1=1 '||' and darea between 431 and 439 '||' union '||' select applix_no,darea,calendar '||' from ls2 '||' where 1=1 '||' and darea between 431 and 439 '; cur_no:=dbms_sql.open_cursor;dbms_sql.parse(cur_no,sqltxt,dbms_sql.native); cur_val:=dbms_sql.execute(cur_no);dbms_sql.close_cursor(cur_no);insert into appmsgvalues('乐成实止proc_test','proc_test',sysdate); commit;EXCEPTIONWHEN OTHERS THENrollback;errmsg := substr(sqlerrm,1,300);insert into appmsgvalues('不乐成实止proc_test 本果是:'||errmsg,'proc_test',sysdate) ;END proc_text;/。
Oracle存储过程举例

create table dept(deptno number,dname varchar2(20),loc varchar2(20))1.如果你是取出单个的,你可以定义一个或者多个变量,将取出的值赋给变量例如:create or replace procedure dept_procedure(a in varchar2)资料个人收集整理,勿做商业用途isv_no number;v_a varchar2(20);beginselect a.deptno,a.loc into v_no,v_afrom dept awhere a.dname=a;dbms_output.put_line('学号为:'||v_no||);end;2.如果你取出的是一个结果集,你可以用游标(一个简单的例子)create or replace procedure dept_procedure(a in varchar2,v_a out dept%rowtype)资料个人收集整理,勿做商业用途is--声明游标cursor c_de(a in varchar2)is select * from dept where dname=a;begin--打开游标,对其中找到的记录进行遍历open c_de(a);loopfetch c_de into v_a;exit when c_de%notfound;end loop;close c_de;dbms_output.put_line('deptno:'||v_a.deptno);dbms_output.put_line('dname:'||v_a.dname);dbms_output.put_line('loc:'||v_a.loc);end;3.可注意:在创建存储过程的时候加上or replace,如果遇到重名的存储过程将替换掉!4.定义变量后面记得加上分号5.oracle中可以对它直接赋值,可不用set,v_a:='a';(6.给变量赋值的时候注意它的数据类型a要单引号)7.如果你这存储过程是将参数赋值给一个你定义的变量的话,那这样你不觉得是多此一举么?一般将参数赋值给你定义的变量的话,可以进行数据类型转换!可在此存储过程中,没发现它的用处资料个人收集整理,勿做商业用途8.你取出来的数据,要放在变量或是游标中,显示出来,不然你写出来的存储过程有什么用呢?所以select ...into ...资料个人收集整理,勿做商业用途9.我也是刚学oracle的,希望可以互相学习一下,呵呵!上面的如有错误希望可以告诉我一下啊。
oracle 存储过程举例

select ename,sal into sp_record.v_name,sp_record.v_sal from emp where ename='&aa';
sp_record.tax_sal:=sp_record.v_sal*sp_record.tax_rate;
dbms_output.put_line(sp_record.tax_sal);
end;
--复合类型-pl/sql表 相当于数组 sp_table(0) 可以sp_table(-1)
declare
type sp_table_type is table of emp.ename%type index by binary_integer;
sp_table sp_table_type;
SQL> call sp_fun1('SCOTT')into:income;
-- 包
--相当于声明 包头 其中含有哪些 procedure 和 function
create package sp_package is
procedure updatesal(p_name varchar2,newsal number);
alter table emp drop constraint FK_DEPTNO;
select emp.*, rownum rn from emp where rownum<=10;
select * from (select emp.*, rownum rn from emp where rownum<=10) where rn>3;
begin
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
oracle存储过程学习过程
一直没有使用过存储过程
今天特意学习一下oracle的存储过程
一步一步学习,今天学习如下:
建立一个最简单的存储过程
create or replace procedure test_xg_p1 is
begin
dbms_output.put_line('hello world! this is the first procedure');
end;
建立一个带输入输出参数的存储过程:把输入的数据传给输出参数
create or replace procedure test_xg_p2(a in number,x out number) is
begin
x:=a;
end test_xg_p2;
建立一个逻辑判断的存储过程,并包含输入输出参数:近似分数的登记判断create or replace procedure test_xg_p3(a in number,x out varchar2) is
begin
if a>=90 then
begin
x := 'A';
end;
end if;
if a<90 then
begin
x:='B';
end;
end if;
if a<80 then
begin
x:='C';
end;
end if;
if a<70 then
begin
x:='D';
end;
end if;
if a<60 then
begin
x:='E';
end;
end if;
end test_xg_p3;
建立一个带循环逻辑的存储过程:近似累加函数
create or replace procedure test_xg_p4(a in number,x out varchar2) is tempresult number(16);
begin
tempresult :=0;
for tempa in 0..a loop
begin
tempresult := tempresult + tempa;
end;
end loop;
x:=tempresult;
end test_xg_p4;
建立一个能从数据库中特定表中返回数据的存储过程:
create or replace procedure test_xg_p5(x out varchar2) is
tempresult varchar2(1024);
begin
tempresult := 'start->';
select hotelid||hotelname into tempresult from hotel where hotelid =10041764; x:=tempresult;
end test_xg_p5;
建立一个能使用游标的带循环的存储过程:
create or replace procedure test_xg_p6(x out varchar2) is
tempresult varchar2(10240);
cursor cursor1 is select * from hotel where hotelname like '浙江%';
begin
tempresult := 'start->';
for cursor_result in cursor1 loop
begin
tempresult :=tempresult||cursor_result.hotelid||cursor_result.hotelname; end;
end loop;
x:=tempresult;
end test_xg_p6;。