`
落叶换新叶
  • 浏览: 25567 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

oracle sql 存储过程、触发器、方法

阅读更多

 

1、存储过程

create or replace procedure logBigDataTrasfor
is
 queryEndDate Date:=to_date(to_char(sysdate - interval '3' month,'yyyy-MM-dd'),'yyyy-MM-dd');
 queryStartDate Date:=to_date(to_char(sysdate - interval '6' month,'yyyy-MM-dd'),'yyyy-MM-dd');
 idLog  CSSP_USER_ACCESS_LOG_V2.ID_LOG%type;
 idCsspUser  CSSP_USER_ACCESS_LOG_V2.id_cssp_user%type;
 idCsspOrg   CSSP_USER_ACCESS_LOG_V2.Id_Cssp_Org%type;
 accessDate  CSSP_USER_ACCESS_LOG_V2.ACCESS_DATE%type;
 url   CSSP_USER_ACCESS_LOG_V2.Url%type;
 systemFlag  CSSP_USER_ACCESS_LOG_V2.system_flag%type;
 type cur_type_ref is ref cursor;
 cur_data cur_type_ref; 
 sqlStr varchar2(2000);
 totalCount number;
 totalPages number;
 i number;
 v_startRecord number;
 v_endRecord number;
 errorCode number; 
 errorMsg varchar2(1000); 
 

Begin
   
  sqlStr:= 'select count(1) from  CSSP_USER_ACCESS_LOG_V2 v2 where v2.access_date<=to_date('''||queryEndDate||''') and  v2.access_date>= to_date('''||queryStartDate||''')';
  
  
   execute immediate sqlStr into totalCount;
   
   IF MOD(totalCount,500) = 0 THEN
       totalPages := totalCount / 500;
   ELSE
       totalPages := totalCount / 500 + 1;
   END IF;
   
   i:=1;
   
   
   for i in 1..totalPages LOOP  
       v_startRecord := (i - 1) * 500 + 1;
       v_endRecord := i * 500;

       sqlStr:= 'select tempFData.id_log,tempFData.id_cssp_user,tempFData.id_cssp_org,tempFData.access_date,tempFData.url,tempFData.system_flag from (select tempData.*,ROWNUM as rn  from (select * from CSSP_USER_ACCESS_LOG_V2 v2 where v2.access_date<=to_date('''||queryEndDate||''') and  v2.access_date>= to_date('''||queryStartDate||''') order by access_date desc) tempData  where ROWNUM<='||v_endRecord||') tempFData where tempFData.rn >= '||v_startRecord; 
       
       
       open cur_data for sqlStr;
       
       loop   
       fetch cur_data into idLog,idCsspUser,idCsspOrg,accessDate,url,systemFlag;  
       exit when cur_data%notfound; 
       insert into test_log_bak(id_log,id_cssp_user,id_cssp_org,access_date,url,system_flag)
              values(idLog,idCsspUser,idCsspOrg,accessDate,url,systemFlag); 
              
       end loop;   
       close cur_data;
       commit;
    end LOOP;
     EXCEPTION


           WHEN dup_val_on_index THEN 
                --重复操作
             errorCode := SQLCODE;  
             errorMsg := SUBSTR(SQLERRM, 1, 200);
             dbms_output.put_line(errorCode || ',' || errorMsg);
           
   
 END ;
 

 2、触发器

create or replace trigger test_big_data_user_insert_tr before insert or update
on EGISSMTSDATA.test_big_data_user for each row
declare
   date_created Date;
   date_updated Date;

begin
    date_created:=sysdate;
    date_updated:=sysdate;

    case
    when updating then
        :new.date_updated := date_updated;
    when inserting then
        :new.date_updated := date_updated;
        :new.date_created := date_created;
    end case;

end;

 3、方法

--创建表
create table EGISSMTSDATA.test_uid_code_table
(
  table_name     varchar2(100)  NOT NULL,
  table_id_val   number, 
  description    varchar2(300)
)
tablespace EGISSMTSDATA
  pctfree 10
  initrans 1
  maxtrans 255
  storage
  (
    initial 64K
    next 1M
    minextents 1
    maxextents unlimited
  );

alter table EGISSMTSDATA.test_uid_code_table add constraint PK_TEST_TABLE_NAME primary key (table_name);

create public synonym test_uid_code_table for EGISSMTSDATA.test_uid_code_table; 


--插入数据
insert into test_uid_code_table(table_name,table_id_val,description) values('HELLOWORLD',0,'test')

select testNextVal('HELLOWORLD') from dual;

--function
create or replace function testNextVal(
    tableName in varchar2
)
return number
is
  currentVal  number;
  sqlStr varchar(2000);
  PRAGMA AUTONOMOUS_TRANSACTION;
begin
   
   select table_id_val into currentVal from test_uid_code_table  where table_name = tableName;
   currentVal:=currentVal+1;
   sqlStr:= 'update test_uid_code_table set table_id_val = '||currentVal ||'where table_name ='''||tableName||'''';
   
   EXECUTE immediate  sqlStr;
   commit;
return(currentVal);
end testNextVal;

 

 

 

 

 

 

 

 

1
0
分享到:
评论

相关推荐

    Oracle存储过程、触发器

    Oracle存储过程和触发器是数据库管理系统中的重要组成部分,它们在数据处理和业务逻辑实现中扮演着关键角色。本文将深入探讨这两个概念以及它们在实际应用中的使用。 **Oracle存储过程** Oracle存储过程是一组预...

    ORACLE PL/SQL 存储过程 触发器

    在文档`oracle.doc`和`PLSQL块.doc`中,可能会详细阐述如何创建、调用存储过程,定义触发器的语法,以及如何在PL/SQL中有效地使用游标。通过学习这些内容,你可以深入了解如何利用Oracle的PL/SQL来构建高效、可靠的...

    oracle存储过程及触发器总结

    ### Oracle存储过程及触发器总结 #### 一、Oracle 存储过程概述 在Oracle数据库中,存储过程是一种预先编译好的SQL代码块,它可以接受输入参数、返回单个值或多个值,并能够调用其他存储过程。存储过程在数据库...

    Oracle存储过程和触发器(PL/SQL入门教程)

    Oracle存储过程和触发器(PL/SQL入门教程) Oracle存储过程和触发器(PL/SQL入门教程)

    oracle存储过程和触发器

    ### Oracle存储过程与触发器详解 #### 存储过程与触发器的作用 在软件开发,尤其是数据库相关的项目中,Oracle的存储过程和触发器扮演着举足轻重的角色。它们能够在简化代码、提高效率和增强数据完整性方面发挥...

    Oracle存储过程和触发器教程

    在Oracle存储过程和触发器教程中,你将会学习如何创建、调用和管理这些对象,以及如何使用PL/SQL编写控制流语句,处理异常,以及与表、视图和索引等其他数据库对象交互。"教程说明见这里.txt"文件可能包含详细的步骤...

    ORACLE中触发器和存储过程介绍相关代码

    在Oracle数据库系统中,触发器(Triggers)和存储过程(Stored Procedures)是两种非常重要的数据库对象,它们在数据管理、业务逻辑实现以及数据验证等方面起着关键作用。本资源包含与"ORACLE中触发器和存储过程介绍...

    oracle存储过程和触发器chm格式

    Oracle存储过程和触发器是数据库管理系统中的重要组成部分,它们在数据处理和业务逻辑实现中扮演着关键角色。本文将深入探讨这两个概念以及它们在Oracle数据库中的应用。 首先,Oracle存储过程是一组预编译的SQL...

    浅析Oracle存储过程触发器在数据同步中的应用

    ### 浅析Oracle存储过程触发器在数据同步中的应用 #### 一、引言 随着企业信息化程度的不断提高,各种业务系统的数据交换和共享成为常态。然而,在实际操作过程中,由于历史遗留问题或是多系统并存的情况,经常会...

    调试oracle触发器方法

    在Oracle数据库中,触发器(Triggers)是一种存储过程,它们自动执行,当特定的数据库事件发生时,如INSERT、UPDATE或DELETE操作。调试Oracle触发器是开发和维护数据库应用程序时的重要步骤,可以帮助我们找出潜在的...

    Oracle存储过程和触发器基本操作解析.docx

    Oracle存储过程和触发器是数据库管理中的核心组件,它们在数据处理和业务逻辑实现中扮演着重要角色。在Oracle数据库中,存储过程是一组预编译的SQL语句和PL/SQL代码,可以被多次调用,提高了代码的复用性和执行效率...

    Oracle数据库创建存储过程和触发器

    Oracle 数据库创建存储过程和触发器 Oracle 数据库创建存储过程和触发器是高级数据库开发设计的重要组成部分。存储过程和触发器是一种特殊类型的数据库对象,它们可以实现复杂的业务逻辑和数据处理操作。 存储过程...

    oracle job调度存储过程 触发器 定时更新数据库

    总的来说,Oracle Job调度存储过程和触发器是数据库管理中不可或缺的工具,它们允许数据库管理员自动化许多常规任务,提高效率,减少人为错误,并确保数据的一致性和准确性。通过灵活地配置和组合这些功能,可以实现...

    oracle中job调度存储过程 触发器 定时更新数据库.rar

    在Oracle数据库系统中,"Job调度存储过程"和"触发器"是两种强大的工具,用于自动化数据库维护和管理任务。本教程将深入探讨这两个概念以及它们如何协同工作以实现定时更新数据库。 首先,我们来理解"Job调度存储...

    Oracle存储过程和触发器

    存储过程和触发器都是PL/SQL(Oracle的面向对象的SQL扩展)的一部分,可以在其中编写复杂的业务逻辑。触发器可以调用存储过程,反之亦然,实现更复杂的业务流程。 **实例应用** 例如,假设有一个`employees`表,...

    Oracle触发器与存储过程高级编程-第3版itpub.rar

    《Oracle触发器与存储过程高级编程》第3版是一本深入探讨Oracle数据库中触发器和存储过程技术的专业书籍。在Oracle数据库系统中,触发器和存储过程是数据库管理员和开发人员进行复杂业务逻辑处理和数据管理的重要...

    基于Oracle存储过程与触发器的三维空间数据日志管理方法.pdf

    【标题】:基于Oracle存储过程与触发器的三维空间数据日志管理方法 【描述】:本文探讨了一种使用Oracle存储过程和触发器来管理和记录三维空间数据的日志的方法,旨在提高数据库性能、开发效率,并确保数据的安全。...

    Oracle连接查询子查询以及存储过程触发器讲解

    在Oracle中,连接查询和子查询以及存储过程与触发器是数据库管理与开发中的核心概念,下面将对这些主题进行深入讲解。 首先,让我们探讨**连接查询**。在数据库操作中,连接查询用于合并两个或更多表的数据,根据...

    oracle 触发器实时调用java 中http接口

    在PL/SQL存储过程中,使用UTL_HTTP步骤如下: 1. 初始化HTTP请求:创建一个UTL_HTTP的REQUEST对象,指定HTTP方法(如POST)、URL和任何必要的头信息。 2. 发送请求体:如果HTTP请求是POST,需要使用UTL_...

Global site tag (gtag.js) - Google Analytics