2012-05-17 2 views
0

Я искал здесь и в Интернете для решения, но они просто приводят к другим ошибкам. Я слишком неопытен (первая сборка была в PHP, теперь мне нужно переместить ее в сохраненный процедура). У меня есть карта моего кампуса, и когда пользователь нажимает на здание, всплывает информационный пузырь, чтобы показать какую-то информацию и галерею изображений. Адрес картинки хранится в таблице, поэтому мне нужно, чтобы они возвращались в массив, чтобы я мог их пропустить. Вызов, чтобы получить список является:Передача массивов между процедурами

$.ajax({ //get the picture URLs, load into array 
     type: "post", 
     url: "video_tour.get_pics", 
     data: { pBldg_id: building 
     }, 
     error: function(xhr,thrownError) { alert("error get pics"); }, 
     success: function(data){ 
        $.each(data, function(index,obj) { 
         picArray[index] = obj.ADDRESS; 
        }); 
     } 
});//and ajax for pic load 

и вызываемая процедура:

procedure get_pics(pBldg_id int) is 
    type array_varchar is table of varchar2(2000) index by binary_integer; 

    array_of_pics array_varchar; 
    v_counter int := 0; 
begin 

for i in(select address from ucs.campus_pictures where building_id = pBldg_id and thumbnail = 1) loop 
    array_of_pics(v_counter) := i.address; 
    v_counter := v_counter + 1; 
end loop;    

end get_pics; 

Как я могу взять array_of_pics обратно на вызов AJAX?

+0

Возможно, вам придется изменить процедуру get_pics, поскольку процедуры не возвращают значение. Вероятно, вам нужна функция. – eaolson

ответ

0

Так это было не так сложно, как казалось, мне просто нужно напечатать данные, как это происходит, и добавить в ограничивающем характер:

for i in(select address from ucs.campus_pictures where building_id = pBldg_id and thumbnail = 1) loop 
htp.prn(i.address || ';'); 
end loop; 

и сделать массив в вызове Ajax :

$.ajax({ //get the picture URLs, load into array 
        type: "post", 
        url: "video_tour.get_pics", 
        data: { pBldg_id: building 
        }, 
        error: function(xhr,thrownError) { alert("error get pics"); }, 
        success: function(data){ 
         $.each(data.split(";"), function(index,obj) { 
            picArray[index] = obj; 
           }); 

        } 
      }); 

Спасибо, ребята, что нашли время, чтобы помочь!

0

Я предполагаю, что у вас есть промежуточное ПО (даже если это страница PHP), которая обрабатывает запросы, затем вызывает процедуру. Начиная с этого момента вы действительно хотите вернуть курсор (см. Пример ниже). В вашем промежуточном программном обеспечении вы перейдете к набору результатов, исходящему из вашего курсора.

create or replace function get_pics(bldg_id_in ucs.campus_pictures.building_id%TYPE) 
return sys_refcursor 
as 
ref_cursor sys_refcursor; 
begin 
    open ref_cursor for 
    select address from ucs.campus_pictures where building_id = bldg_id_in and thumbnail = 1; 
    return ref_cursor; 
end; 
+0

С этим не существует никакого базового кода PHP. Хранимые процедуры распечатывают html/javascript в браузере. Я едва знаком с курсорами, и я проверю это, когда буду там завтра - так как это jQuery, вызывающий процедуру, является курсором, что я хочу вернуть? или я не хочу распечатывать результаты с помощью курсора? Как он настроен (я не знаю, ясно ли, использует ли хранимые процедуры для записи html normal?) Называется процедурами для печати любых данных, которые требуется вызывающей процедуре для возвращаемых значений. Поэтому я думаю, что мне нужно, чтобы он вернулся в форме, которая может быть превращена в массив JS. – ini

+0

Вы написали, что хранимые процедуры печатают HTML/JavaScript в файл borwser. Это делается с использованием пакета HTP? –

+0

Да, htp.prn - это то, что мы используем. – ini

Смежные вопросы