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