Fakultät einer Zahl in pl/sql
Den folgenden pl/sql-Programm einen Fehler generiert, bei der Ausführung auf die Linie der Summe :=temp*Summe; begegnet symbol ; wenn erwartet ( . Erklären Sie bitte, mein Fehler.
declare
n number;
temp number;
sum number := 1;
begin
n := &n;
temp := n;
while temp>0 loop
sum := temp*sum;
temp := temp-1;
end loop;
dbms_output.put_line('Factorial of '||n||' is '||sum);
end;
/
InformationsquelleAutor rippy | 2014-03-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Summe ist reserviertes Wort in sql. Ändern Sie die variable Namen, wie
InformationsquelleAutor hkutluay
Vielleicht nicht die Antwort auf deine Frage, aber es gibt keine Notwendigkeit für PL/SQL hier:
wo die 5 ist Ihre Nummer (
5!
).Darüber hinaus, wenn Sie, wie zu bedienen, schneller in PL/SQL verwenden
pls_integer
stattnumber
.UPDATE
Also laut Kommentare fühlte ich mich frei, um zu testen:
Es gibt also zwei Funktionen mit unterschiedlichen Inhalten. Test Abfrage:
0.094 sec.
0.094 sec.
Werden Sie sagen, ich bin cheater und mit
deterministic
Schlüsselwort, aber hier ist es offensichtlich und notwendig ist, wird durch Logik. Wenn ich es entfernen, den gleichen scripts arbeiten 1.7 sec vs 1.3 Sek., so Verfahren ist nur ein bisschen schneller, es ist auch keine double-Gewinn in der Leistung. Den völlig entgegengesetzten Effekt erhalten Sie, wenn Sie die Funktion in einer Abfrage, so ist es ein fairer Handel.Mit sql zu berechnen, etwas, das sein könnte, berechnet in reinen PL/SQL ist, ich vermute stark, viel weniger effizient. Die rule-of-thumb "nicht verwenden PL/SQL wenn der SQL verwendet werden können" nicht bewerben Sie sich hier.
Ich wäre nicht sicher sind, bitte beweisen Sie Ihre Vermutung und nur nach, dass ich verstehen "-1".
declare n number := 0; begin for i in 1..5 loop n := n + ln(i); end loop; dbms_output.put_line(round(exp(n))); end;
Dies ist eine Schönheit! 🙂
InformationsquelleAutor smnbbrv
InformationsquelleAutor Bill
Kam ich mit diesem code, ich mag sogar besser als @smnbbrv Antwort. Es ist ein guter Weg, um überprüfen Sie die Geschwindigkeit einer Maschine. Ich habe mit eine variation dieses seit meinen Atari 800
-- gibt 2.824 x 10^456,568
InformationsquelleAutor Bill