tutorials.de Buch-Aktion 02/2012
ERLEDIGT
NEIN
ANTWORTEN
12
ZUGRIFFE
1275
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Frankdfe Frankdfe ist offline Mitglied Gold
    Registriert seit
    Apr 2003
    Beiträge
    151
    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.
    .
     
    Der Glückliche phantasiert nie. (Sigmund Freud)
    Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt. (Albert Einstein)
    Daraus folgt: Die Genie's sind nicht glücklich.

  2. #2
    Registriert seit
    Jun 2002
    Ort
    Saarbrücken (Saarland)
    Beiträge
    9.724
    Blog-Einträge
    29
    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
     

  3. #3
    Frankdfe Frankdfe ist offline Mitglied Gold
    Registriert seit
    Apr 2003
    Beiträge
    151
    Wie kann ich denn in SQL auf Kava-Klassen zugreifen? Kannst du mir ein Beispiel für ein SQL-Statement(mit PI) nennen?
     
    Der Glückliche phantasiert nie. (Sigmund Freud)
    Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt. (Albert Einstein)
    Daraus folgt: Die Genie's sind nicht glücklich.

  4. #4
    Registriert seit
    Jun 2002
    Ort
    Saarbrücken (Saarland)
    Beiträge
    9.724
    Blog-Einträge
    29
    Hallo!

    Kein Problem:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    
     
    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
     

  5. #5
    Avatar von squeaker
    squeaker squeaker ist offline Mitglied Platin
    Registriert seit
    Jun 2004
    Ort
    Würzburg
    Beiträge
    577
    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 :
    1
    2
    3
    4
    5
    
    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
    Geändert von squeaker (28.07.04 um 09:23 Uhr)
     

  6. #6
    Registriert seit
    Jun 2002
    Ort
    Saarbrücken (Saarland)
    Beiträge
    9.724
    Blog-Einträge
    29
    Hallo!

    Frank wollte aber doch eine Oracle Lösung (siehe erster Post)

    Gruß Tom
     

  7. #7
    Avatar von squeaker
    squeaker squeaker ist offline Mitglied Platin
    Registriert seit
    Jun 2004
    Ort
    Würzburg
    Beiträge
    577
    Sogar Oracle kann SQL

    select tab.a*pi() from tab;

    sollte also eigentlich funktionieren.
     

  8. #8
    Registriert seit
    Jun 2002
    Ort
    Saarbrücken (Saarland)
    Beiträge
    9.724
    Blog-Einträge
    29
    Hallo!

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

    sagt dazu:

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

    Gruß Tom
     

  9. #9
    Registriert seit
    Jun 2002
    Ort
    Saarbrücken (Saarland)
    Beiträge
    9.724
    Blog-Einträge
    29
    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
     

  10. #10
    Avatar von squeaker
    squeaker squeaker ist offline Mitglied Platin
    Registriert seit
    Jun 2004
    Ort
    Würzburg
    Beiträge
    577
    Erstaunlich, dass Oracle das nicht kann. Dann entschuldige bitte die falsche Kritik.
     

  11. #11
    Frankdfe Frankdfe ist offline Mitglied Gold
    Registriert seit
    Apr 2003
    Beiträge
    151
    Danke für die Antworten.

    Ganz schön umständlich in Oracle. Da ist meine ursrpünliche Lösung 4*atan(1) gar nicht so schlecht.
    .
     
    Der Glückliche phantasiert nie. (Sigmund Freud)
    Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt. (Albert Einstein)
    Daraus folgt: Die Genie's sind nicht glücklich.

  12. #12
    Registriert seit
    Mar 2004
    Ort
    Tiefste Provinz
    Beiträge
    304
    Rein aus Interesse:

    Gesetzt den Fall, man arbeitet mit einer DB die kein PI() versteht und ebenso vorausgesetzt man ist kein Mathematik-Purist, was spricht dagegen, einfach Pi als Wert '3.1415' zu verwenden, bzw. wenns genauer sein muss, dann eben '3.1415926535897932384626433832795'?

    Das wäre jedenfalls mein erster Gedanke gewesen, noch bevor ich auf die Idee 4*ATAN(1) gekommen wäre.

    Falls ihr diesen Ansatz zu unwissenschaftlich findet, dann hab' ich nix gesagt...

    Grüße,
    Martin
     

  13. #13
    Movera Movera ist offline Mitglied Silber
    Registriert seit
    Apr 2004
    Ort
    Hamburg
    Beiträge
    53
    Hallo,

    Oracle liefert tatsächlich kein PI mit. Dafür erhält man die wunderbare Möglichkeit, selber Funktionen zu erstellen:

    create or replace function pi return number as
    begin
    return 3.14159265359;
    end;
    /

    SQL> select 3 * pi from dual;

    3*PI
    ---------
    9,424778

    So einfach kann das Leben mit Oracle sein!
     
    Grüße aus Hamburg
    Movera

Ähnliche Themen

  1. URL ermitteln
    Von thco im Forum Javascript & Ajax
    Antworten: 2
    Letzter Beitrag: 01.01.09, 14:00
  2. Typ ermitteln
    Von flashray im Forum Java
    Antworten: 4
    Letzter Beitrag: 12.11.07, 16:40
  3. Wan IP ermitteln
    Von Xo-mate im Forum .NET Web und Kommunikation
    Antworten: 2
    Letzter Beitrag: 31.07.06, 09:36
  4. IP ermitteln
    Von Sircoly im Forum C/C++
    Antworten: 1
    Letzter Beitrag: 01.05.06, 22:00
  5. URL ermitteln... nur Wie ?
    Von Sealtuagn im Forum PHP
    Antworten: 6
    Letzter Beitrag: 06.07.05, 13:23