oracle存储过程例子

合集下载

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存储过程入门级实例存储过程是在面试中常被问到的程序员必备技能之一。

很多朋友被问到时唯唯诺诺,吞吞吐吐,明显自信不足。

其实存储过程无外乎就是特定的功能,在特定的层次实现。

这些朋友可能会触发器,但是不怎么用存储过程而已。

久而久之,谈虎色变。

沈阳治疗白癜风为此作者写了一个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存储过程的用法实例说明

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存储过程的用法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存储过程是一种在数据库中存储并可以被重复调用的程序单元。

它可以用于实现复杂的业务逻辑,提高数据库的性能和安全性。

下面列举了十个优秀的Oracle存储过程例子。

1. 用户注册存储过程该存储过程可以用于用户注册过程的验证和处理。

它可以检查用户提交的信息是否有效,并将用户信息插入到用户表中。

如果有错误或重复信息,它会返回相应的错误消息。

2. 商品库存更新存储过程该存储过程用于处理商品出库和入库的操作。

它会更新商品表中的库存数量,并记录相应的操作日志。

如果库存不足或操作失败,它会返回错误消息。

3. 订单生成存储过程该存储过程用于生成订单并更新相关表的信息。

它可以检查订单的有效性,计算订单总金额,并将订单信息插入到订单表和订单明细表中。

如果有错误或重复订单,它会返回相应的错误消息。

4. 日志记录存储过程该存储过程用于记录系统的操作日志。

它可以根据传入的参数,将操作日志插入到日志表中,并记录操作的时间、操作人和操作内容。

这样可以方便后续的审计和故障排查。

5. 数据备份存储过程该存储过程用于定期备份数据库中的重要数据。

它可以根据预设的时间间隔,将指定表的数据导出到备份表中,并记录备份的时间和备份人。

这样可以保证数据的安全性和可恢复性。

6. 数据清理存储过程该存储过程用于定期清理数据库中的过期数据。

它可以根据预设的条件,删除指定表中的过期数据,并记录清理的时间和清理人。

这样可以减少数据库的存储空间和提高查询性能。

7. 权限管理存储过程该存储过程用于管理数据库中的用户权限。

它可以根据传入的参数,为指定用户或角色分配或撤销相应的权限。

同时,它可以记录权限的变更历史,以便审计和权限回溯。

8. 数据统计存储过程该存储过程用于统计数据库中的数据。

它可以根据预设的条件,查询指定表中的数据,并根据统计规则生成相应的统计报表。

这样可以方便用户对数据进行分析和决策。

9. 数据导入存储过程该存储过程用于将外部数据导入到数据库中。

存储过程实例oracle

存储过程实例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存储过程举例

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 存储过程举例

oracle 存储过程举例
begin
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

Oracle数据库中存储过程的学习实例

Oracle数据库中存储过程的学习实例

测试用表student:1.实例1:Oracle存储过程返回结果集--声明一个packagecreate or replace package package_pro_test astype cursor_rs is ref cursor;Procedure proc_test(p_rs out cursor_rs);end package_pro_test;--实现package体,创建存储过程-- IN 和OUT 参数--java将IN 参数传给 CallableStatement 对象是通过 setXXX 方法完成--的。

该方法继承自--PreparedStatement。

所传入参数的类型决定了所用的setXXX 方法--(例如,用 setFloat 来传入float 值等)。

CREATE OR REPLACE Package Body PACKAGE_PRO_TEST IsProcedure proc_test(p_rs out cursor_rs)isbeginopen p_rs for'select * from student';end proc_test;end PACKAGE_PRO_TEST;//java中调用存储过程import java.sql.CallableStatement;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.Statement;import oracle.jdbc.OracleResultSet;/**** 调用存储过程获取查询结果集* @author gwy**/public class Test1 {public static void main(String[] args) {Connection conn = null;Statement stmt = null;ResultSet rs = null;try {Class.forName("oracle.jdbc.driver.OracleDriver");conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", "scott", "tiger");System.out.println("连接成功!");//核心代码:/*** 通过call调用PACKAGE_PRO_TEST.proc_test存储过程。

