Oracle Stored procedure en codeigniter

664 views
Skip to first unread message

andresrojas686

unread,
Aug 27, 2013, 10:42:51 AM8/27/13
to codeignit...@googlegroups.com
saludos compañeros

en estos momentos me encuentro bloqueado pues no logro hacer funcionar un Stored Procedure SP de oracle desde codeigniter. Quisiera saber si alguno de ustedes tiene una guia o un manual donde se explique claramente como aplicar los SP de oracle en Codeigniter ya que he tenido problemas con ello.

PD: la conexion la tengo bn pues puedo realizar consultas directas a la base de datos, pero Mi prioridad es realizar las transacciones por medio de SP

Muchas Gracias

J. Manuel Velasco Martínez

unread,
Aug 27, 2013, 11:28:51 AM8/27/13
to codeignit...@googlegroups.com
Has probado lanzando la consulta tal cual ?

$query = "CALL tuSP(params);";

·_-


--
Antes de responder revisa: http://es.wikipedia.org/wiki/Netiquette
Regístrate en el Censo CI: http://bit.ly/miembroscodeigniteres
---
Has recibido este mensaje porque estás suscrito al grupo "CodeIgniter-spanish" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus correos electrónicos, envía un correo electrónico a codeigniter-spa...@googlegroups.com.
Para publicar una entrada en este grupo, envía un correo electrónico a codeignit...@googlegroups.com.
Visita este grupo en http://groups.google.com/group/codeigniter-spanish.
Para ver este debate en la Web, visita https://groups.google.com/d/msgid/codeigniter-spanish/a6c4d15b-092a-4226-a469-85f9eb59a5ea%40googlegroups.com.
Para obtener más opciones, visita https://groups.google.com/groups/opt_out.



--
EL ARTE-SANO DEL BYTE

Jose Manuel Velasco Martínez
Ingeniero Informático
645 32 48 53

Andres Rojas

unread,
Aug 27, 2013, 11:32:29 AM8/27/13
to codeignit...@googlegroups.com
perdona la ignorancia, como lo hago desde la consola?


Has recibido este mensaje porque estás suscrito a un tema del grupo "CodeIgniter-spanish" de Grupos de Google.
Para anular la suscripción a este tema, visita https://groups.google.com/d/topic/codeigniter-spanish/vvXbvfT_WE0/unsubscribe. Para anular la suscripción a este grupo y todos sus temas, envía un correo electrónico a codeigniter-spa...@googlegroups.com.

Para publicar una entrada en este grupo, envía un correo electrónico a codeignit...@googlegroups.com.
Visita este grupo en http://groups.google.com/group/codeigniter-spanish.

Para obtener más opciones, visita https://groups.google.com/groups/opt_out.



--
Ing. Andrés Camilo Rojas Beltrán.
Bogotá-Colombia


J. Manuel Velasco Martínez

unread,
Aug 27, 2013, 11:35:44 AM8/27/13
to codeignit...@googlegroups.com
desde que consola ?
no estás hablando de una aplicación en CI ?

también si quieres aumentar las posibilidades que te echen un cable, sé más específico:
- indica que haces
- indica que error tienes

y si lo acompañas de algo de código mejor

Usar SP tengo entiendo que no es más que hacer un CALL a ese SP, como cualquier otra query.

·_-







Para obtener más opciones, visita https://groups.google.com/groups/opt_out.

Andres Rojas

unread,
Aug 27, 2013, 11:54:34 AM8/27/13
to codeignit...@googlegroups.com

ok
la informacion es la siguiente:

tengo un controller:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Welcome extends CI_Controller {

function __construct()
{
parent::__construct();
                $this->output->enable_profiler(True);
                $this->load->model('mbienvenido');

    }

public function index()
{
$dat = '200';
$data['datos'] = $this->mbienvenido->pruebas($dat); //pruebas es la funcion que llama el SP en el modelo
$this->load->view('welcome_message', $data);
}
}

el modelo:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Mbienvenido extends CI_Model {

function __construct()
{
parent::__construct();
            //$this->load->database();   
}

    function pruebas($dat)
    {
        $cod=5;
        //definición de vars
        $params = array(
                        array('name'=>':SRV_Message', 'value'=>$dat, 'type'=>SQLT_CHR, 'length'=>10),
                        array('name'=>':Col_PAC_FAM_TipoIdentCodigo', 'value'=>&$cod, 'type'=>OCI_B_INT, 'length'=>10),
                        array('name'=>':Col_TAB_TipoIdentGlosa', 'value'=>&$desc, 'type'=>SQLT_CHR, 'length'=>100)
                       );
        //definición de nuestro procedure
       
        $stmt = oci_parse($this->db->conn_id, "begin MI_PAQUETE.MI_PROCEDURE(:SRV_Message,:Col_PAC_FAM_TipoIdentCodigo, :Col_TAB_TipoIdentGlosa); end;");

        //Asignación de vars a llamada del procedure
        foreach($params as $p)
        {
            oci_bind_by_name($stmt, $p['name'], $p['value'], $p['length']);
        }
        //Ejecución del procedure
        $r = ociexecute($stmt);
        if(!$r)
        { 
            throw new Exception("Usuario->pruebas");
        }
        //Devolvemos nuestra variable con el valor asgnado dentro del procedure
        return $desc;
    }
}


