分享

oracle 存储过程的基本语法_大北的空间

 haozhengfang 2008-12-09

1.基本结构
CREATE OR REPLACE PROCEDURE 存储过程名字
(
    参数1 IN NUMBER,
    参数2 IN NUMBER
) IS
变量1 INTEGER :=0;
变量2 DATE;
BEGIN

END 存储过程名字

2.SELECT INTO STATEMENT
将select查询的结果存入到变量中,可以同时将多个列存储多个变量中,必须有一条
记录,否则抛出异常(如果没有记录抛出NO_DATA_FOUND)
例子:
BEGIN
SELECT col1,col2 into 变量1,变量2 FROM typestruct where xxx;
EXCEPTION
WHEN NO_DATA_FOUND THEN
     xxxx;
END;
...

3.IF 判断
IF V_TEST=1 THEN
    BEGIN
       do something
    END;
END IF;

4.while 循环
WHILE V_TEST=1 LOOP
BEGIN
XXXX
END;
END LOOP;

5.变量赋值
V_TEST := 123;

6.用for in 使用cursor

...
IS
CURSOR cur IS SELECT * FROM xxx;
BEGIN
FOR cur_result in cur LOOP
   BEGIN
    V_SUM :=cur_result.列名1+cur_result.列名2
   END;
END LOOP;
END;

7.带参数的cursor
CURSOR C_USER(C_ID NUMBER) IS SELECT NAME FROM USER WHERE TYPEID=C_ID;
OPEN C_USER(变量值);
LOOP
FETCH C_USER INTO V_NAME;
EXIT FETCH C_USER%NOTFOUND;
    do something
END LOOP;
CLOSE C_USER;

8.用pl/sql developer debug
连接数据库后建立一个Test WINDOW
在窗口输入调用SP的代码,F9开始debug,CTRL+N单步调试

 

Create procedure procedue_name
    [@parameter data_type][output]
    [with]{recompile|encryption}
    as
    sql_statement

    解释 output:表示此参数是可传回的.

         with {recompile|encryption}

          recompile:表示每次执行此存储过程时都重新编译一次

          encryption:所创建的存储过程的内容会被加密

    表book的内容如下

   编号     书名                           价格

   001       C语言入门                   $30

   002       PowerBuilder报表开发   $52

    实例1:查询表Book的内容

create proc query_book
       as
       select * from book
   go
exec query_book
实例2:加入一笔记录到表book,并查询此表中所有书籍的总金额

 

   Create proc insert_book

   @param1 char(10),@param2 varchar(20),@param3 money,@param4 money output

   with encryption   ---------加密

   as

   insert book(编号,书名,价格) Values(@param1,@param2,@param3)
   select @param4=sum(价格) from book
   go

    执行例子:

   declare @total_price money
   exec insert_book '003','Delphi 开发指南',$100,@total_price
   print '总金额为'+convert(varchar,@total_price)
   go

    实例3:设有两个表为Product,Order,其表内容如下:

       Product
           产品编号       产品名称    客户订数    
             001             钢笔         30        
             002             毛笔         50        
             003             铅笔         100        
       Order  
           产品编号         客户名     客户订金
             001               南山区       $30
             002               罗湖区       $50
             003               宝安区       $4

    请实现按编号为连接条件,将两个表连接成一个临时表,该表只含编号.产品名.客户名.订金.总金额,
总金额=订金*订数,临时表放在存储过程中

    代码如下:

     Create proc temp_sale
     as
       select a.产品编号,a.产品名称,b.客户名,b.客户订金,a.客户订数* b.客户订金 as总金额
       into #temptable from Product a inner join Order b on a.产品编号=b.产品编号
     if   @@error=0
       print 'Good'
     else
       print 'Fail'
     go


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多