1,带参数的游标
与存储过程和函数相似,可以将参数传递给游标并在查询中使用。这对于处理在某种条件下打开游标的情况非常有用。它的语法如下:
CURSOR cursor_name[(parameter[,parameter],...)] IS select_statement;
定义参数的语法如下:
Parameter_name [IN] data_type[{:=|DEFAULT} value]
与存储过程不同的是,游标只能接受传递的值,而不能返回值。参数只定义数据类型,没有大小。
另外可以给参数设定一个缺省值,当没有参数值传递给游标时,就使用缺省值。游标中定义的参数只是一个占位符,在别处引用该参数不一定可靠。
在打开游标时给参数赋值,语法如下:
OPEN cursor_name[value[,value]....];
参数值可以是文字或变量。
例:
DECALRE
CURSOR c_dept IS SELECT * FROM dept ORDER BY deptno;
CURSOR c_emp (p_dept VARACHAR2) IS
SELECT ename,salary
FROM emp
WHERE deptno=p_dept
ORDER BY ename
r_dept DEPT%ROWTYPE;
v_ename EMP.ENAME%TYPE;
v_salary EMP.SALARY%TYPE;
v_tot_salary EMP.SALARY%TYPE;
BEGIN
OPEN c_dept;
LOOP
FETCH c_dept INTO r_dept;
EXIT WHEN c_dept%NOTFOUND;
DBMS_OUTPUT.PUT_LINE('Department:'|| r_dept.deptno||'-'||r_dept.dname);
v_tot_salary:=0;
OPEN c_emp(r_dept.deptno);
LOOP
FETCH c_emp INTO v_ename,v_salary;
EXIT WHEN c_emp%NOTFOUND;
DBMS_OUTPUT.PUT_LINE('Name:'|| v_ename||' salary:'||v_salary);
v_tot_salary:=v_tot_salary+v_salary;
END LOOP;
CLOSE c_emp;
DBMS_OUTPUT.PUT_LINE('Toltal Salary for dept:'|| v_tot_salary);
END LOOP;
CLOSE c_dept;
END;
2. 字符串变量
动态游标就是动态定义游标。
declare
type t_sor is ref cursor;
v_sor t_sor; --必需的,通过对象变量实现.
...
begin
..
end;
/
给一个完整的例子:
create or replace procedure SP_CLEAR(V_TABLE IN STRING) IS
TYPE cur_type IS REF CURSOR;
c_tab cur_type;
v_str STRING(2000);
v_tab t_clear.wlbmc%TYPE;
v_sql STRING(3000);
begin
--Get table from v_table
--Reorder these tables
v_str:=upper(v_table);
v_str:=REPLACE(v_str,',',''',''');
v_str:=''''||v_str||'''';
v_sql:='SELECT WLBMC FROM T_CLEAR WHERE TRIM(WLBMC) IN ('||v_str||') ORDER BY BZ DESC';
OPEN c_tab FOR v_sql;
LOOP
FETCH c_tab INTO v_tab;
EXIT WHEN c_tab%NOTFOUND;
v_sql:='delete from '||v_tab||'';
EXECUTE IMMEDIATE v_sql;
END LOOP;
COMMIT;
--deal with exception
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
RAISE;
end SP_CLEAR;
/
3.字符串变量例子2
给你一个完整的例子:
DECLARE
TYPE EmpCurTyp IS REF CURSOR;
emp_cv EmpCurTyp;
emp_rec emp%ROWTYPE;
sql_stmt VARCHAR2(200);
my_job VARCHAR2(15) := 'CLERK';
BEGIN
sql_stmt := 'SELECT * FROM emp WHERE job = :j';
OPEN emp_cv FOR sql_stmt USING my_job;
LOOP
FETCH emp_cv INTO emp_rec;
EXIT WHEN emp_cv%NOTFOUND;
-- process record
END LOOP;
CLOSE emp_cv;
END;
带输入参数的动态游标的实例
分享到:
相关推荐
标题“Oracle游标实例”直接点明了文章的主题,即通过具体的示例来讲解Oracle中的游标使用方法。描述重复了标题内容,这表明文件的主要目的是提供关于Oracle游标的实例代码,供学习和参考。 ### 标签 标签“Oracle...
### Oracle游标使用及实例详解 #### 一、Oracle游标概述 在Oracle数据库中,游标(Cursor)是一种用于处理SQL查询结果集的方式。它允许用户逐行地读取和处理查询结果,这对于需要对每一行数据进行特定操作的情况非常...
在"游标.txt"文件中,可能包含了更多关于Oracle游标的使用实例和技巧,包括游标的声明、动态游标、游标变量、游标表达式以及游标在存储过程和函数中的应用。这些内容可以帮助你更深入地理解和掌握Oracle游标,提高你...
本主题将深入探讨Oracle中的几个核心概念:函数、存储过程、游标以及简单的实例,这些都是数据库管理员和开发人员日常工作中不可或缺的部分。 首先,我们来了解**Oracle函数**。函数是预定义的代码块,接受零个或多...
根据提供的Oracle管道函数和动态游标的代码片段及描述,我们可以深入了解其背后的技术要点与实现细节。下面将逐一解析这些知识点。 ### Oracle管道函数 管道函数(Pipe-lined Function)是Oracle中一种特殊类型的...
Oracle游标是数据库管理系统中的一种重要机制,它允许应用程序按需逐行处理查询结果集,而不是一次性处理所有数据。游标对于交互式和事务性的应用尤其有用,因为它们可以控制数据流并根据需要进行交互。 首先,让...
### Oracle游标优化 在Oracle数据库管理中,游标是一种重要的机制,用于处理查询结果集。游标可以被看作是存储查询结果的一种临时区域,它允许用户通过循环逐行处理这些结果。游标不仅可以提高应用程序的灵活性,还...
### Oracle 游标实例解析及应用 #### 一、Oracle游标概述 在Oracle数据库中,游标(Cursor)是一种数据库对象,它允许程序能够逐行处理查询结果集中的数据。与直接执行SQL语句获取整个结果集不同,游标可以逐行...
在本例中,“Oracle存储过程实例使用显示游标”着重展示了如何在存储过程中调用函数,并通过游标来处理和更新数据。 首先,我们需要了解存储过程的基本结构。一个存储过程通常包含以下部分: 1. **声明部分**:在...
Oracle游标是数据库管理系统中处理查询结果的一种方法,它允许我们逐行处理数据,而不仅仅是一次性获取所有结果。在Oracle中,游标分为隐式游标和显式游标。 ### 隐式游标 Oracle数据库在执行DML(插入、删除、更新...
### Oracle游标使用大全 #### 一、概述 在Oracle数据库中,游标是一种重要的机制,用于处理查询结果集中的数据。游标允许程序逐行处理数据,这在需要对多行数据进行循环处理时非常有用。本文档旨在提供一个全面的...
本教程将深入介绍Oracle和SQL中的游标概念,以及如何通过实例来理解和应用它们。 首先,我们要明白什么是游标。游标(Cursor)是一个数据库系统组件,它允许我们在查询结果集中移动,一次处理一行数据。这在处理...
以下是对"既简单,又使用的游标实例"的详细解释。 游标,英文名为Cursor,是数据库管理系统(DBMS)提供的一种机制,用于在查询结果集中移动并处理单个记录。它在关系数据库中起着类似指针的作用,可以定位到结果...
以上就是Oracle Job、存储过程、视图和游标在实际应用中的基本概念和结合实例,它们共同构成了数据库管理和自动化操作的重要部分。理解并熟练掌握这些工具,能显著提升数据库的管理和维护效率。
根据提供的文件信息,我们可以深入探讨其中涉及的关键概念和实践应用,包括Oracle中的游标使用方法、存储过程的定义以及如何创建并调用返回结果集的存储过程。 ### 1. 游标的使用方法 #### 1.1 游标基本概念 在...
在PL/SQL(Oracle的编程语言)中,游标允许我们通过声明、打开、提取和关闭等步骤来遍历和操作数据。在上述例子中,定义了一个名为`cur_age`的游标,用于从`t_borrowRecord`表中选取特定学生的所有借书日期...
oracle游标的用法,比较通俗易懂的讲解游标用法,有实例
Oracle 存储过程调用 CallabledStatement 实用例子(IN OUT 传游标) 一、Oracle 存储过程简介 Oracle 存储过程是一种可以在 Oracle 数据库中存储和执行的程序单元。存储过程可以由多种语言编写,例如 PL/SQL、...
系统游标,通常以`sys_refcursor`类型表示,是Oracle内置的一种方式,用于处理动态SQL的结果集。下面是如何声明和使用系统游标的步骤: - 创建存储过程: ```sql create or replace procedure p_temp_procedure ...
本篇将详细解释Oracle游标的简易用法,并通过实例代码来演示如何使用。 首先,游标定义了一个SQL查询的结果集,但并不立即执行该查询。在Oracle中,游标由`DECLARE`语句定义,可以包括变量、条件等。例如: ```sql...