存储过程

发表时间:2017-05-11 16:57:54 浏览量( 16 ) 留言数( 0 )

学习目标:

1、了解Java的历史

2、为什么要学习Java语言

3、端正学习态度


学习过程:

一、存储过程

在大型数据库系统中,存储过程和触发器具有很重要的作用。无论是存储过程还是触发器,都是SQL 语句和流程控制语句的集合。就本质而言,触发器也是一种存储过程。存储过程在运算时生成执行方式,所以,以后对其再运行时其执行速度很快。SQL Server 2005 不仅提供了用户自定义存储过程的功能,而且也提供了许多可作为工具使用的系统存储过程。

创建过程的语法:

         CREATE [OR REPLACE] PROCEDURE

                   

           IS|AS

                   

           BEGIN

                

           [EXCEPTION

                

           END;

过程参数的三种模式:

  • IN:用于接受调用程序的值,默认的参数模式。

  • OUT :用于向调用程序返回值。

  • IN OUT :用于接受调用程序的值,并向调用程序返回更新的值。

示例:

1、定义存储过程

  --1、根据商品的类别统计商品的数量
create or replace procedure count_goods_bytype( tid in int,gcount out int )
as
   --声明变量
begin
    select count(*) into gcount from goods where type_id=tid;
end;

2、调用存储过程

--如何调用存储过程
declare
  gnum int;
begin
   count_goods_bytype(1,gnum);
   dbms_output.put_line(gnum);
end;

3、返回值是游标

3.1、定义一个包,保存游标变量

create or replace package  my_first_pack
as
   type my_cus is ref cursor;
end;

3.2、定义存储过程

 --根据商品名称查询商品的信息
create or replace procedure goods_types_my(gname in varchar2,goodes out my_first_pack.my_cus)
as
begin
   open goodes for select * from goods where goods_name like gname;
end;

二、动态 SQL

动态 SQL 是指在PL/SQL程序执行时生成的 SQL 语句,编译程序对动态 SQL 不做处理,而是在程序运行时动态构造语句、对语句进行语法分析并执行,DDL 语句命令和会话控制语句不能在 PL/SQL 中直接使用,但是可以通过动态 SQL 来执行。

执行动态 SQL 的语法:  

EXECUTE IMMEDIATE dynamic_sql_string

      [INTO  define_variable_list]

      [USING bind_argument_list];

示例:

--动态sql
--写一个存储过程,用于统计表的行数
create or replace procedure counttable(tablename in varchar2,tablecount out int)
as
  my_sql varchar(100);
begin
  my_sql:= 'select count(*)  from '||tablename;
  --动态执行
  execute immediate my_sql into tablecount;
end;