SQL循环函数
DECLARE
i NUMBER := 100 ;–(定不定义都可)
begin
for i 0 …10 LOOP
insert into ucs.student(id,name,age) values(ucs.sequence.nextval,i,i);–批量造数据
end loop;
commit;
end;
创建sequence:
create sequence ucs.seqtest
minvalue 1 --增长最小值
maxvalue 999999 --增长最大值,也可以设置NOMAXvalue – 不设置最大值
start with 100000 --从101开始计数
increment by 1 --自增步长为1
cache 50 --设置缓存cache个序列,如果系统down掉了或者其它情况将会导致序列不连续,也可以设置为—NOCACHE防止跳号
cycle; --循环,当达到最大值时,不是从start with设置的值开始循环。而是从1开始循环
存储过程
CREATE OR REPLACE PROCEDURE UCS.pro_test(num IN Integer,c out Integer)
AS
d integer:=num;
e integer:=0;
begin
WHILE d>0 LOOP
d :=d-1;
e := e+1;
insert into ucs.student(id,name,age) values(ucs.sequence.nextval,e,e);
END LOOP;
commit; --异常处理
EXCEPTION
WHEN OTHERS THEN
BEGIN
ROLLBACK;
RAISE_APPLICATION_ERROR(-20002,‘执行异常:’ || SQLCODE || ‘],原始错误信息是[’ || SQLERRM || ‘].’);
END;
END;
调用:
DECLARE
num NUMBER := 2;
cNUMBER;
BEGIN
ucs.pro_test(num,c);
DBMS_OUTPUT.PUT_LINE(‘更新条数:’ || c);
END;
自定义函数:(不允许写DML语句)
CREATE OR REPLACE FUNCTION UCS.funcTest(param IN varchar)
RETURN varchar
IS
VS_YEAR_MONTH_DAY VARCHAR(8);
VS_SEQUENCE VARCHAR(12);
BEGIN
VS_YEAR_MONTH_DAY:=to_char(SYSDATE,‘yyyymmdd’);
IF param=‘FMS’ THEN
VS_SEQUENCE:=VS_YEAR_MONTH_DAY || ucs.seqtest;
END IF;
RETURN VS_SEQUENCE;
END;
调用:
- SELECT ucs.functest(‘FMS’) FROM sys.dual;
2)CALL ucs.functest(‘FMS’) ;