我有一个查询,如下图所示:不一致插入结果PLSQL
TRUNCATE TABLE DNARTLOAD;
COMMIT;
.... <Cursor here> .... <do something>.....
tmp_future_phaseA := substr(tmp_phases,1,1);
tmp_future_phaseB := substr(tmp_phases,2,1);
tmp_future_phaseC := substr(tmp_phases,3,1);
INSERT INTO DNARTLOAD (LOADNAME,KVARATING,PHASE,FULLPHASE) VALUES
(tmp_load_name, tmp_kvarating, tmp_future_phaseA, tmp_phase);
的问题是,查询失败每次都正确插入tmp_phases。我正在做的是取得临时阶段的子字符串(从不为空),并将第一,第二和第三个字符分配给另一组varchar变量。一旦他们被分配,我将数据插入到表中并提交。问题是它一直无法工作。它总是充满tmp_future_phaseA,B和C的字符,但是当我插入tmp_phase它有时会填充空,有时填充值。
示例数据:同样PLSQL期间
A 'ABC'
B 'ABC'
C 'ABC'
其他时候,我会得到如下:
tmp_phase = 'ABC'
tmp_futurephaseA = 'A'
tmp_futurephaseB = 'B'
tmp_futurephaseC = 'C'
有时我会得到以下
A NULL
B NULL
C NULL
编辑:增加了一个问题:
LOOP
tmp_future_phaseA := NULL;
tmp_future_phaseB := NULL;
tmp_future_phaseC := NULL;
tmp_phases := NULL;
FETCH C3 INTO tmp_load_name, tmp_kvarating, tmp_phases;
EXIT WHEN C3%NOTFOUND;
IF LENGTH(tmp_phases) = 3 THEN
tmp_kvarating := tmp_kvarating/3;
END IF;
IF LENGTH(tmp_phases) = 2 THEN
tmp_kvarating := tmp_kvarating /2;
END IF;
tmp_future_phaseA := substr(tmp_phases,1,1);
tmp_future_phaseB := substr(tmp_phases,2,1);
tmp_future_phaseC := substr(tmp_phases,3,1);
IF tmp_future_phaseA IS NOT NULL THEN
INSERT INTO DNARTLOAD (LOADNAME,KVARATING,PHASE) VALUES (tmp_load_name, tmp_kvarating, tmp_future_phaseA);
END IF;
IF tmp_future_phaseB IS NOT NULL THEN
INSERT INTO DNARTLOAD (LOADNAME,KVARATING,PHASE) VALUES (tmp_load_name, tmp_kvarating, tmp_future_phaseB);
END IF;
IF tmp_future_phaseC IS NOT NULL THEN
INSERT INTO DNARTLOAD (LOADNAME,KVARATING,PHASE) VALUES (tmp_load_name, tmp_kvarating, tmp_future_phaseC);
END IF;
tmp_phase具有值直至tmp_future_phaseA,B,C。它的字面意思是在tmp_phases中有一个值,将值赋给future_phase,然后插入。在从tmp_future阶段分配值(它总是获得一个值)以插入表中时,它将丢失该值。 – SiliVestige
什么是和tmp_future_phaseA之间发生了什么?你有可能失去tmp_phase值吗? –
添加了其他步骤。 – SiliVestige