Hallo!
Kann mir jemand von euch sagen, was an dieser Syntax falsch ist?
Code
WHILE (cur > 9) LOOP
DBMS_OUTPUT.PUT_LINE('Test ');
cur := cur - MOD(cur, 10);
cur := cur/10;
DBMS_OUTPUT.PUT_LINE('Test ' || sum1 || ' t ' || cur);
END LOOP;
Ursprünglich hatte ich nämlich statt > 9 >10 dort stehen, und damit hat es funktioniert. Bloß war da ein Denkfehler drinnen, und ich brauch > 9. Bei >= 10 kommt das selbe Ergebnis wie bei > 9 : die Prozedur hängt sich auf, und zwar noch vor der allerersten Anweisung. Und sie hängt sich so auf, dass das SQL-Fenster steht.
Hier der gesamte Code:
Code
CREATE OR REPLACE FUNCTION benford(tname IN VARCHAR2, col IN VARCHAR2, nameRes VARCHAR2) RETURN BOOLEAN
IS
TYPE freq_table_typ IS TABLE OF NUMBER
INDEX BY BINARY_INTEGER;
freq_table freq_table_typ;
TYPE curs IS REF CURSOR;
ref_curs curs;
sqlstring VARCHAR2(2000);
cur BINARY_INTEGER;
v_index BINARY_INTEGER;
sum1 NUMBER;
perc NUMBER;
BEGIN
[B]DBMS_OUTPUT.PUT_LINE('Test 1');[/B]
freq_table(1) := 0;
freq_table(2) := 0;
freq_table(3) := 0;
freq_table(4) := 0;
freq_table(5) := 0;
freq_table(6) := 0;
freq_table(7) := 0;
freq_table(8) := 0;
freq_table(9) := 0;
sum1 := 0;
sqlstring := 'CREATE TABLE ' || nameRes || ' (num NUMBER, freq NUMBER, perc NUMBER)';
EXECUTE IMMEDIATE sqlstring;
sqlstring := 'SELECT '||col||' FROM '||tname;
OPEN ref_curs FOR sqlstring;
LOOP
FETCH ref_curs INTO cur;
IF cur < 1 THEN
cur := cur * 10;
ELSE
DBMS_OUTPUT.PUT_LINE(cur);
WHILE (cur > 9) LOOP
DBMS_OUTPUT.PUT_LINE('Test ');
cur := cur - MOD(cur, 10);
cur := cur/10;
DBMS_OUTPUT.PUT_LINE('Test ' || sum1 || ' t ' || cur);
END LOOP;
END IF;
freq_table(cur) := freq_table(cur) + 1;
sum1 := sum1 + 1;
END LOOP;
CLOSE ref_curs;
v_index := freq_table.first;
while v_index is not NULL loop
perc := freq_table(cur) / sum1 * 100;
EXECUTE IMMEDIATE 'INSERT INTO ' || nameRes || ' VALUES(' || v_index || ', '
|| freq_table(cur) || ', ' || perc || ')';
v_index := freq_table.next(v_index);
end loop;
RETURN TRUE;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(sqlerrm);
RETURN FALSE;
END;
/
show errors;
Alles anzeigen
Nicht einmal die erste (fett markierte Ausgabe) wird ausgeführt!
Und ich habe keinen Plan wieso, da es mit der Anweisung >10 perfekt funktioniert (nur halt nicht so wie es sein sollte...)
Hat jemand eine Ahnung?
Ich tippe ja darauf, dass er irgendwas falsch hineinkompiliert...aber keine Ahnung was das sein soll.
Lg.
java-girl