oracle select query с предложением where возвращает неполную запись при запуске с использованием скрипта php - PullRequest
0 голосов
/ 28 февраля 2020

У меня есть запрос sql, который прекрасно работает при непосредственном запуске в Oracle SQL разработчику, который показывает 3k + записей. Проблемы возникают, когда я запускаю его через скрипт php, он показывает только более 20 записей, пожалуйста, помогите! Кстати, в обоих запросах используются одни и те же значения для предложения WHERE, которое я также пытался использовать в порядке, но отображаются одинаковые результаты.

здесь мой запрос:

sql выполняется в php:

function getAllCOBDataList() 
{
            $branchcode = $_SESSION['branchcode'];
            $officeId = $_SESSION['officeid'];
            //$expenseFilter = $_SESSION['earmark-expenseCode'];
            $cob_data_list = array();

            $conn = persistentDBConnect();

            $query = "WITH CTE_TotalBalance AS (Select BUDGETID ,sum(TOTALCOST)"
                   . " as CURRENT_BALANCE from (Select BUDGETID, TOTALCOST from"
                   . " FARU.BEMM_DATA_COB"
                   . " Union all"
                   . " Select BUDGETID, EARMARKAMOUNT "
                   . " from FARU.BEMM_TRANS_EARMARKINGLIST)"
                   . " GROUP BY BUDGETID)"
                   . "SELECT"
                   . " A.FYEAR, A.BUDGETID, A.PERSPECTIVEID as perspective, A.FUNDTYPE, A.PARTICULAR, A.TOTALCOST,"
                   . " A.Q1UNITS, A.Q2UNITS, A.Q3UNITS, A.Q4UNITS,"
                   . " B.PERSPECTIVEID, B.PERSPECTIVEDESC,"
                   . " C.BPAID, C.BPADESC,"
                   . " D.INITIATIVEID, D.INITIATIVEDESC,"
                   . " E.STOBID, E.STOBDESC,"
                   . " F.TARGETID, F.TARGETDESC,"
                   . " G.OFFICEID, G.BRANCHCODE, G.PPACODE, G.PPADESC,"
                   . " H.SUBOFFICEID, H.SUBPPADESC,"
                   . " I.EXPCODE, I.EXPCODEDESC,"
                   . " J.EXPENSECLASS, J.EXPENSEDESC,"
                   . " K.CURRENT_BALANCE"
                   . " FROM"
                   . " FARU.BEMM_DATA_COB A"
                   . " INNER JOIN FARU.BEMM_LIB_PERSPECTIVE B ON A.PERSPECTIVEID = B.PERSPECTIVEID"
                   . " INNER JOIN FARU.BEMM_LIB_BPAS C ON A.BPAID = C.BPAID"
                   . " INNER JOIN FARU.BEMM_LIB_INITIATIVE D ON A.INITIATIVEID = D.INITIATIVEID"
                   . " INNER JOIN FARU.BEMM_LIB_STOB E ON A.STOBID = E.STOBID"
                   . " INNER JOIN FARU.BEMM_LIB_TARGET F ON A.TARGETID = F.TARGETID"
                   . " INNER JOIN FARU.BEMM_LIB_PPALIST G ON A.OFFICEID = G.OFFICEID"
                   . " INNER JOIN FARU.BEMM_LIB_SUBPPALIST H ON A.SUBOFFICEID = H.SUBOFFICEID"
                   . " INNER JOIN FARU.BEMM_LIB_EXPCODE I ON A.EXPENSECODE = I.EXPCODE"
                   . " INNER JOIN FARU.BEMM_LIB_EXPENSELIST J ON A.EXPENSECLASS = J.EXPENSECLASS"
                   . " INNER JOIN FARU.CTE_TotalBalance K ON A.BUDGETID = K.BUDGETID"
                   . " WHERE G.BRANCHCODE = '$branchcode'";
                  // . " WHERE G.OFFICEID = '$officeId'"
                   //. " Order by A.BUDGETID Asc";
            //echo $query;
            $stmt = oci_parse($conn, $query);
            $result =oci_execute($stmt);

            while($result = oci_fetch_assoc($stmt)){
                $cob_data_list[] = $result;
            }
            return $cob_data_list;


}

TIA!

1 Ответ

1 голос
/ 02 марта 2020

Убедитесь, что вы действительно подключаетесь к одному и тому же пользователю и БД в PHP и в SQL Developer (распространенная ошибка).

Попробуйте добавить несколько вызовов var_dump() и выполните запрос в командная строка PHP для проверки работоспособности.

Добавьте некоторую обработку ошибок, см. стр. 161 бесплатной книги Oracle The Underground PHP и Oracle Manual .

Вы почти наверняка должны использовать переменную связывания вместо " WHERE G.BRANCHCODE = '$branchcode'";, потому что это потенциальная большая дыра в безопасности. И повлияет на производительность и масштабируемость приложений. Читайте о oci_bind_by_name().

Выбирая много строк, вы можете настроить производительность с помощью oci_set_prefetch().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...