示例:
--更改序列SEQ_YF_ZYFYMX 值为当前表主键最大值+100
declare
--变量声明
maxVal number;
seqVal number;
dVal number;
begin
--select into 语法,变量赋值
select max(jlxh) into maxVal from YF_ZYFYMX;
select SEQ_YF_ZYFYMX.nextval into seqVal from dual;
--逻辑控制语句 if() then... else...end if;
if (maxVal > seqVal) then
dVal := maxVal-seqVal+100; --变量赋值 :=
execute immediate 'alter sequence SEQ_YF_ZYFYMX increment by '||dVal; --动态执行语句(可以用:占位符加using实现变量替换)
select SEQ_YF_ZYFYMX.nextval into seqVal from dual;
execute immediate 'alter sequence SEQ_YF_ZYFYMX increment by 1';
end if;
end;
一个坑:
对于select语句,放在execute immediate后面并不会执行!(只有涉及数据/结构更改的才会执行),想执行select 语句,在代码块中只能select into 用一个变量来装载
常用:
打印输出 DBMS_OUTPUT.PUT_LINE('Hello, ' || v_name);
其他较复杂的语法:
循环 loop
游标 cursor
自定义数据类型等