某次工作需要写一个存储过程,记录一下大概用法
注意点:变量的赋值,需要 变量名+类型,变量的赋值可以用 变量名:= ** 或者select id into 变量名 from 表名
create
or replace procedure insertUser
as
id VARCHAR(32); --如果不想创建过程,可以直接用DECLARE id VARCHAR(32);,会直接执行
begin
for person in (select * from T_PERSON) loop --开始循环 for 变量名 in (循环的语句) loop
if ( person.age>0) then --条件判断
select LOWER(rawtohex(sys_guid())) into id from dual; --给id赋值,select LOWER(rawtohex(sys_guid())) from dual; 这条语句会生成一个小写32位的uuid
insert into BIZ_USER( ** ) VALUES( **); --插入语句
end if; --结束条件 如果还有可以继续if end if;
end loop; --结束循环
commit;
end;
--执行
begin insertinsertUser();
end;
中间由于数据量很大出现了问题,就是显示age没有声明,语句可以执行几次是对的,再执行会出现这个问题,经查询发现是把临时表空间占满了。
然后用了最简单粗暴的方法,重启数据库就可以了,应该有更好的方法。
以下是Windows重启Oracle数据库。
1、关闭数据库:win+r,输入如下代码停止:
set ORACLE_SID=SID_Name,回车。
sqlplus /nolog
SQL> connect / as sysdba
SQL> shutdown immediate
SQL> exit
2、启动数据库:win+r,输入如下代码启动:
set ORACLE_SID=你的数据库SID名字
sqlplus /nolog
SQL> connect / as sysdba
SQL> startup
SQL> exit
--show pdbs;
--alter pluggable database all open;