SQL PI/SQL 函数

SQL PI/SQL Function

 DECLARE 
   a number(2);
  a1 int;
BEGIN 
   FOR a in 01 .. 12 LOOP 
    SET a1 =(SELECT count(*) 
FROM ECMS_ONLINE_TRANSACTION eoa
WHERE eoa.CREATETIME BETWEEN TO_DATE('2021-01-01 01:00:00','YYYY-MM-DD HH24:MI:SS') AND TO_DATE('2021-01-01 01:59:59','YYYY-MM-DD HH24:MI:SS') 
) 
      dbms_output.put_line('value of a: ' || a); 
  END LOOP; 
END;  

**我在这段代码上有一个错误,我需要月份的值,这意味着 a 和各自的计数,以及在什么情况下月份应该根据 a 改变,请有人帮助解决这个问题我正在使用 oracle db **

我是这样理解这个问题的。

示例数据(仅 createtime 列(以 YYYY-MM-DD 格式显示),因为查询不使用任何其他列):

SQL> select * from ecms_online_transaction order by createtime;

CREATETIME
----------
2021-01-01
2021-02-24
2021-02-25
2021-04-13
2021-08-22
2021-08-29

6 rows selected.

SQL> set serveroutput on

您似乎想要计算行数 每月(天数、小时数、年数...-它们无关紧要),您可以编写这样的在游标中查询并只显示它获取的内容):

SQL> BEGIN
  2     FOR cur_r IN (  SELECT TO_CHAR (createtime, 'mm') month, COUNT (*) cnt
  3                       FROM ecms_online_transaction
  4                   GROUP BY TO_CHAR (createtime, 'mm')
  5                   ORDER BY TO_CHAR (createtime, 'mm'))
  6     LOOP
  7        DBMS_OUTPUT.put_line (
  8           'Month = ' || cur_r.month || ', count = ' || cur_r.cnt);
  9     END LOOP;
 10  END;
 11  /
Month = 01, count = 1
Month = 02, count = 2
Month = 04, count = 1
Month = 08, count = 2

PL/SQL procedure successfully completed.

SQL>
DECLARE 
 a number(2);
 cnt number;
BEGIN 

  FOR a in 01 .. 12 LOOP 
 
    select count(*) 
    into cnt
    FROM ECMS_ONLINE_TRANSACTION eoa
    WHERE eoa.CREATETIME BETWEEN TO_DATE('2021-' || lpad(a, 2, '0') || '-01 01:00:00','YYYY-MM-DD HH24:MI:SS')
                     AND TO_DATE('2021-' || lpad(a, 2, '0') || '-01 01:59:59','YYYY-MM-DD HH24:MI:SS'); 

    dbms_output.put_line(' month: ' || a || ' time stamp 01:00:00- 01:59:59  number of transaction :' || cnt ); 
  END LOOP; 
END;