存储过程实例oracle

合集下载

一个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时间循环的存储过程范例

oracle时间循环的存储过程范例Oracle是一种关系型数据库管理系统,它提供了丰富的功能和工具来处理和管理数据。

在Oracle中,存储过程是一种由SQL语句和PL/SQL代码组成的数据库对象,可以被存储在数据库中并在需要的时候被调用执行。

本文将以Oracle时间循环的存储过程为范例,介绍如何使用存储过程来处理时间循环相关的操作。

在许多应用场景中,需要对一段连续的时间范围进行操作和处理。

例如,统计某个时间段内的销售额、计算某个时间段内的平均值等等。

这时,使用时间循环的存储过程可以简化代码的编写,并提高程序的执行效率。

下面是一个示例的存储过程,用于计算某个时间段内的销售额:```sqlCREATE OR REPLACE PROCEDURE calculate_sales(start_date IN DATE,end_date IN DATE)IS-- 定义变量total_sales NUMBER := 0;current_date DATE := start_date;sales_amount NUMBER;BEGIN-- 循环计算销售额WHILE current_date <= end_dateLOOP-- 查询当天的销售额SELECT SUM(amount)INTO sales_amountFROM salesWHERE sales_date = current_date;-- 累加销售额total_sales := total_sales + sales_amount;-- 增加一天current_date := current_date + 1;END LOOP;-- 输出结果DBMS_OUTPUT.PUT_LINE('Total sales from ' || start_date || ' to ' || end_date || ' is ' || total_sales);END;/```以上存储过程接受两个日期参数,分别表示时间范围的起始日期和结束日期。

oracle时间循环的存储过程范例

oracle时间循环的存储过程范例

oracle时间循环的存储过程范例Oracle是一款广泛使用的关系型数据库管理系统,它支持使用存储过程来实现复杂的业务逻辑。

本文将以一个时间循环的存储过程为例,介绍如何在Oracle中编写和使用存储过程。

在实际开发中,经常会遇到需要根据时间进行循环操作的场景,比如每天定时执行某个任务,或者按照特定的时间间隔重复执行某个操作。

使用存储过程可以将这些循环逻辑封装起来,提高代码的复用性和可维护性。

下面我们以一个简单的例子来说明如何使用Oracle存储过程实现时间循环。

假设我们需要每天定时向用户发送一封电子邮件,提醒他们当天的待办事项。

我们可以通过存储过程来实现这个功能。

我们需要创建一个存储过程来发送邮件。

在存储过程中,我们可以使用Oracle提供的时间函数来获取当前日期,并根据日期来查询当天的待办事项。

然后,我们可以使用邮件服务的API来发送邮件给用户。

下面是一个简化的示例代码:```sqlCREATE OR REPLACE PROCEDURE send_email ASv_today DATE;v_subject VARCHAR2(100);v_body VARCHAR2(1000);BEGIN-- 获取当前日期v_today := SYSDATE;-- 构造邮件主题和内容v_subject := '今日待办事项提醒';v_body := '尊敬的用户,以下是您今天的待办事项:';-- 查询当天的待办事项-- SELECT * FROM todo_list WHERE due_date = v_today;-- 发送邮件给用户-- email_service.send_email('****************',v_subject, v_body);-- 打印日志DBMS_OUTPUT.PUT_LINE('邮件发送成功!');END;/```在上面的代码中,我们首先声明了一些变量来存储当前日期、邮件主题和内容。

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

oracle存储过程实例详解Oracle 存储过程实例详解:1. 什么是存储过程?Oracle 存储过程是一种类似于子程序或函数的数据库对象,在数据库中完成特定任务,其能大大加快数据库操作的响应时间。

Oracle存储过程功能表现为一个静态数据库对象,它可以接受参数,在每次执行制定的任务时还可以返回结果。

它也可以根据参数进行多次执行,以便对数据进行多次处理。

2. Oracle 存储过程的使用步骤(1)创建存储过程:使用CREATE PROCEDURE 语句创建存储过程,指定参数,SQL语句或控制结构;(2)调用存储过程:通过使用 CALL 语句调用该存储过程。

