valerijfrolov
@valerijfrolov

Казалось бы простой select, но Oracle задумался

Вчера утром довелось сделать некоторую простенькую аналитику. Задача была следующей. Взять данные из базы Oracle и из базы MySQL и сравнить их. Сразу хочу отметить, что по СУБД Oracle я далеко не специалист, но я, php и mysql знакомы уже очень давно. И нас можно назвать хорошими друзьями.

Так вот, уходя от лирики, хочу задать вопрос достопочтенной публике, почему нижеприведенный код наглухо подвесил базу oracle (т.е. до тех пор пока не были убиты сессии организованные OCI + php в Oracle эта СУБД вообще не могла выполнять никакие действия с данными).

$conn = oci_connect(DB_oralogin, DB_orapass, DB_oradatabase, «CL8MSWIN1251»);

$stid = oci_parse($conn, «select distinct

C.ID CID,

C.NAME CNAME,

get_conts_stcount(C.ID,PS.SEM) STCOUNT,

C.INYEAR,

PS.SEM,

F.ID FID,

F.NAME FNAME

from

CONTS C,

FACS F,

PLANBASE P,

PLANSPECS PS

where

C.ARCHIVE=0

and C.COMPANY=2198875

and C.FAC=F.ID

and P.CONTS=C.ID

and PS.PID=P.ID

and (PS.SEM=get_course(C.INYEAR,2011)*2-1)

order by FNAME desc»);

oci_execute($stid);

while (($row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS)) != false) {

$query = $this->db->query('SELECT DISTINCT

COUNT(DISTINCT uid_gid.uid) as counts,

uid_gid.gid,

uid_gid.adopted,

uid_gid.prefix

FROM

uid_gid

WHERE

uid_gid.prefix = '.htmlentities($row[«CID»], ENT_QUOTES, 'cp1251').' AND

uid_gid.adopted = 1 and

uid_gid.gid = 1');

foreach ($query->result() as $rows){

$counts = $rows->counts;

}

echo htmlentities($row[«FNAME»], ENT_QUOTES, 'cp1251').' '.htmlentities($row[«CNAME»], ENT_QUOTES, 'cp1251').' контингент: '.htmlentities($row[«STCOUNT»], ENT_QUOTES, 'cp1251').' зарегистрировано: '.$counts."

";

}

die();

тех. данные к вопросу:
select от оракла возвращает около 7000 строк.
  • Вопрос задан
  • 3334 просмотра
Пригласить эксперта
Ответы на вопрос 1
@ivs13
Убедитесь, что виноват именно запрос. Выполните его в sqlplus'е. Если отработает — виноват не оракл, а ваш пхп. Если не отработает, то нужно разбираться с запросом. Для начала упростите запрос, оставив простую выборку из одной таблицы без вызова хранимых процедур. Потом пошагово добавляйте в запрос связки с другими таблицами, вызовы хранимых процедур. На каком-то шаге зависнет — будете хоть знаять, в какую сторону копать дальше.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы