Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

Oracle और PHP का उपयोग करना:SQL डेवलपर में काम करता है लेकिन PHP फ़ाइल परिणाम ORA-00900:अमान्य कथन

मुझे लगता है कि मैंने इसका पता लगा लिया। ऐसा लगता है कि उस पीएल/एसक्यूएल स्क्रिप्ट से एक प्रक्रिया बनाने की जरूरत है:

CREATE OR REPLACE PROCEDURE getExamStatus(RC OUT SYS_REFCURSOR) AS
    exam_ids   VARCHAR2(255);
BEGIN
    SELECT
        LISTAGG(''''
                  || exam_id
                  || ''' AS \"'
                  || exam_name
                  || '\"',',') WITHIN GROUP(
            ORDER BY
                exam_id ASC
        )
    INTO exam_ids
    FROM
        exam;

    OPEN rc FOR 'SELECT
        *
               FROM
        (
            SELECT
                u.user_id,
                u.user_name,
                e.exam_id,
                eu.exam_date
            FROM
                users u
                LEFT JOIN exam_user eu ON u.user_id = eu.user_id
                LEFT JOIN exam e ON e.exam_id = eu.exam_id
            ORDER BY
                u.user_id
        )
            PIVOT ( MAX ( exam_date )
                FOR exam_id
                IN ( ' || EXAM_IDS || ' )
            )
    ORDER BY
        1';
END;
/

फिर उस प्रक्रिया को डेटाबेस में चलाएँ। उसके बाद PHP फ़ाइल में मुझे sql स्टेटमेंट को रिफैक्टर करना पड़ा:

$sql = "BEGIN getExamStatus(:rc); END;";

और समारोह:

function getSQLResult($sql, $conn) {
    $stmt = oci_parse($conn, $sql);

    if( $stmt === false ) {
        errorShutdown(__('...'), __('...'));
        die();
    } else {
        $rc = oci_new_cursor($conn);
        oci_bind_by_name($stmt, ':rc', $rc, -1, OCI_B_CURSOR);
        if(!oci_execute($stmt)) {
            return false;
            //return oci_error($stmt);
        }
        if(!oci_execute($rc)) {
            return false;
            //return oci_error($stmt);
        }
        $results = array();
        while (($row = oci_fetch_array($rc, OCI_ASSOC+OCI_RETURN_NULLS)) != false) {
            $results[] = $row;
        }
        oci_free_statement($stmt);
        oci_free_statement($rc);
        return $results;
    }
}



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle इंटरवल डे टू सेकेंड डेटाटाइप के लिए NHibernate मैपिंग

  2. कर्सर पैरामीटर के साथ पाइपलाइन फ़ंक्शन oracle

  3. SQL*Plus . का उपयोग करके बड़ा CLOB (1 MB) जेनरेट करें और डालें

  4. सबक्वेरी के साथ Oracle PIVOT क्लॉज का उदाहरण

  5. Oracle और Java में दिनांक में अंतर