8.2.7 带参数的游标

在使用显式游标时是可以指定参数的,指定的参数包括参数的顺序和参数的类型。参数可以传递给游标在查询中使用,这样就方便了用户根据不同的查询条件进行查询,也方便了游标在存储过程中的使用。本小节将介绍带参数的游标。

【示例9】使用带参数的游标

此类型的游标语法可以参考8.2.1小节。具体代码如下:


01 DECLARE

02 cur_productid productinfo.Productid%TYPE:='0240';

03 cur_productprice productinfo.Productprice%TYPE:=1200;

04 cur_prodrcd productinfo%ROWTYPE;

05

06 CURSOR pdct_parameter_cur(id VARCHAR,price NUMBER)

07 IS SELECT*FROM PRODUCTINFO

08 WHERE productid like id||'%'

09 AND productprice>price;

10

11 BEGIN

12 OPEN pdct_parameter_cur(cur_productid,cur_productprice);

13 LOOP

14 FETCH pdct_parameter_cur INTO cur_prodrcd;

15 EXIT WHEN pdct_parameter_cur%NOTFOUND;

16 DBMS_OUTPUT.PUT_LINE('产品ID:'||cur_prodrcd.productid||'产品名称:'||

17 cur_prodrcd.productname||'产品价格:'||

18 cur_prodrcd.productprice);

19 END LOOP;

20 CLOSE pdct_parameter_cur;

21 END;


【代码解析】

❑第2~3行声明变量并赋值,这两个参数是要传递给游标的变量。

❑第4行声明表productinfo的行对象,用来存放FETCH提取的数据。

❑第6行声明游标,包括两个参数,参数需要说明类型。

❑第7~9行是游标关联的查询语句,可以看到第8和第9行的查询条件都使用了游标里的变量。

❑第12行表示打开游标,并把第2和第3行的变量传入游标中。

❑其他脚本这里不做解释,读者可参照前面代码自行理解。

【执行效果】

执行效果如下:


产品ID:0240040001 产品名称:夏普LCD-46G100A 产品价格:7000

产品ID:0240030002 产品名称:三星WF-R1065S/XSC 产品价格:3600

产品ID:0240030003 产品名称:三星XQB55-T86A/XSC 产品价格:2500

产品ID:0240020001 产品名称:思科RV082路由器 产品价格:2800


从输出结果可以看出,得到的数据是经过游标中条件过滤的。这种带参数的游标在实际开发中经常用到,有时候也会根据参数的不同而打开不同的游标。这种情况会在存储过程中出现。

注意 当打开游标时并不单单局限示例中的方式,也可以直接写入具体的数值作为参数。当然,也可以变量同具体数值混合使用。关于这一点做过编程语言开发的用户不会陌生。