118.Oracle数据库SQL开发之 PLSQL编程——过程

118.Oracle数据库SQL开发之 PLSQL编程——过程

欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/50086947

过程包含一组SQL和PL/SQL语句。

过程可将业务逻辑集中在数据库中,任何能够访问数据库的程序都可以使用过程。

1.  创建过程

CREATE PROCEDURE 语句可以用于创建过程。

如下:

CREATE PROCEDURE update_product_price(

  p_product_idIN products.product_id%TYPE,

  p_factor     IN NUMBER

) AS

  v_product_countINTEGER;

BEGIN

  -- count thenumber of products with the

  -- suppliedproduct_id (will be 1 if the product exists)

  SELECTCOUNT(*)

  INTOv_product_count

  FROM products

  WHEREproduct_id = p_product_id;

 

  -- if theproduct exists (v_product_count = 1) then

  -- updatethat product's price

  IFv_product_count = 1 THEN

    UPDATEproducts

    SET price =price * p_factor

    WHEREproduct_id = p_product_id;

    COMMIT;

  END IF;

EXCEPTION

  WHEN OTHERSTHEN

    ROLLBACK;

END update_product_price;

/

此过程接收了两个参数p_product_id和p_factor.

2.  调用过程

可通过CALL语句运行或调用过程。如下:

store@PDB1> select price from products whereproduct_id=1;

 

    PRICE

----------

         40

调用update_product_price(),并向其传递参数1 和 1.5

store@PDB1> call update_product_price(1,1.5);

 

Call completed.

 

store@PDB1> select price from products whereproduct_id=1;

 

    PRICE

----------

         60

在11g中个,可以使用命令表示法或混合表示法来传递参数。例如:

CALLupdate_product_price(p_factor=>1.3,p_product_id => 2);

3.  获取过程信息

从user_procedures视图中可以获得有关过程的信息。

从all_procedures中可以获得有关访问的所有过程的信息。

例如:

store@PDB1> select object_name,aggregate,parallelfrom user_procedures where object_name='UPDATE_PRODUCT_PRICE';

 

OBJECT_NAME

----------------------------------------------------------------------------------------------------

AGG PAR

--- ---

UPDATE_PRODUCT_PRICE

NO NO

4.  删除过程

DROP PROCEDURE 用于删除过程。如下:

store@PDB1> DROP PROCEDURE update_product_price;

 

Procedure dropped.

5.  查看过程中的错误

如果在创建过程时数据库报告出错,可以通过SHOW ERRORS命令查看其中的错误。

如下:

store@PDB1> CREATE PROCEDURE update_customer_dob (p_customer_id INTEGER,p_dob DATE ) AS

    BEGIN

    UPDATEcustomers

    SETdob=p_dobs

    WHEREcustomer_id = p_customer_id;

    ENDupdate_customer_dob;

    /

 

Warning: Procedure created with compilationerrors.

输入SHOW ERRORS命令:

store@PDB1> show errors

Errors for PROCEDURE UPDATE_CUSTOMER_DOB:

 

LINE/COL ERROR

-------------------------------------------------------------------------

3/1   PL/SQL: SQL Statement ignored

4/9   PL/SQL: ORA-00904: "P_DOBS": invalid identifier

你可能感兴趣的:(118.Oracle数据库SQL开发之 PLSQL编程——过程)