zoukankan      html  css  js  c++  java
  • 【转】oracle 9i存储过程详解

    1.块结构:
    PL
    /SQL程序被分割为称为块(block)的结构,块中包含PL/SQL程序语句。典型的PL/SQL块具有
    以下的结构:
    [DECLARE
        declaration_statements 
    ]
    BEGIN
        executable_statements
    [EXCEPTION
        exception_handling_statements
    ]
    END;
    语法元素:
    declaration_statement : 
      声明了在块的其余部分中使用的变量。这些变量是块的局部变量。
    executable_statment:
      块的实际可执行语句。
    exeception_handling_statement:
      处理可执行语句可能发生的错误。

    注意:每条语句都要有(;)分号结尾,块使用END关键字结尾。

    例程:
    DECLARE
        width 
    INTEGER :=2;
        height 
    INTEGER ;
        area 
    INTEGER ;
    BEGIN
        height :
    =3 ;
        area :
    =width*height ;
        DBMS_OUTPUT.PUT_LINE(
    'Area='||area); //表示在屏幕上显示;
    END;
    /   //表示执行这个PL/SQL块;

    注意:必须在SQL
    *PLUS中提前输入:SET SERVEROUTPUT ON 才能显示的输出。

    2.变量类型:
    变量名   变量类型 ;
    / : = [初始数值] ;
      id   
    INTEGER ;
    name   
    VARCHAR2(20) :='BinMing';

      
    * proname product.price%TYPE ; // (%TYPE) 表示proname 的类型要和product表中的price的类型一致。

    3.条件逻辑:
    1.IF [条件1] THEN
        
    [语句段]
      ELSEIF 
    [条件2] THEN
          .
    .
    .
      
    END IF ;


    2.循环(简单循环/WHILE/FOR)
      单循环:
    LOOP 
      statements
    END LOOP;
    //一直循环语句段,除非显示的输入EXIT / EXIT WHEN 语句结束循环
          
      WHILE循环:
    WHILE condition LOOP
        statements
    END LOOP;

    example:
      
    count:=0;
      
    WHILE counter<6 LOOP 
        
    count :=count + 1 ;
      
    END LOOP ;

    3.FOR循环:
    FOR loop_variable IN [REVERSE] lower_bound..upper_bound LOOP
      statements;
    END LOOP;

    example:
      
    FOR id IN 3..6 LOOP
      DBMS_OUTPUT.PUT_LINE(id);
      
    END LOOP;


    4.游标的使用:

    步骤一: 声明变量来存储例值 :

    DECLARE
      id products.id
    %TYPE;
      
      

    步骤二: 声明游标 :

    游标要放在声明部分中。

    CURSOR product_cursor IS   
      
    Select 
      id,name,price
      
    FROM
      products
      
    ORDER BY
      id;

            
    //声明了游标的类型或着说方法

    步骤三:打开游标 :
    使用OPEN语句打开游标,必须放在块的可执行部分中。

      
    OPEN product_cursor ;

    步骤四: 从游标中获取行:
    使用 
    FETCH 语句读取游标中的行:
      
    FETCH:
      product_cursor;
      
    INTO
      id,name,price;   
    //把值存储到上面声明的三个变量中.
    // 如果游标返回可能包含很多行的话,就要循环取出每一行数据,
      可以使用product_cursor
    %NOTFOUND决定虚幻何时结束。

    步骤五: 关闭游标:
    CLOSE product_cursor;

    5.过程:
        使用PL
    /SQL创建包含一组SQL语句和PL/SQL语句的过程。
        可以使用这些过程将业务逻辑集中在数据库中,访问数据
        库的任何程序都可以使用这些过程。

        使用Create 
    PROCEDURE 语句创建PL/SQL过程:
    Create[OR REPLACE] PROCEDURE procedure_name     //过程名字
    [(parameter_name)[IN|OUT|IN OUT] type[])] //过程使用的参数
    {
    IS|AS}
    {
      body
    };

    .
    IN 参数的默认模式。如果在过程运行时参数以有一个值,而且这个值在过程体中不能修改,
      那么就应该指定这种模式。
    .OUT 如果参数的值只在过程体中设置,那么就应该指定这种模式。
    .
    IN OUT 如果在过程被调用时参数可能已经有一个值,但是这个值可以在过程体中修改,那
    么就应该指定这种模式。


    例子程序:
    Create PROCEDURE update_product_price(

      p_product_id 
    IN products.id%TYPE ;
      p_factor   
    IN NUMBER ;
      
      ) 
    AS

      product_count 
    INTEGER ;

      
    BEGIN 
      
    Select 
      
    COUNT(*)
      
    INTO
      product_count
      
    FROM 
      products
      
    Where
      id 
    = p_product_id;

      
    IF product_count = 1 THEN
      
    Update
          products
      
    SET
          price 
    = price * p_factor ;
      
    COMMIT ;
      
    END IF ;

      
    END update_product_price ;
      
    /
  • 相关阅读:
    css
    博客目录
    macOS下psql客户端中文乱码问题
    PostgreSQL dblink的使用
    error: RPC failed; curl 56 LibreSSL SSL_read: SSL_ERROR_SYSCALL, errno 60
    mac中环境变量配置
    PostgreSQL Copy 命令
    Linux下rz命令和sz命令使用方法
    Tmux 使用教程
    create_time和update_time自动填写
  • 原文地址:https://www.cnblogs.com/ding0910/p/740356.html
Copyright © 2011-2022 走看看