Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Gọi thủ tục được lưu trữ có chứa tập hợp các bản ghi bằng cách sử dụng callproc trong python

Bạn không thể sử dụng trực tiếp collections.namedtuple như kiểu đối tượng Oracle.

Tôi đã thử cách dưới đây trên Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 với Cx-Oracle-7.0.0 Python 3.6.4 và nó phù hợp với tôi.

Tạo LOẠI

CREATE OR REPLACE TYPE object_tag_rec AS OBJECT (
     tag_type       VARCHAR2(1),
     tag_category   VARCHAR2(100),
     tag_key        VARCHAR2(250),
     tag_value      VARCHAR2(250),
     created_by     VARCHAR2(50)
);
/

Tạo bộ sưu tập

CREATE OR REPLACE TYPE object_tag_tbl is TABLE OF object_tag_rec;
/

Tạo thủ tục

CREATE OR REPLACE procedure  sp_add_object_tags(
pi_account_id               IN  INT,
pi_object_id                IN  INT,
pi_all_tags_identified      IN  VARCHAR2,
pi_object_tag_tbl           IN  object_tag_tbl,
po_error_code               OUT NUMBER,
po_error_message            OUT VARCHAR2 )
AS 
BEGIN

   po_error_code    := 0;
   po_error_message := 'NO ERRORS';
END;
/

import cx_Oracle
conn = cx_Oracle.connect('user/[email protected]//localhost:1521/dbname')
cur = conn.cursor()

recordTypeObj = conn.gettype("HR.OBJECT_TAG_REC") #mind the cases
tableTypeObj  = conn.gettype("HR.OBJECT_TAG_TBL")
params = tableTypeObj.newobject()

rec = recordTypeObj.newobject()
(rec.TAG_TYPE,rec.TAG_CATEGORY,rec.TAG_KEY,rec.TAG_VALUE,rec.CREATED_BY) = ("S","person","person","1","abc")  
#mind the cases for attributes.

po_error_code    = cur.var(cx_Oracle.NUMBER)
po_error_message = cur.var(cx_Oracle.STRING)

params.append(rec)
cur.callproc('dbms_output.enable')
cur.callproc('hr.sp_add_object_tags', [1234, 5678, 'N', params, po_error_code, po_error_message])

print (po_error_code.getvalue(),po_error_message.getvalue())

Thực thi

$python pass_obj.py
0.0 NO ERRORS



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle:cập nhật nhiều bảng => ORA-01779:không thể sửa đổi một cột ánh xạ tới một bảng không được bảo toàn khóa

  2. oracle express 11g ngoại lệ kỳ lạ

  3. ResultSet.getTimestamp (date) so với ResultSet.getTimestamp (date, Calendar.getInstance (tz))

  4. các ràng buộc của trình nạp bị vi phạm khi liên kết lớp javax / xml / namespace / QName từ ứng dụng web trên Oracle 10g

  5. Chuyển đổi và tổng hợp dữ liệu cột Oracle