Как вызвать хранимую процедуру оракула в Codeigniter

Я новичок с приложением CI и базой данных оракула. Я хочу выполнить хранимую процедуру из активной записи. Но я не могу получить какую-либо основательную документацию.

У кого-нибудь есть опыт вызова хранимых процедур с CodeIgniter и / или Active Record и передачи параметров?

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

делая это, я получаю предупреждение, как это

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

Пожалуйста, помогите … Спасибо заранее …

0

Решение

Эта ошибка возникает из-за того, что вы неправильно связали входные / выходные параметры перед вызовом хранимой процедуры. Сейчас у меня нет большого опыта работы с CI, поэтому я не знаю, как он выполняет строку запроса, но я знаю, что сначала нужно связать входные и выходные параметры с локальными переменными, вы не можете просто поместить их в Строка запроса.

Вот ссылка на пример, который может помочь вам понять это. http://www.dbmotive.com/ora-24374-define-not-done-before-fetch-or-execute-and-fetch/

0

Другие решения

для использования в магазине $this->db->stored_procedure('package or schema','you_store_procedure',$parameters),
параметры $ такие:

$parametros=array(
array('name'=>':param','value'=>'pass_variable or value','length'=>-1,'type'=>SQLT_CHR),
array('name'=>':param','value'=>'pass_variable or value','length'=>-1,'type'=>SQLT_CHR), ....
);

Для параметров OUT перед переменной стоит & и установить значение длины, пример
array('name'=>':param','value'=>&$param,'length'=>30,'type'=>SQLT_CHR)

0

Попробуйте это в вашей модели:

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;
0
По вопросам рекламы [email protected]