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;
var
This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)