SAP HANA存储过程中的游标使用(Cursor)

-- run 1_datatype_data.sql before running this script

ALTER SESSION SET CURRENT_SCHEMA = SqlScriptDocumentation;

drop procedure cursor_proc;
CREATE PROCEDURE cursor_proc LANGUAGE SQLSCRIPT AS
    v_isbn    VARCHAR(20);
    v_title   VARCHAR(50) := '';
    v_price   decimal(5,2) := 0;
    v_crcy    VARCHAR(3) := 'XXX';
    v_msg     VARCHAR(200);
    CURSOR c_cursor1 (v_isbn VARCHAR(20)) FOR
        SELECT isbn, title, price, crcy FROM books
        WHERE isbn = :v_isbn ORDER BY isbn;
BEGIN
    init_proc();

    IF c_cursor1%ISOPEN    THEN
        ins_msg_proc('WRONG: cursor open');
    ELSE
        ins_msg_proc('OK: cursor not open');   
    END IF;
   
    OPEN c_cursor1('978-3-86894-012-1');

    IF c_cursor1%ISOPEN    THEN
        ins_msg_proc('OK: cursor open');
    ELSE
        ins_msg_proc('WRONG: cursor not open');   
    END IF;

    FETCH c_cursor1 INTO v_isbn, v_title, v_price, v_crcy;
    IF c_cursor1%FOUND THEN
        ins_msg_proc('OK: cursor contains valid data');
    ELSE
        ins_msg_proc('WRONG: cursor contains no valid data');
    END IF;

    ins_msg_proc(:v_title || ' identified by isbn ' || :v_isbn || ' costs ' || :v_price || ' ' || :v_crcy);

    FETCH c_cursor1 INTO v_isbn, v_title, v_price, v_crcy;
    IF c_cursor1%NOTFOUND
    THEN
        ins_msg_proc('OK: cursor contains valid data');
    ELSE
        ins_msg_proc('WRONG: cursor contains no valid data');
         ins_msg_proc(:v_title || ' identified by isbn ' || :v_isbn || ' costs ' || :v_price || ' ' || :v_crcy);
    END IF;

    IF c_cursor1%ISOPEN
    THEN
        ins_msg_proc('OK: cursor open');
    ELSE
        ins_msg_proc('WRONG: cursor not open');   
    END IF;
    CLOSE c_cursor1;
    IF c_cursor1%ISOPEN
    THEN
        ins_msg_proc('WRONG: cursor open');
    ELSE
        ins_msg_proc('OK: cursor not open');   
    END IF;
END;

call cursor_proc();
select message from message_box;

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

DROP PROCEDURE foreach_proc;
CREATE PROCEDURE foreach_proc() LANGUAGE SQLSCRIPT AS
    v_isbn    VARCHAR(20) := '';
    CURSOR c_cursor1 (v_isbn VARCHAR(20)) FOR
       SELECT isbn, title, price, crcy FROM books
       ORDER BY isbn;
-- (see Bug 9197)  WHERE isbn = :v_isbn
BEGIN
    init_proc();
    FOR cur_row as c_cursor1('978-3-86894-012-1') DO
        ins_msg_proc('book title is: ' || cur_row.title);
    END FOR;
END;

call foreach_proc();
select message from message_box;

转载于:https://www.cnblogs.com/omygod/archive/2013/04/25/3043786.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值