Forum und email

Oracle 8 functions

Úvod

Tieto funkcie vám umo¾nia prístup k Oracle8 a Oracle7 databázam. Pou¾ívajú Oracle8 Call-Interface (OCI8)

Toto roz¹írenie je flexibilnej¹ie ako ¹tandardné Oracle roz¹írenie. Podporuje previazanie globálnych alebo lokálnych PHP a Oracle premenných, plná podpora LOB, FILE a ROWID a umo¾òuje pou¾íva» u¾ívateµsky definované premenné.

Požiadavky

Na pou¾ívanie tohto roz¹írenia budete potrebova» Oracle8 klientské kni¾nice.

Pred pou¾ívaním týchto funkcií sa uistite, ¾e máte korektne nastavené premenné prostredia Oracle pre Oracle u¾ívateµa, tak isto aj pre u¾ívateµa, pod ktorým be¾í vá¹ webserver. Budete potrebova» nasledujúce premenné:

  • ORACLE_HOME
  • ORACLE_SID
  • LD_PRELOAD
  • LD_LIBRARY_PATH
  • NLS_LANG
  • ORA_NLS33

Po nastavení premenných prostredia pre u¾ívateµa, pod ktorým be¾í webserver sa uistite, ¾e ste tohto u¾ívateµa (nobody, www) pridali aj do oracle skupiny(dba)).

Note: Ak vá¹ webserver nenabehne alebo padne hneï po ¹tarte Skontrolujte, èi je Apache zlinkovaný s pthread kni¾nicami:

# ldd /www/apache/bin/httpd 
    libpthread.so.0 => /lib/libpthread.so.0 (0x4001c000)
    libm.so.6 => /lib/libm.so.6 (0x4002f000)
    libcrypt.so.1 => /lib/libcrypt.so.1 (0x4004c000)
    libdl.so.2 => /lib/libdl.so.2 (0x4007a000)
    libc.so.6 => /lib/libc.so.6 (0x4007e000)
    /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)

Ak libpthread nie je na výpise, musíte prein¹talova» Apache:
# cd /usr/src/apache_1.3.xx
# make clean
# LIBS=-lpthread ./config.status
# make
# make install

Na niektorých UnixWare je kni¾nica libthread namiesto libpthread. V takom prípade musia by» PHP a Apache konfigurované pomocou EXTRA_LIBS=-lthread.

Inštalácia

Musíte ma» PHP skompilované s voµbou --with-oci8[=DIR], kde DIR je ¹tandardne nastavená na premennú prostredia ORACLE_HOME.

Runtime Konfigurácia

Toto rozšírenie nemá žiadne konfiguračné direktívy definované v php.ini.

Typy zdrojov

Preddefinované Konštanty

Konštanty uvedené nižšie sú definované týmto rozšírením a budú dostupné iba keď rozšírenie bolo buď kompilované do PHP alebo dynamicky načítané za behu (runtime).

OCI_DEFAULT (integer)
OCI_DESCRIBE_ONLY (integer)
OCI_COMMIT_ON_SUCCESS (integer)
OCI_EXACT_FETCH (integer)
SQLT_BFILEE (integer)
SQLT_CFILEE (integer)
SQLT_CLOB (integer)
SQLT_BLOB (integer)
SQLT_RDD (integer)
OCI_B_SQLT_NTY (integer)
OCI_SYSDATE (integer)
OCI_B_BFILE (integer)
OCI_B_CFILEE (integer)
OCI_B_CLOB (integer)
OCI_B_BLOB (integer)
OCI_B_ROWID (integer)
OCI_B_CURSOR (integer)
OCI_B_BIN (integer)
OCI_FETCHSTATEMENT_BY_COLUMN (integer)
OCI_FETCHSTATEMENT_BY_ROW (integer)
OCI_ASSOC (integer)
OCI_NUM (integer)
OCI_BOTH (integer)
OCI_RETURN_NULLS (integer)
OCI_RETURN_LOBS (integer)
OCI_DTYPE_FILE (integer)
OCI_DTYPE_LOB (integer)
OCI_DTYPE_ROWID (integer)
OCI_D_FILE (integer)
OCI_D_LOB (integer)
OCI_D_ROWID (integer)

Príklady

Example#1 OCI Hints

<?php
// by [email protected]

// Use option: OCI_DEFAULT for execute command to delay execution
OCIExecute($stmtOCI_DEFAULT);

// for retrieve data use (after fetch):

$result OCIResult($stmt$n);
if (
is_object ($result)) $result $result->load();

// For INSERT or UPDATE statement use:

$sql "insert into table (field1, field2) values (field1 = 'value',
 field2 = empty_clob()) returning field2 into :field2"
;
OCIParse($conn$sql);
$clob OCINewDescriptor($connOCI_D_LOB);
OCIBindByName ($stmt":field2", &$clob, -1OCI_B_CLOB);
OCIExecute($stmtOCI_DEFAULT);
$clob->save ("some text");
OCICommit($conn);

?>

Mô¾ete µahko pristupova» k ulo¾eným procedúram rovnako ako keby ste k nim pristupovali z príkazového riadku.

Example#2 Using Stored Procedures

<?php
// by [email protected]
$sth OCIParse $dbh"begin sp_newaddress( :address_id, '$firstname',
 '$lastname', '$company', '$address1', '$address2', '$city', '$state',
 '$postalcode', '$country', :error_code );end;" 
);

// This calls stored procedure sp_newaddress, with :address_id being an
// in/out variable and :error_code being an out variable. 
// Then you do the binding:

   
OCIBindByName $sth":address_id"$addr_id10 );
   
OCIBindByName $sth":error_code"$errorcode10 );
   
OCIExecute $sth );

?>

Table of Contents