Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Sử dụng Oracle và PHP:Hoạt động trong SQL Developer nhưng kết quả tệp PHP ORA-00900:Tuyên bố không hợp lệ

Tôi nghĩ rằng tôi đã tìm ra điều đó. Có vẻ như cần tạo từ tập lệnh PL / SQL đó một thủ tục:

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

Sau đó chạy thủ tục đó trong cơ sở dữ liệu. Sau đó trong tệp PHP, tôi phải cấu trúc lại câu lệnh sql:

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

Và chức năng:

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. ORA-01461:có thể liên kết một giá trị LONG chỉ để chèn vào cột DÀI-Xảy ra khi truy vấn

  2. cd:-M:tùy chọn không hợp lệ

  3. Lệnh Oracle CREATE TABLE trong PL / SQL với 10 ví dụ

  4. Hibernate ID gia tăng oracle

  5. Tắt CAST AS để tối ưu hóa truy vấn trong Entity Framework