118.Oracle数据库SQL开发之 PLSQL编程——过程
欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/50086947
过程包含一组SQL和PL/SQL语句。
过程可将业务逻辑集中在数据库中,任何能够访问数据库的程序都可以使用过程。
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.
可通过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);
从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
DROP PROCEDURE 用于删除过程。如下:
store@PDB1> DROP PROCEDURE update_product_price;
Procedure dropped.
如果在创建过程时数据库报告出错,可以通过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