SAP HANA 存储过程中的IF While使用案例

-- run 1_datatype_data.sql before running this script

ALTER SESSION SET CURRENT_SCHEMA = SqlScriptDocumentation;

drop procedure while_proc;
CREATE PROCEDURE while_proc LANGUAGE SQLSCRIPT AS
    v_index1 INT := 0;
    v_index2 INT := 0;
    v_msg    VARCHAR(200) := '';
BEGIN
    init_proc();

    WHILE :v_index1 < 5 DO
        v_msg := 'Here is ' || :v_index1 || '.';
        ins_msg_proc(:v_msg);
        v_index1 := :v_index1 + 1;
    END WHILE;

    v_index1 := 0;
    WHILE :v_index1 < 5 DO
        v_index2 := 0;
        WHILE :v_index2 < 5 DO
            v_msg := 'Here is '|| :v_index1 || '-' || :v_index2 || '.';
            ins_msg_proc(:v_msg);
            v_index2 := :v_index2 + 1;
        END WHILE;
        v_index1 := :v_index1 + 1;
    END WHILE;
END;

CALL while_proc();
SELECT message FROM message_box;

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

drop procedure upsert_proc;
CREATE PROCEDURE upsert_proc (IN v_isbn VARCHAR(20)) LANGUAGE SQLSCRIPT
AS
    found INT := 1;
BEGIN
    init_proc();
    WHILE :found <> 0 DO
        SELECT count(*) INTO found FROM books WHERE isbn = :v_isbn;
        IF :found IS NULL THEN
            ins_msg_proc('result of count(*) cannot be NULL');
        ELSE
            ins_msg_proc('result of count(*) not NULL - as expected');
        END IF;
           
        IF :found = 0 THEN
            INSERT INTO books VALUES (:v_isbn, 'In-Memory Data Management', 1, 1, '2011', 42.75, 'EUR');   
        END IF;
    END WHILE;
END;

call upsert_proc('''978-3-642-19362-0''');
SELECT * FROM books;
SELECT message FROM message_box;

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

drop procedure for_proc;
CREATE PROCEDURE for_proc LANGUAGE SQLSCRIPT AS
    v_index1 INT;
    v_index2 DECIMAL(5,2);
    v_msg    VARCHAR(200);
BEGIN
    init_proc();

    FOR v_index1 IN -2 .. 2 DO
        FOR v_index2 IN REVERSE 0.5 .. 5.5 DO
            v_msg := 'Here is '|| :v_index1 || '-' || :v_index2 || '.';
            ins_msg_proc(:v_msg);
        END FOR;
    END FOR;
END;

CALL for_proc();
SELECT message FROM message_box;

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值