Click here to Skip to main content
15,891,136 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
can some one plaese help. i have written ac code to sort values in the table but it is giving me this error. the code and error has been given... please help to resolve this error....


CSS
Connecting to the database hr_orcl.
ORA-06502: PL/SQL: numeric or value error: NULL index table key value
ORA-06512: at "SYSTEM.QSORT", line 25
ORA-06512: at line 2
Process exited.
Disconnecting from the database hr_orcl.


CREATE OR REPLACE PROCEDURE QSORT AS 
TOTAL_ITEMS NUMBER;
CURSOR TOTALITEMS_CURSOR IS
SELECT COUNT(*)
FROM TBL;
CURSOR VAL_CURSOR IS 
SELECT VAL FROM TBL;
TYPE VAL_ARRAY_TYPE IS VARRAY(10) OF NUMBER; 
VAL_ARRAY VAL_ARRAY_TYPE := VAL_ARRAY_TYPE(); 
FLAG BOOLEAN;
TEMP     INTEGER;  
J        PLS_INTEGER;
COUNTER INTEGER := 0;
S INTEGER;
E INTEGER;
PIVOT INTEGER;
BEGIN
S := 1;
E := TOTAL_ITEMS;
PIVOT := VAL_ARRAY(1+TOTAL_ITEMS)/2;
 -- COUNTS TOTAL ITEMS IN A TABLE--
OPEN TOTALITEMS_CURSOR;
LOOP
FETCH TOTALITEMS_CURSOR INTO  TOTAL_ITEMS;
EXIT WHEN TOTALITEMS_CURSOR%NOTFOUND;
DBMS_OUTPUT.PUT_LINE('TOTAL ITEMS: ' || TO_CHAR(TOTAL_ITEMS));
END LOOP;
CLOSE TOTALITEMS_CURSOR;
--TAKES VALUES FROM COLUMN VAL OF TABLE TBL--
FOR N IN VAL_CURSOR
LOOP
COUNTER := COUNTER + 1;
VAL_ARRAY.EXTEND;
VAL_ARRAY(COUNTER) := N.VAL;
DBMS_OUTPUT.PUT_LINE('BEFORE SORTING: (' || COUNTER || '): ' || VAL_ARRAY(COUNTER));
END LOOP;

LOOP
  WHILE (VAL_ARRAY(S)<PIVOT) 
  LOOP
  S := S + 1;
  END LOOP;
  WHILE (VAL_ARRAY(E)<PIVOT)
  LOOP
  E := E - 1;
  END LOOP;
  IF S <= E  THEN
  TEMP := VAL_ARRAY(S);
  VAL_ARRAY(S) := VAL_ARRAY(E);
  VAL_ARRAY(E) := TEMP;
  S := S + 1;
  E := E - 1;
  END IF;
END LOOP;

FOR I IN 1 .. VAL_ARRAY.COUNT 
LOOP 
DBMS_OUTPUT.PUT_LINE('AFTER SORTING: (' || I|| '): ' ||VAL_ARRAY(I)); 
      UPDATE TBL
      SET VAL =VAL_ARRAY(I)
      WHERE POSITION = I;
END LOOP;  
END QSORT;
Posted
Comments
Praveen Kumar Upadhyay 22-Dec-14 7:16am    
Can you mention the procedure code with the line number. It is quite big procedure and will not be easy to judge the error.

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900