oracle 存储过程

        存储过程和函数也是一种PL/SQL块,是存入数据库的PL/SQL块。但存储过程和函数不同于已经介绍过的PL/SQL程序,我们通常把PL/SQL程序称为无名块,而存储过程和函数是以命名的方式存储于数据库中的。创建存储过程,需要有CREATE PROCEDURE的系统权限,该权限可由系统管理员授予:grant execute on user_tbl to user 。

    create [or replace] procedure procedure_name [(parameter1 [model] datatype1, ...)]
    is [as]
    begin
         Pl/sql Block;
    end [procedure_name];

注: procedure_name是存储过程的名字,parameter用于指定参数,model用于指定参数模式,datatype用于指定参数类型,IS [AS]用于开始PL/SQL代码块。当定义存储过程的参数时,只能指定数据类型,不能指定数据长度。
       编写存储过程可以使用任何文本编辑器或直接在SQL*Plus环境下进行,编写好的存储过程必须要在SQL*Plus环境下进行编译,生成编译代码,原代码和编译代码在编译过程中都会被存入数据库。编译成功的存储过程就可以在Oracle环境下进行调用了。
       删除存储过程:drop  procedure procedure_name
       编译存储过程:alter procedure procedure_name compile
       查看存储过程及状态:

   select   object_name,status
   from     user_objects
   where 	   object_type='PROCEDURE'

       查看存储过程的代码,其中procedure_name是存储过程的名字:

   select   text
   from     user_source
   where    name= procedure_name

       执行(或调用)存储过程的人是过程的创建者或是拥有EXECUTE ANY PROCEDURE系统权限的人或是被拥有者授予EXECUTE权限的人。

   执行方法1:EXECUTE 模式名.存储过程名[(参数...)];
   执行方法2:BEGIN
                    SET SERVEROUTPUT ON
                    模式名.存储过程名[(参数...)];
            END;

       参数的作用是向存储过程传递数据,或从存储过程获得返回结果。如果省略IN、OUT或IN OUT,则默认模式是IN。
       参数名 IN       数据类型 DEFAULT 值
       定义一个输入参数变量,用于传递参数给存储过程。在调用存储过程时,主程序的实际参数可以是常量、有值变量或表达式等。DEFAULT 关键字为可选项,用来设定参数的默认值。
       参数名 OUT    数据类型
       定义一个输出参数变量,用于从存储过程获取数据,即变量从存储过程中返回值给主程序。在存储过程中,参数变量只能被赋值而不能将其用于赋值,在存储过程中必须给输出变量至少赋值一次。
       参数名 IN/OUT 数据类型 DEFAULT 值
       在存储过程中,变量接收主程序传递的值,同时可以参加赋值运算,也可以对其进行赋值。在存储过程中必须给变量至少赋值一次。
       参数的值由调用者传递,传递的参数的个数、类型和顺序应该和定义的一致。如果顺序不一致,可以采用以下调用方法。

   EXECUTE CHANGE_SALARY(P_VAR=>1,P_VAR2=>2);

      可以看出传递参数的顺序发生了变化,并且明确指出了参数名和要传递的值,=>运算符左侧是参数名,右侧是参数表达式,这种赋值方法的意义较清楚。
      使用OUT类型的参数返回存储过程的结果。

   CREATE OR REPLACE PROCEDURE PARM_COUNT(P_TOTAL OUT NUMBER)
   AS
   BEGIN
           SELECT COUNT(*) INTO P_TOTAL FROM com_parm;
   END;

      在sqlplus中输入以下命令执行:

   DECLARE
           V_COUNT NUMBER;
   BEGIN
           PARM_COUNT(V_COUNT);
           DBMS_OUTPUT.PUT_LINE('参数总数为:'||V_COUNT);
   END;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值