Tóm tắt: Trong hướng dẫn này, bạn sẽ tìm hiểu cách sử dụng Cursor.callfunc[]
để gọi chức năng được lưu trữ PL/SQL từ chương trình Python.: in this tutorial, you will learn how to use the Cursor.callfunc[]
to call a PL/SQL stored function from a Python program.
Thiết lập chức năng PL/SQL
Tuyên bố sau đây tạo ra một chức năng được lưu trữ mới gọi là get_revenue[]
trả về doanh thu bán hàng của một nhân viên bán hàng trong một năm cụ thể.
Code language: SQL [Structured Query Language] [sql]
CREATE OR REPLACE FUNCTION get_revenue[ salesman_code NUMBER, year NUMBER] RETURN NUMBER IS l_revenue NUMBER; BEGIN SELECT SUM[quantity*unit_price] INTO l_revenue FROM orders INNER JOIN order_items USING [order_id] WHERE salesman_id = salesman_code AND EXTRACT[YEAR FROM order_date] = YEAR; RETURN l_revenue; END;
Khối ẩn danh này kiểm tra chức năng được lưu trữ get_revenue[]
có được doanh thu bán hàng của ID nhân viên bán hàng 54 trong năm 2017:
Code language: SQL [Structured Query Language] [sql]
SET SERVEROUTPUT ON; DECLARE l_revenue NUMBER; BEGIN l_revenue := get_revenue[54, 2017]; dbms_output.put_line[l_revenue]; END;
Đây là đầu ra:
1160350.79
Code language: Python [python]
Để thực hiện chức năng được lưu trữ PL/SQL, bạn sử dụng phương thức
0. Mã sau đây minh họa cách gọi chức năng được lưu trữCode language: SQL [Structured Query Language] [sql]
SET SERVEROUTPUT ON; DECLARE l_revenue NUMBER; BEGIN l_revenue := get_revenue[54, 2017]; dbms_output.put_line[l_revenue]; END;
get_revenue[]
và hiển thị doanh thu của nhân viên bán hàng 54 trong năm 2017:Code language: Python [python]
import cx_Oracle import config as cfg def get_revenue[salesman_id, year]: """ Get revenue by salesman in a specific year :param salesman_id: :param year: :return: the revenue """ revenue = None try: # create a connection to the Oracle Database with cx_Oracle.connect[cfg.username, cfg.password, cfg.dsn, encoding=cfg.encoding] as connection: # create a new cursor with connection.cursor[] as cursor: # call the function revenue = cursor.callfunc['get_revenue', float, [salesman_id, year]] except cx_Oracle.Error as error: print[error] return revenue if __name__ == '__main__': sales_revenue = get_revenue[54, 2017] print[sales_revenue] # 1160350.79
Trong ví dụ này:
Đầu tiên, thiết lập kết nối với cơ sở dữ liệu Oracle bằng cách gọi phương thức
2 với các tham số được cung cấp bởi mô -đunCode language: SQL [Structured Query Language] [sql]
SET SERVEROUTPUT ON; DECLARE l_revenue NUMBER; BEGIN l_revenue := get_revenue[54, 2017]; dbms_output.put_line[l_revenue]; END;
3:Code language: SQL [Structured Query Language] [sql]
SET SERVEROUTPUT ON; DECLARE l_revenue NUMBER; BEGIN l_revenue := get_revenue[54, 2017]; dbms_output.put_line[l_revenue]; END;
Code language: Python [python]
username = 'OT' password = '' dsn = 'localhost/pdborcl' port = 1512 encoding = 'UTF-8'
Thứ hai, tạo một đối tượng
4 mới bằng phương thứcCode language: SQL [Structured Query Language] [sql]
SET SERVEROUTPUT ON; DECLARE l_revenue NUMBER; BEGIN l_revenue := get_revenue[54, 2017]; dbms_output.put_line[l_revenue]; END;
5.Code language: SQL [Structured Query Language] [sql]
SET SERVEROUTPUT ON; DECLARE l_revenue NUMBER; BEGIN l_revenue := get_revenue[54, 2017]; dbms_output.put_line[l_revenue]; END;
Thứ ba, hãy gọi hàm được lưu trữ get_revenue[]
bằng phương thức Cursor.callfunc[]
:
Code language: Python [python]
cursor.callfunc['get_revenue', float, [salesman_id, year]]
Trong phương thức Cursor.callfunc[]
: Đối số đầu tiên là tên hàm được lưu trữ, đối số thứ hai là loại giá trị được trả về và đối số thứ ba là danh sách các đối số được truyền cho hàm được lưu trữ.
Mã sau đây kiểm tra chức năng get_revenue[]
với nhân viên bán hàng 54 và năm 2017:
Code language: Python [python]
sales_revenue = get_revenue[54, 2017] print[sales_revenue] # 1160350.79
Trong hướng dẫn này, bạn đã học được cách sử dụng phương thức Cursor.callfunc[]
để gọi hàm được lưu trữ PL/SQL trong Python.
Hướng dẫn này có hữu ích không?