Binär Daten in DB einfügen
Binär Daten in DB einfügen
am 02.09.2006 20:25:14 von Reinhard Pagitsch
Hallo Ng,
Es gibt doch irgendeine DBI Funktion in DB mit der man Binärdaten in
eine DB (MS Sql, Oracle, DB2, ...) einfügen kann.
Ich finde die jetzt einfach nicht.
Kann mir da bitte jemand helfen?
Danke,
Reinhard
--
Antworten bitte nur an rpirpag at aon punkt at
Die Adresse im From/Replay to ist als Spamfänger gedacht und wird nicht
gelesen.
Please Visit: http://members.aon.at/rpagitsch/
Re: BinärDaten in DB einfügen
am 02.09.2006 21:15:43 von Dirk Langer
Hallo Reinhard,
Am Sat, 02 Sep 2006 20:25:14 +0200 schrieb Reinhard Pagitsch:
> Hallo Ng,
>
> Es gibt doch irgendeine DBI Funktion in DB mit der man Binärdaten in
> eine DB (MS Sql, Oracle, DB2, ...) einfügen kann.
> Ich finde die jetzt einfach nicht.
>
> Kann mir da bitte jemand helfen?
Füge die Binärdaten einfach in ein BLOB oder LONG Feld mit
Platzhaltern ein.
In man DBI steht:
Perl supports binary data in Perl strings, and the DBI will pass binary
data to and from the driver without change. It is up to the driver
implementors to decide how they wish to handle such binary data.
.
.
.
When trying to insert long or binary values, placeholders should be
used since there are often limits on the maximum size of an "INSERT"
statement and the "quote" method generally canât cope with binary data.
See "Placeholders and Bind Values".
GrüÃe
Dirk
Re: BinärDaten in DB einfügen
am 02.09.2006 21:47:42 von hjp-usenet2
On 2006-09-02 18:25, Reinhard Pagitsch wrote:
> Es gibt doch irgendeine DBI Funktion in DB mit der man Binärdaten in
> eine DB (MS Sql, Oracle, DB2, ...) einfügen kann.
Nicht dass ich wüsste. DBD::Oracle enthält spezielle Magie, damit
insert/update/delete mit LOBs genauso wie mit anderen Column-Types
funktioniert (nur $dbh->{LongReadLen} muss man meistens setzen, weil der
Defaultwert zu klein ist). Wenn das bei MS-SQL und DB2 nicht der Fall
ist, musst Du unter Umständen datenbank-spezifische Methoden verwenden
(bei Oracle wäre das das DBMS_LOB-Package).
hp
--
_ | Peter J. Holzer | > Wieso sollte man etwas erfinden was nicht
|_|_) | Sysadmin WSR | > ist?
| | | hjp@hjp.at | Was sonst wäre der Sinn des Erfindens?
__/ | http://www.hjp.at/ | -- P. Einstein u. V. Gringmuth in desd
Re: BinärDaten in DB einfügen
am 03.09.2006 22:03:24 von Florian Weimer
* Reinhard Pagitsch:
> Es gibt doch irgendeine DBI Funktion in DB mit der man Binärdaten in
> eine DB (MS Sql, Oracle, DB2, ...) einfügen kann.
> Ich finde die jetzt einfach nicht.
$rc = $sth->bind_param($p_num, $bind_value, SQL_VARBINARY);
So sollte es zumindest bei PostgreSQL funktionieren. PostgreSQL hat
auch keine so großen Probleme, wenn $bind_value ein paar Megabyte groß
ist. Für Videodaten taugt das zugegebenermaßen wenig.
Re: Binär Daten in DB einfügen
am 06.09.2006 11:28:47 von Reinhard Pagitsch
Reinhard Pagitsch wrote:
> Hallo Ng,
>
> Es gibt doch irgendeine DBI Funktion in DB mit der man Binärdaten in
> eine DB (MS Sql, Oracle, DB2, ...) einfügen kann.
> Ich finde die jetzt einfach nicht.
>
Danke Euch allen, ich habs jetzt.
CONTENT ist der Blob.
Oracle:
my $query = "INSERT INTO table_name(DOCAR_ID, PERM_ID,LENGTH,CONTENT)
VALUES (?,?,?,?)";
print "Prepareing..\n";
$sth = $dbh->prepare($query) or "error " . $DBI::errstr . "\n";
print "Binding...\n";
$sth->bind_param(4, $content, {ora_type => ORA_BLOB} ) or "error " .
$DBI::errstr . "\n";
MS Sql Server:
$query = "SET IDENTITY_INSERT ISIS_DOCAR_BLOB ON INSERT INTO
table_name(DOCAR_ID, PERM_ID,LENGTH,CONTENT) VALUES (?,?,?,?)";
$sth = $dbh->prepare($query);
und dann:
$sth->execute($DOCAR_ID,$PERM_ID,$size, $content);
Für DB2 hab ichs noch nicht, aber die beiden genügen auch.
regards,
Reinhard
--
Re: BinärDaten in DB einfügen
am 06.09.2006 23:49:58 von hjp-usenet2
On 2006-09-06 09:28, Reinhard Pagitsch wrote:
> Danke Euch allen, ich habs jetzt.
> CONTENT ist der Blob.
>
> Oracle:
> my $query = "INSERT INTO table_name(DOCAR_ID, PERM_ID,LENGTH,CONTENT)
> VALUES (?,?,?,?)";
> print "Prepareing..\n";
> $sth = $dbh->prepare($query) or "error " . $DBI::errstr . "\n";
> print "Binding...\n";
> $sth->bind_param(4, $content, {ora_type => ORA_BLOB} ) or "error " .
> $DBI::errstr . "\n";
Um, wozu? Bei mir hat bisher ein $sth->execute ganz ohne bind bei BLOBs
immer funktioniert.
Kannst Du einen Fall zeigen, in dem das bind_param notwendig ist?
hp
--
_ | Peter J. Holzer | > Wieso sollte man etwas erfinden was nicht
|_|_) | Sysadmin WSR | > ist?
| | | hjp@hjp.at | Was sonst wäre der Sinn des Erfindens?
__/ | http://www.hjp.at/ | -- P. Einstein u. V. Gringmuth in desd
Re: Binär Daten in DB einfügen
am 07.09.2006 10:12:32 von Reinhard Pagitsch
Peter J. Holzer wrote:
> On 2006-09-06 09:28, Reinhard Pagitsch wrote:
>> Danke Euch allen, ich habs jetzt.
>> CONTENT ist der Blob.
>>
>> Oracle:
>> my $query = "INSERT INTO table_name(DOCAR_ID, PERM_ID,LENGTH,CONTENT)
>> VALUES (?,?,?,?)";
>> print "Prepareing..\n";
>> $sth = $dbh->prepare($query) or "error " . $DBI::errstr . "\n";
>> print "Binding...\n";
>> $sth->bind_param(4, $content, {ora_type => ORA_BLOB} ) or "error " .
>> $DBI::errstr . "\n";
>
> Um, wozu? Bei mir hat bisher ein $sth->execute ganz ohne bind bei BLOBs
> immer funktioniert.
>
> Kannst Du einen Fall zeigen, in dem das bind_param notwendig ist?
>
> hp
Ich hab das aus DBD::Oracle "Handling LOBs". Ich verwende aber Perl v5.6.1.
regards,
Reinhard