2016-06-21 57 views
0

我需要有OUT變量未與Oracle及Symfony2的

  • 我需要從存儲過程

  • 我有google了很多,但解決不了問題

  • 獲取JSON數據的工作存儲過程

源代碼

   $param1 = 'abc'; 

       $param2 = '79'; 

       $param3 = 'Y'; 

       $param4 = 121221; 


       $sql1='CALL web_demo.wwv_json_data.dashboard(:param1, :param2 , :param3, :param4,@p_json)'; 
       $qb = $em->getConnection()->prepare($sql1); 
       $qb->bindParam('param1', $param1, \PDO::PARAM_INPUT_OUTPUT, 4000); 

       $qb->bindParam('param2', $param2, \PDO::PARAM_INPUT_OUTPUT, 4000); 

       $qb->bindParam('param3', $param3, \PDO::PARAM_INPUT_OUTPUT, 1); 

       $qb->bindParam('param4', $param4, \PDO::PARAM_INPUT_OUTPUT, 4000); 

       $st=$qb->execute(); 
       $st->closeCursor(); 
       $stmt = $qb->query("SELECT @p_json as json"); 
       $result = $qb->fetchAll(PDO::FETCH_ASSOC); 

過程

 PROCEDURE dashboard 
     (p_customer_id IN VARCHAR2 DEFAULT NULL, p_user_id IN VARCHAR2 DEFAULT NULL, p_staff IN VARCHAR2 DEFAULT NULL,p_random IN VARCHAR2 DEFAULT NULL,out p_json clob) 

    END dashboard 

的Oracle SQL顯影劑代碼

 DECLARE 
    v clob; 
    BEGIN 
    web_demo.wwv_json_data.dashboard('abc','79','Y',121221,v); 
    dbms_output.put_line(v); 
    END; 

返回JSON

{"data":[{"open_log":46,"to_m":34,"to_clien":12,"to_m":0}]} 

錯誤

An exception occurred while executing 'CALL web_demo.wwv_json_data.dashboard(:param1, :param2 , :param3, :param4,@p_json)': 

    SQLSTATE[HY000]: General error: 936 OCIStmtExecute: ORA-00936: missing expression 
(ext\pdo_oci\oci_statement.c:148) 
  • 因爲我用GOOGLE搜索&發現OUT可以訪問遊標數據。

我需要

  • 我需要從存儲過程中獲取JSON數據。
  • IM accesing了可變這樣

      $stmt = $qb->query("SELECT @p_json as json"); 
          $result = $qb->fetchAll(PDO::FETCH_ASSOC); 
    
  • 任何人都可以幫助我如何通過Oracle和Symfony2中使用了可變的獲取數據。

回答

1

最後我長期鬥爭後得到了解決

代碼片段

        <?php 
            $userName = ""; $password = ""; $dtabasePort = "1521"; $serverName = "someip"; 


            $c = oci_connect($userName, $password, '(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = mtldb11gvm4)(PORT = 1521)) (CONNECT_DATA = (SERVICE_NAME =dbname) (SID =dbname)))'); 

            $sql = 'BEGIN web_demo.wwv_json_data.dashboard(:param1, :param2 , :param3, :param4,:param5); END;'; 

            $stmt = oci_parse($c,$sql); 


            $id; 
            oci_bind_by_name($stmt,":param1",$param1,32); 
            oci_bind_by_name($stmt,":param2",$param2,500); 
            oci_bind_by_name($stmt,":param3",$param3,32); 
            oci_bind_by_name($stmt,":param4",$param4,200); 
            oci_bind_by_name($stmt,":param5",$id,200); 
            // Explained in the next example... (use an empty value for now) 
            //$param5 = oci_new_collection($c,'LIST_OF_NUMBERS'); 
            //oci_bind_by_name($stmt,':param5',$param5,32,OCI_B_SQLT_NTY); 

            // Create a new lob descriptor object 


            // Execute the statement but do not commit 
            oci_execute($stmt, OCI_DEFAULT); 

            print_r($id); 

            // Everything OK so commit 
            oci_commit($c); 


            if (!$c) { 
            $m = oci_error(); 
            echo $m['message'], "\n"; 
            exit; 
            } 
            else { 
            print "Connected to Oracle!"; 
            } 
            print_r($c); 
            ?>