PL/sql_syntax_type_cursor简单样例

--------------------------
--eg:
CREATE TABLE xjytab(col1 number,col2 varchar2(20),col3time date,d date);
---
....--insert into table some information;
---
create or replace procedure xjyp is  
  cur sys_refcursor;
  mstr xjytab%rowtype;
begin 
  open cur for 
  select * from xjytab ;
  loop
     fetch cur into mstr;
     dbms_output.put_line(mstr.col1||'  '||mstr.col2||' date1: '||to_char(mstr.col3time,'yyyymmdd')
     ||' date2: '||to_char(mstr.d,'yyyymmdd'));--数据不是一行报错  
     EXIT When cur%NOTFOUND;
     end loop;
  close cur;
 end;
/
--------------------
SQL> create or replace procedure xjyp is
  2    cur sys_refcursor;
  3    mstr xjytab%rowtype;
  4  begin
  5    open cur for
  6    select * from xjytab ;
  7    loop
  8       fetch cur into mstr;
  9       dbms_output.put_line(mstr.col1||'  '||mstr.col2||' date1: '||to_char(mstr.col3time,'yyyymmdd')
 10       ||' date2: '||to_char(mstr.d,'yyyymmdd'));--数据不是一行报错
 11       EXIT When cur%NOTFOUND;
 12       end loop;
 13    close cur;
 14   end;
 15  /

Procedure created

SQL> set serverout on;
SQL> exec xjyp;
23  just write date1: 20160830 date2: 20160901
1  20160803 date1: 20160907 date2: 20160701
7  procedure Test date1: 20160803 date2: 20160903
9  proceT2 date1: 20160825 date2: 20160902
4  test just date1: 20160708 date2: 20160902
5  includetest de date1: 20160805 date2: 20160730
9  proceT2 date1: 20160825 date2: 20160902
9  proceT2 date1: 20160825 date2: 20160902

PL/SQL procedure successfully completed

SQL> select *from xjytab;

      COL1 COL2                 COL3TIME    D
---------- -------------------- ----------- -----------
        23 just write           2016/8/30   2016/9/1
         1 20160803             2016/9/7    2016/7/1
         7 procedure Test       2016/8/3    2016/9/3
         9 proceT2              2016/8/25   2016/9/2
         4 test just            2016/7/8    2016/9/2
         5 includetest de       2016/8/5    2016/7/30
         9 proceT2              2016/8/25   2016/9/2

7 rows selected
--base_type
variable_name BOOLEAN
variable_name Number;
variable_name Number(intergral_num,decimal_num);
variable_name date;
variable_name varchar2(count_num);
--------------|||
SUBTYPE subtype_name IS base_type [ NOT NULL ]
--eg:
declare
SUBTYPE Counter IS Number;
accounts     Counter := 1;
--------------|||
SUBTYPE subtype_name IS base_type
  { precision [, scale ] | RANGE low_value .. high_value } [ NOT NULL ]
--eg:
DECLARE
  SUBTYPE Balance IS NUMBER(8,2);
 
  checking_account  Balance;
----------------------------------

DECLARE
  TYPE Foursome IS VARRAY(4) OF VARCHAR2(15);  -- VARRAY type 默认number当下标
  -- team Foursome := Foursome();  -- initialize to empty
  -- team Foursome:= Foursome('Arun', 'Amitha', 'Allan', 'Mae');
  -- team(1) team(2) team(3) team(4)
  TYPE Roster IS TABLE OF VARCHAR2(15);  -- nested table type默认number当下标
  --names Roster := Roster('D Caruso', 'J Hamil', 'D Piro', 'R Singh');
  TYPE aa_type IS TABLE OF INTEGER INDEX BY VARCHAR2(10);--用字符串当下标
  --aa_str  aa_type;
  --aa_str('sindex'):=3;
  --cindex varchar2(10);
  --cindex=aa_str.first;
  --while cindex is not null loop
  --cindex=aa_str.next(cindex); end loop;
----------------------------------
--Cursors
--one is implicit cursors  other is explicit cursors 

---*************************************************
--implicit cursor --隐式游标,执行语句系统内分配
--一些属性attribute
SQL%ISOPEN-- Attribute: Is the Cursor Open?游标是否打开
SQL%FOUND-- Attribute: Were Any Rows Affected?有行受影响?
SQL%NOTFOUND-- Attribute: Were No Rows Affected?没有行受影响?
SQL%ROWCOUNT-- Attribute: How Many Rows Were Affected?多少行受影响
SQL%BULK_ROWCOUNT-- (see "Getting Number of Rows Affected by FORALL Statement"获得受影响行数
SQL%BULK_EXCEPTIONS-- (see "Handling FORALL Exceptions After FORALL Statement Completes"不受影响的行数

---*************************************************
--explicit cursor --用户自定义游标
--You can either declare an explicit cursor first and then define it later in the same block, subprogram, or package,
--可以先声明游标,而后定义在一个代码块内(子程序或者包内)
-- or declare and define it at the same time.
--也可以声明定义一起。
--explicit cursor  declaration声明
CURSOR cursor_name 
[ parameter_list ] --(name1 type,name2 type...)
RETURN return_type;
--explicit cursor definitions定义
CURSOR cursor_name 
[ parameter_list ] --
[ RETURN return_type ]
  IS 
select_statement;
--Opening  Explicit Cursors
OPEN cursor_name;
--Fetching Data with Explicit Cursors
FETCH cursor_name INTO into_clause;
EXIT WHEN cursor_name%NOTFOUND;
--Closing Explicit Cursors
CLOSE cursor_name;

--Explicit Cursor Attributes
cursor_name%ISOPEN --Attribute: Is the Cursor Open?打开?
cursor_name%FOUND --Attribute: Has a Row Been Fetched?取到数据?
cursor_name%NOTFOUND --Attribute: Has No Row Been Fetched?取不到数据?
cursor_name%ROWCOUNT --Attribute: How Many Rows Were Fetched?已取多少行?
--
TYPE type_name IS REF CURSOR [ RETURN return_type ]
---------------------
declare
  ...
  cur sys_refcursor;
  ...
begin 
  ...
  open cur for select_statement;
  loop
     fetch cur into into_clause;
     EXIT When cur%NOTFOUND;
     ...
     end loop;
  close cur;
  ...
end;
/
--------------------------


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值