当前位置:文档之家› 存储过程

存储过程

存储过程
存储过程

用了两年Oracle还没写过存储过程,真是十分惭愧,从今天开始学习Oracle存储过程,完全零起点,争取每日一篇学习笔记,可能开始认识的不全面甚至有错误,但坚持下来一定会有收获。

1. 建立一个存储过程

create or replace PROCEDURE firstPro

IS

BEGIN

DBMS_OUTPUT.PUT_LINE('Hello World!');

END;

其中IS关键字替换为AS关键字结果不会出现任何变化,大多认为他们是等同的,但也有一种说法解释为:一般PACKAGE 或者单独的FUNCTION, PROCEDURE 都用AS,PACKAGE 中的FUNCTION, PROCEDURE 用IS。

DBMS_OUTPUT.PUT_LINE('Hello World!'); 是一个输出语句。

2. 执行存储过程

Oracle返回结果需要使用包,那么存储过程似乎只能在数据库中执行或被其他调用,编程语言似乎并不能直接调用存储过程返回数据,是否能执行他有待研究。那么首先在数库中执行上面的存储过程。

BEGIN

FirstPro();//注意有括号

END;

运行后输出Hello World。

3. 下面写一个稍复杂的存储过程,他定义了变量,进行了运算,输出一个count操作所用的时间。

CREATE OR REPLACE procedure testtime

is

n_start number;

n_end number;

samplenum number;

use_time number;

begin

n_start:=dbms_utility.get_time;

select count(*) into samplenum from emp;

n_end:=dbms_utility.get_time;

use_time:= n_end - n_start;

dbms_output.put_line('This statement cost '|| use_time ||' miliseconds');

end;

4. 下面试验下怎么能给存储过程赋值

CREATE OR REPLACE procedure test(num in number) is

begin

dbms_output.put_line('The input numer is:' || num);

end ;

今天的就到这,明天将调用这个存储过程,并试验一写对表的操作。

1. 首先把昨天带参的存储过程执行一下

declare

n number;

begin

n:=1;

test(num=>n);

end;

注;在调用存储过程时,=>前面的变量为存储过程的形参且必须于存储过程中定义的一致,而=>后的参数为实际参数。当然也不可以不定义变量保存实参,可写成如下形式:Begin

test(num=>1);

end;

这样我们就能更清楚得看到给存储过程赋值的格式了。后面打算用存储过程操作一些表,按照增删改查的顺序依次建立存储过程。

2. 插入

CREATE OR REPLACE

procedure proc_test_Insert_Single(e_no in number,e_name in varchar ,s in varchar,d in varchar)

as

begin

insert into emp (emp_id,emp_name,salary,birthday) values (e_no,e_name,s,d);

end;

调用:

DECLARE

i NUMBER;

n varchar(5);

s varchar(11);

d varchar(10);

BEGIN

i:=10;

n := 'text11';

s:='3998';

d:='1998-02-02';

PROc_TEST_Insert_single(e_no => i,e_name=>n,s=>s,d=>d);

END;

注:调用存储过程声明varchar时,必须限定长度,即斜体的部分不能少。同时如果给变量赋值时大于限定的长度了,则会提示ORA-06502: PL/SQL: 数字或值错误: 字符串缓冲区太小。

3.更新

create or replace procedure proc_test_update_Single(e_no in number,s in varchar)

as

begin

UPDATE emp set salary =s where emp_id=e_no;

end;

调用:

DECLARE

n NUMBER;

s varchar(11);

BEGIN

n := 2;

s:=3998;

PROc_TEST_UPdate_single(e_no => n,s=>s);

END;

4. 号外,今天在开发过程中正好有个数据库更新操作可用存储过程实现,顺便练习一下,需求是将一个表中的ID字段,查出来更新到另一个表中,两个表通过b_bs和b_kgh关联。存储过程如下:

create or replace procedure update_yygzdbid

as

bs varchar(20);

kgh varchar(20);

bid number;

cursor c_db is select b_id,b_bs,b_kgh from pmdcdb;

begin

for temp in c_db loop

update yygz_db set b_id= temp.b_id where g_bs=temp.b_bs and g_bh=temp.b_kgh;

end loop;

end;

运行这个存储过程:

Begin

update_yygzdbid();

end;

说明:

(1).在没有参数的存储过程定义时存储过程的名称不需要括号,写成update_yygzdbid()是错误的,

(2). cursor c_db是定义一个游标,获得查询语句的结果集,

(3). For temp in c_bd loop

Begin

End;

End loop

是循环游标,其形式类似于C#中的foreach, 获得字段:temp.b_id。

5. 查询

最后我们做一个查询的存储过程,能够返回一个值,注意不是结果集,结果集是明天的目标。

CREATE OR REPLACE

procedure proc_test_Select_Single(t in varchar,r out varchar )

as

begin

select salary into r from emp where emp_name=t;

end;

这个存储过程使用了2个参数,并分别出现了IN和OUT,in代表输入,out用于输出,从下面的语句也可以看到salary写入到变量r中了,这个r我们可以在调用存储过程后得到。

这时编译后会出现一个Warning(1,48): PLW-07203: 使用NOCOPY 编译器提示可能对参数'R' 有所帮助,那么nocopy是什么呢,nocopy主要是针对in|out record/index-by table/varray/varchar2提高效率使用的, 对于number使用nocopy与否基本没有影响.所以在'enable:performance'情况下不会对number提示warning.

我们把第一行改为:procedure proc_test_Select_Single(t in varchar,r out nocopy varchar ) 现在即使对in的varchar没有使用nocopy也不会提示警告,

DECLARE

T varchar2(4);

R V ARCHAR2(4);

BEGIN

T := 'zz';

PROC_TEST_SELECT_SINGLE(T => T,R => R );

DBMS_OUTPUT.PUT_LINE('R = ' || R);

END;

运行后即可在输出中看到结果了。

三、

1. 今天我们首先写一个涨工资的存储过程,给每个低于5k工资的人涨点钱。

CREATE OR REPLACE PROCEDURE p_test(forRaise in number)

as

begin

for v_emp in (select * from emp) loop

if(v_emp.salary<'5000') then

update emp set salary =(v_emp.salary+forRaise) where emp_id=v_emp.emp_id;

end if;

end loop;

end;

调用:

DECLARE

FORRAISE NUMBER;

BEGIN

FORRAISE :=1;

P_TEST(FORRAISE => FORRAISE);

END;

这里要注意两个地方:

(1)循环中begin和end不是必须的

(2)这里增加了if语句,其格式比较简单就不细说了。

(3)这里没有定义游标,在游标的位置直接用select语句代替了。

2.这里顺便介绍下另外一种循环,while循环,实现同样的功能

CREATE OR REPLACE PROCEDURE p_test(forRaise in number)

as

cursor c is select * from emp;

v_row emp%rowtype;

begin

open c;

fetch c into v_row;

while c%found Loop