oracle数据库存储过程写法

oracle数据库存储过程写法

oracle数据库存储过程写法在Oracle数据库中,存储过程可以使用PL/SQL语言进行编写。

以下是一个简单的Oracle数据库存储过程的示例:```CREATE OR REPLACE PROCEDURE my_procedureIS-- 声明变量my_variable VARCHAR2(100);BEGIN-- 初始化变量my_variable := 'Hello, World!';-- 打印变量值DBMS_OUTPUT.PUT_LINE(my_variable);END;/```在这个示例存储过程中,我们首先使用`CREATE OR REPLACE PROCEDURE`语句定义存储过程,并指定存储过程的名称为`my_procedure`。

在存储过程主体中,我们声明了一个名为`my_variable`的变量,并使用`VARCHAR2(100)`指定了变量的数据类型和最大长度。

在`BEGIN`和`END`关键字之间,我们可以编写存储过程的逻辑。

在这个例子中,我们将字符串`Hello, World!`赋值给`my_variable`变量,并使用`DBMS_OUTPUT.PUT_LINE`过程将变量的值打印到输出窗口。

要执行这个存储过程,可以使用`EXECUTE`语句,例如:```EXECUTE my_procedure;```这将执行`my_procedure`存储过程,并在输出窗口中打印`Hello, World!`。

注意,在执行存储过程之前,需要先启用输出窗口,可以使用以下SQL语句启用输出窗口:```SET SERVEROUTPUT ON;```。

oracle 存储过程优秀例子

oracle 存储过程优秀例子

oracle 存储过程优秀例子Oracle存储过程是一种在数据库中存储和执行SQL语句的过程。

它可以接受参数并返回结果,用于实现复杂的业务逻辑和数据操作。

下面是10个优秀的Oracle存储过程示例,展示了不同方面的功能和用法。

1. 创建表并插入数据```sqlCREATE PROCEDURE create_employee_table ASBEGINEXECUTE IMMEDIATE 'CREATE TABLE employee (id NUMBER, name VARCHAR2(100))';EXECUTE IMMEDIATE 'INSERT INTO employee VALUES (1, ''John Doe'')';EXECUTE IMMEDIATE 'INSERT INTO employee VALUES (2, ''Jane Smith'')';END;```这个存储过程创建了一个名为employee的表,并插入了两条数据。

2. 更新员工姓名```sqlCREATE PROCEDURE update_employee_name(p_id NUMBER,p_name VARCHAR2) ASBEGINUPDATE employee SET name = p_name WHERE id = p_id;COMMIT;END;```这个存储过程接受员工的ID和新的姓名作为参数,然后更新对应员工的姓名。

3. 删除员工记录```sqlCREATE PROCEDURE delete_employee(p_id NUMBER) AS BEGINDELETE FROM employee WHERE id = p_id;COMMIT;END;```这个存储过程接受员工的ID作为参数,然后删除对应的员工记录。

oracle存储过程例子

oracle存储过程例子

oracle存储过程学习过程基础篇一直没有使用过存储过程今天特意学习一下oracle的存储过程一步一步学习,今天学习如下:建立一个最简单的存储过程create or replace procedure test_xg_p1 isbegindbms_output.put_line('hello world! this is the first procedure');end;建立一个带输入输出参数的存储过程:把输入的数据传给输出参数create or replace procedure test_xg_p2(a in number,x out number) isbeginx:=a;end test_xg_p2;建立一个逻辑判断的存储过程,并包含输入输出参数:近似分数的登记判断create or replace procedure test_xg_p3(a in number,x out varchar2) isbeginif a>=90 thenbeginx := 'A';end;end if;if a<90 thenbeginx:='B';end;end if;if a<80 thenbeginx:='C';end;end if;if a<70 thenbeginx:='D';end;end if;if a<60 thenbeginx:='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);begintempresult :=0;for tempa in 0..a loopbegintempresult := tempresult + tempa;end;end loop;x:=tempresult;end test_xg_p4;建立一个能从数据库中特定表中返回数据的存储过程:create or replace procedure test_xg_p5(x out varchar2) istempresult varchar2(1024);begintempresult := '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) istempresult varchar2(10240);cursor cursor1 is select * from hotel where hotelname like '浙江%';begintempresult := 'start->';for cursor_result in cursor1 loopbegintempresult :=tempresult||cursor_result.hotelid||cursor_result.hotelname; end;end loop;x:=tempresult;end test_xg_p6;。

