2013-08-13 48 views
8

Tôi không thể gọi thủ tục được lưu trữ trong CodeIgniter. Tuy nhiên, khi tôi gọi thủ tục trực tiếp trong MySQL, nó hoạt động. Tại sao nó không hoạt động khi tôi gọi nó trong CodeIgniter?Làm thế nào để gọi một thủ tục được lưu trữ trong CodeIgniter?

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 

Trả lời

19

Tôi nghĩ bạn đang sử dụng cách sau để gọi thủ tục.

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

Sai. Chỉ có thể gọi thủ tục mặc định bằng phương pháp này. Để gọi thủ tục quy định của bạn, bạn phải đi với

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

Đối với Oracle procedured đây là một cách đơn giản để gọi

$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; 

Trong thủ tục ví dụ trên chấp nhận bốn đối số như đầu vào và một tham số như đầu ra. trong trường hợp thủ tục gọi trực tiếp xóa 'packageName'. Đó là ...

Các vấn đề liên quan