Kontak Me

Blog Vitals

Blog Stats
Google Page Rank
1,580,245
48
123
4

Patch CodeIgniter untuk Koneksi ke Oracle

Nah dibagian ini aku akan nyoba jelasin, gimana supaya driver oci8 di CI bisa lebih kompatibel dengan oracle. Apabila kamu tidak melakukan patch ini bisa dipastikan kamu akan mengalami kesusahan waktu query2 di oracle. Salah satunya, bila kamu dalam satu page (satu function class CI) melakukan 2 atau lebih query Oracle, maka yang dihasilkan adalah result query yang pertama kali dilakukan. Sungguh mengganggu kan?…

Perlu diketahui cara ini dipakai apabila kamu terlanjur  menggunakan CI 1.6.3 kebawah. Karena patch ini sudah di masukan ke dalam CI 1.7.0. Tapi ndak ada salahnya kan kalo kita tahu apa yang menyebabkan itu terjadi.?

Berikut langkah yang harus dijalankan. :

  1. Buka file ../system/database/DB_driver.php.  Cari bagian seperti ini :
    
    $driver 		= $this->load_rdriver();
    $RES 			= new $driver();
    $RES->conn_id	= $this->conn_id;
    $RES->result_id	= $this->result_id;
    $RES->num_rows	= $RES->num_rows();
    if ($this->dbdriver == 'oci8')
    {
    	$RES->stmt_id		= $this->stmt_id;
    	$RES->curs_id		= NULL;
    	$RES->limit_used	= $this->limit_used;
    }

    trus ubah lah menjadi seperti ini.

    $driver 		= $this->load_rdriver();
    $RES 			= new $driver();
    $RES->conn_id	= $this->conn_id;
    $RES->result_id	= $this->result_id;
    
    if ($this->dbdriver == 'oci8')
    {
    	$RES->stmt_id		= $this->stmt_id;
    	$RES->curs_id		= NULL;
    	$RES->limit_used	= $this->limit_used;
    	$this->stmt_id = NULL;
    }
    $RES->num_rows	= $RES->num_rows();
    

    NULL juga bisa diganti dengan nilai FALSE.

  2. Buka gile ../system/database/driver/oci8/oci8_driver.php. Cari bagian seperti ini :
    $this->_set_stmt_id($sql);
    ocisetprefetch($this->stmt_id, 1000);
    return @ociexecute($this->stmt_id, $this->_commit);
    

    lalu ganti menjadi seperti ini :

    $this->stmt_id = NULL;
    $this->_set_stmt_id($sql);
    ocisetprefetch($this->stmt_id, 1000);
    return @ociexecute($this->stmt_id, $this->_commit);
    

    NULL juga bisa diganti dengan nilai FALSE.

  3. Masih di file yang sama , cari bagian seperti ini :
    function _set_stmt_id($sql)
    {
    	if ( ! is_resource($this->stmt_id))
    	{
    		$this->stmt_id = ociparse($this->conn_id,$this->_prep_query($sql));
    	}
    }
    

    lalu ganti menjadi seperti ini :

    function _set_stmt_id($sql)
    {
            $this->stmt_id = ociparse($this->conn_id,$this->_prep_query($sql));
    }

Nah silakan dicoba, kalo aku sukses dengan perubahan2 diatas. dan sekarang aplikasiku tokcer dengan Oracle.

Sekedar info buat CI dan Oracle, jika kamu mau update atau delete record, gunakan…

$this->db->simple_query($sql)

Metode simple_query itu ada OCI_COMMIT_ON_SUCCESS di tiap selesai query.

