在程序之间传递数组

时间:2012-05-17 21:57:50

标签: oracle stored-procedures

我在这里和网上搜索了一个解决方案,但是他们似乎只是导致了其他错误,我太缺乏经验了(第一次构建是在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调用?

2 个答案:

答案 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;
                              });

                     }
            });

谢谢你们花时间帮忙!