`
wangchangtao
  • 浏览: 18809 次
  • 性别: Icon_minigender_1
  • 来自: 石家庄
社区版块
存档分类
最新评论

创建procedure样例

阅读更多
create or replace procedure procedure_procedure
AS
i_count integer;
begin
select count(*) into i_count from user_objects t where t.OBJECT_TYPE ='PROCEDURE' and t.OBJECT_NAME = upper('procedure_name');
    if i_count>0 then
        EXECUTE IMMEDIATE 'drop procedure procedure_name';
    end if;
end procedure_procedure;
/
call procedure_procedure();
drop procedure procedure_procedure;

CREATE OR REPLACE PROCEDURE procedure_name(TOPOADDS    IN T_LIST,
                                               TOPOUPDATES IN T_LIST,
                                               TOPODELETES IN T_LIST,
                                               STBDELETES  IN T_LIST,
                                               STBREGIONUPDATE in T_LIST,
                                               TOPORESULT  OUT INTEGER) IS
  V_TOTALCOUNT NUMBER(10);
  TOPOINFO     R_INFO;
  STBINFO      R_INFO;
  V_SQL        VARCHAR2(512);
  V_TEMP_SQL   VARCHAR2(512);
BEGIN
  TOPORESULT   := -1;
  V_TOTALCOUNT := TOPODELETES.COUNT;
  V_SQL        := 'update tablename set expiretime=:1 WHERE nodename=:2 and  ' ||
                  'expiretime=to_timestamp(''2099-01-01 00:00:00'',''yyyy-mm-dd hh24:mi:ss'')';
  FOR I IN 1 .. V_TOTALCOUNT LOOP
    TOPOINFO := TOPODELETES(I);
    EXECUTE IMMEDIATE V_SQL
      USING TOPOINFO.EXPIRETIME, TOPOINFO.NODENAME;
  END LOOP;

  V_TEMP_SQL   := 'insert into table_temp(FATHERNODENAME,EXPIRETIME)values(:1,:2)';
  V_TOTALCOUNT := STBDELETES.COUNT;
  FOR I IN 1 .. V_TOTALCOUNT LOOP
    STBINFO := STBDELETES(I);
    EXECUTE IMMEDIATE V_TEMP_SQL
      USING STBINFO.NODENAME, STBINFO.EXPIRETIME;
  END LOOP;

  TOPORESULT := -2;
  V_SQL      := 'merge into tablename aa using table_temp temp on (aa.FATHERNODENAME = temp.FATHERNODENAME )' ||
                ' when matched then   update     set aa.expiretime=temp.expiretime ' ||
                ' where aa.expiretime = to_timestamp(''2099-01-01 00:00:00'', ''yyyy-mm-dd hh24:mi:ss'')';

  EXECUTE IMMEDIATE V_SQL;

  TOPORESULT   := -3;
  V_TOTALCOUNT := TOPOUPDATES.COUNT;
  V_SQL        := 'UPDATE table_name SET fathernodename=:1,nodetype=:2,nodeif=:3,fathernodeif=:4,' ||
                  'bakupnodename=:5,backupfathernodename=:6,backupnodeif=:7,backupfathernodeif=:8' ||
                  ' WHERE nodename=:9 ' ||
                  ' and expiretime=to_timestamp(''2099-01-01 00:00:00'',''yyyy-mm-dd hh24:mi:ss'')';
  FOR I IN 1 .. V_TOTALCOUNT LOOP
    TOPOINFO := TOPOUPDATES(I);
    EXECUTE IMMEDIATE V_SQL
      USING TOPOINFO.FATHERNODENAME, TOPOINFO.NODETYPE, TOPOINFO.NODEIF, TOPOINFO.FATHERNODEIF, TOPOINFO.BAKUPNODENAME, TOPOINFO.BACKUPFATHERNODENAME, TOPOINFO.BACKUPNODEIF, TOPOINFO.BACKUPFATHERNODEIF, TOPOINFO.NODENAME;
  END LOOP;

  TOPORESULT   := -4;
  V_TOTALCOUNT := TOPOADDS.COUNT;
  V_SQL        := 'INSERT INTO tablename(nodename,fathernodename,nodetype,nodeif,fathernodeif,' ||
                  'bakupnodename,backupfathernodename,backupnodeif,backupfathernodeif,effectivetime,expiretime)' ||
                  'VALUES(:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11)';
  FOR I IN 1 .. V_TOTALCOUNT LOOP
    TOPOINFO := TOPOADDS(I);
    EXECUTE IMMEDIATE V_SQL
      USING TOPOINFO.NODENAME, TOPOINFO.FATHERNODENAME, TOPOINFO.NODETYPE, TOPOINFO.NODEIF, TOPOINFO.FATHERNODEIF, TOPOINFO.BAKUPNODENAME, TOPOINFO.BACKUPFATHERNODENAME, TOPOINFO.BACKUPNODEIF, TOPOINFO.BACKUPFATHERNODEIF, TOPOINFO.EFFECTIVETIME, TOPOINFO.EXPIRETIME;
  END LOOP;

  TOPORESULT   := -5;
  V_TOTALCOUNT := STBREGIONUPDATE.COUNT;
  V_SQL        := 'update tablename t set t.regionname = :1 where t.fathernodename = :2 and expiretime=to_timestamp(''2099-01-01 00:00:00'',''yyyy-mm-dd hh24:mi:ss'')';
  FOR I IN 1 .. V_TOTALCOUNT LOOP
    TOPOINFO := STBREGIONUPDATE(I);
    EXECUTE IMMEDIATE V_SQL
      USING TOPOINFO.REGIONNAME, TOPOINFO.NODENAME;
  END LOOP;
  COMMIT;
  TOPORESULT := 0;
EXCEPTION
  WHEN OTHERS THEN
    BEGIN
      ROLLBACK;
      CONST.LOG_ERROR_TO_TABLE(SQLCODE, SQLERRM, V_SQL);--调用包const中的procedure
      TOPORESULT := -6;
    END;
END procedure_name;
/
分享到:
评论

相关推荐

    db2 function 和 procedure

    2. **创建存储过程**:使用`CREATE PROCEDURE`语句创建。比如,创建一个简单的存储过程,用来更新表中特定记录的值: ```sql CREATE PROCEDURE update_value (IN id INT, IN new_value VARCHAR(50)) MODIFIES SQL...

    SQL样例表脚本和资料

    SQL样例表脚本通常包含了一系列的CREATE TABLE语句,用于创建具有不同结构的数据库表格。这些脚本可能还会包括INSERT INTO语句,用来填充表格的数据,以模拟实际场景。例如,一个典型的样例表脚本可能会创建员工、...

    sqlserver脚本样例.rar

    这个"sqlserver脚本样例.rar"压缩包显然包含了与SQL Server相关的学习脚本,可能涵盖了创建数据库、表,数据操作,查询,索引,存储过程,触发器等各种SQL语句的实例。下面我们将深入探讨这些关键知识点。 1. **...

    数据库学习全程笔记及学习样例

    `CREATE PROCEDURE` 用于创建存储过程,`EXEC` 或 `EXECUTE` 用于执行。通过存储过程,你可以封装常用操作,提高代码重用性。 索引是提升查询效率的关键。非聚簇索引和聚簇索引分别有不同的特点和用途。`CREATE ...

    西门子RPC开发样例文档

    西门子RPC开发样例文档主要涉及的是利用RPC(Remote Procedure Call)技术与SINUMERIK控制器进行通信的方法。RPC是一种平台中立的标准,允许不同系统间的远程调用,使得主机计算机能够与SINUMERIK控制器进行数据交换...

    GWT使用样例

    GWT,全称为Google Web Toolkit,是一个开源的Java框架,用于构建高性能的、富...通过学习和理解这些样例,开发者不仅可以掌握GWT的基本用法,还能进一步了解如何利用GWT创建高性能、响应式的Web应用,提升开发效率。

    rpc远程过程调用讲解与实例

    RPC(Remote Procedure Call)是一种进程间通信(IPC)技术,允许程序在不同的计算机上通过网络进行通信,就像调用本地函数...通过学习和实践这些资源,你可以掌握如何创建和使用RPC服务,从而提高你的网络编程技能。

    sqlserver 基本操作指令样例

    1. **创建数据库**: 使用`CREATE DATABASE`语句创建新的数据库。例如: ``` CREATE DATABASE MyDatabase; ``` 2. **选择数据库**: 使用`USE`语句切换到要操作的数据库。 ``` USE MyDatabase; ``` 3. **...

    SQL语言学习样例数据.rar

    本资料"SQL语言学习样例数据.rar"包含两个文本文件,"populate.txt"和"create.txt",分别用于创建数据库结构和填充数据,是学习SQL语句DML(Data Manipulation Language)的良好实践。 首先,"create.txt"文件中...

    存储过程、函数、触发器、包样例

    首先,存储过程(Stored Procedure)是一组预编译的SQL语句,可以接受参数,执行特定任务并返回结果。在给定的示例中,`insert_userinfo` 是一个存储过程,用于处理用户注册。它检查新用户名是否已存在,如果不存在...

    mysql 查询存储过程的 sql 语句.7z

    创建存储过程需要使用 CREATE PROCEDURE 语句。以下是一个创建存储过程的示例: CREATE PROCEDURE GetCustomerOrders ( IN customerId INT ) CALL GetCustomerOrders(1234); 存储过程中使用变量: 可以在...

    PB9下执行MSSql2005里的存储过程样例

    - 创建一个新的DataWindow对象,选择"SQL Select"类型,并在SQL文本框中输入存储过程的名称,如`EXEC YourProcedureName`。 - 在"Datawindow Painter"中,定义数据列,这些列将对应于存储过程返回的结果集。 - ...

    Oracle存储过程基本语法及示例

    CREATE OR REPLACE PROCEDURE procedure_name ( parameter1 IN data_type, parameter2 OUT data_type, ... ) IS -- 声明变量 variable1 data_type; variable2 data_type; BEGIN -- 过程体 -- 包括SQL语句和...

    驱动层Hook系统内核调用的,拦截对进程的操作.驱动编程的绝好样例.zip

    4. KeInsertQueueDpc 和 KeRemoveQueueDpc:这两个API用于在内核态调度DPC(Deferred Procedure Calls)。DPC是异步执行的低优先级内核线程,适合在驱动中处理I/O请求或其他延迟任务。 5. IoCreateDevice 和 ...

    1850001-魏鹏程-实验(五)-数据库系统原理实验报告纸1

    接着,我们创建了一个简单的 PL/SQL 程序,删除某门课程的过程,并执行了一个样例。 在PL/SQL编程语言中,我们可以使用过程来完成一些特定的操作。在本实验中,我们创建了一个过程来删除某门课程。该过程的代码如下...

    SQL必知必会 第四版

    6. **存储过程(PROCEDURE)和函数(FUNCTION)**:学习编写和调用存储过程及自定义函数,实现数据处理的复杂逻辑,提高代码复用性。 7. **事务(TRANSACTION)与并发控制**:理解事务的ACID属性(原子性、一致性、...

    Oracle 编程接口OCCI函数库增删改的实例

    对象可以通过`Object`类操作,而调用过程则需要创建`Procedure`对象,设置输入/输出参数并执行。 总的来说,Oracle的OCCI函数库为开发者提供了强大的工具,用于在C++应用程序中高效地操作Oracle数据库。通过熟练...

    win32asm例子

    3. **窗口过程(Window Procedure)**:每个窗口都有一个关联的窗口过程函数,它处理来自操作系统的消息。在汇编代码中,需要定义这个函数并使用`WndProc`伪指令。 4. **资源管理**:如动态内存分配(`LocalAlloc`)...

    windows rpc基本使用Demo

    RPC(Remote Procedure Call)是远程过程调用,它允许一个程序在执行时调用另一个位于不同计算机上的程序,使得分布式系统中的组件可以相互通信。Windows RPC是微软提供的一个跨平台、面向对象的通信框架,它允许...

    Oracle默认数据库的HR数据库原文件

    HR(Human Resources)数据库是一个示例数据库,通常在Oracle安装过程中作为标准样例提供,用于帮助用户熟悉Oracle SQL查询语言和数据库管理。如果你在你的Oracle默认数据库中缺少HR数据库,可以通过导入提供的"HR...

Global site tag (gtag.js) - Google Analytics