pi mit sql ermitteln

Frankdfe

Erfahrenes Mitglied
Hallo!

Wie kann ich mit einer SQL-Abfrage auf die Konstante PI zugreifen (unter Oracle) um z.B. Berechnungen damit durchzuführen? Also z.B.

select tab.a*pi from tab;

Der Weg atan(1)*4 statt pi zu verwenden geht zwar, ist aber nicht sehr elegant.
.
 
Hallo!

Du könntest in Oracle die Java Klasse java.lang.Math verwenden. Dort findest du alle möglichen Mathematischen Konstanten (natürlich nur angenähert ;-) )

Gruß Tom
 
Wie kann ich denn in SQL auf Kava-Klassen zugreifen? Kannst du mir ein Beispiel für ein SQL-Statement(mit PI) nennen?
 
Hallo!

Kein Problem:

Code:
create or replace package oracle_test
as
function return_pi return number
as
language java
name 'oracle_test.return_pi() return double';

end oracle_test;
/

create or replace and compile
java source named "oracle_test"
as

public class oracle_test extends Object{
   public static double return_pi(){
      return java.lang.Math.PI;
   }
}
/

select oracle_test.return_pi PI from dual;

Ausgabe:

                  PI
-----------------
3,14159265

Gruß Tom
 
das ist aber nicht mehr wirklich SQL - das ist eher Oracle-SQL.

aber es gibt auch die SQL-Funktion PI(). Sollte überall funktionieren und braucht kein Java (nichts gegen Java - aber das ist mit Artillerie nach Spatzen geschossen).

Aus dem MySQL Handbuch:

Code:
PI() 
Returns the value of PI. The default number of decimals displayed is five, but MySQL internally uses the full double-precision value for PI. mysql> SELECT PI();
        -> 3.141593
mysql> SELECT PI()+0.000000000000000000;
        -> 3.141592653589793116
 
Zuletzt bearbeitet:
Hallo!

Also meine Oracle Version:
Oracle9i Release 9.2.0.3.0 - Production
JServer Release 9.2.0.3.0 - Production

sagt dazu:

Code:
SQL> select pi() from dual;
select pi() from dual;
            *
Fehler in Zeile 1:
ORA-00904: "PI" : invalid identifier

Gruß Tom
 
Hallo!

(nichts gegen Java - aber das ist mit Artillerie nach Spatzen geschossen).

Denke ich nicht, dass macht so gut wie gar nix aus, da in Oracle die JVM fest integriert ist. Aussderm könnte man ja, wenn das jeweilige statement einer Optimierung bedarf ganz einfach eine StoredProcedure anlegen wleche nur einmal den Funktionsaufruf "return_pi" durchführt diesen Wert zwischenspeichert und dann immer den aus dem Zwischenspeicher verwendet.

Gruß Tom
 

Neue Beiträge

Zurück