请教pl/sql的一些问题?

caihantao_2006 2009-03-01 08:19:46
不用游标也能处理多行查询的结果数据吗?能不能举个例子?
游标变量和游标有什么区别?游标变量有什么用?举个例子?
谢谢!我是菜鸟!请高手指导!
...全文
82 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
willflyz 2009-03-02
  • 打赏
  • 举报
回复
不用游标也能处理多行查询的结果数据吗?
==除了游标似乎没有其他方式了;
游标变量和游标有什么区别?游标变量有什么用?
==
游标变量:
定义游标变量要先定义游标类型,再根据类型定义游标变量如
declare
type CursorType is ref cursor; --定义游标类型
c_test cursortype; --定义c_test为游标变量
游标:
如下C_test就是显示的定义了一个游标
declare
Cursor c_test is select * from tableName where ...;
隐性游标,c_test也是一个游标
for c_test in (select * from tableName where ...)
区别:游标直接定义的时候结果集已经确定,游标变量要用的时候才赋值给它.
游标变量的作用:
和游标差不多,不过它可以作为参数输出,要使用游标变量的时候赋值,
open c_test for 'select * from tablename'
oraclelogan 2009-03-02
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 manbieli 的回复:]
引用楼主 caihantao_2006 的帖子:
不用游标也能处理多行查询的结果数据吗?能不能举个例子?
游标变量和游标有什么区别?游标变量有什么用?举个例子?
谢谢!我是菜鸟!请高手指导!


1:
不用游标,在plsql里面无法一行一行处理数据的;但是可以用update、delete语句批量处理数据。

2:
游标是数据库中一个命名的工作区,当游标被声明后,他就与一个固定的SQL想关联,在编译时刻是已知的,是静态的.它永远指…
[/Quote]

正解啊,说的很有道理!
manbieli 2009-03-02
  • 打赏
  • 举报
回复
[Quote=引用楼主 caihantao_2006 的帖子:]
不用游标也能处理多行查询的结果数据吗?能不能举个例子?
游标变量和游标有什么区别?游标变量有什么用?举个例子?
谢谢!我是菜鸟!请高手指导!
[/Quote]

1:
不用游标,在plsql里面无法一行一行处理数据的;但是可以用update、delete语句批量处理数据。

2:
游标是数据库中一个命名的工作区,当游标被声明后,他就与一个固定的SQL想关联,在编译时刻是已知的,是静态的.它永远指向一个相同的查询工作区.
游标变量可以在运行时刻与不同的SQL语句关联,在运行时可以取不同的SQL语句.它可以引用不同的工作区.

游标和游标变量是不能相互代替的.
如何定义游标类型
TYPE ref_type_name IS REF CURSOR [RETURN return_type];
声明游标变量
cursor_name ref_type_name;

ref_type_name 是后面声明游标变量时要用到的我们的游标类型(自定义游标类型,即CURSOR是系统默认的,ref_type_name是我们定义的 );return_type代表数据库表中的一行,或一个记录类型
TYPE ref_type_name IS REF CURSOR RETURN employee%TYPE
RETURN 是可选的,如果有是强类型,可以减少错误,如果没有return是弱引用,有较好的灵活性.

不能在包头里面声明游标变量,注意,但可以定义游标类型,要注意这二者的区别.
可以声明游标变量作为函数或过程的形式参数.
%TYPE一个列类型
%ROWTYPE行类型
控制游标变量
OPEN-FOR(打开游标变量,与多行查询连接起来) FETCH(从结果集中取行数据),close(关闭游标变量)
zhou0216 2009-03-02
  • 打赏
  • 举报
回复
可以处理。。自定义复合变量,类似于定义类。
Oracle中支持

17,380

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