0

我正在尝试使用 rownum 来模拟自动编号的列,因为我需要将其用作 ID。由于它是一个ID,如果没有MAX(ID)的记录,我会查看最终表。我遇到的问题是当我想在光标内进行算术运算时,或者当你调用时,或者当你想使用函数时。当我想使用 DBMS_OUTPUT 打印时,ROWNUM (v_id) 字段为空。任何人都知道如何在不使用序列的情况下解决它?这里放示例代码。

declare

  max_id number;
  CURSOR INSRT(w_max number) IS
  SELECT f_max_fact_sap(to_number(V_ID),w_max) AS V_ID,Seriei,serief
  FROM (SELECT To_Char(ROWNUM) AS V_ID, A.*
          FROM (SELECT DISTINCT a.matnr, a.seriei, a.serief,a.xblnr,a.fecha_sap, ((SERIEF-SERIEI)+1) AS rango
                  FROM SOPFUN.TT_ZMOVIMI_FACTURADAS a
                WHERE 0 =(SELECT COUNT(1)
                            FROM PA_ZMOVIMI_FACTURADAS B
                            WHERE A.SERIEI = B.SERIEI
                              AND A.SERIEF = B.SERIEF
                              AND A.MATNR = B.MATNR
                              AND A.FECHA_SAP=B.FECHA_SAP)
                    AND A.FECHA_SAP IS NOT NULL) A);
  TYPE T_INSRT IS TABLE OF INSRT%ROWTYPE INDEX BY PLS_INTEGER;
  V_INSRT T_INSRT;


begin
  SELECT Max(Nvl(ID,10000)) INTO MAX_ID-- To Proof because the table is empty
    FROM PA_ZMOVIMI_FACTURADAS;

OPEN INSRT(MAX_ID);
    LOOP
    FETCH INSRT BULK COLLECT INTO V_INSRT LIMIT 1000;
        FOR I IN 1 .. V_INSRT.Count loop
          DBMS_OUTPUT.PUT_LINE('ID: ' ||V_INSRT(I).V_ID||' SI: '||V_INSRT(I).SERIEI||' SI: '||V_INSRT(I).SERIEF||' OPERACION: '||to_char(f_max_fact_sap(V_INSRT(I).V_ID,MAX_ID)));
        end loop;        
    EXIT WHEN INSRT%NOTFOUND;
   END LOOP;
end;
4

0 回答 0