ORACLE随机从表中取一条数据作为函数返回值

需求是这样的:有一张经纬度表,需要从中随机取一条数据插入另一张表作为其中的两个字段。插入过程在存储过程中,所以需要函数返回值为经纬度数据对象。

首先,生成返回值对象POINT_OBJECT,包括经度纬度。

--生成经纬度
CREATE OR REPLACE TYPE POINT_OBJECT  AS OBJECT
( 
  LONGITUDE        VARCHAR2(128),
  LATITUDE         VARCHAR2(128)
);

函数POINT_FUNCTION的过程就是定义select... into... from table,from是随机抽取经纬度表中的一条。(没有参数的函数不要加括号,不要加括号,不要加括号)

CREATE OR REPLACE FUNCTION POINT_FUNCTION
RETURN POINT_OBJECT 
AS
RADOM_POINT POINT_OBJECT := POINT_OBJECT('','');
BEGIN
    SELECT LONGITUDE,LATITUDE 
    INTO RADOM_POINT.LONGITUDE,RADOM_POINT.LATITUDE 
    FROM (select LONGITUDE,LATITUDE from (select * from HEATMAPPOINT order by dbms_random.value) where rownum<=1) ;
    RETURN RADOM_POINT;
END;

SELECT POINT_FUNCTION().LONGITUDE FROM DUAL;

使用方法:在存储过程中定义一个POINT_OBJECT类型的变量radompoint,然后赋值radompoint := POINT_FUNCTION(); 取值为:radompoint.LATITUDE;radompoint.LONGITUDE

引用过程eg:

declare maxrecords constant int:=10000;
radompoint POINT_OBJECT;
i int :=1;
begin         
for i in 1..maxrecords loop
id := get_uuid;
radompoint := POINT_FUNCTION();
incident_time := get_date;
incident_disposal_id := get_uuid;
INSERT INTO INCIDENTINFORMATION
(INCIDENTINFORMATIONID,INCIDENTSTATEID,STARTTIME,ENDTIME,INCIDENTACTUALLYADDRESS,PROVINCE,CITY,LATITUDE,LONGITUDE,INCIDENTTYPEID,INCIDENTNUMBER,COMBINESTATE)
VALUES
(id,7,incident_time,null,'113','0201','020101',radompoint.LATITUDE,radompoint.LONGITUDE,'0120712',DBMS_RANDOM.STRING ('A', 11),0);
end loop; 
dbms_output.put_line(' 成功录入数据! '); 
commit;     end;

猜你喜欢

转载自www.cnblogs.com/benlcs/p/10158608.html