Oracle 试着为每天创造一个循环,直到186天后

Oracle 试着为每天创造一个循环,直到186天后,oracle,plsql,Oracle,Plsql,我试图使用for循环自动生成一个新的调查周期,在接下来的186天内每天2个不同的ID。我不确定PL/SQL是否允许这样做,但当我运行下面的代码时;我得到一个错误,我的变量('X')不能用作赋值目标。我需要使用变量“X”添加到我的sysdate,以自动将日期增加1天。有更好的方法吗?我的代码/尝试如下: Create or Replace Procedure Cycle AS BEGIN declare x number; begin x := 0; for x in 1.

我试图使用for循环自动生成一个新的调查周期,在接下来的186天内每天2个不同的ID。我不确定PL/SQL是否允许这样做,但当我运行下面的代码时;我得到一个错误,我的变量('X')不能用作赋值目标。我需要使用变量“X”添加到我的sysdate,以自动将日期增加1天。有更好的方法吗?我的代码/尝试如下:

Create or Replace Procedure Cycle AS
BEGIN
declare
    x number;
begin
    x := 0;
    for x in 1..186 loop
        insert into cycle ( form_id, create_dt, create_user_id, modify_dt, modify_user_id, effective_dt, inactive_dt,  reporting_month, open_dt, close_dt)
                      values ( 777, sysdate +  x,  null, null, null, null, null,   to_char(sysdate, 'Mon'), trunc(sysdate), trunc(sysdate + 1));
        insert into cycle ( form_id, create_dt, create_user_id, modify_dt, modify_user_id, effective_dt, inactive_dt, cycle_Tx, reporting_month, open_dt, close_dt)
                      values ( 776, sysdate +  x,  null, null, null, null, null,   to_char(sysdate, 'Mon'), trunc(sysdate), trunc(sysdate + 1));
        x := x + 1;
      end loop;
    commit;
end;
END Cycle;
    /

移除:x:=x+1;在for循环中,它将按自己的方式执行

Create or Replace Procedure Cycle AS
BEGIN
declare
    x number;
begin
    for x in 1..186 loop
        insert into cycle ( form_id, create_dt, create_user_id, modify_dt, modify_user_id, effective_dt, inactive_dt,  reporting_month, open_dt, close_dt)
                      values ( 777, sysdate +  x,  null, null, null, null, null,   to_char(sysdate, 'Mon'), trunc(sysdate), trunc(sysdate + 1));
        insert into cycle ( form_id, create_dt, create_user_id, modify_dt, modify_user_id, effective_dt, inactive_dt, cycle_Tx, reporting_month, open_dt, close_dt)
                      values ( 776, sysdate +  x,  null, null, null, null, null,   to_char(sysdate, 'Mon'), trunc(sysdate), trunc(sysdate + 1));

   DBMS_OUTPUT.PUT_LINE('Count: ' || x1);

      end loop;
    commit;
end;
END Cycle;
/

不需要PL/SQL,只需使用
按级别连接
和纯SQL
插入
。您的块实际上会导致太多上下文切换

INSERT INTO CYCLE
            (form_id,
             create_dt,
             create_user_id,
             modify_dt,
             modify_user_id,
             effective_dt,
             inactive_dt,
             reporting_month,
             open_dt,
             close_dt)
SELECT 777,
       SYSDATE + LEVEL,
       NULL,
       NULL,
       NULL,
       NULL,
       NULL,
       TO_CHAR(SYSDATE, 'Mon'),
       TRUNC(SYSDATE),
       TRUNC(SYSDATE + 1)
FROM   dual
CONNECT BY LEVEL <= 186;

INSERT INTO CYCLE
            (form_id,
             create_dt,
             create_user_id,
             modify_dt,
             modify_user_id,
             effective_dt,
             inactive_dt,
             reporting_month,
             open_dt,
             close_dt)
SELECT 776,
       SYSDATE + LEVEL,
       NULL,
       NULL,
       NULL,
       NULL,
       NULL,
       TO_CHAR(SYSDATE, 'Mon'),
       TRUNC(SYSDATE),
       TRUNC(SYSDATE + 1)
FROM   dual
CONNECT BY LEVEL <= 186;

COMMIT;  
插入到循环中
(表格编号:,
创建,
创建用户id,
修改_dt,
修改用户id,
有效的,
不活跃的,
每月报告一次,
开放的,
关闭(dt)
选择777,
系统日期+级别,
无效的
无效的
无效的
无效的
无效的
TO_CHAR(SYSDATE,'Mon'),
TRUNC(系统日期),
TRUNC(系统日期+1)
来自双重

逐级连接,谢谢!是的,我曾经玩弄过它,习惯于编写JAVA代码,并且意识到PLSQL不是那样工作的。谢谢欢迎光临。如果我的回答有用,请接受@JohnWick