Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Menggunakan Oracle dan PHP:Bekerja di SQL Developer tetapi hasil file PHP ORA-00900:Pernyataan Tidak Valid

Saya pikir saya sudah mengetahuinya. Tampaknya perlu membuat prosedur dari skrip PL/SQL itu:

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

Kemudian jalankan prosedur itu di database. Setelah itu di file PHP saya harus refactor pernyataan sql:

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

Dan fungsinya:

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. Cara Menambah dan Menghapus tag xml dari data yang ada di dalam kolom xmltype di Oracle

  2. org.hibernate.Query .iterate() VS .getResultList() pembuatan kueri

  3. Apa perbedaan antara varchar dan varchar2 di Oracle?

  4. Perbedaan tanggal Oracle untuk mendapatkan jumlah tahun

  5. Bagaimana saya bisa secara otomatis membuka kunci tabel di Oracle setelah waktu tertentu?