我这边需要在存储过程定义两个变量,一个进行记录上次操作的值,另一个进行加恒值,使 update 操作的是一个区间的所有的数据。并且每次操作完毕,记录上次的操作值,下次定时计划调用的时候,在读取出来,然后相加恒值,继续update。
打开plsql,选择Procedures,进行新建。 CREATE OR REPLACE
procedure update_gps is
ROWNUM_BEGIN NUMBER(35);
ROWNUM_END NUMBER(35);
begin
SELECT NUMTEST INTO ROWNUM_BEGIN from TEST WHERE ROWNUM = 1;
ROWNUM_END := ROWNUM_BEGIN+10000;
dbms_output.put_line('ROWNUM_END = ' || ROWNUM_END);
UPDATE T_PLT_VEHICLE_LOCATION
SET LON = REGEXP_REPLACE ( REGEXP_REPLACE ( lon, '[^0-9]+', '' ), '(\d{3})(\d{1,6})?(.*)', '\1.\2' ),
LAT = REGEXP_REPLACE ( REGEXP_REPLACE ( lat, '[^0-9]+', '' ), '(\d{2})(\d{1,6})?(.*)', '\1.\2' )
WHERE
ROWNUM > ROWNUM_BEGIN and ROWNUM <= ROWNUM_END;
dbms_output.put_line('update 1 ');
commit;
UPDATE TEST set NUMTEST=ROWNUM_END WHERE ROWNUM = 1;
dbms_output.put_line('update 2 ');
commit;
end update_gps;
从上面的sql 可以看出,我这边定义了两个变量,分别是 ROWNUM_BEGIN 与 ROWNUM_END。不同的是,一个是sql赋值,一个是直接赋值。
进行编译-编译成功
进行debug 测试,测试成功
备注:这里我在测试的时候,本地会一直出现运行中状态,我后面使用的是debug 进行测试,测试成功。