如何在Codeigniter中调用Oracle存储过程 [英] How to call oracle stored procedure in Codeigniter

查看:176
本文介绍了如何在Codeigniter中调用Oracle存储过程的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是CI应用程序和oracle数据库的新手.我想从活动记录中执行存储过程.但是我找不到任何可靠的文档.

I am new with CI application and oracle database. I want to execute a stored procedure from active record. But I can't get hold of any solid documentation.

有人在使用CodeIgniter和/或Active Record调用存储的proc并传递参数方面有任何经验吗?

Does anyone have any experience with calling stored procs with CodeIgniter and/or Active Record and passing in parameters?

function write_message($type = "debug", $message = "", $description = "")
{
    $_fw =& get_instance();

    $data['LOG_TYPE'] = 4;

    switch ($type)
    {
        case "error":
            $data['LOG_TYPE'] = 1;
            break;

        case "success":
            $data['LOG_TYPE'] = 2;
            break;

        case "message":
            $data['LOG_TYPE'] = 3;
            break;

        case "debug":
            $data['LOG_TYPE'] = 4;
            break;

        default:
            $data['LOG_TYPE'] = 1;
            break;
    }

    $data['LOG_URI_STRING'] = uri_string();

    $data['LOG_MESSAGE'] = $message;

    $data['LOG_DESCRIPTION'] = $description;

    $data['LOG_USER_AGENT'] = $_fw->input->user_agent();

    $data['LOG_USER_ID'] = $_fw->session->userdata('USER_ID') != null?$_fw->session->userdata('USER_ID'):0;

    $data['LOG_ADDEN_ON'] = mktime();

    $data['OPERATION_IP'] = $_fw->input->ip_address();

    $sql = $_fw->db->query("CALL dpe_acl.pkg_SYSTEM_LOGS.addSystemLogs('', '".$data['LOG_TYPE']."', '".$data['LOG_URI_STRING']."', '".$data['LOG_MESSAGE']."', '".$data['LOG_DESCRIPTION']."', '".$data['LOG_USER_AGENT']."', '".$data['LOG_USER_ID']."', '".$data['LOG_ADDEN_ON']."', '".$data['OPERATION_IP']."')");

    return;
}

这样做我会收到这样的警告

doing this I am getting a warning like this

Severity: Warning

Message: oci_fetch_assoc(): ORA-24374: define not done before fetch or execute and fetch

Filename: oci8/oci8_result.php

Line Number: 83

请帮助...预先感谢...

Please help... Thanks in advance...

推荐答案

在您的模型中尝试一下:

Try this in your model :

if (!$this->db) {
  $m = oci_error();
  trigger_error(htmlentities($m['message']), E_USER_ERROR);
}

$stid = oci_parse($this->db->conn_id, 'BEGIN PROCEDURE_NAME(:PARAMETER_1,:PARAMETER_2,:OUT_MESSAGE); end;');

oci_bind_by_name($stid, ':PARAMAETER_1',  $PARAMAETER_1,200);
oci_bind_by_name($stid, ':PARAMETER_2',  $PARAMETER_2,200);
oci_bind_by_name($stid, ':OUT_MESSAGE',  $OUT_MESSAGE ,100, SQLT_CHR);

if(oci_execute($stid)){
  $results = $OUT_MESSAGE;
}
oci_free_statement($stid);
oci_close($this->db->conn_id);

return  $results;

这篇关于如何在Codeigniter中调用Oracle存储过程的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