我在这里和网上搜索了一个解决方案,但是他们似乎只是导致了其他错误,我太缺乏经验了(第一次构建是在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 :(得分: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;
答案 1 :(得分: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;
});
}
});
谢谢你们花时间帮忙!