(3)定义变量:为Oracle 存储过程定义变量;(4)使用 OUT 参数:处理 OUT 参数,其所提供的数据将被程序处理;(5)处理返回值:在Oracle存储过程中返回值可以被处理;(6)删除存储过程:使用DROPPROCEDURE 语句删除存储过程;3. Oracle 存储过程的优点(1)提高运行性能:Oracle 存储过程能够提高数据库查询性能,并利用该存储过程重复运行减少数据库操作;(2)高安全性:由于Oracle存储过程运行在数据库中,因此可以很好地保证安全性;(3)实现更高级的功能:Oracle存储过程支持流程控制语句、变量以及丰富的函数。

4. Oracle 存储过程的实例以下是一个 Oracle 存储过程示例:CREATE OR REPLACE PROCEDURE employees_by_department(p_department_id IN employees.department_id%TYPE)ISBEGINSELECT last_name, salaryINTO l_last_name, l_salaryFROM employeesWHERE department_id = p_department_id;DBMS_OUTPUT.PUT_LINE('Last name: ' || l_last_name);DBMS_OUTPUT.PUT_LINE('Salary: ' || l_salary);END;这个 Oracle 存储过程 employees_by_department,用于根据部门 ID 查询某部门员工的最后一个名字和工资,最后将结果输出到DBMS_OUTPUT 对象中。

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存储过程例⼦(实战项⽬)create or replace function func_get_user_by_msisdn(msisdn in number)---------------------------------------------------------------------------------功能描述:通过⽤户的电话号码,调⽤局⽅存储过程获取⽤户的基本信息, ------ 以遍更新card_user_info本地数据表。

------参数: msisdn in number 代表⽤户的电话号码(SIM卡) ------时间:2008-09-05 ------作者:zhouyq ------单位:厦门新科技软件股份有限公司 ---------------------------------------------------------------------------------return pkg_gps_er_recordisuser_record_info pkg_gps_er_record; --⽤户基本信息类型v_success number := 1; --成功标志begin--⾸先获取正常⽤户的基本信息beginpkg_gps_audit.proc_get_userinfo(msisdn,user_record_info);v_success := 1;exception when others thenv_success := 0;end;--其次,如果正常⽤户获取不到,再查离线⽤户信息if v_success < 1 thenbeginpkg_gps_audit.proc_get_cancel_userinfo(msisdn,user_record_info);v_success := 1;exception when others thenv_success := 0;end;end if;if v_success > 0 thenreturn user_record_info;elseraise no_data_found;end if;return user_record_info;end func_get_user_by_msisdn;create or replace function func_get_user_id(msisdn_bak in number)---------------------------------------------------------------------------------功能描述:通过⽤户的电话号码获取⽤户的ID,(有保证数据及时性) ------参数: msisdn in number 代表⽤户的电话号码(SIM卡) ------时间:2008-09-05 ------作者:zhouyq ------单位:厦门新科技软件股份有限公司 ---------------------------------------------------------------------------------return numberisuser_info pkg_gps_er_record; --⽤户基本信息card_info card_user_info%rowtype; --⽤户基本信息表结构type base_cursor is ref cursor;cr base_cursor;user_id number(15); --⽤户ID;beginbegin--如果本地card_user_info表可以找到数据,先在本地查找。

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作为参数,然后删除对应的员工记录。

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⽆参数和带参数的存储过程实例SQL中调⽤存储过程语句:call procedure_name();注:调⽤时”()”是不可少的,⽆论是有参数还是⽆参数.定义对数据库存储过程的调⽤时1、⽆参数存储过程:{call procedure_name}2、仅有输⼊参数的存储过程:{call procedure_name(?,?...)}。

这⾥?表⽰输⼊参数,创建存储过程时⽤in表⽰输⼊参数3、仅有输出参数的存储过程:{call procedure_name(?,?...)}。

这⾥的?表⽰输出参数,创建存储过程时⽤out表⽰输出参数4、既有输⼊参数⼜有输出参数的存储过程{call procedure_name(?,?...)}。

