插入结果不一致PLSQL

时间:2012-09-07 17:19:13

标签: sql plsql oracle10g

我有一个查询,如下所示:

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;  

1 个答案:

答案 0 :(得分:1)

  

“有时我会得到以下内容:......其他时间也是如此   plsql我会得到以下内容:“

有时您的程序有效,有时却没有。这意味着您有数据问题。

更准确地说,您编写了一个程序,可以正确地处理某些州的数据,但不能处理其他州的数据。绝对没有办法让我们能够诊断出来。

因此,您需要做的是调试您的代码。如果您有一个适当的IDE,它应该为您提供调试工具。否则,您将需要使用类似DBMS_OUTPUT的内容来显示循环中每个行程的输入和后续结果,以便您可以了解程序未正确处理的值。