if(v_row.salary<'5000') then

update emp set salary =(v_row.salary+forRaise) where emp_id=v_row.emp_id;

end if;

fetch c into v_row;

end loop;

close c;

end;

说明:

(1)这里需要定义一个游标,还要定义一个emp%rowtype类型的变量,%前面是表名,后面表示这个表的一行,

(2)在使用游标前还要显示的打开游标,并将其赋值到row中,使用后关闭游标。(3)C%found表示只有row中有值的时候才会进行循环。

(4)经过对比发现于while循环相比,for循环更像是C#中的foreach,使用起来方便很多。

(5)另从9i开始提供的动态游标类型sys_refcursor,以前的版本必须要先创建一个ref cursor的类型,现在多个

3. 现在我们使用程序调用下涨工资的存储过程,这个存储过程是没有返回值的。OracleConnection conn = new OracleConnection(); //创建一个新连接

conn.ConnectionString = "Data Source='ds';user id='id ';password='pwd';"; OracleCommand cmd = new OracleCommand("P_TEST", conn);

https://www.doczj.com/doc/0d7669972.html,mandType = CommandType.StoredProcedure;

OracleParameter p1 = new OracleParameter("forRaise", OracleType.UInt32);

p1.Value = 1;

p1.Direction = System.Data.ParameterDirection.Input;

cmd.Parameters.Add(p1);

conn.Open();

int r=cmd.ExecuteNonQuery();

conn.Close();

这样我们就可以给员工涨工资了,说明:

(1)虽然给多个人涨了公司,但r的值是1,他只调用了1个存储过程,或者说受影响的只是1个。

(2)参数P1的名字必须和存储过程中的一样否则会提示:调用'P_TEST' 时参数个数或类型错误。

4. 现在我们试着从存储过程中得到点结果吧,我先看看我给几个人涨了工资,我每个月一共要多付多少钱了。

改动存储过程:

CREATE OR REPLACE PROCEDURE p_test(forRaise in number,res out number)

is

begin

res:=0;

for v_emp in (select * from emp) loop

if(v_emp.salary<'4000') then

update emp set salary =(v_emp.salary+forRaise) where emp_id=v_emp.emp_id;

res:=res+1;

end if;

end loop;

end;

增加了一个out 的number型,记录改动的次数。然后相应的调整C#程序,获得这个改动的次数。

OracleCommand cmd = new OracleCommand("P_TEST", conn);

https://www.doczj.com/doc/0d7669972.html,mandType = CommandType.StoredProcedure;

OracleParameter p1 = new OracleParameter("forRaise", OracleType.UInt32);

p1.Value = 4;

p1.Direction = System.Data.ParameterDirection.Input;

OracleParameter p2 = new OracleParameter("res", OracleType.UInt32);

p2.Value = 10;

p2.Direction = System.Data.ParameterDirection.Output;

cmd.Parameters.Add(p1);

cmd.Parameters.Add(p2);

conn.Open();

int r=cmd.ExecuteNonQuery();

conn.Close();

MessageBox.Show(“你已经给:”+p2.Value.ToString()+“人涨了工资”);

好了,今天就到这,下次返回数据集。

Oracle使用存储过程返回结果集必须使用包,包包括包头和包体两部分,包头是定义部分包体是具体的实现

包头:

CREATE OR REPLACE

PACKAGE pkg_test_select_mul

AS

TYPE myrctype IS REF CURSOR;

PROCEDURE proc(s number, res OUT myrctype);

END pkg_test_select_mul;

这里定义了个一个游标和一个存储过程。

包体:

CREATE OR REPLACE

PACKAGE BODY "PKG_TEST_SELECT_MUL" AS

PROCEDURE proc(s in number,res OUT myrctype)

IS

BEGIN

OPEN res FOR Select emp_id,emp_Name, salary,birthday From emp where salary> s;

END proc;

END PKG_TEST_SELECT_MUL;

这里实现里包头中定义的存储过程,实现了查询工资超过一定数额的人的信息,而游标则不用重新定义了,且存储过程中的参数名必须和定义中的一致。下面我们看一下C#的调用部分。

OracleConnection conn = new OracleConnection(); //创建一个新连接

conn.ConnectionString = "Data Source='" + "MyTest" + "';user id='" + "azkaser" + "';password='" + "sti" + "';"; //写连接串

OracleCommand cmd = new OracleCommand("PKG_TEST_SELECT_MUL.proc", conn);

https://www.doczj.com/doc/0d7669972.html,mandType = CommandType.StoredProcedure;

OracleParameter p1 = new OracleParameter("s", OracleType.Number);

p1.Value = 4000;

p1.Direction = ParameterDirection.Input;

OracleParameter p2 = new OracleParameter("res", OracleType.Cursor);

p2.Direction = ParameterDirection.Output;

cmd.Parameters.Add(p1);

cmd.Parameters.Add(p2);

conn.Open();

OracleDataReader myReader = cmd.ExecuteReader();

while (myReader.Read())

{

MessageBox.Show(myReader.GetString(1));

}

conn.Close();

程序将得到的结果存放在OracleDataReader的对象中。

到此简单的Oracle存储过程操作就此就全部完成了,程序写的很随便,目的就是实现功能,将来有时间会进一步

简单的oracle存储过程示例

-- 创建无参procedure:

drop procedure proc_test

create or replace procedure proc_test

is

testvalue varchar2(40);

begin

select user_name into testvalue from user_info where user_id = 1001;

dbms_output.put_line(testvalue);

end proc_test;

/

begin

proc_test;

end;

-- 创建输入参procedure:

drop procedure insert_student

create or replace procedure insert_student

(

user_id Number,user_name varchar2,user_pass varchar2

)

as

begin

insert into student values(user_id,user_name,user_pass);

end insert_student;

begin

insert_student(1,'aaa','bbb');

commit;

end;

drop procedure proc_test1

create or replace procedure proc_test1

(

invalue in Integer

)

as

testvalue varchar2(40);

begin

select user_name into testvalue from user_info where user_id = invalue; dbms_output.put_line(testvalue);

end proc_test1;

/

declare

parameter Integer := 1001;

begin

proc_test1(parameter);

end;

-- 创建输出参procedure:

drop procedure proc_test2

create or replace procedure proc_test2

(

invalue out varchar2

)

as

begin

select user_name into invalue from user_info where user_id = 1001;

end proc_test2;

/

declare

parameter varchar2(20);

begin

proc_test2(parameter);

dbms_output.put_line(parameter);

end;

--既有输入,又有输出

create or replace procedure proc_test3

(

invalue in Integer,outvalue out varchar2

)

as

begin

select user_name into outvalue from user_info where user_id = invalue; end proc_test3;

/

declare

parameter Integer := 1001;

parameter1 varchar2(20);

begin

proc_test3(parameter,parameter1);

dbms_output.put_line(parameter1);

end;

oracle函数调用存储过程

1、无参数存储过程的调用

