Oracle--存储过程学习进阶
例1:该存储过程是向xuesheng 表中插入一行数
create or replace procedure student_proc_no is
begin
insert into Student(id,name,C语言,软件工程) values (3, 'wangwu', 90, 90);
commit;
end student_proc_no;
例2:带游标的存储过程,遍历游标将数据存储到另一个表中
create or replace procedure Score --新增学分存储过程
is
begin
declare
cursor CourseCursor is --建立游标
select Id,
name,
score,
from wangou.Course;
c_row CourseCursor%rowtype;
begin
for c_row in CourseCursor loop 遍历上面建立的游标 ----插入对账单信息
insert into ScoreList
(
id,
CourseName,
score,
)
values
(s_ScoreList.Nextval,
c_row.name,
c_row.score
); end loop;
end;
End;
。
例3: 存储过程实例:该存储过程的功能是:查询Student表中Status状态等于0的数据,之后一一插入到StudentCourseList表中,每插入一条记录之后将状态改为1;其中插入的过程中需要根据游标中的数据查询到其他表中相关数据插入到StudentCourseList表中。
create or replace procedure StudentCoursePro --新增学生课程存储过程
is
TmpCourseId number(9);--变量
TmpCourseName varchar2(50);--变量
Tmpdirection int;--变量
begin
declare
cursor StudentCursor is --建立游标
select Id,
StudentCode,
substr(CourseCode, -5) as CourseCode,--截取查询到的字段,负数从最右边开始截取,5代表截取位数为
--5位。-5:代表从左右边开始向前(向左)截取5位数
Direction,
createtime,
Status
from wangou.Student
where Status = 0
for update of Status;
c_row StudentCursor%rowtype;
begin
for c_row in StudentCursor loop 遍历上面建立的游标
--查询课程信息
select id,
Name
into TmpCourseId,
TmpCourseName
from Course
where code = c_row.CourseCode;--c_row.字段:为表中某一行的该字段的值 --
if (c_row.direction='A') then --当direction等于‘A’时,Tmpdirection=1
Tmpdirection:=1;
else --当direction不等于‘A’时,Tmpdirection=2
Tmpdirection:=2;
end if; ----生成学生课程列表信息
insert into wangou.StudentCourseList--注意该表的ID为自动oracle的sequence序列号,因为该表是在另一个方案名下,
(--id, --无法引用到sequence,所以在另一个方案下提前建立了触发器,代码在文章末尾处给出
Name,
CourseID,
CouseName,
TearcherId,
direction,
date,
。
)
values
(--s_StudentCourseList.Nextval,
Name,TmpCourseID, TmpCourseName,
(select id from Tearcher where StudentID=c_row.ID),--查找老师信息
Tmpdirection,
to_date(c_row.createtime,'yyyy-mm-dd hh24:mi:ss'),--将createtime时间转换为需要的时间格式
。
。
); ----更新对账单.处理状态 = 1(已处理)。
update wangou.Student --wangou为方案名
set Status = 1
WHERE CURRENT OF StudentCursor;
end loop;
end;
End;
。
触发器代码:
该触发器的功能是:当有数据插入到StudentCourseList表中之前,为该表的ID(即“:new.id”)预先给个值,
值即为该表的序列号S_StudentCourseList.NEXTVAL
create or replace trigger StudentCourseListTri
before insert on StudentCourseList --当有数据插入StudentList表之前
for each row
declare
nextid NUMBER;--变量
begin
SELECT S_StudentCourseList.NEXTVAL
INTO nextid
FROM dual;
:new.id:=nextid;
end StudentCourseListTri;
Oracle--存储过程学习进阶的更多相关文章
- Oracle存储过程学习使用
存储过程创建语法: create or replace procedure 存储过程名(param1 in type,param2 out type) as 变量1 类型(值范围); 变量2 类型(值 ...
- ORACLE存储过程学习
存储过程 1 CREATE OR REPLACE PROCEDURE 存储过程名 2 IS 3 BEGIN 4 NULL; 5 END; 行1: CREATE OR REPLACE PROCEDURE ...
- Oracle 存储过程学习
转自:http://blog.chinaunix.net/uid-20495387-id-174394.html http://www.cnblogs.com/rootq/articles/11000 ...
- Oracle存储过程学习备忘
之前的项目使用存储过程很少,但在实际的项目中,存储过程的使用是必不可少的. 存储过程是一组为了完成特定功能的SQL 语句 集,经编译后存储在数据库中:存储过程创建后,一次编译在程序中可以多次调用,对安 ...
- Oracle 存储过程学习笔记
1.存储过程简单实例 CREATE OR REPLACE PROCEDURE 存储过程名称 (参数in,参数out) AS -- 变量声明,每个声明用分号结束.可以在声明的同时初始化 name ); ...
- Oracle存储过程学习笔记
SQL是一种语言! SQL是一种语言! SQL是一种语言! 个人理解:存储过程就相当于Java中的方法;声明变量区域就相当于java中的声明局部变量一样,只是放到一个指定区域定义了 一.先看一部分基础 ...
- oracle 存储过程学习感悟
1.跟大白话差不多 2.if...then.... else ....写的比较多 3.调用存储过程命令:execute procedure_name 4.调用存储函数命令:select '0' str ...
- oracle存储过程学习---包的概念
转自:http://www.iteye.com/topic/1111793 一.包的概念 类似于一个容器,能打包相应的Pl/SQL变量.常量.函数.过程.复合数据类型等元素到这个容器内.用来限制 ...
- Oracle RMAN 学习:演练进阶篇
Oracle RMAN 学习:演练进阶篇 5 Rman备份演练进阶篇 5.1 是否选择增量备份 Backup命令生成的备份集中只备份了那些使用了的数据块,备份集实际大小已经较目标数据库的数据文件小了很 ...
- 用java调用oracle存储过程总结(转)
//1.call+包名+存储过程名(传入.传出值用?) String str="{call SMSBUSINESS.deleteZhZMember(?,?,?)}"; //2.建立 ...
随机推荐
- WDCP安装常用组件(memcache、mysqli、PDO_MYSQL、mysql innodb、libmcrypt、php zip)的方法
为有更好的性能,也为更简洁的系统,一些不是常用或不是基本的功能,都将做为可选的安装组件需要用到的就安装 注意:如果安装时遇到 ./configure: Permission denied提示,很有可能 ...
- routeProvider
In a previous post about testing I mentioned that route resolves can make authoring unit tests for a ...
- 长理ACM 14-星期几(谌海军)
题目描述:编一个程序,已知今天是星期几,计算出n天后是星期几.要求使用枚举变量. 输入描述:输入为两个正整数,第一个数n(n<=6)表示今天是星期几,第二个数m(m<=1000),表示求m ...
- mysql一次添加多条记录
inisert into tabale (name,pwd) values ("jom","123"),("tom","123&q ...
- Python学习路程day6
shelve 模块 shelve模块是一个简单的k,v将内存数据通过文件持久化的模块,可以持久化任何pickle可支持的python数据格式 import shelve d = shelve.open ...
- hd oj2015
#include "stdio.h"int main(){ int n,m,k,num,i,sum=0; while(~scanf("%d%d",&n, ...
- 极客DIY:使用Arduino制作一块开源手表
1 – 引言 首先让我们看下这个项目要考虑到的问题: .)使用100%Arduino兼容性硬件 .)保证存储器足够大可以装下大量的稍后会扩展的新内容 .)电量最少够1天用 .)BLE既是中枢设备又是外 ...
- iOS 在UILabel显示不同的字体和颜色
转自:http://my.oschina.net/CarlHuang/blog/138363 在项目开发中,我们经常会遇到在这样一种情形:在一个UILabel 使用不同的颜色或不同的字体来体现字符串, ...
- BZOJ 1047 理想的正方形
单调队列的基本应用. #include<iostream> #include<cstdio> #include<cstring> #include<algor ...
- setuptools,pip,install,UnicodeDecodeError: 'ascii' codec can't decode byte.原因和解决方案
昨天重装Python2.7.6时,为了安装第三方库,我去下pip.为了装pip,又得先装 ez_setup.py.结果装ez_setup时,遇到了问题,报错: UnicodeDecodeError: ...