`

Oracle带输入、输出参数的存储过程返回受影响的行数SQL%ROWCOUNT

阅读更多
Oracle带输入、输出参数的存储过程返回受影响的行数SQL%ROWCOUNT



[sql]

CREATE OR REPLACE PROCEDURE PROC_UPDATE_TEMP(P_DAYS       IN NUMBER, --执行天数 

                                             P_ROWS       OUT VARCHAR2, --返回受影响的行数 

                                             P_IS_SUCCESS OUT BOOLEAN) --返回成功与否 

AS 

  V_NOW        DATE := TRUNC(SYSDATE); 

  V_BEGIN_DATE DATE; 

  V_SECOND     NUMBER; 

  I            INT := 0; 

 

BEGIN 

 

  /*  WHILE I < P_DAYS LOOP 

    UPDATE T_TEMP 

       SET TEMP_STATUS = '01', TEMP_FLAG = '0' 

     WHERE CREATE_TIME >= V_NOW - I 

       AND CREATE_TIME < V_NOW + 1 - I; 

    COMMIT; 

    I = I + 1; 

  END LOOP;*/ 

 

  FOR I IN 0 .. P_DAYS LOOP 

    BEGIN 

      V_BEGIN_DATE := SYSDATE; 

      UPDATE T_TEMP 

         SET TEMP_STATUS = '01', TEMP_FLAG = '0' 

       WHERE CREATE_TIME >= V_NOW - I 

         AND CREATE_TIME < V_NOW + 1 - I; 

      P_IS_SUCCESS := TRUE; 

      V_SECOND     := (SYSDATE - V_BEGIN_DATE) * 24 * 60 * 60; 

      --返回受影响的行数:SQL%ROWCOUNT 

      P_ROWS := SQL%ROWCOUNT || '行被更新,耗时:' || TRUNC(V_SECOND, 2) || '秒'; 

      DBMS_OUTPUT.PUT_LINE(P_ROWS); 

     

      COMMIT; 

    EXCEPTION 

      WHEN NO_DATA_FOUND THEN 

        NULL; 

        P_IS_SUCCESS := FALSE; 

    END; 

  END LOOP; 

END PROC_UPDATE_TEMP; 

[sql]

--调用存储过程 

DECLARE 

  -- Boolean parameters are translated from/to integers:  

  -- 0/1/null <--> false/true/null  

  P_IS_SUCCESS BOOLEAN; 

  P_ROWS       VARCHAR2(200); 

BEGIN 

  -- Call the procedure 

  PKG_STL_UPDATE_BILL_DATA.PROC_STL_UPDATE_TRUNC(P_DAYS       => 0, 

                                                 P_ROWS       => P_ROWS, 

                                                 P_IS_SUCCESS => P_IS_SUCCESS); 

  -- Convert false/true/null to 0/1/null  

  --:P_IS_SUCCESS := SYS.DIUTIL.BOOL_TO_INT(P_IS_SUCCESS); 

  dbms_output.put_line(P_ROWS); 

  dbms_output.put_line(SYS.DIUTIL.BOOL_TO_INT(P_IS_SUCCESS)); 

END; 

[sql]

--SQL%ROWCOUNT用法 

BEGIN 

  UPDATE T_JOB T SET T.JOB_ID = NULL WHERE T.ID = '2013'; 

 

  IF (SQL%ROWCOUNT != 1) THEN 

    RAISE_APPLICATION_ERROR(-20001, '没有成功修改到记录'); 

  END IF; 

END; 
分享到:
评论

相关推荐

    存储过程1--清华大学计算中心ORACLE培训资料.pptx

    例如,`SQL%FOUND`指示是否找到记录,`SQL%NOTFOUND`表示没有找到记录,而`SQL%ROWCOUNT`返回受影响的行数。 在处理异常时,`WHEN OTHERS THEN`用于捕获所有未明确处理的异常,这样可以确保程序即使遇到未预见的...

    oracle存储过程函数和程序包.ppt

    游标的四个主要属性包括SQL%FOUND(判断是否找到记录)、SQL%NOTFOUND(判断是否未找到记录)、SQL%ROWCOUNT(返回受影响的行数)和SQL%ISOPEN(判断游标是否已打开)。 过程和函数是PL/SQL中的两种基本程序单元。...

    oracle存储过程、函数和程序包.pptx

    - 游标有四个主要属性:`SQL%FOUND`检查是否找到行,`SQL%NOTFOUND`检查是否未找到行,`SQL%ROWCOUNT`获取受影响的行数,`SQL%ISOPEN`检查游标是否已打开。 5. **程序包**: - 程序包是PL/SQL对象的集合,包括...

    oracle存储过程语法

    Oracle存储过程是数据库管理系统中一组为了完成特定任务而编写的SQL和PL/SQL语句集合。它们被编译并存储在数据库中,可以被多次调用,提高了代码的复用性和执行效率。以下是对Oracle存储过程语法的详细解析: 1. **...

    oracle存储过程

    需要注意的是,使用`SQL%ROWCOUNT`可以获取最后一条DML语句(如INSERT、UPDATE、DELETE)影响的行数。 总之,Oracle存储过程是构建数据库应用程序的关键组件,它提供了封装和重用代码的能力,同时简化了复杂操作的...

    Oracle Procedurl返回数据集的方式总结

    它允许过程动态地构建SQL查询,并将结果集作为输出参数传递给调用者。这种方式灵活且高效,特别适合处理未知或动态的查询结果。 2. **DECLARE REF CURSOR** 在过程内部,我们可以声明一个REF CURSOR变量,如`REF ...

    存储过程的应用

    通过SQL%Rowcount获取每次操作影响的行数,分别赋值给输出参数。最后提交事务,确保所有操作都成功执行。 在SQL/Plus环境中,我们可以使用变量和EXEC命令来调用并测试存储过程。执行存储过程后,我们可以通过PRINT...

    北大青鸟Oracle游标

    %NOTFOUND在没有影响任何行时返回TRUE,%FOUND在影响至少一行时返回TRUE,%ROWCOUNT返回DML语句影响的行数。 2. **显式游标**:显式游标适用于处理返回多行的查询,需要在PL/SQL块的声明部分定义。它的操作流程包括...

    oracl数据库面试题

    存储过程是一种在数据库中预编译好的一系列SQL语句集合,它可以接受输入参数、返回输出参数,并能执行复杂的业务逻辑处理。在Oracle中,存储过程是用PL/SQL语言编写。 ### 2. 创建存储过程 创建存储过程的基本语法...

    oracle 示例代码

    6. **过程参数(Procedure Parameters)**:在定义存储过程时,我们可以声明输入参数、输出参数和输入输出参数。这些参数允许过程与外部环境交互,传递数据或接收返回值。 在"Oracle的例子"这个压缩包中,可能包含...

    Oracle 游标使用大全

    - 游标可以作为参数传递,或者作为存储过程的输出结果。 9. **游标处理异常** - 应适当地处理游标相关的异常,例如NO_DATA_FOUND和TOO_MANY_ROWS。 10. **游标最佳实践** - 及时关闭游标以释放系统资源。 - ...

    Python库 | cx_Oracle-6.2.1-cp34-cp34m-manylinux1_x86_64.whl

    8. **游标方法**:除了执行SQL,游标还可以调用`callproc()`来执行存储过程,以及`setinputsizes()`和`setoutputsize()`来指定输入和输出参数的大小。 9. **异步操作**:cx_Oracle库支持异步模式,允许在等待数据库...

    oracle中游标的应用详解

    例如,`SQL%ROWCOUNT`属性可以用来获取成功执行的数据行数;`SQL%FOUND`属性表示操作是否成功找到并处理了数据行;`SQL%NOTFOUND`属性则表示没有找到任何数据行;`SQL%ISOPEN`属性表示当前是否有未关闭的游标。 **...

    oracle 隐式游标,显示游标,游标循环

    - **SQL%ROWCOUNT**:整型,表示DML语句成功执行的数据行数。 - **SQL%FOUND**:布尔型,值为`TRUE`表示插入、删除、更新或单行查询操作成功。 - **SQL%NOTFOUND**:布尔型,与`SQL%FOUND`属性返回值相反。 - **SQL%...

    Oracle 数据库系统作业

    以上是关于Oracle数据库系统作业的知识点详解,覆盖了数据库的物理和逻辑存储结构、日志机制、管理参数设置、启动关闭过程、SQL*PLUS命令、SQL查询基础以及PL/SQL编程等内容。希望这些知识点能够帮助读者更好地理解...

    oracle课后答案

    - **%ROWCOUNT**:返回最后一条SQL语句影响的行数。 8. **查询和更新语句**: - **HAVING**:在分组查询中过滤数据。 - **子查询**:嵌套在其他SQL语句中的查询。 - **UPDATE**:用于修改数据表中的数据。 9. ...

    oracle教学7

    - `%ROWCOUNT`:受影响的行数。 - `%ISOPEN`:始终为FALSE,因为隐式游标不是真正意义上的打开状态。 **显式游标的使用步骤**: 1. 声明游标:`DECLARE CURSOR 游标名 IS 查询语句;` 2. 打开游标:`OPEN 游标名;` 3...

Global site tag (gtag.js) - Google Analytics