--创建无参存储过程

CREATE OR REPLACE FUNCTION stu_proc RETURN VARCHAR2 IS --声明语句段

v_name varchar2(20);

BEGIN

--执行语句段

SELECT o.sname INTO v_name FROM student o where o.id=1;

RETURN v_name;

END;

--调用无参存储过程

DECLARE

BEGIN

DBMS_OUTPUT.put_line('在PL/SQL中打印的结果:'||stu_proc);

END;

2、入参存储过程的调用

--创建入参存储过程

CREATE OR REPLACE FUNCTION stu_proc(v_id IN NUMBER) RETURN V ARCHAR2 IS --声明语句段

v_name varchar2(20);

BEGIN

--执行语句段

SELECT o.sname INTO v_name FROM student o where o.id=v_id;

RETURN v_name;

END;

--调用入参存储过程

DECLARE

BEGIN

DBMS_OUTPUT.put_line('在PL/SQL中打印的结果:'||stu_proc(1));

END;

3、出参存储过程的调用

--创建出参存储过程

CREATE OR REPLACE FUNCTION stu_proc(v_name OUT V ARCHAR2) RETURN V ARCHAR2 IS

BEGIN

--执行语句段

SELECT o.sname INTO v_name FROM student o where o.id=2;

RETURN v_name;

END;

--调用出参存储过程

DECLARE

v_name student.sname%type;

BEGIN

DBMS_OUTPUT.put_line('在PL/SQL中打印的结果:'||stu_proc(v_name));

END;

4、出入参存储过程的调用

--创建出入参存储过程

CREATE OR REPLACE FUNCTION stu_proc(v_id IN NUMBER, v_name OUT V ARCHAR2) RETURN V ARCHAR2 IS

BEGIN

--执行语句段

SELECT o.sname INTO v_name FROM student o where o.id=v_id;

RETURN v_name;

END;

--调用出入参存储过程

DECLARE

v_name V ARCHAR2(20);

BEGIN

DBMS_OUTPUT.put_line('在PL/SQL中打印的结果:'||stu_proc(1, v_name));

END;

关于游标if,for 的例子

create or replace procedure peace_if

is

cursor var_c is select * from grade;

begin

for temp in var_c loop

if temp.course_name = 'OS' then

dbms_output.put_line('Stu_name = '||temp.stu_name);

elsif temp.course_name = 'DB' then

dbms_output.put_line('DB');

else

dbms_output.put_line('feng la feng la ');

end if;

end loop;

end;

---关于游标for,case 的例子1 create or replace procedure peace_case1 is

cursor var_c is select * from test_case; begin

for temp in var_c loop

case temp.vol

when 1 then

dbms_output.put_line('haha1');

when 2 then

dbms_output.put_line('haha2');

when 3 then

dbms_output.put_line('haha3');

when 4 then

dbms_output.put_line('haha4');

else

dbms_output.put_line('qita');

end case ;

end loop;

end;

---关于游标for,case 的例子2 create or replace procedure peace_case2 is

cursor var_c is select * from test_case; begin

for temp in var_c loop

case

when temp.vol=1 then

dbms_output.put_line('haha1');

when temp.vol=2 then

dbms_output.put_line('haha2');

when temp.vol=3 then

dbms_output.put_line('haha3');

when temp.vol=4 then

dbms_output.put_line('haha4');

else

dbms_output.put_line('qita');

end case ;

end loop;

end;

---关于for 循环的例子

create or replace procedure peace_for

is

sum1 number :=0;

temp varchar2(500);

begin

for i in 1..9 loop

temp := '';

for j in 1 .. i

loop

sum1 := i * j;

temp := temp||to_char(i) || ' * ' ||to_char(j) ||' = ' ||to_char(sum1) ||' '; end loop;

dbms_output.put_line(temp );

end loop;

end;

---关于loop循环的例子

create or replace procedure peace_loop

is

sum1 number := 0;

temp number :=0 ;

begin

loop

exit when temp >= 10 ;

sum1 := sum1+temp;

temp := temp +1;

end loop;

dbms_output.put_line(sum1 );

end;

---关于游标和loop循环的例子

create or replace procedure loop_cur

is

stu_name varchar2(100);

course_name varchar2(100);

cursor var_cur is select * from grade ;

begin

open var_cur;

loop

fetch var_cur into stu_name,course_name;

exit when var_cur%notfound;

dbms_output.put_line(stu_name|| course_name);

end loop;

close var_cur;

end;

---关于异常处理的例子

create or replace procedure peace_exp(in1 in varchar2)

is

c_n varchar2(100);

begin

select course_name into c_n from grade where stu_name = in1; dbms_output.put_line(c_n);

exception

when no_data_found

then

dbms_output.put_line('try');

when TOO_MANY_ROWS

then

dbms_output.put_line('more');

end;

---关于异常处理的例子2

create or replace procedure peace_insert ( c_n in varchar2)

is

error EXCEPTION;

begin

if c_n = 'OK'

then

insert into course (course_name) values (c_n);

elsif c_n = 'NG' then

insert into course (course_name) values (c_n);

raise error;

else

Dbms_Output.put_line('c_n' || c_n);

end if;

commit;

exception

when error then

rollback;

Dbms_Output.put_line('ERRO');

end;

---关于包的例子定义包

create or replace package peace_pkg

as

function test1(in1 in varchar2)

return number;

procedure test2 (in2 in varchar2);

end peace_pkg;

---关于包的例子定义包体

create or replace package body peace_pkg

as

function test1(in1 in varchar2)

return number

as

temp number;

begin

temp := 0;

return temp;

end;

procedure test2 (in2 in varchar2)

is

begin

dbms_output.put_line(in2);

end;

end peace_pkg;

表和表之间的关系

一对一(一对多的特例)

一对多(外键在多的那方,去关联一那边的主键) 多对多(一对多,多对一) 电视--观众

中间表(两张表的主键)

oracle统计分析信息拷贝介绍

