新手学PL/SQL(2)

1.在存储过程中使用游标返回结果集:

(1)包:

create or replace package PKG_ReturnSet

as

type MyCurType is ref cursor;

end;

 

(2)存储过程:

create or replace procedure SP_ReturnSet(p_Result out PKG_ReturnSet.MyCurType)

as

begin

open p_Result for 'select * from alarminfo';

end;

 

(3)程序:

static void Main (string[] args)

{

OracleConnection conn = new OracleConnection("……");

try

{               

OracleCommand cmd = new OracleCommand();

cmd.Connection = conn;

cmd.CommandType = CommandType.StoredProcedure;

cmd.CommandText = "SP_ReturnSet";

OracleParameter p = new OracleParameter("p_Result", OracleType.Cursor);

p.Direction = ParameterDirection.Output;

cmd.Parameters.Add(p);

OracleDataAdapter da = new OracleDataAdapter(cmd);

DataSet ds = new DataSet();

da.Fill(ds);

 

for (int i = 0; i < ds.Tables[0].Rows.Count; i++)

{

Console.WriteLine(ds.Tables[0].Rows[i]["obj_id"].ToString());

}

}

catch (Exception x)

{

Console.WriteLine(x.Message);

}

finally

{

if (conn.State == ConnectionState.Open)

{

//conn.Close();

}

}

Console.Read();

}

 

 

2.游标参数:

declare

cursor Cur_1(p_StationID varchar2) is

select * from MyTable where ID= p_StationID;

 

begin

for v_Row in Cur_1('dmz1') loop

       DBMS_OUTPUT.put_line(v_Row.name);

end loop;

end;

((1)在游标for循环中,游标的打开、获取、关闭都是隐含地进行,不需要你书写显式的代码来执行。(2)变量v_Row无须显式地声明。)

 

 

3.另一些PL/SQL简单概念:

(1)PL/SQL代码组织而成“”,如果你创建存储过程或包,那么它是一个“命名块”,否则,称为“匿名块”。

PL/SQL块包含三个部分:(1)声明:定义及初始化变量及游标,(2)可执行命令:使用流程控制关键字来执行命令并将值赋于已声明的变量,(3)异常处理。如下:

declare

<declarations section>

begin

<executable commands>

exception

<exception handling>

end;

 

 

(2)流程控制(If)

If……then

……;

Elsif……then

……;

Else

……;

End If;

 

 

(3)流程控制(循环)

简单循环:循环直到遇到ExitExit When

For循环:循环执行指定次数

While循环:在符合条件下循环

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

Loop

       ……;

Exit When ……;

End Loop ;

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

For radius in 1..7 Loop

area:=pi*power(radius,2);

insert into areas values(radius,area)

End Loop ;

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

While radius<=7 Loop

……;

End Loop ;

 

 

(4)流程控制(Case)

Case When …… Then

……;

When …… Then

       ……;

Else ……;

End Case;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值