Trang này dựa trên mô-đun mở rộng cx_oracle Python. Nó được phát triển trên máy ảo chạy Oracle Enterprise Linux 6U4 chạy Oracle 11. 2. 0. 4 và Trăn 2. 6. 6 Show
Cài đặt và cấu hìnhGiả sử Python 2. 6 đã được cài đặt, công việc đầu tiên là cài đặt mô-đun cx_oracle. Tại thời điểm viết bài, phiên bản hiện tại vẫn là 5. 1. 3 mà các tệp nhị phân có sẵn cho cả Windows và Linux. Đối với các nền tảng khác, các nguồn có thể được tải xuống và biên dịch Tôi đã tải xuống phiên bản 5. 1. 2 từ http. //nguồnforge. net/projects/cx-oracle/files có sẵn RPM sau. Đây là trận đấu gần nhất với môi trường của tôi cx_Oracle-5.1.2-11g-py26-1.x86_64.rpm Cài đặt là tiêu chuẩn. Là người dùng root rpm -ivh cx_Oracle-5.1.2-11g-py26-1.x86_64.rpm VM của tôi đã chứa Oracle 11. 2. 0. 4 Enterprise Edition với cơ sở dữ liệu có tên "TARGET". Tôi đặt các biến môi trường sau trong. bash_profile export ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1 export LD_LIBRARY_PATH=$ORACLE_HOME/lib export ORACLE_SID=TARGET Tôi hiếm khi cần đặt $LD_LIBRARY_PATH, nhưng trong trường hợp này, cần tránh gây ra lỗi sau khi nhập cx_Oracle ImportError: libclntsh.so.11.1: cannot open shared object file: No such file or directory Sự chuẩn bịcx_oracle hỗ trợ nhiều phương thức kết nối khác nhau. Nếu có thể, tôi muốn sử dụng bí danh TNS với máy khách Oracle vì bí danh có thể được định cấu hình để sử dụng cân bằng tải kết nối, chuyển đổi dự phòng, v.v. Đối với bài đăng này, máy ảo của tôi được gọi là vm16, vì vậy mục nhập trong $ORACLE_HOME/network/admin/tnsnames. ora là TARGET= (DESCRIPTION= (ADDRESS=(HOST=vm16)(PROTOCOL=TCP)(PORT=1521)) (CONNECT_DATA= (SERVER=DEDICATED) (SERVICE_NAME=TARGET) ) ) Tập lệnh mẫuSau đây là đoạn script hoàn chỉnh kết nối với cơ sở dữ liệu, thực thi câu lệnh tổng hợp SELECT đơn giản và trả về kết quả #!/usr/bin/python # Example of fetchone import sys import cx_Oracle def printf (format,*args): sys.stdout.write (format % args) def printException (exception): error, = exception.args printf ("Error code = %s\n",error.code); printf ("Error message = %s\n",error.message); username = 'scott' password = 'tiger' databaseName = "TARGET" try: connection = cx_Oracle.connect (username,password,databaseName) except cx_Oracle.DatabaseError, exception: printf ('Failed to connect to %s\n',databaseName) printException (exception) exit (1) cursor = connection.cursor () try: cursor.execute ('SELECT COUNT(*) FROM emp') except cx_Oracle.DatabaseError, exception: printf ('Failed to select from EMP\n') printException (exception) exit (1) count = cursor.fetchone ()[0] printf ('Count = %d\n',count) cursor.close () connection.close () exit (0) Đoạn mã trên được thảo luận trong các phần sau câu lệnh printfPython không bao gồm câu lệnh printf. Tuy nhiên chức năng thư viện sau đây cung cấp chức năng tương tự import sys def printf (format,*args): sys.stdout.write (format % args) Điều này có thể được gọi bằng cú pháp C quen thuộc. Ví dụ printf ("Str %s Int %d\n",s,i) hàm printExceptionTôi cũng đã tạo một chức năng để in chi tiết về bất kỳ ngoại lệ nào được đưa ra khi truy cập cơ sở dữ liệu ________số 8_______Sự liên quanKết nối yêu cầu tên người dùng, mật khẩu và bí danh TNS username = 'scott' password = 'tiger' databaseName = "TARGET" Kinh nghiệm đã chứng minh rằng thực thi tốt các phương thức cx_oracle để truy cập cơ sở dữ liệu trong một lần thử. cấu trúc ngoại trừ để nắm bắt và báo cáo bất kỳ ngoại lệ nào mà họ có thể ném. Hàm printException in chi tiết hơn Đối với kết nối tôi đã sử dụng đoạn mã sau rpm -ivh cx_Oracle-5.1.2-11g-py26-1.x86_64.rpm0 Kết nối nên được đóng lại khi không còn cần thiết sử dụng rpm -ivh cx_Oracle-5.1.2-11g-py26-1.x86_64.rpm1 Bạn nên phát triển mã xử lý ngoại lệ ngay từ đầu, sau đó hầu hết có thể được sử dụng lại cho các lệnh gọi phương thức cx_oracle khác. Hãy nhớ khôi phục mọi giao dịch chưa được cam kết, đóng con trỏ và đóng mọi kết nối khi ngoại lệ được đưa ra Ngoài ra, hãy cân nhắc sử dụng mệnh đề cuối cùng trong câu lệnh thử. Mệnh đề cuối cùng của câu lệnh thử được thực thi bất kể ngoại lệ nào có thể được nêu ra Quản lý con trỏTrong phần trước chúng ta đã tạo kết nối. Bây giờ chúng ta cần tạo một con trỏ như sau rpm -ivh cx_Oracle-5.1.2-11g-py26-1.x86_64.rpm2 Con trỏ phải được đóng khi không còn cần sử dụng rpm -ivh cx_Oracle-5.1.2-11g-py26-1.x86_64.rpm3 Lớp Con trỏ có một số phương thức mạnh cho phép các câu lệnh và khối PL/SQL được chuẩn bị và thực thi thực hiện phương thứcCon trỏ. phương thức thực thi là cách dễ nhất để thực hiện các câu lệnh đơn giản bao gồm DDL Câu lệnh SELECT đơn giản là một tổng hợp trả về một cột trong một hàng rpm -ivh cx_Oracle-5.1.2-11g-py26-1.x86_64.rpm4 Chúng ta có thể kiểm tra kết quả như sau rpm -ivh cx_Oracle-5.1.2-11g-py26-1.x86_64.rpm5 Trong trường hợp này, phương thức tìm nạp phù hợp hơn khi chúng ta mong đợi một hàng Ngoài ra, chúng ta có thể đã sử dụng Con trỏ. phương thức tìm nạp tìm nạp tất cả các hàng được trả về bởi câu lệnh rpm -ivh cx_Oracle-5.1.2-11g-py26-1.x86_64.rpm6 CHỌN câu lệnhPhần này xem xét các ví dụ phức tạp hơn của câu lệnh SELECT. Ví dụ tiếp theo trả về nhiều hàng và cột rpm -ivh cx_Oracle-5.1.2-11g-py26-1.x86_64.rpm7 Tôi đã tách câu lệnh SQL khỏi lời gọi đến con trỏ. thực hiện để cải thiện khả năng đọc. Ba dấu ngoặc kép ở đầu và cuối câu lệnh SQL cho phép nó được viết trên nhiều dòng. Điều này đặc biệt quan trọng đối với các câu lệnh SQL dài hơn khi cần thụt đầu dòng. Dấu gạch chéo ngược sau dấu ngoặc kép mở đầu ngăn không cho một ký tự dòng mới được thêm vào trước dòng đầu tiên. Một ký tự xuống dòng sẽ được thêm vào các dòng còn lại cho đến dấu ngoặc kép kết thúc Kết quả được trả về bằng Con trỏ. fetchall�phương thức trả về mảng 2 chiều. Tất cả các kết quả được trả về bằng một lệnh gọi tới hàm tìm nạp và được lưu trữ trong bộ nhớ tiến trình. Rõ ràng điều này hiệu quả khi chỉ có 14 nhân viên - nó sẽ không phù hợp với các tập kết quả lớn hơn. Trong trường hợp này, tôi đang lặp lại các kết quả, in từng dòng một. Điều này hoạt động nhưng không phải là đặc biệt có thể đọc được Một phiên bản thay thế của mã để xử lý cuộc gọi đến con trỏ. tìm nạp () theo sau rpm -ivh cx_Oracle-5.1.2-11g-py26-1.x86_64.rpm8 Phiên bản này dễ đọc hơn và cần ít bộ nhớ tiến trình hơn Biến ràng buộcCho đến nay các tuyên bố của chúng tôi chỉ sử dụng các giá trị theo nghĩa đen. Đây không phải là khả năng mở rộng đặc biệt trong khối lượng công việc lớn, vì vậy hầu hết các ứng dụng sử dụng các biến liên kết để giảm chi phí phân tích cú pháp Ví dụ sau đây cho thấy một câu lệnh có một vài biến liên kết trong các vị từ rpm -ivh cx_Oracle-5.1.2-11g-py26-1.x86_64.rpm9 Trong ví dụ trên, cuộc gọi đến con trỏ. thực thi bao gồm câu lệnh sql và các giá trị cho các biến liên kết 'job' và 'dept'. Lưu ý từ biến liên kết thứ hai rằng tên biến liên kết không nhất thiết phải giống với giá trị cột Chuẩn bị báo cáoTrong khi các biến liên kết giảm phân tích cú pháp ở một mức độ hạn chế, chúng không thể loại bỏ hoàn toàn. Để giảm thiểu việc phân tích cú pháp, tốt nhất là gán một câu lệnh đã chuẩn bị cho một con trỏ chuyên dụng. Sau đó, không cần thiết phải phân tích lại câu lệnh cho đến khi đóng con trỏ Trong đoạn mã sau, ví dụ biến liên kết từ phần trước đã được sửa đổi để sử dụng lệnh gọi chuẩn bị riêng export ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1 export LD_LIBRARY_PATH=$ORACLE_HOME/lib export ORACLE_SID=TARGET0 Trong ví dụ trên, câu lệnh được chuẩn bị bằng cách sử dụng con trỏ. chuẩn bị cuộc gọi và sau đó được thực hiện bởi con trỏ. thực hiện cuộc gọi Lưu ý rằng tham số đầu tiên của con trỏ. thực hiện cuộc gọi là "Không". Điều này chỉ định rằng con trỏ nên sử dụng câu lệnh đã chuẩn bị sẵn thay vì phân tích cú pháp câu lệnh SQL mới Ngoài ra, con trỏ. câu lệnh thực thi có thể lấy con trỏ. tuyên bố như là tham số đầu tiên. Ví dụ export ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1 export LD_LIBRARY_PATH=$ORACLE_HOME/lib export ORACLE_SID=TARGET1 con trỏ. câu lệnh trả về câu lệnh cuối cùng được phân tích cú pháp bởi con trỏ INSERT câu lệnhPhần này thảo luận về câu lệnh INSERT. Ví dụ đầu tiên sử dụng các biến liên kết để chèn một hàng mới vào bảng DEPT export ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1 export LD_LIBRARY_PATH=$ORACLE_HOME/lib export ORACLE_SID=TARGET2 Trong ví dụ này, các giá trị được cung cấp dưới dạng tham số cho con trỏ. phương thức thực thi () Lưu ý tuyên bố cam kết khi kết thúc giao dịch Ví dụ sau sử dụng từ điển thay vì danh sách tham số export ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1 export LD_LIBRARY_PATH=$ORACLE_HOME/lib export ORACLE_SID=TARGET3 Trong ví dụ trên, một từ điển được chuyển đến con trỏ. phương thức thực thi (). Từ điển chứa các cặp tên-giá trị cho các giá trị cột được chèn vào hàng mới Ví dụ tiếp theo minh họa việc sử dụng câu lệnh INSERT đã chuẩn bị export ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1 export LD_LIBRARY_PATH=$ORACLE_HOME/lib export ORACLE_SID=TARGET4 Như với ví dụ câu lệnh SELECT, con trỏ. phương thức thực thi có thể sử dụng con trỏ. statement() thay vì Không có, như hình bên dưới export ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1 export LD_LIBRARY_PATH=$ORACLE_HOME/lib export ORACLE_SID=TARGET5 CẬP NHẬT Tuyên bốPhần này thảo luận về các câu lệnh CẬP NHẬT. Ví dụ đầu tiên sử dụng các biến liên kết export ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1 export LD_LIBRARY_PATH=$ORACLE_HOME/lib export ORACLE_SID=TARGET6 Trong ví dụ trên, các giá trị biến liên kết được chỉ định trong các đối số của lệnh gọi tới con trỏ. exec() Ví dụ tiếp theo sử dụng một câu lệnh chuẩn bị export ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1 export LD_LIBRARY_PATH=$ORACLE_HOME/lib export ORACLE_SID=TARGET7 Như với ví dụ câu lệnh INSERT, Con trỏ. phương thức thực thi có thể sử dụng Con trỏ. tuyên bố thay vì Không, như hình dưới đây export ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1 export LD_LIBRARY_PATH=$ORACLE_HOME/lib export ORACLE_SID=TARGET8 Tuyên bố XÓAPhần này thảo luận về các câu lệnh DELETE. Sau đây là một ví dụ về thao tác xóa sử dụng biến liên kết export ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1 export LD_LIBRARY_PATH=$ORACLE_HOME/lib export ORACLE_SID=TARGET9 Cũng như các ví dụ trước, Con trỏ. thực thi có thể sử dụng Con trỏ. tuyên bố thay vì Không, như hình dưới đây ImportError: libclntsh.so.11.1: cannot open shared object file: No such file or directory0 Hoạt động mảngCho đến nay, chúng tôi đã tập trung vào các câu lệnh chỉ thực hiện một lần truy cập cơ sở dữ liệu cho mỗi lần thực hiện. Tuy nhiên, nếu chúng tôi muốn ứng dụng của mình mở rộng quy mô, tại một số giai đoạn, chúng tôi sẽ cần xem xét các hoạt động hàng loạt để giảm số chuyến đi khứ hồi từ máy khách đến máy chủ. Trong phần này, chúng ta sẽ kiểm tra các kỹ thuật tạo khối cho các câu lệnh SELECT cũng như các câu lệnh INSERT, UPDATE và DELETE câu lệnh CHỌNĐối với các câu lệnh CHỌN, chúng ta có thể kiểm soát số lượng câu lệnh được truy xuất cho mỗi lần tìm nạp bằng Con trỏ. kích thước mảng Câu lệnh sau đặt kích thước mảng thành 4 và sau đó truy vấn bảng EMP ImportError: libclntsh.so.11.1: cannot open shared object file: No such file or directory1 Ví dụ trên bao gồm việc tạo con trỏ bằng kết nối. con trỏ () vì con trỏ phải tồn tại trước khi kích thước mảng có thể được sửa đổi Trong ví dụ này, chúng tôi đang sử dụng Con trỏ. phương thức fetchmany để tìm nạp các hàng. Mỗi lần tìm nạp ngoại trừ lần tìm nạp cuối cùng sẽ trả về bốn hàng cho ứng dụng Đầu ra của đoạn script trên là ImportError: libclntsh.so.11.1: cannot open shared object file: No such file or directory2 Có 14 hàng trong bảng EMP Ưu điểm của việc chỉ định kích thước mảng là máy khách có nhiều quyền kiểm soát hơn đối với việc sử dụng bộ nhớ. Chỉ các hàng được truy xuất bởi một lệnh gọi tới hàm tìm nạp, trong trường hợp này là bốn, sẽ được lưu trữ trong bộ nhớ trên máy khách. Nếu chúng ta đã sử dụng Con trỏ. tìm nạp thay vì tìm nạp nhiều, thì tất cả các hàng sẽ được trả về và sẽ cần được lưu trữ trong bộ nhớ máy khách Tác động đến máy chủ cơ sở dữ liệu phụ thuộc vào bản chất của truy vấn. Nếu truy vấn là một thao tác đã đặt thì tất cả các hàng kết quả sẽ cần được lưu trữ trong bộ nhớ cục bộ trên máy chủ cơ sở dữ liệu cho đến khi chúng được ứng dụng tìm nạp hoặc con trỏ đã được đóng. Nếu truy vấn là thao tác hàng thì có thể chỉ cần lưu trữ đủ kết quả để đáp ứng yêu cầu tìm nạp mới nhất Vì truy vấn trên bao gồm một mệnh đề ORDER by, nên gần như chắc chắn nó đang thực thi như một thao tác đã đặt vì không có chỉ mục trên cột ENAME Đặt kích thước mảng sẽ kiểm soát số lượng thông báo mạng được trao đổi giữa máy khách và máy chủ API DB khuyến nghị rằng kích thước mảng mặc định là 1. Tuy nhiên, cx_oracle bỏ qua đề xuất này và đặt giá trị mặc định là 50. Chúng ta có thể kiểm tra điều này bằng cách sử dụng ImportError: libclntsh.so.11.1: cannot open shared object file: No such file or directory3 Nếu con trỏ. kích thước mảng không được đặt, thì truy vấn sẽ tìm nạp tất cả các hàng. Đầu ra sẽ là ImportError: libclntsh.so.11.1: cannot open shared object file: No such file or directory4 Nếu con trỏ. kích thước mảng được đặt thành 1, thì truy vấn sẽ tìm nạp từng hàng một. Đầu ra sẽ là ImportError: libclntsh.so.11.1: cannot open shared object file: No such file or directory5 Câu lệnh INSERT mảngVí dụ trước đã nghiên cứu việc sử dụng kích thước mảng để quản lý các lần tìm nạp từ các câu lệnh SELECT. Trong các phần sau, chúng ta sẽ thảo luận về việc sử dụng mảng với các câu lệnh INSERT, UPDATE và DELETE. Trong phần này, chúng ta sẽ đề cập đến các câu lệnh INSERT mảng Sau đây là một ví dụ về một mảng INSERT ba hàng vào bảng DEPT ImportError: libclntsh.so.11.1: cannot open shared object file: No such file or directory6 Lưu ý rằng chúng tôi đang sử dụng Con trỏ. phương thức execmany() thay vì Cursor. hành hình () Nếu chúng tôi bật theo dõi cho câu lệnh trên, chúng tôi có thể xác minh rằng việc chèn mảng đã được thực hiện trên máy chủ cơ sở dữ liệu ImportError: libclntsh.so.11.1: cannot open shared object file: No such file or directory7 Ở trên, dòng EXEC bao gồm r=3 cho biết rằng ba hàng đã được chèn vào Chúng ta cũng có thể gọi hàm thực thi bằng cách sử dụng con trỏ. tuyên bố như là tham số đầu tiên ImportError: libclntsh.so.11.1: cannot open shared object file: No such file or directory8 Tuyên bố CẬP NHẬT mảngChúng ta cũng có thể sử dụng mảng với câu lệnh CẬP NHẬT. Trong ví dụ sau, chúng tôi đang sử dụng một từ điển để truyền các giá trị biến liên kết cho con trỏ. phương thức thực thi ImportError: libclntsh.so.11.1: cannot open shared object file: No such file or directory9 Một lần nữa, dấu vết cho thấy rằng cả ba hàng đã được cập nhật bằng một lần thực thi câu lệnh CẬP NHẬT TARGET= (DESCRIPTION= (ADDRESS=(HOST=vm16)(PROTOCOL=TCP)(PORT=1521)) (CONNECT_DATA= (SERVER=DEDICATED) (SERVICE_NAME=TARGET) ) )0 Như với ví dụ trước, dòng EXEC bao gồm r=3 cho biết rằng ba hàng đã được cập nhật Câu lệnh DELETE mảngMảng cũng có thể được sử dụng với câu lệnh DELETE. Như với các câu lệnh CẬP NHẬT, ví dụ này sử dụng từ điển để chỉ định các biến liên kết TARGET= (DESCRIPTION= (ADDRESS=(HOST=vm16)(PROTOCOL=TCP)(PORT=1521)) (CONNECT_DATA= (SERVER=DEDICATED) (SERVICE_NAME=TARGET) ) )1 Trong ví dụ trên, mảng được sử dụng để chỉ định deptno cho từng hàng trong số ba hàng sẽ bị xóa Như trong các ví dụ DML trước, dòng EXEC trong tệp theo dõi bao gồm r=3 chỉ ra rằng ba hàng đã bị xóa TARGET= (DESCRIPTION= (ADDRESS=(HOST=vm16)(PROTOCOL=TCP)(PORT=1521)) (CONNECT_DATA= (SERVER=DEDICATED) (SERVICE_NAME=TARGET) ) )2 Gọi chương trình con PL/SQLCác thủ tục và hàm PL/SQL có thể được gọi bằng Con trỏ. callproc và con trỏ. phương thức callfunc Thủ tục PL/SQLGiả sử chúng ta đã tạo thủ tục PL/SQL sau TARGET= (DESCRIPTION= (ADDRESS=(HOST=vm16)(PROTOCOL=TCP)(PORT=1521)) (CONNECT_DATA= (SERVER=DEDICATED) (SERVICE_NAME=TARGET) ) )3 Chúng ta có thể gọi thủ tục bằng đoạn mã sau TARGET= (DESCRIPTION= (ADDRESS=(HOST=vm16)(PROTOCOL=TCP)(PORT=1521)) (CONNECT_DATA= (SERVER=DEDICATED) (SERVICE_NAME=TARGET) ) )4 Con trỏ. phương thức callproc chỉ định tên của thủ tục và cũng là danh sách các tham số biến liên kết Lưu ý rằng trong ví dụ này, các biến liên kết là các tham số đầu vào Hàm PL/SQLGiả sử chúng ta đã tạo hàm PL/SQL sau để trả về số lượng nhân viên với một công việc cụ thể trong một bộ phận cụ thể TARGET= (DESCRIPTION= (ADDRESS=(HOST=vm16)(PROTOCOL=TCP)(PORT=1521)) (CONNECT_DATA= (SERVER=DEDICATED) (SERVICE_NAME=TARGET) ) )5 Để gọi hàm chúng ta sử dụng con trỏ. phương thức callfunc TARGET= (DESCRIPTION= (ADDRESS=(HOST=vm16)(PROTOCOL=TCP)(PORT=1521)) (CONNECT_DATA= (SERVER=DEDICATED) (SERVICE_NAME=TARGET) ) )6 Đoạn mã trên tạo một biến kết quả bằng cách sử dụng con trỏ. phương pháp var. Sau đó, nó gọi hàm PL/SQL FUNC1 chuyển công việc và deptno dưới dạng biến liên kết. Kết quả được trả về trong một đối tượng Biến và sau đó được chuyển đổi thành một số bằng cách sử dụng Biến. phương thức getvalue Các thủ tục có tham số OUTNếu chương trình con PL/SQL chỉ trả về một giá trị thì nó thường được viết dưới dạng hàm. Tuy nhiên, nếu chương trình con PL/SQL cần trả về nhiều hơn một giá trị, nó thường sẽ trả về chúng dưới dạng tham số OUT Thủ tục sau đây trả về tên nhân viên và công việc cho một mã số nhân viên cụ thể TARGET= (DESCRIPTION= (ADDRESS=(HOST=vm16)(PROTOCOL=TCP)(PORT=1521)) (CONNECT_DATA= (SERVER=DEDICATED) (SERVICE_NAME=TARGET) ) )7 Quy trình có một tham số đầu vào (p_empno) và hai tham số đầu ra (p_ename và p_job) Đoạn mã sau gọi PROC2 TARGET= (DESCRIPTION= (ADDRESS=(HOST=vm16)(PROTOCOL=TCP)(PORT=1521)) (CONNECT_DATA= (SERVER=DEDICATED) (SERVICE_NAME=TARGET) ) )8 Đoạn mã trên tạo một tham số đầu vào cho empno và hai tham số đầu ra để nhận kết quả cho ename và job. Thủ tục được gọi bằng con trỏ. phương thức callproc chỉ định tên của thủ tục (PROC2) và danh sách các tham số Các tham số OUT được trả về dưới dạng các đối tượng Biến. biến. phương thức getvalue phải được gọi để trích xuất giá trị từ đối tượng Các thủ tục có tham số IN-OUTCó thể tranh luận liệu các tham số IN-OUT cho các kiểu dữ liệu đơn giản có hợp lý hay không và do đó rất khó để đưa ra một ví dụ đáng tin cậy cho cơ sở dữ liệu scott/tiger. Tuy nhiên, thường cần phải gọi các chương trình con do người khác phát triển, trong trường hợp đó chúng có thể tuân theo các tiêu chuẩn khác nhau. Quy trình PL/SQL sau đây thêm các giá trị đã chỉ định cho SAL và COMM vào các giá trị hiện có trong bảng cho EMPNO đã chỉ định. Thủ tục PL/SQL trả về các giá trị mới trong cùng một tham số TARGET= (DESCRIPTION= (ADDRESS=(HOST=vm16)(PROTOCOL=TCP)(PORT=1521)) (CONNECT_DATA= (SERVER=DEDICATED) (SERVICE_NAME=TARGET) ) )9 Đoạn mã sau gọi thủ tục PROC3 cho EMPNO 7499 #!/usr/bin/python # Example of fetchone import sys import cx_Oracle def printf (format,*args): sys.stdout.write (format % args) def printException (exception): error, = exception.args printf ("Error code = %s\n",error.code); printf ("Error message = %s\n",error.message); username = 'scott' password = 'tiger' databaseName = "TARGET" try: connection = cx_Oracle.connect (username,password,databaseName) except cx_Oracle.DatabaseError, exception: printf ('Failed to connect to %s\n',databaseName) printException (exception) exit (1) cursor = connection.cursor () try: cursor.execute ('SELECT COUNT(*) FROM emp') except cx_Oracle.DatabaseError, exception: printf ('Failed to select from EMP\n') printException (exception) exit (1) count = cursor.fetchone ()[0] printf ('Count = %d\n',count) cursor.close () connection.close () exit (0)0 Đoạn mã trên đặt giá trị cho EMPNO là tham số đầu vào. Sau đó, nó tạo các đối tượng Biến cho hai tham số đầu ra và đặt giá trị ban đầu cho các tham số này bằng cách sử dụng Biến. phương pháp đặt giá trị. Tham số đầu tiên trong Con trỏ. cuộc gọi var thường sẽ là 0 Sau đó, thủ tục gọi PROC3 bằng Con trỏ. phương thức callproc. Khi thủ tục trả về, các giá trị của tham số SAL và COMM được trích xuất từ các đối tượng Biến bằng cách sử dụng Biến. phương thức getvalue Làm cách nào để chèn dữ liệu vào Oracle bằng Python?Chèn dữ liệu vào bảng từ Python . username = 'OT' password = ' sự liên quan. làm(). insert_billing(ngày giờ. bây giờ (), 1200, 1, Không có). CHỌN * TỪ billing_headders; Chúng ta có thể sử dụng chức năng chèn trong Oracle không?Chèn dữ liệu
. Lệnh này sẽ lấy tên bảng, cột bảng và giá trị cột làm đầu vào và chèn giá trị vào bảng cơ sở. we can insert the data into any table using the SQL command INSERT INTO. This command will take the table name, table column and column values as the input and insert the value in the base table.
Chèn Oracle là gì?Câu lệnh INSERT thêm một hoặc nhiều hàng dữ liệu mới vào bảng cơ sở dữ liệu . Để biết mô tả đầy đủ về câu lệnh INSERT, hãy xem Tham khảo cơ sở dữ liệu SQL của Oracle.
Làm cách nào để chạy truy vấn Oracle trong Python?Các bước kết nối Python với Oracle bằng cx_Oracle connect . Bước 1. Cài đặt gói cx_Oracle. Nếu bạn chưa làm như vậy, hãy cài đặt gói cx_Oracle. . Bước 2. Truy xuất thông tin kết nối. Tiếp theo, lấy thông tin kết nối. . Bước 3. Kết nối Python với Oracle bằng cx_Oracle connect |