Oracle的存储过程写法。
程序员文章站
2022-04-06 18:49:37
...
create or replace procedure org_school_convert(--replace procedure:存储过程。org_school_convert:这里是存储过程的名称
IN_ORG_ID integer, --这里都是需要的条件
IN_ORG_TYPE integer,
IN_REGION_ID integer,
student out sys_refcursor --out这里是返回值
)
as
v_sql varchar2(4000);
begin --开始
if IN_ORG_TYPE=1 then --判断语句输入的值是否为1
dbms_output.put_line('将组织变为学校');
--更新org表的org_type=1
update base_organization set org_type=1,region_id=IN_REGION_ID where id= IN_ORG_ID;
commit;
--**学校
update base_school_list set data_flag=1,region_id=IN_REGION_ID where org_id= IN_ORG_ID;
commit;
-- 在学校表中添加一条记录
insert into base_school_list(school_name,region_id,org_id,create_date, data_flag)
select org_name,IN_REGION_ID,id,sysdate,1 from base_organization where data_flag=1
and not exists(select 1 from base_school_list where base_school_list.org_id=base_organization.id and base_school_list.data_flag=1 )
and id=IN_ORG_ID;
commit;
--先将原来的教师数据data_flag=1
update sch_teacher_list t set data_flag=1
-- select * from sch_teacher_list t
where exists( select 1 from base_school_list a
inner join base_organization org on org.id=a.org_id and org.data_flag=1
inner join base_login_user_info info on info.org_id=org.id and info.data_flag=1
where t.user_id=info.user_id and t.data_flag=1
and org.id=IN_ORG_ID
);
commit;
--将该组织下的用户复制一份教师表
insert into sch_teacher_list(school_id,user_id)
select a.id,info.user_id from base_school_list a
inner join base_organization org on org.id=a.org_id and org.data_flag=1
inner join base_login_user_info info on info.org_id=org.id and info.data_flag=1
where a.data_flag=1
and not exists(select 1 from sch_teacher_list t where t.user_id=info.user_id and t.data_flag=1)
and org.id=IN_ORG_ID;
commit;
else
dbms_output.put_line('将学校变为组织');
--更新org表的org_type=0
update base_organization set org_type=0,region_id=IN_REGION_ID where id= IN_ORG_ID;
commit;
--更新学校的data_flag=0
update base_school_list set data_flag=0 where org_id=IN_ORG_ID;
commit;
--将学校的用户信息data_flag=0
update sch_teacher_list t set data_flag=0
-- select * from sch_teacher_list t
where exists( select 1 from base_school_list a
inner join base_organization org on org.id=a.org_id and org.data_flag=1
inner join base_login_user_info info on info.org_id=org.id and info.data_flag=1
where t.user_id=info.user_id and t.data_flag=1
and org.id=IN_ORG_ID
);
commit;
end if;
--execute immediate v_sql3;
--dbms_output.put_line('org_id='||org_id);
end;
这里是具体语句,需要自行理解。要看Mybatis的存储过程使用可以去我的文章看看。
下一篇: WordPress中如何进行常规设置
推荐阅读
-
mssql server 存储过程里,bulk insert table from '路径+文件',路径固定,文件名不固定的实现方法
-
编程开发之--Oracle数据库--存储过程在out参数中使用光标(3)
-
编程开发之--Oracle数据库--存储过程和存储函数(2)
-
Oracle存储过程入门学习基本语法
-
Oracle存储过程之数据库中获取数据实例
-
用存储过程、GetRows()、抽取10万条数据的速度测试
-
为什么SQL2005在新建复制找不到存储过程提示错误:2812 的解决方法
-
参考sql2012存储过程写的统计所有用户表尺寸大小的示例
-
mysql存储过程之返回多个值的方法示例
-
解析:php调用MsSQL存储过程使用内置RETVAL获取过程中的return值