大家好我一直在尝试实现将表数据从null更改为非null的简单代码。我到目前为止所得到的是:
Declare
mi number(2);
ma number(2);
BEGIN
SELECT MIN(ColumnA) INTO mi from TABLEA;
select MAX(ColumnA) into ma from TableA;
FOR a in mi .. ma LOOP
IF a = 3 THEN
update TableA SET ColumnB = '0' WHERE ColumnB is null;
execute immediate 'alter table TableA modify ColumnB not null';
ELSE
execute immediate 'alter table TableA modify ColumnB null';
end if;
END LOOP;
END;
代码似乎正在直接进入ELSE语句。 columnA的最小值为1,最大值为6.
我相信我在if语句中遗漏了一些东西。
这背后的逻辑是,如果ColumnA包含记录3,那么COLUMN B应该被修改为非空。
答案 0 :(得分:0)
循环遍历值1 .. 6。
1:null 2:null 3:不是空的 4:null 5:null 6:null
所以columnB设置为“not null”,但之后会直接将其设置回“null”。
答案 1 :(得分:0)
您的代码无法正常运行。
您的代码仅在以下情况下有效:
columnA
= 3和columnB
的所有值均为空。想想你写的内容:
如果甚至存在columnA
= 3的一条记录,则表示您正在插入
a columnB
的非空(' 0')值。
下次循环运行(循环持续到a = 6),这次a = 4,
控件流向ELSE
部分,您正在尝试修改它
与NOT NULL
相同的列。你没有自己插入一个' 0'(NOT NULL
)值
上一个循环中的这一列?
columnA
= 3的记录,那么您的控件将永远存在
转到其他部分,很明显,如果有任何现有的记录在哪里
columnB
不为空,它会抛出相同的错误