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;
分享到:
相关推荐
例如,`SQL%FOUND`指示是否找到记录,`SQL%NOTFOUND`表示没有找到记录,而`SQL%ROWCOUNT`返回受影响的行数。 在处理异常时,`WHEN OTHERS THEN`用于捕获所有未明确处理的异常,这样可以确保程序即使遇到未预见的...
游标的四个主要属性包括SQL%FOUND(判断是否找到记录)、SQL%NOTFOUND(判断是否未找到记录)、SQL%ROWCOUNT(返回受影响的行数)和SQL%ISOPEN(判断游标是否已打开)。 过程和函数是PL/SQL中的两种基本程序单元。...
- 游标有四个主要属性:`SQL%FOUND`检查是否找到行,`SQL%NOTFOUND`检查是否未找到行,`SQL%ROWCOUNT`获取受影响的行数,`SQL%ISOPEN`检查游标是否已打开。 5. **程序包**: - 程序包是PL/SQL对象的集合,包括...
Oracle存储过程是数据库管理系统中一组为了完成特定任务而编写的SQL和PL/SQL语句集合。它们被编译并存储在数据库中,可以被多次调用,提高了代码的复用性和执行效率。以下是对Oracle存储过程语法的详细解析: 1. **...
需要注意的是,使用`SQL%ROWCOUNT`可以获取最后一条DML语句(如INSERT、UPDATE、DELETE)影响的行数。 总之,Oracle存储过程是构建数据库应用程序的关键组件,它提供了封装和重用代码的能力,同时简化了复杂操作的...
它允许过程动态地构建SQL查询,并将结果集作为输出参数传递给调用者。这种方式灵活且高效,特别适合处理未知或动态的查询结果。 2. **DECLARE REF CURSOR** 在过程内部,我们可以声明一个REF CURSOR变量,如`REF ...
通过SQL%Rowcount获取每次操作影响的行数,分别赋值给输出参数。最后提交事务,确保所有操作都成功执行。 在SQL/Plus环境中,我们可以使用变量和EXEC命令来调用并测试存储过程。执行存储过程后,我们可以通过PRINT...
%NOTFOUND在没有影响任何行时返回TRUE,%FOUND在影响至少一行时返回TRUE,%ROWCOUNT返回DML语句影响的行数。 2. **显式游标**:显式游标适用于处理返回多行的查询,需要在PL/SQL块的声明部分定义。它的操作流程包括...
存储过程是一种在数据库中预编译好的一系列SQL语句集合,它可以接受输入参数、返回输出参数,并能执行复杂的业务逻辑处理。在Oracle中,存储过程是用PL/SQL语言编写。 ### 2. 创建存储过程 创建存储过程的基本语法...
6. **过程参数(Procedure Parameters)**:在定义存储过程时,我们可以声明输入参数、输出参数和输入输出参数。这些参数允许过程与外部环境交互,传递数据或接收返回值。 在"Oracle的例子"这个压缩包中,可能包含...
- 游标可以作为参数传递,或者作为存储过程的输出结果。 9. **游标处理异常** - 应适当地处理游标相关的异常,例如NO_DATA_FOUND和TOO_MANY_ROWS。 10. **游标最佳实践** - 及时关闭游标以释放系统资源。 - ...
8. **游标方法**:除了执行SQL,游标还可以调用`callproc()`来执行存储过程,以及`setinputsizes()`和`setoutputsize()`来指定输入和输出参数的大小。 9. **异步操作**:cx_Oracle库支持异步模式,允许在等待数据库...
例如,`SQL%ROWCOUNT`属性可以用来获取成功执行的数据行数;`SQL%FOUND`属性表示操作是否成功找到并处理了数据行;`SQL%NOTFOUND`属性则表示没有找到任何数据行;`SQL%ISOPEN`属性表示当前是否有未关闭的游标。 **...
- **SQL%ROWCOUNT**:整型,表示DML语句成功执行的数据行数。 - **SQL%FOUND**:布尔型,值为`TRUE`表示插入、删除、更新或单行查询操作成功。 - **SQL%NOTFOUND**:布尔型,与`SQL%FOUND`属性返回值相反。 - **SQL%...
以上是关于Oracle数据库系统作业的知识点详解,覆盖了数据库的物理和逻辑存储结构、日志机制、管理参数设置、启动关闭过程、SQL*PLUS命令、SQL查询基础以及PL/SQL编程等内容。希望这些知识点能够帮助读者更好地理解...
- **%ROWCOUNT**:返回最后一条SQL语句影响的行数。 8. **查询和更新语句**: - **HAVING**:在分组查询中过滤数据。 - **子查询**:嵌套在其他SQL语句中的查询。 - **UPDATE**:用于修改数据表中的数据。 9. ...
- `%ROWCOUNT`:受影响的行数。 - `%ISOPEN`:始终为FALSE,因为隐式游标不是真正意义上的打开状态。 **显式游标的使用步骤**: 1. 声明游标:`DECLARE CURSOR 游标名 IS 查询语句;` 2. 打开游标:`OPEN 游标名;` 3...