C#使用oracle存储过程例子

C#使用oracle存储过程例子
parameters[1].Direction=ParameterDirection.Output;
parameters[2].Direction=ParameterDirection.InputOutput;
try
try
{
conn.Open();
cmd=new OracleCommand();
cmd.Connection=conn;
public OraOprater()
{
string mConn="data source=;user id=ora;password=ora"; //连接数据库
conn=new OracleConnection(mConn);
};
parameters[0].Value=m_A;
parameters[2].Value=m_B;
parameters[0].Direction=ParameterDirection.Input;
{
RunProcedure("proce_test",parameters);
return parameters[1].Value.ToString();
}
catch(Exception e)
Oracle方面
1.创建Oracle过程存储
create or replace procedure proce_test(paramin in varchar2,paramout out varchar2,paraminout in out varchar2)
as
varparam varchar2(28);
{
throw e;

oracle存储过程和函数例子

oracle存储过程和函数例子

oracle存储过程和函数例⼦关于游标if,for的例⼦create or replace procedure peace_ifiscursor var_c is select*from grade;beginfor temp in var_c loopif temp.course_name ='OS'thendbms_output.put_line('Stu_name = '||temp.stu_name);elsif temp.course_name ='DB'thendbms_output.put_line('DB');elsedbms_output.put_line('feng la feng la ');end if;end loop;end;---关于游标 for,case 的例⼦1create or replace procedure peace_case1iscursor var_c is select*from test_case;beginfor temp in var_c loopcase temp.volwhen1thendbms_output.put_line('haha1');when2thendbms_output.put_line('haha2');when3thendbms_output.put_line('haha3');when4thendbms_output.put_line('haha4');elsedbms_output.put_line('qita');end case ;end loop;end;---关于游标 for,case 的例⼦2create or replace procedure peace_case2iscursor var_c is select*from test_case;beginfor temp in var_c loopcasewhen temp.vol=1thendbms_output.put_line('haha1');when temp.vol=2thendbms_output.put_line('haha2');when temp.vol=3thendbms_output.put_line('haha3');when temp.vol=4thendbms_output.put_line('haha4');elsedbms_output.put_line('qita');end case ;end loop;end;---关于for 循环的例⼦create or replace procedure peace_forissum1 number :=0;temp varchar2(500);beginfor i in1..9 looptemp :='';for j in1 .. iloopsum1 := i * j;temp :=temp||to_char(i) ||' * '||to_char(j) ||' = '||to_char(sum1) ||'';end loop;dbms_output.put_line(temp );end loop;end;---关于 loop循环的例⼦create or replace procedure peace_loopissum1 number :=0;temp number :=0 ;beginloopexit when temp>=10 ;sum1 := sum1+temp;temp :=temp+1;end loop;dbms_output.put_line(sum1 );end;---关于游标和loop循环的例⼦create or replace procedure loop_curisstu_name varchar2(100);course_name varchar2(100);cursor var_cur is select*from grade ;beginopen var_cur;loopfetch var_cur into stu_name,course_name;exit when var_cur%notfound;dbms_output.put_line(stu_name|| course_name);end loop;close var_cur;end;---关于异常处理的例⼦create or replace procedure peace_exp(in1 in varchar2)isc_n varchar2(100);beginselect course_name into c_n from grade where stu_name = in1; dbms_output.put_line(c_n);exceptionwhen no_data_foundthendbms_output.put_line('try');when TOO_MANY_ROWSthendbms_output.put_line('more');end;---关于异常处理的例⼦2create or replace procedure peace_insert ( c_n in varchar2)iserror EXCEPTION;beginif c_n ='OK'theninsert into course (course_name) values (c_n);elsif c_n ='NG'theninsert into course (course_name) values (c_n);raise error;elseDbms_Output.put_line('c_n'|| c_n);end if;commit;exceptionwhen error thenrollback;Dbms_Output.put_line('ERRO');end;---关于包的例⼦定义包create or replace package peace_pkgasfunction test1(in1 in varchar2)return number;procedure test2 (in2 in varchar2);end peace_pkg;---关于包的例⼦定义包体create or replace package body peace_pkgasfunction test1(in1 in varchar2)return numberastemp number;begintemp :=0;return temp;end;procedure test2 (in2 in varchar2)isbegindbms_output.put_line(in2);end;end peace_pkg;。

Oracle存储过程实例

Oracle存储过程实例

Oracle存储过程实例2009-08-0723:10:45|分类:Oracle|字号大中小订阅Java代码1create or replace procedure GetRecords(name_out out varchar2,age_in in varchar2)as 2begin3select NAME into name_out from test where AGE=age_in;4end;56create or replace procedure insertRecord(UserID in varchar2,UserName invarchar2,UserAge in varchar2)is7begin8insert into test values(UserID,UserName,UserAge);9end;首先,在Oracle中创建了一个名为TEST_SEQ的Sequence对象,SQL语句如下:Java代码10create sequence TEST_SEQ11minvalue10012maxvalue99913start with10214increment by115nocache;语法应该是比较易懂的,最小最大值分别用minvalue,maxvalue表示,初始值是102(这个数字是动态变化的,我创建的时候设的是100,后因插入了2条数据后就自动增加了2),increment 当然就是步长了。

在PL/SQL中可以用test_seq.nextval访问下一个序列号,用test_seq.currval 访问当前的序列号。

定义完了Sequence,接下来就是创建一个存储过程InsertRecordWithSequence:--这次我修改了test表的定义,和前面的示例不同。

其中,UserID是PK。

Java代码16create or replace procedure InsertRecordWithSequence(UserID outnumber,UserName in varchar2,UserAge in number)17is18begin insert into test(id,name,age)--插入一条记录,PK值从Sequece获取19values(test_seq.nextval,UserName,UserAge);20/*返回PK值。

oracle复杂的存储过程代码实例

oracle复杂的存储过程代码实例

oracle复杂的存储过程代码实例
Oracle 数据库的存储过程是一种在数据库中存储复杂程序,这个程序可以被调用执行。

下面是一个 Oracle 存储过程的简单示例,这个存储过程将根据提供的参数更新一个表中的数据:
```sql
CREATE OR REPLACE PROCEDURE update_employee_salary(
p_emp_id IN NUMBER,
p_salary IN NUMBER
) AS
BEGIN
UPDATE employees
SET salary = p_salary
WHERE employee_id = p_emp_id;
COMMIT;
END;
/
```
在这个例子中,我们创建了一个名为 `update_employee_salary` 的存储过程,它接受两个参数:`p_emp_id` 和 `p_salary`。

这个存储过程会更新
`employees` 表中对应 `employee_id` 的员工的工资。

要调用这个存储过程,你可以使用以下 SQL 语句:
```sql
BEGIN
update_employee_salary(1, 5000);
END;
/
```
这个例子是非常基础的,实际使用中的存储过程可能会涉及到更复杂的 SQL 查询和逻辑处理。

在实际使用中,需要根据具体的业务需求来设计和编写存储过程。

oracle 存储过程写法

oracle 存储过程写法

oracle 存储过程写法在Oracle 数据库中,存储过程是一组预定义的SQL 语句集,它们可以在数据库中进行封装和重复使用。

以下是一个简单的Oracle 存储过程的示例:```plsqlCREATE OR REPLACE PROCEDURE example_procedure (p_employee_id IN NUMBER,p_salary_increase IN NUMBER) ASBEGIN--变量声明DECLAREv_current_salary NUMBER;v_new_salary NUMBER;BEGIN--获取当前薪水SELECT salary INTO v_current_salaryFROM employeesWHERE employee_id = p_employee_id;--计算新薪水v_new_salary := v_current_salary + p_salary_increase;--更新薪水UPDATE employeesSET salary = v_new_salaryWHERE employee_id = p_employee_id;--提交事务COMMIT;EXCEPTIONWHEN OTHERS THEN--处理异常ROLLBACK;DBMS_OUTPUT.PUT_LINE('An error occurred: ' || SQLERRM);END;END example_procedure;/```在这个示例中,存储过程名为`example_procedure`,它接受两个输入参数`p_employee_id` 和`p_salary_increase`。

存储过程包含了一些SQL 语句,用于获取员工的当前薪水、计算新薪水并更新数据库中的记录。

存储过程还包含了异常处理部分,以处理可能发生的异常,并回滚事务。

要注意的是,存储过程的具体实现和逻辑会根据业务需求而变化。

oracle的存储过程写法

oracle的存储过程写法

oracle的存储过程写法Oracle的存储过程写法Oracle是一款非常常用的关系型数据库管理系统,其存储过程是一种非常重要的功能。

下面我们来看一下Oracle的存储过程写法。

1. 创建存储过程在Oracle中,创建存储过程需要使用CREATE PROCEDURE语句。

下面是一个简单的例子:CREATE PROCEDURE my_procedureASBEGIN-- 存储过程的代码END;在这个例子中,我们创建了一个名为my_procedure的存储过程,其中存储过程的代码写在BEGIN和END之间。

2. 存储过程的参数存储过程可以接受参数,这些参数可以是输入参数、输出参数或输入/输出参数。

下面是一个接受输入参数的例子:CREATE PROCEDURE my_procedure(input_param IN VARCHAR2)ASBEGIN-- 存储过程的代码在这个例子中,我们定义了一个名为input_param的输入参数。

3. 存储过程的返回值存储过程可以返回一个值,这个值可以是一个标量值或一个游标。

下面是一个返回标量值的例子:CREATE PROCEDURE my_procedure(output_param OUT NUMBER)ASBEGINSELECT COUNT(*) INTO output_param FROM my_table;END;在这个例子中,我们定义了一个名为output_param的输出参数,并将一个查询结果赋值给这个参数。

4. 存储过程的异常处理存储过程中可能会出现异常,我们需要对这些异常进行处理。

下面是一个异常处理的例子:CREATE PROCEDURE my_procedureASBEGINBEGIN-- 存储过程的代码EXCEPTIONWHEN OTHERS THEN-- 异常处理的代码END;在这个例子中,我们使用BEGIN和END将存储过程的代码括起来,并使用EXCEPTION关键字来处理异常。

【优质】oracle存储过程范例-范文word版 (20页)

【优质】oracle存储过程范例-范文word版 (20页)

本文部分内容来自网络整理,本司不为其真实性负责,如有异议或侵权请及时联系,本司将立即删除!== 本文为word格式,下载后可方便编辑和修改! ==oracle存储过程范例篇一:oracle存储过程案例及详解存储过程经典案例及详解收藏以下案例都是在pl/sql环境运行无误的情况下,由本人整理收集的,大家可以放心浏览,案例中的分析有不妥之处望大家指正。

案例1:用fetch游标取值。

declaretype c is ref cursor;emp_sor c;cname emp.ename%type;csal emp.sal%type;beginopen emp_sor for select ename,sal from emp where deptno=10;loopfetch emp_sor into cname,csal; --取游标的值给变量。

dbms_output.put_line('ename:'||cname||'sal'||csal);exit when emp_sor%notfound;end loop;close emp_sor;end;打开emp_sor游标之后,emp_sor指针从表的第一行开始往下移动,在指定位置取值,并把该行的值赋给对应的变量。

循环取值,每一次对应行的值赋给对应的变量。

Fetch…. into每次提取一行。

案例2:用fetch游标取值,并循环打印出部门编号为10的员工的名字和薪水。

declarecursor emp_sor is select ename,sal from emp where deptno=10;cname emp.ename%type;csal emp.sal%type;beginopen emp_sor ;loopfetch emp_sor into cname,csal; --取游标的值给变量。

dbms_output.put_line('ename:'||cname||'sal'||csal);exit when emp_sor%notfound;end loop;close emp_sor;end;案例3:运用记录变量接收游标指定的表数据。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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;。

相关文档
最新文档