-
Notifications
You must be signed in to change notification settings - Fork 364
Description
Computronix has recently upgrade cx_Oracle to version 7.1.1 and we have noticed that the rowcount attribute is returning as 0 when a PL/SQL block with a single insert statement is passed into executemany().
dataToInsert = [
(100, 'Jim', 'Ross', 'N', 'N'),
(101, 'John', 'MacLean', 'N', 'N'),
(102, 'Gary', 'Robertson', 'N', 'N'),
(102, 'Robert', 'Pierce', 'N', 'N'), # duplicate key
(103, 'Bob', 'Burke', 'N', 'N'),
(104, 'Faith', 'Hope', 'N', 'N'),
(105, 'Rudy', 'Rudy', 'N', 'N'),
(105, 'Charles', 'Anderson', 'N', 'N'), # duplicate key
]
#sqlStatement = "insert into ExternalContacts_t values (:1, :2, :3, :4, :5)"
plSqlStatement = "begin insert into ExternalContacts_t values (:1, :2, :3, :4, :5); end;"
try:
cursor.executemany(plSqlStatement, dataToInsert)
except cx_Oracle.DatabaseError as e:
error, = e.args
print("FAILED with error: %s") % error.message
print("number of rows which succeeded (rowcount): %s") % cursor.rowcount
If I run the same example but instead pass a SQL statement into executemany(), the rowcount attribute returns the correct number.
This was originally fixed in cx_Oracle version 5.1.2 addessing the following item from the cx_Oracle release notes: "2. Set the row number in a cursor when executing PL/SQL blocks as requested by Robert Ritchie."
-
What is your version of Python? Is it 32-bit or 64-bit?
2.7.13 (v2.7.13:a06454b1afa1, Dec 17 2016, 20:53:40) [MSC v.1500 64 bit (AMD64)] -
What is your cx_Oracle version?
7.1.1 & 7.1.2 tested -
What exact command caused the problem (e.g. what command did you try to install with)? Who were you logged in as?
executemany() passing in a PL/SQL block while logged in as the table owner; "sitespecific" in my case. -
What error(s) you are seeing?
row count is being reported as 0 when i would expect it to be reporting 3 which is the number of rows that succeeded before the duplicate key exception. -
What OS (and version) is Python executing on?
Windows 10 (1803/1809) -
What is your version of the Oracle client (e.g. Instant Client)? How was it installed? Where is it installed?
Installed the Oracle client, it is not an instant client.
Versions: 11.2.0.4 , 12.1.0.2 , 12.2.0.1
Location: "C:\oracle\product<version>\client" -
What is your Oracle Database version?
11.2.0.4 , 12.1.0.2 , 12.2.0.1 -
Do you have a small, single Python script that immediately runs to show us the problem?
If you run the cx_Oracle Samples and change the sqlStatement to a plSqlStatement the error can be reproduced.