Hướng dẫn how do you call a stored function in python? - làm thế nào để bạn gọi một chức năng được lưu trữ trong python?

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ể.

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;

Code language: SQL (Structured Query Language) (sql)

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:

SET SERVEROUTPUT ON; DECLARE l_revenue NUMBER; BEGIN l_revenue := get_revenue(54, 2017); dbms_output.put_line(l_revenue); END;

Code language: SQL (Structured Query Language) (sql)

Đâ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

SET SERVEROUTPUT ON; DECLARE l_revenue NUMBER; BEGIN l_revenue := get_revenue(54, 2017); dbms_output.put_line(l_revenue); END;

Code language: SQL (Structured Query Language) (sql)
0. Mã sau đây minh họa cách gọi chức năng được lưu trữ get_revenue() và hiển thị doanh thu của nhân viên bán hàng 54 trong năm 2017:

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

Code language: Python (python)

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

SET SERVEROUTPUT ON; DECLARE l_revenue NUMBER; BEGIN l_revenue := get_revenue(54, 2017); dbms_output.put_line(l_revenue); END;

Code language: SQL (Structured Query Language) (sql)
2 với các tham số được cung cấp bởi mô -đun

SET SERVEROUTPUT ON; DECLARE l_revenue NUMBER; BEGIN l_revenue := get_revenue(54, 2017); dbms_output.put_line(l_revenue); END;

Code language: SQL (Structured Query Language) (sql)
3:

username = 'OT' password = '<password>' dsn = 'localhost/pdborcl' port = 1512 encoding = 'UTF-8'

Code language: Python (python)

Thứ hai, tạo một đối tượng

SET SERVEROUTPUT ON; DECLARE l_revenue NUMBER; BEGIN l_revenue := get_revenue(54, 2017); dbms_output.put_line(l_revenue); END;

Code language: SQL (Structured Query Language) (sql)
4 mới bằng phương thức

SET SERVEROUTPUT ON; DECLARE l_revenue NUMBER; BEGIN l_revenue := get_revenue(54, 2017); dbms_output.put_line(l_revenue); END;

Code language: SQL (Structured Query Language) (sql)
5.

Thứ ba, hãy gọi hàm được lưu trữ get_revenue() bằng phương thức Cursor.callfunc():

cursor.callfunc('get_revenue', float, [salesman_id, year])

Code language: Python (python)

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:

sales_revenue = get_revenue(54, 2017) print(sales_revenue) # 1160350.79

Code language: Python (python)

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?