oracle如何返回游标,oracle 函数返回游标

Oracle 游标

游标能够根据查询条件从数据表中提取一组记录,将其作为一个临时表置于数据缓冲区中,利用指针逐行对记录数据进行操作。

创新互联公司主营色尼网站建设的网络公司,主营网站建设方案,成都APP应用开发,色尼h5成都微信小程序搭建,色尼网站营销推广欢迎色尼等地区企业咨询

Oracle中的游标分为显示游标和隐式游标 。

在执行SQL语句时,Oracle会自动创建隐式游标,该游标是内存中处理该语句的数据缓冲区,存储了执行SQL语句的结果。通过隐式游标属性可获知SQL语句的执行状态信息。

%found:布尔型属性,如果sql语句至少影响到一行数据,值为true,否则为false。

%notfound:布尔型属性,与%found相反。

%rowcount:数字型属性,返回受sql影响的行数。

%isopen:布尔型属性,当游标已经打开时返回true,游标关闭时则为false。

用户可以显式定义游标。使用显式游标处理数据要4个步骤:定义游标、打开游标、提取游标数据和关闭游标。

游标由游标名称和游标对应的select结果集组成。定义游标应该放在pl/sql程序块的声明部分。

语法格式:cursor 游标名称(参数) is 查询语句

打开游标时,游标会将符合条件的记录送入数据缓冲区,并将指针指向第一条记录。

语法格式:open 游标名称(参数);

将游标中的当前行数据赋给指定的变量或记录变量。

语法格式:fetch 游标名称 into 变量名;

游标一旦使用完毕,就应将其关闭,释放与游标相关联的资源。

语法格式:close 游标名称;

declare

cursor c1 is  select sno,cno,grade from sc;

v_sno sc.sno%type;

v_cno sc.cno%type;

v_grade sc.grade%type;

begin

open c1;

loop

  fetch c1 into v_sno,v_cno,v_grade;

  exit when c1%notfound;--紧跟fetch之后

if c1%found then

dbms_output.put_line(to_char(c1%rowcount)||v_cno);

end if;

end loop;

close c1; 

end;

declare

cursor c1 is select sno,cno,grade from sc;

v_sno sc.sno%type;

v_cno sc.cno%type;

v_grade sc.grade%type;

begin

open c1;

fetch c1 into v_sno,v_cno,v_grade;

while c1%found loop

  dbms_output.put_line(v_sno||v_cno||v_grade);

 fetch c1 into v_sno,v_cno,v_grade;

end loop;

close c1; 

end;

第三种:for

declare

cursor c1 is select sno,cno,grade from sc;

begin

for item in c1 loop

dbms_output.put_line(rpad(item.sno,'10',' ')||rpad(item.cno,'10',' ')||rpad(item.grade,'10',' '));

end loop;

end;

求助:在oracle中用存储过程返回游标(前先判断游标是否有值)的问题?

游标只有fetch了才能判断是否有值,所以只能用select count(*)先判断了

如何使用Oracle的游标?

Oracle中的游标分为显示游标和隐式游标。

显示游标:

显示游标是用cursor...is命令定义的游标,它可以对查询语句(select)返回的多条记录进行处理;显示游标的操作:打开游标、操作游标、关闭游标;

隐式游标:

隐式游标是在执行插入(insert)、删除(delete)、修改(update)和返回单条记录的查询(select)语句时由PL/SQL自动定义的。PL/SQL隐式地打开SQL游标,并在它内部处理SQL语句,然后关闭它。

如何在oracle存储过程中返回游标

1:首先你需要创建一个包,并定义你返回的游标的类型、存储过程 create or replace package TEST_PKG is -- Public type declarations type cur_emp is REF CURSOR; procedure test_proc (v_empno in number, emps out cur_emp); end TEST_PKG; 2:然后你再创建包体 create or replace package body TEST_PKG is procedure test_proc (v_empno in number, emps out cur_emp)asbeginopen emps for select * from emp where empno=7369; end test_proc; end TEST_PKG ; 3,通过JAVA调用 cstmt = conn.prepareCall("{call TEST_PKG .test_proc (?)}"); cstmt.registerOutParameter(1, OracleTypes.CURSOR); cstmt.execute();//获得结果集

请问:在oracle中的过程中怎么返回一个游标?

oracle中有很多经常用到的包,他们功能强大,能够完成很多复杂,和不可想象的任务,所以我想请大家帮忙整理出来,不管是高手还是新人只要有对某个包比较熟悉,或者对他的一种使用方法比较熟悉,请帮忙跟贴,对大家的管理工作应该都会有很大帮助的。我先抛砖引玉写一个,希望版主和同志们帮忙。

------------------------------------------------------------------------------------

DBMS_SQL

一:)带有参数及解释

1、OPEN_CURSOR:返回新游标的ID值

2、PARSE:解析要执行的语句

3、BIND_VARIABLE:将给定的数量与特定的变量相连接

4、DEFINE_COLOUMN:定义字段变量,其值对应于指定游标中某个位置元素的值

(仅用于SELECT语句)

5、EXECUTE:执行指定的游标