13 comments to Patch CodeIgniter untuk Koneksi ke Oracle

  • manton

    masdeka…
    bisa kasih contoh pake CI 1.7 dengan oracle XE, sampai sekarang ini saya masih susah pake CI dengan oracle Xe, saya ingin sekali itu bisa dijalankan.., tolong mas kirimkan saya satu contoh koneksi, kita pake saja database HR yang ada di oracle XE bagaimana menampilkan table employees. Tolong dikirimkan satu file model, satu file controler dan satu file view. Tolong sekali mas… tolong dikirimkan ke mansose@yahoo.com saya desperate sekali, saya beranggapan CI tidak support oracle XE..

    Sebelumnya saya ucapkan terimakasih banyak…

  • @manton..
    sori kalo lama bales,

    net kantor tidak bisa di ajak kompromi.
    ini aku tuliskan contoh kode yang konek ke oracle.
    aku sudah mencoba nya di tempat ku, sukses kok

    http://masdeka.web.id/contoh-simple-bikin-aplikasi-dengan-codeigniter

    semoga membantu

    wassalam
    deka

  • aftri

    Thanks tutorialnya, sangat membantu :)
    Tapi link-linknya coba dibenerin, mas..
    nyambungnya ke masdeka.com harusnya masdeka.web.id, bukan? ;)

  • terima kasih mas aftri…
    itu peninggalan dari proses pindah hosting dulu….

  • papanyaraka

    Thanks Tutornya… Mantabz… jadi ga sabar pengen nyobain oracle…

  • zaqi

    Sipp tutorialnya,

    saya udah coba, mangstab banget. Running well, cman ada sedikit masalah klo saya coba pake $this->db->query($sql) kok muncul error ky gini ya

    A PHP Error was encountered
    Severity: Warning
    Message: ocifetchinto() [function.ocifetchinto]: ORA-24374: define not done before fetch or execute and fetch
    Filename: oci8/oci8_result.php

    Line Number: 159

    Mohon pencerahannya !!!

  • @zaqi.. mas.. environmentnya mas seperti apa? windows? oracle versi brapa? php brapa? CI versi brapa?

    kalo bisa complete source nya disertakan juga…(sama sekalian SQL nya juga)..

  • zaqi

    OS: windows, Oracle 10g R2, CI Ver 1.7.1

    Source :
    function export_ijin(){
    if($this->conn){
    $sql=”SELECT * FROM IJIN”;
    $result=odbc_exec($this->conn,$sql) or die(”Error”);
    $i=0;
    $sql_merge=array();
    while($data=odbc_fetch_array($result)){
    $sql_merge[]=”MERGE INTO IJIN b USING (
    SELECT ‘”.$data['KODE_IJIN'].”‘ as KODE_IJIN
    FROM DUAL) e
    ON (b.IJIN_ID = e.KODE_IJIN)
    WHEN MATCHED THEN
    UPDATE SET b.IJIN_NAMA = ‘”.$data['KET_IJIN'].”‘,
    b.IJIN_DIBAYAR=’”.$data['DIBAYAR'].”‘
    WHEN NOT MATCHED THEN
    INSERT (IJIN_ID, IJIN_NAMA, IJIN_DIBAYAR)
    VALUES (’”.$data['KODE_IJIN'].”‘,’”.$data['KET_IJIN'].”‘,
    ‘”.$data['DIBAYAR'].”‘)”;
    //echo $sql_merge;
    $this->db->query($sql_merge,FALSE,TRUE);
    $i++;
    }

    if($i>0)
    return ‘1′;
    else
    return ‘0′;
    }else
    return “0″;

    }

    catatan :
    - jika opsi : $this->db->query($sql_merge,FALSE,FALSE); ->param terakhir FALSE
    tidak kluar error cuman data yg diexport 1 row aja, klo diganti TRUE, jadi error kyk di atas tp data masuk semua
    - klo pake simple query data yg masuk cuman 1

    Makasih atas info dan sarannya

  • [...] Oracle Automatic Storage Management Recent Comments Catatan (PHP) » Pengertian MVC di CodeIgniter on Contoh simple bikin aplikasi dengan CodeIgniter.Catatan (PHP) » Mulai dengan CodeIgniter on Pengertian MVC di CodeIgniterdeka on Bikin Laporan PDF dengan CodeIgniteryoze on Bikin Laporan PDF dengan CodeIgniterzaqi on Patch CodeIgniter untuk Koneksi ke Oracle [...]

  • @zaqi.

    mas udah coba pake $this->db->simple_query($sql);

    coz dari CI disarankan untuk make fungsi itu bila query yang dijalankan jenisnya perubahan (insert, update, delete).

    saya juga dulu sering make $this->db->query() tapi sering ada bug waktu query2 seperti itu..
    lali aku coba simple_query, ndak ada masalah.

    gudlak.

  • anata

    Mas pernah nyoba manggil function di oracle pake PHP. Aku nyoba beberapa fungsi jalan, dan hasilnya keluar. Saat ini aku nyoba panggil sebuah funsi untuk memanggil perhitungan, anehnya klo aku manggilnya pake TOAD hasilnya keluar tapi klo aku dah manggil pake PHP hasilnya kosong padahal parameter yang aku kirim dah sama persis. (aku pake oci_bind_by_name untuk kirim parameter, dan aku dah nyoba beberapa fungsi berhasil)

    Mohon bantuannya mas…Kira-kira aku salah dimana ya? Aku dah nyoba kirim parameternya pake array juga tidak bisa. Oh ya sebetulnya aku pake CI, tapi aku bingung cara manggil function oracle di CI, jadi aku pake koneksi manual (oci_connect bla..bla..)
    Terima kasih sebelum dan sesudahnya…

  • @anata..

    sebenernya manggil fungsi oracle di CI sama dengan manggil dengan database lain.
    FYI, di CI pemanggilan fungsi database secara langsung hampir tidak ada, karena hampir semua fungsi database standard sudah di cover oleh driver database CI,
    jadi tinggal set parameter database di config/database.php,
    trus di controller, tinggal panggil $result = $this->db->query($sql);
    dan ambil hasilnya dengan $hasil_array = $result->result_array().. dah jadi deh hasilnya.

    soal di toad bisa , trus di CI gak bisa..
    bisa gak di kasih contoh sql nya dan contoh skrip php CI nya..
    mungkin bisa kelihatan trouble nya dimana…

    regards..

  • contek_coding

    ada yang tau, konek ke firebird via CI

Leave a Reply

 

 

 

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>