这⾥的?有表⽰输出参数的,也有表⽰输⼊参数的下⾯将会对这4种情况分别举出实例!!!1、⽆参数存储过程CREATE OR REPLACE PROCEDURE stu_proc AS--声明语句段v_name VARCHAR2(20);BEGIN--执⾏语句段SELECT o.sname INTO v_name FROM student o WHERE o.id=4;dbms_output.put_line(v_name);EXCEPTION--异常处理语句段WHEN NO_DATA_FOUND THEN dbms_output.put_line('NO_DATA_FOUND');END;2、仅带⼊参的存储过程CREATE OR REPLACE PROCEDURE stu_proc(v_id IN student.id%type) AS--声明语句段v_name varchar2(20);BEGIN--执⾏语句段SELECT o.sname INTO v_name FROM student o where o.id=v_id;dbms_output.put_line(v_name);EXCEPTION--异常处理语句段WHEN NO_DATA_FOUND THEN dbms_output.put_line('NO_DATA_FOUND');END;3、仅带出参的存储过程--此种存储过程不能直接⽤call来调⽤,这种情况的调⽤将在下⾯oracle函数调⽤中说明CREATE OR REPLACE PROCEDURE stu_proc(v_name OUT student.sname%type) AS--声明语句段BEGIN--执⾏语句段SELECT o.sname INTO v_name FROM student o where o.id=1;dbms_output.put_line(v_name);EXCEPTION--异常处理语句段WHEN NO_DATA_FOUND THEN dbms_output.put_line('NO_DATA_FOUND');END;4、带⼊参和出参的存储过程--此种存储过程不能直接⽤call来调⽤,这种情况的调⽤将在下⾯oracle函数调⽤中说明CREATE OR REPLACE PROCEDURE stu_proc(v_id IN student.id%type, v_name OUT student.sname%type) AS --声明语句段BEGIN--执⾏语句段SELECT o.sname INTO v_name FROM student o where o.id=v_id;dbms_output.put_line(v_name);EXCEPTION--异常处理语句段WHEN NO_DATA_FOUND THEN dbms_output.put_line('NO_DATA_FOUND'); END;。

oracle存储过程实例

oracle存储过程实例

oracle存储过程实例存储过程是一组预先编译好的SQL语句集合,存储在数据库中,供用户在需要时调用。

Oracle数据库支持存储过程,可以在数据库中定义、存储和执行。

下面是一个使用Oracle存储过程的实例:创建一个存储过程,用于计算员工的平均工资:```CREATE OR REPLACE PROCEDURE calculate_avg_salaryASavg_salary NUMBER;BEGINSELECT AVG(salary) INTO avg_salary FROM employees;DBMS_OUTPUT.PUT_LINE('平均工资为: ' , avg_salary);END;```在此存储过程中,首先创建一个名为calculate_avg_salary的存储过程。

然后在存储过程体中定义了一个变量avg_salary,用于存储计算得到的平均工资。

接下来使用SELECT语句从employees表中计算平均工资,并将结果存储到avg_salary变量中。

最后,使用DBMS_OUTPUT.PUT_LINE函数在屏幕上打印出计算得到的平均工资。

执行存储过程:```SETSERVEROUTPUTON;EXECUTE calculate_avg_salary;```在执行存储过程之前,首先使用SET SERVEROUTPUT ON语句打开服务器输出。

然后使用EXECUTE语句调用存储过程calculate_avg_salary。

存储过程计算得到的平均工资将通过DBMS_OUTPUT.PUT_LINE函数打印在屏幕上。

除了上述示例,还可以在存储过程中实现更复杂的逻辑和操作,比如插入、更新和删除数据,处理异常等。

存储过程能够提供更高的灵活性和性能,能够减少网络通信开销,并提供更好的安全性。

在使用Oracle存储过程时,需要注意以下几点:1. 存储过程必须先编译才能执行。

编译存储过程时,Oracle会检查语法错误和依赖关系。

oracle存储过程范例

oracle存储过程范例

oracle存储过程范例Oracle存储过程范例Oracle存储过程是一种预编译的程序,它可以在数据库中存储并重复使用。

存储过程可以接受参数,执行一系列的SQL语句,并返回结果。

在Oracle数据库中,存储过程可以提高数据库的性能和安全性,同时也可以简化应用程序的开发。