数据库统计分析信息拷贝介绍 1.数据库统计分析简介 统计分析主要包括产生表及索引的统计信息。表的统计信息主要包括表的行数,每行的平均长度(字节),空闲块,统计时间等信息;索引的统计信息主要包括行数、层数、叶块数、统计时间等信息。另外ORACLE还可以统计列及数据不对称信息。 ORACLE执行成本分析时首先取出所应用表及索引的统计数据进行分析,其中数据行数是一个重要的参数,因为ORACLE在分析表大小时行数为主要参数,如果进行两个表联合时,ORACLE会通过分析表的大小,决定应用小表进行全表查询,而大表执行联合查询,这种性能明显高于先大表进行全表扫描。索引的统计信息对分析也产生比较大的影响,如ORACLE 通过统计可以分析产生多个索引的优先级及索引的实用性来确定最优的索引策略。ORACLE 还可以统计列及数据对称信息以产生更精确的分析。 dbms_stats能良好地估计统计数据(尤其是针对较大的分区表),并能获得更好的统计结果,最终制定出速度更快的SQL执行计划。 2.存储过程解析 2.1DBMS_STATS.GATHER_TABLE_STATS介绍 DBMS_STATS.GATHER_TABLE_STATS功能为:统计表、列、索引的统计信息。DBMS_STATS.GATHER_TABLE_STATS的语法如下: DBMS_STATS.GATHER_TABLE_STATS ( ownname VARCHAR2, tabname VARCHAR2, partname VARCHAR2, estimate_percent NUMBER, block_sample BOOLEAN, method_opt VARCHAR2,

Oracle存储过程及块编程基础经典案例

Oracle存储过程及块编程基础案例 pl/sql(procedure language/sql:过程语言)编程是oracle的精髓之所在。跑得慢: 提高应用程序的运行性能,提高效率。 1.作为存储过程处理:模块化的设计思想(分页过程,订单的过程,转账的过程。) 2.优化sql做的最简。 3.减少网络传输量:java(sql)--》oracle,调用的这个数据库不在同一个机器上,就需要网络传输,每个sql语句都要传到数据库所在的机器上去,所以执行效率就会变得慢下来。 案例1: 编写一个存储过程该过程可以向某张表添加记录。 1.建表:create table mytest(name varchar2(30),passwd varchar2(30)); 2.建过程: create or replace procedure sp_p1 is begin insert into mytest values('xxx','m123'); end; 3.调用该过程:exec 过程名 注:在一局中添加replace:表示如果有sp_prol,就替换。如何查看错误信息:show error; 调用该过程:exec 过程名;或者call 过程名。 2.编写一个存储过程该过程可以删除某表记录。 create or replace procedure sp_pro1 is begin delete from mytest where name='xxx'; end; 这里需要引入一个快的概念,块(编程):块中可以包含过程,函数,触发器,包等。 块结构:定义部分,执行部分,例外处理部分;decrear:(可选),定义部分常量,变量,游标,例外,复杂数据类型。begin(必选)执行部分即要执行的pl/sql 语句;exception:(可选)例外处理部分即处理运行的各种错误。End结束; 案例2:输出hello begin dbms_output.put_line('hello'); end;

sap存储过程

SBO中的一个极具震撼力的的流程控制功能详细分析 在我开发的项目过程中,许多客户和顾问向我提出了许许多多的功能需求。但我在分析研究了这些需求后发现许多的需求我们顾问均可以解决。尤其是流程控制方面的需求。我把这方面的一些粗浅看法整理出来,供大家分享。 一、各种顾问在项目实施过程中出现过的看是需要研发解决的需求 1、如何控制不同的销售人员只能修改自己管理的客户的数据? 2、如何控制不同的销售人员只能录入修改自己的销售订单? 3、如何给sbo的任何单据(我这里强调任何单据,包括销售订单,销售发货单、发票、采购订单、采购收货单、采购发票、财务凭证、库存转储等等)加上自己的逻辑验证控制(例如不填某一个字段不用许sbo添加到数据库) 4、如何在各种单据或主数据添加修改过程中加上自己想要的功能? 以前这些需求一般都是顾问要求研发人员来参与协同工作来解决。我们现在要讨论的就是这些问题统统不再研发,顾问可轻松搞定。当然这要求顾问要具备一些基础知识。 二、顾问要解决这些问题要具备的基础知识 1、sql的知识。我一直认为,一个ERP软件顾问高手对SQL必须的基本素质。他可以让你随心所欲从这个充满金矿的ERP数据海洋里找到你想要的金子。我认为有志于成为ERP软件顾问高手的朋友在此付出一点时间和金钱是绝对值得的!它是打开我们理解ERP软件内核的金钥匙,也是会让我们终生受益的一种技能。无论我们从事的是哪一个ERP系统的顾问工作! 2、SBO对象的概念与规则。 当然,我觉得您在读这篇杂论前要有坚持读下去的意志。尽管这好像是有点枯燥乏味。但这点乏味的知识会给您带来无穷的想象力! SBO的DI对象,针对顾问通俗点简单点说就像物料主数据、客户主数据、销售订单、采购订单等等这些SBO里的东东。他们在SBO系统里都有一个编号,就像我们都有一个名字一样用于唯一识别。例如物料主数据的编号是:4。具体清单如下: Member Value oChartOfAccounts 1 oBusinessPartners 2 oBanks 3 oItems 4 oVatGroups 5 oPriceLists 6 oSpecialPrices 7 oItemProperties 8 oUsers 12 oInvoices 13 oCreditNotes 14 oDeliveryNotes 15 oReturns 16 oOrders 17 oPurchaseInvoices 18 oPurchaseCreditNotes 19 oPurchaseDeliveryNotes 20

C#调用存储过程简单完整例子讲解

C#调用存储过程简单完整例子https://www.doczj.com/doc/0d7669972.html,/itblog/article/details/752869 创建存储过程 Create Proc dbo.存储过程名 存储过程参数 AS 执行语句 RETURN 执行存储过程 GO DECLARE @iRet INT, @PKDisp VARCHAR(20) SET @iRet = '1' Select @iRet = CASE WHEN @PKDisp = '一' THEN 1 WHEN @PKDisp = '二' THEN 2 WHEN @PKDisp = '三' THEN 3 WHEN @PKDisp = '四' THEN 4 WHEN @PKDisp = '五' THEN 5 ELSE 100 END DECLARE @i INT SET @i = 1 WHILE @i<10 BEGIN set @i=@i+1 PRINT @i END DECLARE @d INT set @d = 1 IF @d = 1 BEGIN -- 打印 PRINT '正确' END ELSE BEGIN PRINT '错误' END

CREATE PROC P_TEST @Name VARCHAR(20), @Rowcount INT OUTPUT AS BEGIN SELECT * FROM T_Customer WHERE NAME=@Name SET @Rowcount=@@ROWCOUNT END GO ---------------------------------------------------------------------------------------- --存储过程调用如下: ---------------------------------------------------------------------------------------- DECLARE @i INT EXEC P_TEST 'A',@i OUTPUT SELECT @i --结果 /* Name Address Tel ---------- ---------- -------------------- A Address Telphone (所影响的行数为 1 行) ----------- 1 (所影响的行数为 1 行) */ ---------------------------------------------------------------------------------------- --DotNet 部分(C#) --WebConfig 文件: ---------------------------------------------------------------------------------------- ......

实验一 Power Designer 入门

实验一Power Designer 入门 (实验估计时间:90分钟) 一、背景知识 PowerDesigner(http://www.sybase.com/powerdesigner)最初由Powersoft 公司开发,后来为S y b a s e 公司并购。从1 9 8 9 年到2 0 0 3 年的十几年间,PowerDesigner 经历了巨大的变化,从一个单一数据库设计工具发展为一个全面的数据库设计和应用开发的建模软件。PowerDesigner 面向数据分析、设计和实现,集成了UML(统一建模语言)和数据建模的CASE 工具。它不仅可以用于系统设计和开发的不同阶段(即系统需求分析、对象分析、对象设计以及数据库设计和程序框架设计),绘制系统的数据流程图DFD 和E-R 图,以及生成物理的建表程序、存储过程与触发器框架等,也可以满足管理、系统设计、开发等相关人员的使用。 PowerDesigner 包含4 个模型,即业务处理模型(BPM)、概念数据模型( C D M )、物理数据模型( P D M )和面向对象模型( O O M )。这4 个模型覆盖了软件开发生命周期的各个阶段。在软件开发周期中,首先进行的是需求分析,并完成系统的概要设计:系统分析员可以利用B P M 画出业务流程图,利用O O M 和C D M 设计出系统的逻辑模型:然后进行系统的详细设计,利用OOM 完成系统的设计模型,并利用PDM完成数据库的详细设计,最后,根据O OM 生成的源代码框架进入编码阶段。 1.PowerDesigner 的特性 建模工具的重点曾经完全放在数据建模这一个方面,而随着需求的不断提高,商业流程建模和UML 已经成为软件开发不可缺少的部分。从PowerDesigner 的变化,可以看出它正在努力发展成为UML 建模工具,但同时又不放弃自己的特长,即提供更好、更方便的数据建模能力。PowerDesigner 支持UML,包括新的业务处理建模能力,改善了的基于UML 的对象模型,而且可以在一个丰富的图表环境中,支持传统的和新增的建模技术。因此,对于那些需要跨平台作业和使用多种类型编码的项目,可以大大地缩短开发时间,降低复杂度。PowerDesigner 还具备一个完整的版本资料库(repository),用来存储和管理所有建模和设计过程中的信息,并将最大限度地减少其中不一致的部分,从而极大地提高了开发者的效率。 市场上有很多工具提供数据建模,包括数据仓库建模、对象建模、业务流程建模以及U M L 建模等,但这些产品都无法与将所有的功能集于一体PowerDesigner 相媲美。在努力将商业需求和IT 技术需要结合时,建模工具之间的一致性显得尤为重要。通过PowerDesigner,有可能通过一套完整的工具来集合三种建模技术—业务流程建模、数据建模和UML 建模,从而使商业和IT 部门能够更容易进行项目合作,帮助客户实施更多连贯的、成功的项目。 Power Designer 主要特性包括: 1)、业务过程建模,允许非IT 专业用户用一个简单的图示模型,进行实际业务过程的设计或建模。 2)、数据建模,利用基于可靠方法、真正的两级(概念上和物理上)关系数据库建模,设计并生成数据库模型。同时还支持数据仓库建模技术。 3)、对象建模,使用标准的UML 技术(所有U ML 图)完成设计和分析,并且利用定制的生成器,自动地生成源代码,如Java、XML、Web Services、C++、PowerBuilder、V isual Basic 和Microsoft.Net 等。 4)、企业版本库,PowerDesigner 的企业版中加入了企业级版本库,可以查阅共享工作组里所有成员的模型和信息。版本库可升级支持角色安全设置、版本控制、并具备搜索及报告能力。

oracle存储过程讲解及实例

存储过程 1 CREATE OR REPLACE PROCEDURE 存储过程名 2 IS 3 BEGIN 4 NULL; 5 END; 行1: CREATE OR REPLACE PROCEDURE 是一个SQL语句通知Oracle数据库去创建一个叫做skeleton存储过程, 如果存在就覆盖它; 行2: IS关键词表明后面将跟随一个PL/SQL体。 行3: BEGIN关键词表明PL/SQL体的开始。 行4: NULL PL/SQL语句表明什么事都不做,这句不能删去,因为PL/SQL体中至少需要有一句; 行5: END关键词表明PL/SQL体的结束

存储过程创建语法: create or replace procedure 存储过程名(param1 in type,param2 out type) as 变量1 类型(值范围); --vs_msg VARCHAR2(4000); 变量2 类型(值范围); Begin Select count(*) into 变量1 from 表A where列名 =param1; If (判断条件) then Select 列名into 变量2 from 表A where列名 =param1; Dbms_output。Put_line(‘打印信息’); Elsif (判断条件) then Dbms_output。Put_line(‘打印信息’); Else Raise 异常名(NO_DATA_FOUND); End if; Exception When others then Rollback;

End; 注意事项: 1,存储过程参数不带取值范围,in表示传入,out表示输出 类型可以使用任意Oracle中的合法类型。 2,变量带取值范围,后面接分号 3,在判断语句前最好先用count(*)函数判断是否存在该条操作记录 4,用select 。。。into。。。给变量赋值 5,在代码中抛异常用 raise+异常名 CREATE OR REPLACE PROCEDURE存储过程名 ( --定义参数 is_ym IN CHAR(6) ,

《数据库与信息系统》实验4指导解析_9-10

实验四数据库操作语言SQL 一.实验目的 ?了解使用SQL中DDL语句创建数据库和表的方法 ?熟练掌握使用SQL中DML语句对数据库进行查询、插入、修改和删除等操作的方法?掌握可编程对象视图和存储过程的创建与使用方法,了解触发器的创建方法 二.实验环境及素材 ?MySQL和Navicat for MySQL ?bookstore数据库的脚本文件bookstore.sql 三.实验内容 首先创建一个bookstore数据库,执行bookstore.sql脚本文件实现表的创建及数据记录的添加。然后在bookstore数据库中完成以下题目(bookstore数据库设计说明参见10.1节)。 ①在Navicat for MySQL中,创建数据库bookstore。 ②右击数据库bookstore,选择“运行SQL文件…”,在对话框中浏览选择“bookstore.sql”文件,点击“开始”即可完成数据表定义及添加数据记录。 ③在左栏连接窗口展开数据库“bookstore”/表,右击“表”选“刷新”菜单,即可看到恢复的各数据表。 9.创建和使用存储过程。 解析:存储过程是经过编译的SQL语句的集合。用户首先创建存储过程,然后在程序中调用该存储过程执行。创建存储过程可以在Navicat for MySQL中使用向导建立,也可以使用SQL的CREATE PROCDURE语句。存储过程可以接受参数、也可将查询信息通过输出参数返回调用者。 常用存储过程的语法格式: CREATE PROCDURE 存储过程名( [形式参数列表]) SQL语句段 “形式参数列表”中多个参数之间用逗号分隔,如果没有参数,则()中为空。每个参数由输入输出类型、参数名和参数类型三部分组成,定义规则如下: [IN|OUT|INOUT 参数名类型 输入输出类型中:IN是输入参数,即把数据传递给存储过程;OUT是输出参数,即从存储过程返回值;INOUT表示输入输出,即传入也能返回值。默认为IN类型;参数名必须符合标识符规则;参数类型可以是MySQL支持的任意数据类型。 存储过程创建后,可以通过CALL语句调用执行存储过程。语法格式如下:

DB2存储过程快速入门.

1.1 SQL过程的结构 命名规则: 1、清洗过程名称命名: PROC_业务主题_目标表(PROC_JY_KJYRLJB 交易主题的卡交易日类聚表) 2、函数名称命名: PROC_业务主题_函数名(PROC_JY_GETYWZL 交易主题取得卡业务种类函数) 3、变量命名: VAR_变量描述(VAR_YWZL 业务种类变量) 4、游标命名: CUR_游标描述(CUR_KJYB 对卡交易表进行游标处理) 语法: CREATE PROCEDURE 过程名称 (参数列表 DYNAMIC RESULT SETS 结果集数量 是否允许SQL LANGUAGE SQL BEGIN SQL 过程体

END 范例“资产负债.sql ”中 第1行:Create Procedure admin.BalanceSheetDayly定义了过程名称 参数列表为Out ProcState varchar(100 其定义SQL 过程从客户应用获取,或返回客户应用的0个或多个参数,参数列表使用逗号侵害各个参数 参数类型有三种: l IN 从客户应用检索值。其不能够在SQL 过程体中修改 l OUT 向客户应用返回值 l INOUT 从客户应用检索值,并返回值 省略了结果集数量的定义,default 为0。即表示不返回结果集。 省略了是否允许SQL 的说明。其值指出了存储过程是否会使用SQL 语句,如果使用,其类型如何: l NO SQL 不能够执行任何SQL 语句 l COTAINS SQL 可以执行不会读取SQL 数据,也不会修改SQL 数据的SQL 语句 l READS SQL DATA 可以包含不会修改SQL 数据的SQL 语句 l MODIFIES SQL DATA 可以执行任何SQL 语句,除了不能够在存储过程中支持的语句以外。

2016年10月全国自考《数据库系统原理》真题及详解

2016年10月全国自考《数据库系统原理》真题 (总分100, 考试时间90分钟) 1. 单项选择题 1. 造成数据库中的数据不一致的原因是( ) A 数据冗余 B 数据存储数量太大 C 数据相互关系复杂 D 数据库安全性差 答案:A 2. 逻辑模式/内模式映像,保证了数据库的( ) A 完整性 B 全性 C 逻辑独立性 D 物理独立性 答案:D 解析:如果数据库的内模式要修改,即数据库的物理结构有所变化,那么只要对逻辑模式/内模式映像(即"对应性")作相应的修改,可以使逻辑模式尽可能保持不变。也就是对内模式的修改尽量不影响逻辑模式,当然对于外模式和应用程序的影响更小,这样,我们称数据库达到了物理数据独立性(简称物理独立性)。 3. 数据库系统生存期中,下面不是需求分析阶段工作的是( ) A 分析用户活动,产生业务流程图 B 确定系统范围,产生系统关联图 C 可行性分析 D 分析系统数据,产生数据字典 答案:C 解析:需求分析阶段的工作主要有:(1)分析用户活动,产生业务流程图。(2)确定系统范围,产生系统关联图。 (3)分析用户活动涉及的数据,产生数据流图。(4)分析系统数据,产生数据字典。 4. 关系数据库的数据与更新必须遵循三类完整性规则,下列不是其中一项的是( ) A 实体完整性规则 B 逻辑完整性规则 C 参照完整性规则 D 用户定义的完整性规则 答案:B 5. 设关系模式R(ABCDE),F是R上成立的FD集,F={AB→C,CD→E,DE→B},则关系R的候选键是( ) A A B AB C ABD D ABE 答案:C 6. 关于模式分解,下面叙述不正确的是( ) A 模式分解能消除数据冗余和操作异常现象 B 在分解以后,所有的检索操作可以节省时间 C 在分解了的数据库中可以存储悬挂元组,存储泛关系中无法存储的信息 D 在有泛关系假设时,对数据库中关系进行自然连接时,可能产生寄生元组,即损失了信息 答案:B 解析:模式分解以后,检索操作需要做笛卡儿积或连接操作,这将付出时间代价。 7. 假设有学生表(学号,姓名;性别,班级,专业),查找英语专业的学生学号、姓名和班级,正确的关系代数表达式是( ) i.π学号,姓名,班级(σ专业='英语' (学生表))ii.σ专业='英语' (π学号,姓名,班级(学

MySQL存储过程简单入门

MySQL存储过程语法 1、概念 存储过程就是能完成一定操作的一组SQL语句。 2、作用 大大提高效率(存储过程本身执行速度非常快,而且,调用存储过程大大减少数据库交互次数);提高重用性。 3、使用方法 1、创建: create procedure sp_name() begin …… end 注意:可能有参数。 2、调用: call sp_name() 注意:括号不能省略。 3、删除: drop procedure sp_name 注意:没有括号,不能在一个存储过程中删除另一个存储过程,只能调用。 4、语句: 条件语句, if 条件then statement else statement end if while循环语句, [label:] while expression do statement end while [label]; loop循环语句, [label:] loop statement end loop [label];

repeat until循环语句, [label] repeat statement until expression end repeat [label]; 5、常用命令: show procedure status:显示数据库所有存储过程基本信息。 show create procedure sp_name:显示一个存储过程详细信息。 关于运算符和基本函数与Java有些区别,用时注意就行。 4、实例 1、创建: create procedure proc_name (in parameter integer) begin declare variable varchar(20); if parameter=1 then set variable='MySQL'; else set variable='PHP'; end if; insert into tb (name) values (variable); end; 注意:代码不区分大小写;存储过程之间以及存储过程与内建函数不能同名; 存储过程参数(in传入,out传出,inout可传入,修改后传出,缺省是in); 由于存储过程内部要以分号结束,需要delimiter进行更改。 2、实现: ⑴、mysql –u用户名–p用户密码 ⑵、delimiter //(将结束符号“;”改成“//”,避免与存储过程冲突) ⑶、use 数据库名 ⑷、……(创建存储过程) ⑸、call proc_name(5)//(调用存储过程) -------------------------------------------- call proc_name(@para)//(对应存储过程定义中out的输出) select @para// ⑹、show procedure status//与show create procedure proc_name// 3、程序代码调用:(out型的部分代码) try{ //调取out型的存储过程P(计算记录总数) stmt = conn.prepareCall("{call p(?)}"); //读取所有OUT型的存储过程的返回参数数据 stmt.registerOutParameter(1, Types.INTEGER); stmt.execute(); int i= stmt.getInt(1);

存储过程的作用和意义

存储过程的作用和意义 随着唐山公司开发部的成立,针对各项生产经营活动的系统支撑逐步到位,在开发过程中,数据库存储过程应用逐渐广泛,这里我来简要介绍下存储过程。 一、什么是存储过程: 存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程。 二、为什么要用存储过程呢? 存储过程真的那么重要吗,它到底有什么好处呢?存储过程说白了就是一堆SQL 的合并。中间加了点逻辑控制。 1.存储过程处理比较复杂的业务时比较实用。具体分为两个方面:(一)、响应时间上来说有优势:如果你在前台处理的话。可能会涉及到多次数据库连接。但如果你用存储过程的话,就只有一次。存储过程可以给我们带来运行效率提高的好处;(二)、从安全上使用了存储过程的系统更加稳定:程序容易出现BUG 不稳定,而存储过程,只要数据库不出现问题,基本上是不会出现什么问题的。 2.数据量小的项目不用存储过程也可以正常运作。 三、那么什么时候才需要用存储过程? 存储过程不仅仅适用于大型项目,对于中小型项目,使用存储过程也是非常有必要的。其优势主要体现在: 1.存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL 语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。 2.当对数据库进行复杂操作时(如对多个表进行Update,Insert,Query,Delete 时),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。这些操作,如果用程序来完成,就变成了一条条的SQL 语句,可能要多次连接数据库。而换成存储,只需要连接一次数据库就可以了。 3.存储过程可以重复使用,可减少数据库开发人员的工作量。 4.安全性高,可设定只有某此用户才具有对指定存储过程的使用权。 5.更强的适应性:由于存储过程对数据库的访问是通过存储过程来进行的,因此数据库开发人员可以在不改动存储过程接口的情况下对数据库进行任何改动,而这些改动不会对应用程序造成影响。 6.分布式工作:应用程序和数据库的编码工作可以分别独立进行,而不会相互压制。 一般来说,存储过程的编写比基本SQL语句复杂,编写存储过程需要更高的技能,更丰富的经验。 四、系统开发中存储过程使用的优势和劣势 优点如下: 1.执行效率高。 2.安全性能好。 3.对于一些场合非常容易实现需求。 缺点如下: 1.可维护性比较差。 2.可读性也差。

SQL编程及存储过程实验

集美大学计算机工程学院实验报告 一、实验目的 1.了解T-SQL的基本数据类型、函数; 2.掌握局部变量的定义和赋值; 3.掌握存储过程的定义及调用 二、实验内容与设计思想 ●主要内容: 1.基本结构编程; 2.存储过程的建立; 3.存储过程的调用。 ●知识准备: 1.SQL中的基本数据类型: VARCHAR:字符数据。 DATETIME:(常量使用特定格式的字符日期值来表示,并使用单引号括起来。例如:'1976-05-28','MAY 28, 1976','28 MAY, 1976','760528','05/28/76'。 INTEGER:用一串数字来表示,不含小数点,不使用引号。例如,123,1896。 DECIMAL:用一串数字来表示,可以包含小数点,不使用引号。例如,1893.1209,2.0。 FLOAT和REAL:使用科学记数法表示。例如,101.5E5,0.5E-2。 MONEY:用一串数字,可以包含或不包含小数点,以一个货币符号($)作为前缀,不使用等等2.SQL中的变量:SQL中变量用来存放临时数据,变量使用前一定要先进行定义,变量名必须 以@开头。另外,SQL SERVER中还提供一些系统变量,系统变量是以@@开头的。 变量的定义:DECLARE 变量名数据类型 如 GO DECLARE @NAME VARCHAR(20) SET @NAME='王雨' PRINT @NAME GO 3.SQL中的基本函数 (1) 字符串函数:LEN()、UPPER()、LOWER()、RIGHT()、LEFT()、SUBSTRING()、CHARINDEX()、STR()、REPLACE()等 (2) 数学函数:常用的数学函数通常对作为参数提供的输入值执行计算,并返回一个数字值。

存储过程

66:创建无参数无返回值的存储过程(存储过程的默认返回值都是int类型的,并且为0)create proc mya as select*from orders go exec mya 67:删除存储过程 Drop proc 存储过程名称,如果多个用,号进行分割。 68:创建有参数但无返回值的存储过程 create proc myb @param int= 1 as select*from orders where oid > @param go exec myb 3 69:调用以上俩个存储过程,并查看默认返回值 declare @number int set @number = 1; exec @number = mya exec @number = myb 3 print @number go 70:获取存储过程的返回值(存储过程默认的返回值都为0) declare @number int set @number = 1 exec @number = mya exec @number = myb print @number 71:创建有参数并且有返回值的存储过程,并调用存储过程,获取返回值 select*from person; go --create proc myc --@inparm int, --@outparm int output --as

--select @outparm=count(*) from person where pid>@inparm --go declare @flag int set @flag = 2 exec myc @outparm = @flag output,@inparm = 1 if(@flag>0) begin print @flag end else begin print'set is null' end go --1 调用方法: --1:不要返回值return,的俩种写法 --2:计算参数总共有多少个输出参数,有多少个输出参数,就需要有多少个变量,output不能少 --创建存储过程时,注意,sql中引用表必须在当前数据库中存在,否则调用不成功 --存储过程与use 间必须用批处理命令 go 去隔开 72:手工改变存储过程的返回值 create proc mya as select*from person return 888 go declare @flag int set @flag = 0 exec @flag = mya print @flag create proc mya as declare @flag int set @flag = 0 select @flag =count(*)from person return @flag go

ORACLE存储过程开发基础语法

ORACLE存储过程开发基础语法 create or replace procedure test(var_name_1 in type,var_name_2 out type) as --声明变量(变量名变量类型) begin --储备过程的执行体 end test; 打印出输入的时刻信息 E.g: create or replace procedure test(workDate in Date) is begin dbms_output.putline('The input date is:'||to_date(workDate,'yyyy-mm-dd')); end test; 2、变量赋值 变量名:= 值; E.g: create or replace procedure test(workDate in Date) is x number(4,2); begin x := 1; end test; 3、判定语句:

if 比较式then begin end; end if; E.g create or replace procedure test(x in number) is begin if x >0 then begin x := 0 - x; end; end if; if x = 0 then begin x: = 1; end; end if; end test; 4、For 循环 For ... in ... LOOP --执行语句 end LOOP; (1)循环遍历游标 create or replace procedure test() as Cursor cursor is select name from student; name varchar(20);

oracle实验--存储过程

实验八存储过程的使用 一、实验目的 1、熟练掌握存储过程的定义及使用 二、实验要求 1、实验前做好上机实验的准备,针对实验内容,认真复习与本次实验有关的知识,完成 实验内容的预习准备工作; 2、能认真独立完成实验内容; 3、实验后做好实验总结,根据实验情况完成实验报告。 三、实验内容 创建图书管理库的图书、读者和借阅三个基本表的表结构: 图书表: BOOK ( BOOK_ID NUMBER(10), SORT V ARCHAR2(10), BOOK_NAME V ARCHAR2(50), WRITER V ARCHAR2(10), OUTPUT V ARCHAR2(50), PRICE NUMBER(3)); 读者表 READER ( READER_ID NUMBER(3), COMPANY V ARCHAR2(10), NAME V ARCHAR2(10), SEX V ARCHAR2(2), GRADE V ARCHAR2(10), ADDR V ARCHAR2(50)); 借阅表 BORROW ( READER_ID NUMBER(3),

BOOK_ID NUMBER(10), BORROW_DA TE DA TE); 插入数据: BOOK表: insert into book values(445501,'TP3/12','数据库导论','王强','科学出版社',17.90); insert into book values(445502,'TP3/12','数据库导论','王强','科学出版社',17.90); insert into book values(445503,'TP3/12','数据库导论','王强','科学出版社',17.90); insert into book values(332211,'TP5/10','计算机基础','李伟','高等教育出版社',18.00); insert into book values(112266,'TP3/12','FoxBASE','张三','电子工业出版社',23.60); insert into book values(665544,'TS7/21','高等数学','刘明','高等教育出版社',20.00); insert into book values(114455,'TR9/12','线性代数','孙业','北京大学出版社',20.80); insert into book values(113388,'TR7/90','大学英语','胡玲','清华大学出版社',12.50); insert into book values(446601,'TP4/13','数据库基础','马凌云','人民邮电出版社',22.50); insert into book values(446602,'TP4/13','数据库基础','马凌云','人民邮电出版社',22.50); insert into book values(446603,'TP4/13','数据库基础','马凌云','人民邮电出版社',22.50); insert into book values(449901,'TP4/14','FoxPro大全','周虹','科学出版社',32.70); insert into book values(449902,'TP4/14','FoxPro大全','周虹','科学出版社',32.70); insert into book values(118801,'TP4/15','计算机网络','黄力钧','高等教育出版社',21.80); insert into book values(118802,'TP4/15','计算机网络','黄力钧','高等教育出版社',21.80); READER表: insert into reader values(111,'信息系','王维利','女','教授','1号楼424'); insert into reader values(112,'财会系','李立','男','副教授','2号楼316'); insert into reader values(113,'经济系','张三','男','讲师','3号楼105'); insert into reader values(114,'信息系','周华发','男','讲师','1号楼316'); insert into reader values(115,'信息系','赵正义','男','工程师','1号楼224'); insert into reader values(116,'信息系','李明','男','副教授','1号楼318'); insert into reader values(117,'计算机系','李小峰','男','助教','1号楼214'); insert into reader values(118,'计算机系','许鹏飞','男','助工','1号楼216'); insert into reader values(119,'计算机系','刘大龙','男','教授','1号楼318'); insert into reader values(120,'国际贸易','李雪','男','副教授','4号楼506'); insert into reader values(121,'国际贸易','李爽','女','讲师','4号楼510'); insert into reader values(122,'国际贸易','王纯','女','讲师','4号楼512'); insert into reader values(123,'财会系','沈小霞','女','助教','2号楼202'); insert into reader values(124,'财会系','朱海','男','讲师','2号楼210'); insert into reader values(125,'财会系','马英明','男','副教授','2号楼212'); BORROW表:

实验七 存储过程及应用完整版含截图

实验七存储过程及应用 1.实验目的 1、理解存储过程的概念。 2、掌握存储过程的使用方法。 2.实验要求 1.建立如下的存储过程(基于前面实验建立的表和插入的数据,并为每个存储过程设计返回的状态值): (1)按要求设计完成如下功能的存储过程。 ①查询平均分数在x到y范围内的学生信息。 说明: 该存储过程有两个参数; 要求查询的学生信息包括学号、姓名、院系名称和平均分数。 ②更新操作,以学号、课程编号和考试成绩作参数更新指定学生和课程的考试成绩,并返回该学生的平均成绩。 (2)自行再分别设计一个完成查询和完成操作功能的存储过程(在实验报告中要准确描述功能需求)。 (3)在客户端以存储过程和输入SQL语句的方式分别执行相同的查询或操作,比较使用和不使用存储过程的区别。 3、实验过程 (1)①查询平均分数在x到y范围内的学生信息 create procedure cc711@x smallint,@y smallint as select学生.学号,学生.姓名,院系.名称,学生.平均成绩 from学生join院系on学生.院系=院系.编号 where学生.平均成绩between@x and@y EXECUTE cc71160,90

②更新操作,以学号、课程编号和考试成绩作参数更新指定学生和课程的考试成绩,并返回该学生的平均成绩 create procedure mcc712@xh nchar(8),@kcbh nchar(8),@cj int as update选课set成绩=@cj where学号=@xh and课程编号=@kcbh declare@pjcj int select@pjcj=AVG(成绩)from选课where学号=@xh return@pjcj declare@avg int execute@avg=mcc7122,5,98 print'更新后平均成绩:'+str(@avg,6)

51CTO学院-Oracle 11g从零开始系列视频教学课程

51cto学院-Oracle 11g从零开始系列视频教学课程 课程目标 掌握Oracle 11g的应用和开发操作技能知识。 适用人群 想学习Oracle基础知识的学员。 课程简介 【从零开始系列-Oracle11g视频教学课程】本课程基于最新Oracle 11g第2版,从Oracle数据库的概述、安装与卸载开始,逐步讲述了Oracle数据库的框架结构、PL/SQL语言及SQL*Pl us运行环境、Oracle数据库的基本操作和进阶操作、Oracle数据库的管理等相关知识,最后以三个完整的案例讲述了Oracle数据库在实际中的综合应用。本着“在开发中学习,在开发中进步” 的理念,讲解中提供了大量的应用和开发操作。51CTO-Oracle视频教学群301240833 学习条件: 本视频不需要Oracle的基础就可以进行学习,但后面的章节涉及Java Web开发案例需要学员 们掌握基本的Java Web开发知识。 课程 第一章Oracle数据库概述 3课时35分钟 1 1.1 Oracle数据库简介 [免费观看] 11分钟 详细讲解Oracle 简介、Oracle产品结构及组成、Oracle各个产品功能介绍、Oracle 11g 新特性和获取与帮助。(购买可免费用优惠劵,联系我索取,QQ:317505205) 2

1.2 Oracle在Windows平台上的安装与配置 [免费观看] 16分钟 讲解Oracle 安装通用器、Oracle 安装系统需求,重点安装Oracle 11g的步骤和方法。 3 1.3 Oracle数据库软件的卸载 [免费观看] 7分钟 讲解卸载Oracle的三个步骤:停止所有的Oracle服务,用OUI卸载所有的Oracle组件,手动删除Oracle遗留的成分。 第二章Oracle数据库的框架结构 11课时1小时35分钟 4 2.1 Oracle数据库的实例结构 [免费观看] 11分钟 主要讲解Oracle 实例简介,Oracle 内存结构(SGA和PGA讲解),Oracle 后台进程(PMO N、SMON...) 5 2.2 Oracle数据库的物理存储结构 [免费观看] 9分钟 详细讲解实例相关文件(参数、跟踪等)、构成数据库文件(数据、临时等)、备份恢复文件(闪回等)、其他文件(DMP等)

相关主题
文本预览
相关文档 最新文档