oracle的SQL循环函数、存储过程、自定义函数、sequence

4 篇文章 0 订阅

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;
调用:

  1. SELECT ucs.functest(‘FMS’) FROM sys.dual;
    2)CALL ucs.functest(‘FMS’) ;
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值