2013-08-13 4 views
8

Ich kann eine gespeicherte Prozedur in CodeIgniter nicht aufrufen. Wenn ich die Prozedur direkt in MySQL aufruft, funktioniert es. Warum funktioniert es nicht, wenn ich es in CodeIgniter anrufe?Wie Sie eine gespeicherte Prozedur in CodeIgniter aufrufen?

CREATE DEFINER=`root`@`localhost` PROCEDURE `test_proc`() 
LANGUAGE SQL 
NOT DETERMINISTIC 
CONTAINS SQL 
SQL SECURITY DEFINER 
COMMENT '' 
BEGIN 
    declare name1 TEXT; 
    declare id1 TEXT; 
    select name,id into name1,id1 from my_tbl WHERE name='sam'; 
    select * from my_tbl; 
    select name1,id1; 
END 

Antwort

19

Ich denke, Sie verwenden den folgenden Weg Prozedur aufzurufen.

$this->db->call_function('test_proc'); 

Es ist falsch. Mit dieser Methode können nur Standardprozeduren aufgerufen werden. Verfahren, die von Ihnen definierten aufzurufen, müssen Sie mit

$this->db->query("call test_proc()"); 
2

Für Oracle gehen procedured hier ist eine einfache Art und Weise

$rsponse = ''; 
    $s = oci_parse($this->db->conn_id, "begin packageName.procedureName(:bind1,:bind2,:bind3,:bind4,:bind5); end;"); 
       oci_bind_by_name($s, ":bind1", $data['fieldOne'],300); 
       oci_bind_by_name($s, ":bind2", $data['fieldTwo'],300); 
       oci_bind_by_name($s, ":bind3", $data['fieldThre'],300); 
       oci_bind_by_name($s, ":bind4", $data['fieldFour'],300); 
       oci_bind_by_name($s, ":bind4", $response,300); 
       oci_execute($s, OCI_DEFAULT); 
echo $message; 

Im obigen Beispiel Verfahren akzeptieren vier Argumente als Eingabe und einen Parameter zu nennen als Ausgabe. Im Falle eines direkten Aufrufs entfernen Sie 'packageName'. Das ist es ...

Verwandte Themen