6、EXECUTE_AND_FETCH:执行指定的游标并取记录

7、FETCH_ROWS:从指定的游标中取出记录

8、COLUMN_VALUE:返回游标中指定位置的元素

9、IS_OPEN:当指定的游标状态为OPEN时返回真值

10、CLOSE_CURSOR:关闭指定的游标并释放内存

11、LAST_ERROR_POSITION:返回出错SQL语句的字节偏移量

12、LAST_ROW_ID:返回最后一条记录的ROWID

13、LAST_SQL_FUNCTION_CODE:返回语句的SQL FUNCTION CODE

二:使用实例:

CREATE OR REPLACE

procedure dml_sql (the_rq varchar2) as

The_c1 Integer;

The_result Integer; --dml_sql_result

M_jls number;

The_xh varchar2(2);

Begin

The_xh:=lpad(ltrim(the_rq),2,'0');

The_C1 :=Dbms_sql.open_cursor;

Dbms_sql.parse(the_C1,'select count(*) from user_indexes

where table_name =''ZDCHB'''||the_xh,dbms_sql.v7);

Dbms_sql.define_column(the_c1,1,M_jls);

The_result:=Dbms_sql.execute(The_c1);

If dbms_sql.fetch_rows(cursor1) ; 0 then

Dbms_sql.column_value(cursor1,1,M_jls);

End if;

Dbms_sql.close_cursor(The_C1);

End;

大家不一定按这个模式来,也不一定要写的这么复杂,知道多少就写多少,整理出来,以后如果能够想用什么包到chinaunix里都能查到,就好了,呵呵!

--------------------------------------------------------------------------------

txfy 回复于:2003-09-16 15:03:09

二:dbms

DBMS_JOB 包介绍

调度任务队列里的任务要使用DBMS_JOB包中的过程。使用任务队列不需要特别的数据库特权。任何可以使用这些过程的用户都可以使用任务队列。

1:参数

SUBMIT

-- 向任务队列提交一个任务

REMOVE

-- 从任务队列中删除指定的任务

CHANGE

-- 改变任务

WHAT

-- 改变指定任务的任务内容

NEXT_DATE

-- 改变指定任务的下一次执行时间

INTERVAL

--改变指定任务的执行时间间隔。

BROKEN

-- 禁止指定任务的执行

RUN

--强制执行指定的任务

----------------------------------------------------------------------------------------------------------------------

2:使用方法

1)向任务队列提交一个任务(submit)

DBMS_JOB.SUBMIT( job OUT BINARY_INTEGER,

what IN VARCHAR2,

next_date IN DATE DEFAULT SYSDATE,

interval IN VARCHAR2 DEFAULT 'null',

no_parse IN BOOLEAN DEFAULT FALSE)

其中interval指定方式为:

'SYSDATE + 7' 每7天一次

'SYSDATE + 1/48' 每半个小时一次

'NEXT_DAY(TRUNC(SYSDATE), ''MONDAY'') + 15/24' 每个礼拜一的下午3点执行

'NEXT_DAY(ADD_MONTHS(TRUNC(SYSDATE, ''Q''), 3), ''THURSDAY'')'每个季度的第一个星期四

2)删除任务队列中的任务(remove)

DBMS_JOB.REMOVE(job IN BINARY_INTEGER)

The following statement removes job number 14144 from the job queue:

DBMS_JOB.REMOVE(14144);

3)指定任务的任务内容(WHAT)

DBMS_JOB.WHAT( job IN BINARY_INTEGER,

what IN VARCHAR2)

4)指定下次执行时间,如果你暂时不想让它执行可以设成3004年,呵呵!(next_date)

DBMS_JOB.NEXT_DATE( job IN BINARY_INTEGER,

next_date IN DATE)

5)指定任务的执行时间间隔(NTERVAL)

DBMS_JOB.INTERVAL( job IN BINARY_INTEGER,

interval IN VARCHAR2)

-----------------------------------------------------------------------------------------------------------------------

3:查询状态

显示任务的状态和失败执行的次数。

SELECT job, next_date, next_sec, failures, broken

FROM user_jobs;

JOB NEXT_DATE NEXT_SEC FAILURES B

---------- --------- -------- ---------- -

9125 01-NOV-94 00:00:00 4 N

14144 24-OCT-94 16:35:35 0 N

41762 01-JAN-00 00:00:00 16 Y

显示当前运行的任务的信息。

SELECT sid, r.job, log_user, r.this_date, r.this_sec

FROM dba_jobs_running r, dba_jobs j

WHERE r.job = j.job;

SID JOB LOG_USER THIS_DATE THIS_SEC

---------- ---------- -------------------- --------- --------

12 14144 JFEE 24-OCT-94 17:21:24

25 8536 SCOTT 24-OCT-94 16:45:12

当前名称:oracle如何返回游标,oracle 函数返回游标
网页URL:https://www.cdcxhl.com/article22/hsjecc.html

成都网站建设公司_创新互联,为您提供网站建设企业网站制作软件开发网站营销响应式网站品牌网站建设

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

网站优化排名