Tom22: Textdatei in Oracle als BLOB speichern?

Hallo *

kann mir bitte jemand erklären, wie ich ein Textdatei mittels php in eine Oracle(Oracle 8) Datenbank einfügen kann. Welchen Datentyp brauch ich? BLOB?
Bitte helfen, ist sehr dringend!
Tom

  1. Muss die Textdatei in Oracle durchsuchbar sein? Sonst würde ich vorschlagen die Textdatei woanders abzulegen und nur den Pfad in Oracle abzulegen

    The table will look like this :
    ID_TXT         Path
    90001         /pub/other/pic/frage1.txt
    90002         /pub/other/pic/frage2.txt
    90003         /pub/other/pic/frage3.txt
    90004         /pub/other/pic/frage4.txt

    Abfrage:

    $ID = 90001;
    $conn = OCILogon( .....); // Deine Connection hier
    $stmt = OCIParse($conn,"Select path
    from image_tbl where ID_TXT = $ID");
    OCIExecute($stmt);

    if (OCIFetch($stmt))
      {
      $_path = OCIResult($stmt,1);
      print "$_path">; // Text anzeigen
      }
    else
      {
      print "Keinen Text gefunden";
      }

    OCIFreeStatement($stmt);
    OCILogOff($conn);

    Textdatei hochladen:

    $data = "........"; // text binary data

    $path = "/pub/other/txt/";
    $file=fopen($path."frage5.txt",w);
    fwrite($file,$data,strlen($data));
    fclose($file);

    Gruß

    Rüdiger

  2. Hallo Tom,

    kann mir bitte jemand erklären, wie ich ein Textdatei mittels php in eine Oracle(Oracle 8) Datenbank einfügen kann. Welchen Datentyp brauch ich? BLOB?

    Datentyp BLOB ist in Ordnung, CLOB würde auch gehen:

    http://otn.oracle.com/docs/products/oracle9i/doc_library/release2/server.920/a96540/sql_elements2a.htm#46139
    (Achtung, Du musst einen OTN-Account besitzen)

    Du solltest Dir außerdem die spezielle Syntax für das Speichern von LOB-Objekten bei Oracle anschauen, siehe auch »Example 2« in:

    http://de3.php.net/manual/en/function.ocinewdescriptor.php

    Christian

    --
    Ich bitte darum, dass ein Themenbereich (BARRIEREFREIHEIT) eingerichtet wird.
  3. Falls Du die Texte doch direkt in Oracle ablegen willst, hier eine Anleitung für Grafikdateien:

    <?php
    $conn=OCILogon("muenz","andriz");
    $lob=OCINewDescriptor($conn, OCI_D_LOB);
    $stmt = OCIParse($conn,"insert into images_tb (id, the_blob) values(my_seq.NEXTVAL, EMPTY_BLOB()) returning the_blob into :the_blob");
    OCIBindByName($stmt, ':the_blob', &$lob, -1, OCI_B_BLOB);
    OCIExecute($stmt, OCI_DEFAULT);
    $lob->savefile("/folders/1.gif");
    OCICommit($conn);
    OCIFreeDescriptor($lob);
    OCIFreeStatement($stmt);
    OCILogoff($conn);
    ?>

    Zur Anzeige im Browser:
    <img src="getimg.php?img_id=100">

    Hier die getimg.php:
    <?php
    <?php
    $conn=OCILogon("muenz","andriz");
    $stmt = OCIParse($conn,"select the_blob from images_tb where id=$img_id");
    OCIExecute($stmt);
    OCIFetchInto($stmt, $lob);
    $content=$lob->load();
    OCIFreeStatement($stmt);
    OCILogoff($conn);
    header("Content-type: image/gif\n\n");
    echo $content;
    ?>

    1. Falls Du die Texte doch direkt in Oracle ablegen willst, hier eine Anleitung für Grafikdateien:

      Ja, will und muß ich :-)

      <?php
      $conn=OCILogon("muenz","andriz");
      $lob=OCINewDescriptor($conn, OCI_D_LOB);
      $stmt = OCIParse($conn,"insert into images_tb (id, the_blob) values(my_seq.NEXTVAL, EMPTY_BLOB()) returning the_blob into :the_blob");
      OCIBindByName($stmt, ':the_blob', &$lob, -1, OCI_B_BLOB);
      OCIExecute($stmt, OCI_DEFAULT);

      68 »» $lob->savefile("/folders/1.gif");
      69 »» OCICommit($conn);

      OCIFreeDescriptor($lob);

      71 »» OCIFreeStatement($stmt);

      OCILogoff($conn);
      ?>

      Vielen Dank so weit!
      Leider geht diese Anleitung bei mir nicht!
      Ich bekomm folgende Fehlermeldung:

      Warning: OCIStmtExecute: ORA-02289: Diese Sequenz gibt es nicht in d:\programme\apache group\apache\htdocs\test\dokument2.php on line 68

      Warning: OCILobWrite: OCI_INVALID_HANDLE in d:\programme\apache group\apache\htdocs\test\dokument2.php on line 69

      Fatal error: Call to undefined function: ocifreedescriptor() in d:\programme\apache group\apache\htdocs\test\dokument2.php on line 71

      Zeilenangaben siehe Quelltext oben.