下面是一个Oracle存储过程的范例:CREATE OR REPLACE PROCEDURE get_employee_details (p_employee_id IN NUMBER, p_employee_details OUT SYS_REFCURSOR)ISBEGINOPEN p_employee_details FORSELECT employee_id, first_name, last_name, email, phone_number, hire_date, job_id, salary, commission_pct, manager_id, department_idFROM employeesWHERE employee_id = p_employee_id;END;这个存储过程的名称是get_employee_details,它接受一个参数p_employee_id,这个参数是一个整数类型的员工ID。

存储过程的输出参数是p_employee_details,它是一个游标类型的变量,用于返回查询结果。

在存储过程的主体中,使用OPEN语句打开游标,并执行一个SELECT语句,查询employees表中指定员工ID的详细信息。

最后,将查询结果赋值给输出参数p_employee_details。

使用这个存储过程可以很方便地获取指定员工的详细信息。

例如,可以使用以下代码调用这个存储过程:DECLAREv_employee_details SYS_REFCURSOR;BEGINget_employee_details(100, v_employee_details);-- 处理查询结果END;在这个例子中,调用存储过程get_employee_details,并将员工ID 设置为100。

Oracle存储过程应用实例

Oracle存储过程应用实例

Oracle存储过程应⽤实例引⼦记录⼯作过程中特耗时间的⼀个问题的优化过程。

核⼼⽣产环境,有专门的系统有专⼈维护基础配置数据,如销管数据。

⽽测试环境⽆维护,这些数据都有有效期,经常遇到过期,导致系统⽆法正常使⽤。

以往的解决办法:1 ⾸先要联系到外围管理系统(销售管理)相关责任⼈,协助在测试环境同步做配置(这涉及到跨团队的沟通);2 配置完审核通过后,待定时同步核⼼,确认⽆误后可使⽤(需等待,特耗时间)。

新解决⽅案:由于不需要监管报备的配置信息,⽣产配置信息更加准确,所以确定写数据库存过,迁移⽣产环境配置数据到测试。

⽅案1⼯具:数据库存过思路:数据库新建导⼊表T_IMPORT_TABLE,保存待操作表。

