2012-09-07 35 views
0

我有一个查询,如下图所示:不一致插入结果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; 
+0

tmp_phase具有值直至tmp_future_phaseA,B,C。它的字面意思是在tmp_phases中有一个值,将值赋给future_phase,然后插入。在从tmp_future阶段分配值(它总是获得一个值)以插入表中时,它将丢失该值。 – SiliVestige

+0

什么是和tmp_future_phaseA之间发生了什么?你有可能失去tmp_phase值吗? –

+0

添加了其他步骤。 – SiliVestige

回答

1

“:同样 PLSQL我会得到下面的过程中...其他时候:有时候,我会得到下面的”

有时候你的程序工作,有时没有。这意味着你有一个数据的问题。

更准确的说,你写了一个程序,它正确地迎合一些州数据,但不能在其他人。我们绝对不可能诊断出这种情况。

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

+0

我发现这是导致问题的IDE。当我查看表格时,并没有刷新数据,但是如果我对表格本身运行查询,数据将正确返回。很显然,SQLDeveloper并不像我期望的那样健壮,但我可以解决它。 – SiliVestige