千家信息网

达梦游标的简单使用

发表于:2025-02-07 作者:千家信息网编辑
千家信息网最后更新 2025年02月07日,1 显示游标create table T1 ( sex varchar2 ( 10 ), name varchar2 ( 20 ));insert into t1 values ( ' 男 ' , '
千家信息网最后更新 2025年02月07日达梦游标的简单使用

1 显示游标

create table T1 ( sex varchar2 ( 10 ), name varchar2 ( 20 ));

insert into t1 values ( ' ' , ' 小刘 ' );

insert into t1 values ( ' ' , ' 小陈 ' );

insert into t1 values ( ' ' , ' 晓燕 ' );

insert into t1 values ( ' ' , ' 小红 ' );

commit ;

select * from t1 ;

DECLARE

CURSOR c_t1_cursor is select sex , name from t1 where sex= ' ' ;

v_sex t1 . sex %type ;

v_name t1 . name %type ;

begin

open c_t1_cursor ;

loop

fetch c_t1_cursor into v_sex , v_name ;

exit when c_t1_cursor%notfound ;

print ( v_name|| ' is ' ||v_sex );

end loop ;

close c_t1_cursor ;

end ;

注:游标的定义要在匿名块的定义部分定义,游标打开、提取数据、关闭都在执行部分。

2 参数游标

语法:

CURSOR cursor_name

[(parameter_name datatype, ...)]

IS

select_statement;

......

OPEN cursor_name(parameter_value,.....) ;

DECLARE

CURSOR c_t1_cursor ( c_sex varchar2 ( 10 )) is select sex , name from t1 where sex=c_sex ;

v_sex t1 . sex%type ;

v_name t1 . name%type ;

begin

open c_t1_cursor ( ' ' );

loop

fetch c_t1_cursor into v_sex , v_name ;

exit when c_t1_cursor%notfound ;

print ( v_name|| ' is ' ||v_sex );

end loop ;

close c_t1_cursor ;

end ;

注:open c_t1_cursor(' ') 也可以改为 open c_t1_cursor ( &sex );

3 游标for 循环

语法:

FOR record_name IN cursor_name|select_statement LOOP

statement1;

statement2;

......

END LOOP;

begin

for t1_record in ( select sex , name from t1 where sex= ' ' ) loop

print ( t1_record . name|| ' is ' ||t1_record . sex );

end loop ;

end ;

4 游标表达式

语法:

TYPE ref_type_name IS REF CURSOR [RETURN return_type];

cursor_variable ref_type_name;

ref_type_name :用于指定自定义类型名

RETURN :用于指定返回结果的数据类型

cursor_variable :用于指定游标变量名

DECLARE

TYPE t1_cursor IS REF CURSOR ;

my_cursor t1_cursor ;

v_sex t1 . sex%type ;

v_name t1 . name%type ;

begin

OPEN my_cursor FOR select sex , name from t1 where sex= ' ' ;

LOOP

FETCH my_cursor INTO v_sex , v_name ;

EXIT WHEN my_cursor%NOTFOUND ;

print ( v_name|| ' is ' ||v_sex );

end loop ;

close my_cursor ;

end ;

0