我有一个查询,如下所示:
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。我正在做的是获取临时阶段的子字符串(永远不为null)并将第一个,第二个和第三个字符分配给另一组varchar变量。分配完成后,我将数据插入表中并提交。问题是它不能一直工作。它总是用一个字符填充tmp_future_phaseA,B和C,但是当我插入tmp_phase时,它有时会填充null,有时会填充值。
示例数据:
tmp_phase = 'ABC'
tmp_futurephaseA = 'A'
tmp_futurephaseB = 'B'
tmp_futurephaseC = 'C'
有时我会得到以下内容:
A 'ABC'
B 'ABC'
C 'ABC'
在同一个plsql中的其他时间我会得到以下内容:
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;
答案 0 :(得分:1)
“有时我会得到以下内容:......其他时间也是如此 plsql我会得到以下内容:“
有时您的程序有效,有时却没有。这意味着您有数据问题。
更准确地说,您编写了一个程序,可以正确地处理某些州的数据,但不能处理其他州的数据。绝对没有办法让我们能够诊断出来。
因此,您需要做的是调试您的代码。如果您有一个适当的IDE,它应该为您提供调试工具。否则,您将需要使用类似DBMS_OUTPUT的内容来显示循环中每个行程的输入和后续结果,以便您可以了解程序未正确处理的值。