Announcement

Collapse
No announcement yet.

Spaltenüberschriften und Anzahl (PHP + Oracle)

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Spaltenüberschriften und Anzahl (PHP + Oracle)

    Hallo zusammen,

    ich habe ein kleines Abfragetool erstellt, welches SQLs die für regelmäßige Reports verwendet werden automatisiert ausführt und in csv-Dateien schreibt.
    Die SQLs sind in einer Datenbank abgelegt. Diese führe ich nacheinander auf einer Oracle-DB aus.

    Da die SQLs ja dynamisch sind, habe ich nun in PHP das Problem, dass ich nicht weiß, wieviele Spalten ich zurück bekomme. Ich gebe also aktuell pauschal 10 Spalten aus, auch wenn nicht so viele verfügbar sind. Das ist natürlich unschön, denn wenn es mehr sind, fehlen die Spalten.
    Außerdem fehlt mir in meiner csv-Datei die Spaltenüberschrift. Habe ich entweder per SQL oder in der oci per Parameter die Möglichkeit die Spaltennamen mit auszugeben?

    Danke schonmal.

    Grüße
    Andi

  • #2
    Sicherlich kann mam bei den meisten DBs die Spalten, Spaltennamen abfragen

    select count(COLUMN_NAME) from all_tab_columns where TABLE_NAME='<Tabellenname>'
    select column_name from all_tab_columns where TABLE_NAME='<Tabellenname>'

    (Oracle)

    Würde allerdings sagen, dass du mehr ein konzeptionelles Problem hast. Offenbar reicht es nicht, sich den SQL zu merken, sondern man sollte sich ggf. auch die Metadaten dazu (Anzahl, Name der Spalten u.a.) merken. Oder man muss sie halt nachträglich auslesen. Wie machst du das bei gejointen Tabellen, wo ev. nicht jede Spalte benötigt wird?
    Christian

    Comment


    • #3
      Das ist genau das Problem. Es sind natürlich gejointe Tabellen dabei - aber das weiß ich ja vorher nicht. Es gibt eine kleine Oberfläche in der die Anwender ihren SQL einfügen können. Ich gehe dann lediglich her und führe diesen zu einem bestimmten Zeitpunkt aus und schreibe das Ergebnis in eine CSV.
      Wenn ich das ganze im SQL Developer ausführe, bekomme ich ja auch die Spaltenüberschriften angezeigt. Aber PHP bzw. das Oracle Modul arbeitet da wohl anders, da man ja davon ausgeht, dass ich im PHP Code dann auf den Spaltennamen zugreife.

      PHP Code:
          $stid oci_parse($conn$sql);
          
      oci_execute($stid);

            
      $filename $ziel "\" . $VERLAG . "_" . $FILESTAMP . "_" . $bezeichnung . ".csv";
            
      $filehandler = fOpen("$filename" , "w+");
              while ((
      $row = oci_fetch_array($stid, OCI_BOTH)) != false) {
              fWrite(
      $filehandler , "$row[0];$row[1];$row[2];$row[3];$row[4];$row[5];$row[6];$row[7];$row[8];$row[9];$row[10]\n");
              }
              fClose(
      $filehandler);

          oci_free_statement(
      $stid); 
      So sieht aktuell meine SQL Ausgabe in die CSV aus.

      Comment


      • #4
        fetch_array liefert einen Datensatz als assoziatives Array. Somit weiß man die Anzahl der Spalten (Länge des Array).
        Und mit OCI_BOTH ist das Array mit einem num. Indizie und mit einen ass. Indizie. Letzterer müsste den Spaltennamen enthalten
        Christian

        Comment

        Working...
        X