按顺序遍历这些表,在遍历过程中先删表中符合条件的数据,然后将⽣产环境符合条件的数据迁⼊到当前环境中/*****************************************************************************\* Name: P_IMPORT_CHA_DATA* PROCEDURE: 导⽣产环境基础数据(代理⼈信息)* Paramater: IC_C_CHA_CDE 代理⼈代码* Programmer: lyt* Date: 2019/10/12* Update:* 需导⼊表配置:T_IMPORT_TABLE WHERE C_MARK = '2';* 维护dbquery中间库表结构:SELECT 'CREATE TABLE T_' || C_TABLE || ' AS SELECT * FROM ZSSYS.' || C_TABLE || ' WHERE ROWNUM = 0;',A.* FROM T_IMPORT_TABLE A;* 如果⼿续费打包时提⽰:算税平台找不到该代理⼈,需联系算税平台(沈⼀栋)邵先路,将算税⽣产环境信息同步到对应环境\*****************************************************************************/PROCEDURE P_IMPORT_CHA_DATA(IC_C_CHA_CDE VARCHAR2) ASLB_SQL CLOB;LB_COLS CLOB;LB_COND CLOB;LN_ROWS NUMBER;CURSOR CUR_TABLE ISSELECT * FROM T_IMPORT_TABLE WHERE C_MARK = '2';BEGINFOR LR_TABLE IN CUR_TABLE LOOPSELECT WM_CONCAT(COLUMN_NAME)INTO LB_COLSFROM USER_TAB_COLS@LINK_COREWHERE TABLE_NAME = 'T_' || UPPER(LR_TABLE.C_TABLE)ORDER BY COLUMN_ID;LB_COND := ' WHERE ';IF (UPPER(LR_TABLE.C_TABLE) = 'WEB_CUS_COM_ACCT') THENLB_COND := LB_COND || 'C_REL_CDE ';ELSIF (UPPER(LR_TABLE.C_TABLE) = 'WEB_CUS_CONFER') THENLB_COND := LB_COND || 'C_CLNT_CDE ';ELSIF (UPPER(LR_TABLE.C_TABLE) = 'WEB_CUS_CONFER_DTL' OR UPPER(LR_TABLE.C_TABLE) = 'WEB_AUTH_CONFER') THENLB_COND := LB_COND || 'C_AGT_AGR_NO IN (SELECT C_AGT_AGR_NO FROM ZSSYS.WEB_CUS_CONFER WHERE C_CLNT_CDE';ELSIF (UPPER(LR_TABLE.C_TABLE) = 'WEB_ORG_SALES') THENLB_COND := LB_COND || 'C_SLS_CDE IN(SELECT C_SLS_CDE FROM ZSSYS.WEB_CUS_CHA WHERE C_CHA_CDE';ELSELB_COND := LB_COND || 'C_CHA_CDE ';END IF;IF (UPPER(LR_TABLE.C_TABLE) = 'WEB_CUS_CONFER_DTL' OR UPPER(LR_TABLE.C_TABLE) = 'WEB_AUTH_CONFER' OR UPPER(LR_TABLE.C_TABLE) = 'WEB_ORG_SALES') THENLB_COND := LB_COND || '= ''' || IC_C_CHA_CDE || ''')';ELSELB_COND := LB_COND || '= ''' || IC_C_CHA_CDE || '''';END IF;LB_SQL := 'DELETE FROM ZSSYS.' || LR_TABLE.C_TABLE || LB_COND;EXECUTE IMMEDIATE LB_SQL;LB_SQL := 'INSERT INTO ZSSYS.' || LR_TABLE.C_TABLE || '(' || LB_COLS ||') SELECT ' || LB_COLS || ' FROM ' || 'ZSSYS.' ||LR_TABLE.C_TABLE || '@LINK_CORE '|| LB_COND;EXECUTE IMMEDIATE LB_SQL;END IF;END LOOP;--COMMIT;END P_IMPORT_CHA_DATA;⽅案2版本1.1存在问题:由于⼀些表之间存在外键约束,外键约束要求必须先删除⼦表的记录才能够删主表的记录,⽽插⼊数据时必须先插⼊主表的记录再插⼊⼦表的记录,⼀个循环中同时完成删除和插⼊这个设计不合理,即如果原始记录已存在删除操作会失败。

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存储过程的示例,用于计算一个员工的平均工资:```sqlCREATE OR REPLACE PROCEDURE calculate_avg_salaryp_employee_id IN NUMBER,p_avg_salary OUT NUMBERISv_total_salary NUMBER;v_num_employees NUMBER;BEGINSELECT SUM(salary), COUNT(*) INTO v_total_salary,v_num_employeesFROM employeesWHERE department_id = p_employee_id;IF v_num_employees > 0 THENp_avg_salary := v_total_salary / v_num_employees;ELSEp_avg_salary := 0;ENDIF;END;```在上面的示例中,存储过程接受一个输入参数p_employee_id,表示部门ID,同时定义了一个输出参数p_avg_salary,用于返回平均工资。

存储过程内部使用SELECT语句查询指定部门的员工工资总和和员工数量,并将结果存储在变量v_total_salary和v_num_employees中。

然后,根据员工数量的值,计算平均工资并将结果存储在输出参数p_avg_salary 中。

存储过程可以使用CREATEORREPLACEPROCEDURE语句创建,其中的IN和OUT关键字用于指定参数的传递方式。

在存储过程内部可以使用各种SQL语句、控制结构和变量来实现业务逻辑。

存储过程可以通过调用EXECUTE或CALL语句来执行,也可以在应用程序中通过存储过程的名称来调用。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一:CREATE OR REPLACE 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 REPLACE 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 REPLACE 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,calendar) '||' 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,code,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 REPLACE 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'' 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,1)=''0'' 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) '||' 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'' from static_interactionname s where cdr.opc=s.xpc and netname<>''移动'')'||' and exists (select ''x'' from static_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'' 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,1)=''0'' 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) '||' 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 REPLACE 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'' 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,1)=''0'' 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 ''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'' from static_interactionname s where cdr.opc=s.xpc and netname<>''移动'')'||' and exists (select ''x'' from static_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'' 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,1)=''0'' 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 ''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 REPLACE 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'' andlength(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) 'length(trim(applix_no))=11 then trim(applix_no) '||' when substr(trim(applix_no),1,2) between 2 and 8 andlength(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 andlength(trim(applix_no))=7 then trim(applix_no) 'length(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;/。

相关文档
最新文档