sqlString:='SELECT 
RANK() OVER (ORDER BY AVA_CHANGED) ORD,
AVA_PRIMARYID,
AVA_FROM,
AVA_TO,AVA_CHANGED
FROM R5AUDVALUES 
WHERE AVA_PRIMARYID='||MATERIAL_CODE;
改为:sqlString:='SELECT 
RANK() OVER (ORDER BY AVA_CHANGED) ORD,
AVA_PRIMARYID,
AVA_FROM,
AVA_TO,AVA_CHANGED
FROM R5AUDVALUES 
WHERE AVA_PRIMARYID='||MATERIAL_CODE.AVA_PRIMARYID;

解决方案 »

  1.   


    sqlString:='SELECT 
    RANK() OVER (ORDER BY AVA_CHANGED) ORD,
    AVA_PRIMARYID,
    AVA_FROM,
    AVA_TO,AVA_CHANGED
    FROM R5AUDVALUES 
    WHERE AVA_PRIMARYID='||MATERIAL_CODE;
    改为:sqlString:='SELECT 
    RANK() OVER (ORDER BY AVA_CHANGED) ORD,
    AVA_PRIMARYID,
    AVA_FROM,
    AVA_TO,AVA_CHANGED
    FROM R5AUDVALUES 
    WHERE AVA_PRIMARYID='||MATERIAL_CODE.AVA_PRIMARYID;

    谢谢!是因为MATERIAL_CODE的类型不对?
      

  2.   


    sqlString:='SELECT 
    RANK() OVER (ORDER BY AVA_CHANGED) ORD,
    AVA_PRIMARYID,
    AVA_FROM,
    AVA_TO,AVA_CHANGED
    FROM R5AUDVALUES 
    WHERE AVA_PRIMARYID='||MATERIAL_CODE;
    改为:sqlString:='SELECT 
    RANK() OVER (ORDER BY AVA_CHANGED) ORD,
    AVA_PRIMARYID,
    AVA_FROM,
    AVA_TO,AVA_CHANGED
    FROM R5AUDVALUES 
    WHERE AVA_PRIMARYID='||MATERIAL_CODE.AVA_PRIMARYID;

    谢谢!是因为MATERIAL_CODE的类型不对?
    不是,你理解错了,这里的MATERIAL_CODE并不是直接获得了值,而是获得了一个结果集。其实这里就是一个游标的用法。
    你想想,如果你的SQL:
    SELECT DISTINCT AUD.AVA_PRIMARYID FROM R5AUDVALUES AUD 如果查询了两个字段该怎么办?
    这里其实就好比一个结构体,调用值时须指定里面的字段。
      

  3.   


    sqlString:='SELECT 
    RANK() OVER (ORDER BY AVA_CHANGED) ORD,
    AVA_PRIMARYID,
    AVA_FROM,
    AVA_TO,AVA_CHANGED
    FROM R5AUDVALUES 
    WHERE AVA_PRIMARYID='||MATERIAL_CODE;
    改为:sqlString:='SELECT 
    RANK() OVER (ORDER BY AVA_CHANGED) ORD,
    AVA_PRIMARYID,
    AVA_FROM,
    AVA_TO,AVA_CHANGED
    FROM R5AUDVALUES 
    WHERE AVA_PRIMARYID='||MATERIAL_CODE.AVA_PRIMARYID;

    谢谢!是因为MATERIAL_CODE的类型不对?
    for loop的游标是不用定义的,所以你不用定义MATERIAL_CODE