2012-11-02 6 views
0

이 간단한 설명 방법을 보여줍니다는 PHP와 젠드 DB로 번호 목록과 함께 오라클 저장 함수/프로 시저를 호출하는 방법을

  1. 전화를
  2. PHP 젠드 DB와 오라클 데이터베이스를 연결하기 위해 저장
  3. 젠드 DB와 절차/저장 기능은 실제 어레이 또는 저장 프로 시저/함수 입력 파라미터 같은 정수의 집합 (I은 쉼표로 구분 된 값의 문자열을 전달하지 않을 것이다)
  4. 을 행 합격 얻을 가자

    : 저장된 기능

(I 오라클 11.x의, PHP 5.x 및 젠드 프레임 워크 1.x에서 사용 주)의 결과.

는 오라클 목록 유형을 만듭니다

CREATE OR REPLACE TYPE NUMBER_LIST_TYPE IS TABLE OF NUMBER; 

는 저장 함수를 만듭니다

CREATE FUNCTION MY_STORED_FUNCTION(id_list in NUMBER_LIST_TYPE) RETURN NUMBER AS 
    lv_list_size number; 
BEGIN 
    select count(*) into lv_list_size from table(id_list); 
    RETURN lv_list_size; 
END MY_STORED_FUNCTION; 

는 PHP 파일을 만듭니다 :이 사람을 도울 수

<?php 
require_once 'Zend/Db.php'; 
require_once 'DataSource.php'; 

$db_config['host'] = 'khazgoroth'; 
$db_config['port'] = 1521; 
$db_config['username'] = 'thrall'; 
$db_config['password'] = 'chuchu'; 
$db_config['dbname'] = 'orgrimmar'; // see TNSNAMES.ORA 

$db = Zend_Db::factory('Oracle', $db_config); 

$conn = $db->getConnection(); 

$sql = 'BEGIN :r := MY_STORED_FUNCTION(:pmids); END;'; 

// Create an OCI-Collection object of NUMBER_LIST_TYPE 
$ids = oci_new_collection($conn, 'NUMBER_LIST_TYPE'); 

$id_array = array(1, 12, 67); 

// Append all IDs to the collection; 
foreach ($id_array as $id) { 
    $ids->append($id); 
} 

// create a statement and bind the parameters 
$stmt = new Zend_Db_Statement_Oracle($db, $sql); 
$stmt->bindParam(':pmids', $ids, SQLT_NTY); 
$stmt->bindParam(':r', $result, SQLT_INT); // this is the result of the Stored Function 

$stmt->execute(); 

print "Result: $result"; 
?> 

희망을.

답변

0

나는 Zend_Db가 그렇게 할 수 없다는 것을 두려워하지만 bindArray 메소드로 Zend_D 구현을 향상시킬 수 있습니다.

평범한 PHP에서는 http://php.net/manual/en/function.oci-bind-array-by-name.php을 사용하면 정말 훌륭하게 작동합니다. PHP 배열을 pl/sql 프로 시저에 직접 바인드하면됩니다.

+0

설명 (방법)은 Zend_Db와 oci_new_collection의 약간의 도움으로 가능하다는 설명이 있어야합니다. – gfjr