y tengo la vista

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Welcome to CodeIgniter</title>


</head>
<body>

<div id="container">
<h1>Welcome to CodeIgniter!</h1>

<div id="body">
<p>resultado SP</p>
<?php

foreach ($datos->result_array() as $value) 
{

# code...
//echo "ID  - ";
//echo $value->Col_PAC_FAM_TipoIdentCodigo;
//echo "   - Nombre - ".$value->Col_TAB_TipoIdentGlosa[5];
echo $data[5]=$value->Col_TAB_TipoIdentGlosa;
//echo "   - Nombre - ".$desc[5];
echo "<br>";
}

?>
</div>

</body>
</html>


y obtengo varios mensajes de error:

A PHP Error was encountered

Severity: Warning

Message: oci_parse() expects parameter 1 to be resource, boolean given

Filename: models/mbienvenido.php

Line Number: 63

A PHP Error was encountered

Severity: Warning

Message: oci_bind_by_name() expects parameter 1 to be resource, null given

Filename: models/mbienvenido.php

Line Number: 68

A PHP Error was encountered

Severity: Warning

Message: oci_bind_by_name() expects parameter 1 to be resource, null given

Filename: models/mbienvenido.php

Line Number: 68

A PHP Error was encountered

Severity: Warning

Message: oci_bind_by_name() expects parameter 1 to be resource, null given

Filename: models/mbienvenido.php

Line Number: 68

A PHP Error was encountered

Severity: Warning

Message: ociexecute() expects parameter 1 to be resource, null given

Filename: models/mbienvenido.php

Line Number: 71





PD: Perdona lo de la consola, fue un error de correos




Para obtener más opciones, visita https://groups.google.com/groups/opt_out.

J. Manuel Velasco Martínez

unread,
Aug 27, 2013, 11:58:39 AM8/27/13
to codeignit...@googlegroups.com
asi si es mas probable que alguien te pueda echar una mano ;)

por mi parte no conozco las funciones que usas de oci_xxx; lo que te proponía yo que probaras es a montarlo como si hicieras una consulta tal cual y la consulta sea un CALL al SP.

recuerda descomentar el load de la database para que te funcione, o incluso la puedes poner en el config en la parte de autoload, ya que la libreria database se puede llegar a usar mucho

suerte y ánimo!



Para obtener más opciones, visita https://groups.google.com/groups/opt_out.

andresrojas686

unread,
Aug 27, 2013, 12:03:01 PM8/27/13
to codeignit...@googlegroups.com
gracias y lo del load de la libreria database, ya la tengo en el autoload, la dejo comentada ya que acostumbro a no borrar codigo

andresrojas686

unread,
Aug 27, 2013, 5:55:30 PM8/27/13
to codeignit...@googlegroups.com
realizando el llamado directo como indicas:

$this->db->query("call package.procedure(params)

obtengo este resultado:

Error Number:

Filename: C:\AppServ\www\hisprub\system\database\DB_driver.php

Line Number: 330


buscando en internet encuentro que:

the problem was database field length. The scenario is that after form submission, the input string is converted into unicode format like &#129;. So if database field length is 10 and i input string with 4 characters, the procedure returned error because 4 characters when converted into unicode format becomes around 24 characters which is bigger than the allowed length in database field.

pero eso no me dice como solucionarlo... ya le aumente el tamaño a los params pero sigue saliendo el error


El martes, 27 de agosto de 2013 09:42:51 UTC-5, andresrojas686 escribió:

Daniel Del Cid

unread,
Aug 27, 2013, 6:36:49 PM8/27/13
to codeignit...@googlegroups.com
Solo quiero hacer una observacion:
CALL solo funciona para mysql para oracle es EXEC, pero de igual forma no se como solventar tu problema


--
Antes de responder revisa: http://es.wikipedia.org/wiki/Netiquette
Regístrate en el Censo CI: http://bit.ly/miembroscodeigniteres
---
Has recibido este mensaje porque estás suscrito al grupo "CodeIgniter-spanish" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus correos electrónicos, envía un correo electrónico a codeigniter-spa...@googlegroups.com.
Para publicar una entrada en este grupo, envía un correo electrónico a codeignit...@googlegroups.com.
Visita este grupo en http://groups.google.com/group/codeigniter-spanish.
Reply all
Reply to author
Forward
0 new messages