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 ;