oracle匿名存储过程调用记录

文章介绍了如何使用OraclePL/SQL执行动态SQL查询,包括获取最近50条消费时间、计算消费平均费用和计数,以及处理微信支付方式的默认设置,如将默认支付方式设为收钱吧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

DECLARE
    v_id NUMBER := 1577132;
    v_qsen VARCHAR2(100);
    v_date DATE := to_date('2023-06-26', 'yyyy-MM-dd');
    v_consumefee NUMBER;
    v_count NUMBER;
    v_sql VARCHAR2(1000);
    v_consumetime DATE;
    v_cursor SYS_REFCURSOR; -- 声明游标变量

BEGIN
    -- 获取动态表名
    SELECT objuser INTO v_qsen FROM shop WHERE id = v_id;
    -- 构建动态SQL语句
    v_sql := 'SELECT consumetime FROM ( SELECT consumetime FROM ' || v_qsen || '.e' || v_id || '_bill ORDER BY consumetime ) WHERE ROWNUM <= 50';
    DBMS_OUTPUT.PUT_LINE(v_sql);
    -- 打开游标
    OPEN v_cursor FOR v_sql;
    -- 通过游标获取结果
    LOOP
        FETCH v_cursor INTO v_consumetime;
        EXIT WHEN v_cursor%NOTFOUND;
        -- 处理每一行的结果,这里可以进行打印或其他操作
        DBMS_OUTPUT.PUT_LINE('Consumetime: ' || v_consumetime);
    END LOOP;
    -- 关闭游标
    CLOSE v_cursor;

    -- 构建动态SQL语句
    v_sql := 'SELECT round(sum(consumefee)/(trunc(sysdate) - :v_date), 2) FROM ' || v_qsen || '.e' || v_id || '_bill WHERE consumetime > :v_date';
    EXECUTE IMMEDIATE v_sql INTO v_consumefee USING v_date,v_date;
    DBMS_OUTPUT.PUT_LINE(v_sql);

    -- 构建动态SQL语句
    v_sql := 'SELECT round(count(1)/(trunc(sysdate) - :v_date), 2) FROM ' || v_qsen || '.e' || v_id || '_bill WHERE consumetime > :v_date';
    EXECUTE IMMEDIATE v_sql INTO v_count USING v_date,v_date;
    DBMS_OUTPUT.PUT_LINE(v_sql);

    -- 打印结果

    DBMS_OUTPUT.PUT_LINE('Average Consumefee: ' || v_consumefee);
    DBMS_OUTPUT.PUT_LINE('Count: ' || v_count);
END ;

输出在这里看
在这里插入图片描述

案例二

-- 修改支付方式默认为收钱吧
DECLARE
    v_parentid NUMBER;
    v_purpose  NUMBER       := 1; -- 1 公众号,2 app,  3 小程序,这里需要填1运行一次,填3运行一次
    v_paytype  VARCHAR2(10) := '2'; -- 支付方式,收钱吧
BEGIN
    FOR rec IN (SELECT id FROM shop WHERE softgenre IN (0, 1))
        LOOP
            v_parentid := rec.id;

            -- 判断是否存在指定的 PARENTSHOPID 和 PURPOSE 的记录,如果不存在,则插入一条新记录
            INSERT INTO mgj_wechat_configuration (id, parentshopid, paytype, purpose)
            SELECT seq_mgj_wechat_configuration.nextval, v_parentid, v_paytype, v_purpose
            FROM dual
            WHERE NOT EXISTS(
                SELECT 1
                FROM mgj_wechat_configuration
                WHERE parentshopid = v_parentid
                  AND purpose = v_purpose
                );

            -- 判断是否有记录的PAYTYPE为空,如果有,将其修改为默认值2
            UPDATE mgj_wechat_configuration
            SET paytype = v_paytype
            WHERE parentshopid = v_parentid
              AND purpose = v_purpose
              AND paytype IS NULL;
        END LOOP;
END ;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值