-
Notifications
You must be signed in to change notification settings - Fork 93
Description
1. What versions are you using?
platform.platform: Windows-10-10.0.19045-SP0
sys.maxsize > 2**32: True
platform.python_version: 3.11.3
oracledb.version: 1.3.1
Oracle DB EE: 19.0.0.0.0
2. Is it an error or a hang or a crash?
Error
3. What error(s) or behavior you are seeing?
I already reported this error in /issues/207, but I made a mistake when obsfucating the data, which resulted in wrong order of columns when creating the table. In this report, I'm providing (hopefully) corrected DDL script and also stdout of call with enabled PYO_DEBUG_PACKETS.
When running insert into table using executemany, it seems that the values are not properly bound to timestamp field.
Result error is:
ORA-01400: cannot insert NULL into ("DB_USER"."TABLE_1"."COL_16")
Eventhough the provided dictionary contains value for COL_16, it seems that it wasn't bound.
It seems that it is a new issue, because in version oracledb.version: 1.2.2 it was inserted properly. However, I'm not able to downgrade to 1.2.2, since it is not possible in our environment to rollback to previous versions.
We tried to avoid this issue by using positional binding and using TO_TIMESTAMP, but the behaviour remained the same.
4. Does your application call init_oracle_client()?
No
5. Include a runnable Python script that shows the problem.
Table creation:
CREATE TABLE TABLE_1
(
COL_1 NUMBER(38,0) NOT NULL ENABLE,
COL_2 VARCHAR2(100 CHAR) NOT NULL ENABLE,
COL_3 VARCHAR2(500 CHAR),
COL_4 NUMBER(38,0) NOT NULL ENABLE,
COL_5 VARCHAR2(500 CHAR),
COL_6 VARCHAR2(200 CHAR),
COL_7 VARCHAR2(100 CHAR),
COL_8 VARCHAR2(100 CHAR),
COL_9 VARCHAR2(50 CHAR),
COL_11 VARCHAR2(100 CHAR),
COL_10 VARCHAR2(50 CHAR),
COL_12 VARCHAR2(32 CHAR) NOT NULL ENABLE,
COL_13 VARCHAR2(255 CHAR),
COL_14 VARCHAR2(2000 CHAR),
COL_15 VARCHAR2(500 CHAR),
COL_16 TIMESTAMP (6) NOT NULL ENABLE,
COL_17 NUMBER NOT NULL ENABLE
);
Python code:
import oracledb
NLS_TIMESTAMP_FORMAT = 'YYYY-MM-DD HH24:MI:SS'
def insert_into(ora_conn: oracledb.Connection):
with ora_conn.cursor() as cursor:
cursor.execute(f"alter session set NLS_TIMESTAMP_FORMAT = '{NLS_TIMESTAMP_FORMAT}'")
sql = "insert into TEST_1(COL_1,COL_2,COL_3,COL_4,COL_5,COL_6,COL_7,COL_8,COL_9,COL_10,COL_11,COL_12,COL_13,COL_14,COL_15,COL_16,COL_17) VALUES (:1, :2, :3, :4, :5, :6, :7, :8, :9, :10, :11, :12, :13, :14, :15, :16, :17)"
data = []
data.append({':1': '1002', ':2': '6546546sdf56454', ':3': 'TPS2_8sdf_212', ':4': '12', ':5': '12) Test TEXT', ':6': 'TEST Text 2', ':7': 'toto.domain.com', ':8': 'Test text - text', ':9': '12155FD4544UU', ':10': '77445522', ':11': "['OQK784AAfw']", ':12': 'tested', ':13': 'email.email@email.com', ':14': '', ':15': '', ':16': '2022-02-02 12:47:44', ':17': '1231564.784521'})
print(f'Data process: {data}')
cursor.executemany(sql, data, batcherrors=True)
for error in cursor.getbatcherrors():
print(error.message)
ora_conn.commit()
dsn = """XXX"""
connection = oracledb.connect(user="XXX", password='XXX', dsn=dsn)
insert_into(connection)
PYO_DEBUG_PACKETS=1
(Note - from the packets, I replaced the target schema name with ****)
2023-10-04 08:42:45.627 [socket: 1028] Sending packet:
0000 : 00 00 03 08 06 00 00 00 |........|
0008 : 00 00 03 5E 04 04 00 08 |...^....|
0016 : 80 29 00 01 01 DB 01 01 |.)......|
0024 : 0D 00 00 00 01 01 04 7F |........|
0032 : FF FF FF 01 01 11 00 00 |........|
0040 : 00 00 00 00 00 00 00 01 |........|
0048 : 00 00 00 00 00 00 00 00 |........|
0056 : 00 00 00 00 00 00 00 DB |........|
0064 : 69 6E 73 65 72 74 20 69 |insert.i|
0072 : 6E 74 6F 20 42 43 41 4D |nto.****|
0080 : 2E 54 41 42 4C 45 5F 31 |.TABLE_1|
0088 : 28 43 4F 4C 5F 31 2C 43 |(COL_1,C|
0096 : 4F 4C 5F 32 2C 43 4F 4C |OL_2,COL|
0104 : 5F 33 2C 43 4F 4C 5F 34 |_3,COL_4|
0112 : 2C 43 4F 4C 5F 35 2C 43 |,COL_5,C|
0120 : 4F 4C 5F 36 2C 43 4F 4C |OL_6,COL|
0128 : 5F 37 2C 43 4F 4C 5F 38 |_7,COL_8|
0136 : 2C 43 4F 4C 5F 39 2C 43 |,COL_9,C|
0144 : 4F 4C 5F 31 30 2C 43 4F |OL_10,CO|
0152 : 4C 5F 31 31 2C 43 4F 4C |L_11,COL|
0160 : 5F 31 32 2C 43 4F 4C 5F |_12,COL_|
0168 : 31 33 2C 43 4F 4C 5F 31 |13,COL_1|
0176 : 34 2C 43 4F 4C 5F 31 35 |4,COL_15|
0184 : 2C 43 4F 4C 5F 31 36 2C |,COL_16,|
0192 : 43 4F 4C 5F 31 37 29 20 |COL_17).|
0200 : 56 41 4C 55 45 53 20 28 |VALUES.(|
0208 : 3A 31 2C 20 3A 32 2C 20 |:1,.:2,.|
0216 : 3A 33 2C 20 3A 34 2C 20 |:3,.:4,.|
0224 : 3A 35 2C 20 3A 36 2C 20 |:5,.:6,.|
0232 : 3A 37 2C 20 3A 38 2C 20 |:7,.:8,.|
0240 : 3A 39 2C 20 3A 31 30 2C |:9,.:10,|
0248 : 20 3A 31 31 2C 20 3A 31 |.:11,.:1|
0256 : 32 2C 20 3A 31 33 2C 20 |2,.:13,.|
0264 : 3A 31 34 2C 20 3A 31 35 |:14,.:15|
0272 : 2C 20 3A 31 36 2C 20 3A |,.:16,.:|
0280 : 31 37 29 01 01 01 01 00 |17).....|
0288 : 00 00 00 00 00 00 02 80 |........|
0296 : 00 00 00 00 01 01 00 00 |........|
0304 : 01 10 00 00 00 00 02 03 |........|
0312 : 69 01 00 00 01 01 00 00 |i.......|
0320 : 01 3C 00 00 00 00 02 03 |.<......|
0328 : 69 01 00 00 01 01 00 00 |i.......|
0336 : 01 34 00 00 00 00 02 03 |.4......|
0344 : 69 01 00 00 01 01 00 00 |i.......|
0352 : 01 08 00 00 00 00 02 03 |........|
0360 : 69 01 00 00 01 01 00 00 |i.......|
0368 : 01 34 00 00 00 00 02 03 |.4......|
0376 : 69 01 00 00 01 01 00 00 |i.......|
0384 : 01 2C 00 00 00 00 02 03 |.,......|
0392 : 69 01 00 00 01 01 00 00 |i.......|
0400 : 01 3C 00 00 00 00 02 03 |.<......|
0408 : 69 01 00 00 01 01 00 00 |i.......|
0416 : 01 40 00 00 00 00 02 03 |.@......|
0424 : 69 01 00 00 01 01 00 00 |i.......|
0432 : 01 34 00 00 00 00 02 03 |.4......|
0440 : 69 01 00 00 01 01 00 00 |i.......|
0448 : 01 20 00 00 00 00 02 03 |........|
0456 : 69 01 00 00 01 01 00 00 |i.......|
0464 : 01 38 00 00 00 00 02 03 |.8......|
0472 : 69 01 00 00 01 01 00 00 |i.......|
0480 : 01 18 00 00 00 00 02 03 |........|
0488 : 69 01 00 00 01 01 00 00 |i.......|
0496 : 01 54 00 00 00 00 02 03 |.T......|
0504 : 69 01 00 00 01 01 00 00 |i.......|
0512 : 02 3E 80 00 00 00 00 02 |.>......|
0520 : 03 69 01 00 00 01 01 00 |.i......|
0528 : 00 02 3E 80 00 00 00 00 |..>.....|
0536 : 02 03 69 01 00 00 01 01 |..i.....|
0544 : 00 00 01 4C 00 00 00 00 |...L....|
0552 : 02 03 69 01 00 00 01 01 |..i.....|
0560 : 00 00 01 38 00 00 00 00 |...8....|
0568 : 02 03 69 01 00 00 07 04 |..i.....|
0576 : 31 30 30 32 0F 36 35 34 |1002.654|
0584 : 36 35 34 36 73 64 66 35 |6546sdf5|
0592 : 36 34 35 34 0D 54 50 53 |6454.TPS|
0600 : 32 5F 38 73 64 66 5F 32 |2_8sdf_2|
0608 : 31 32 02 31 32 0D 31 32 |12.12.12|
0616 : 29 20 54 65 73 74 20 54 |).Test.T|
0624 : 45 58 54 0B 54 45 53 54 |EXT.TEST|
0632 : 20 54 65 78 74 20 32 0F |.Text.2.|
0640 : 74 6F 74 6F 2E 64 6F 6D |toto.dom|
0648 : 61 69 6E 2E 63 6F 6D 10 |ain.com.|
0656 : 54 65 73 74 20 74 65 78 |Test.tex|
0664 : 74 20 2D 20 74 65 78 74 |t.-.text|
0672 : 0D 31 32 31 35 35 46 44 |.12155FD|
0680 : 34 35 34 34 55 55 08 37 |4544UU.7|
0688 : 37 34 34 35 35 32 32 0E |7445522.|
0696 : 5B 27 4F 51 4B 37 38 34 |['OQK784|
0704 : 41 41 66 77 27 5D 06 74 |AAfw'].t|
0712 : 65 73 74 65 64 15 65 6D |ested.em|
0720 : 61 69 6C 2E 65 6D 61 69 |ail.emai|
0728 : 6C 40 65 6D 61 69 6C 2E |l@email.|
0736 : 63 6F 6D 00 00 13 32 30 |com...20|
0744 : 32 32 2D 30 32 2D 30 32 |22-02-02|
0752 : 20 31 32 3A 34 37 3A 34 |.12:47:4|
0760 : 34 0E 31 32 33 31 35 36 |4.123156|
0768 : 34 2E 37 38 34 35 32 31 |4.784521|
2023-10-04 08:42:45.642 [socket: 1028] Receiving packet:
0000 : 00 00 00 0B 0C 20 00 00 |........|
0008 : 01 00 01 |... |
2023-10-04 08:42:45.642 [socket: 1028] Sending packet:
0000 : 00 00 00 0B 0C 00 00 00 |........|
0008 : 01 00 02 |... |
2023-10-04 08:42:45.643 [socket: 1028] Receiving packet:
0000 : 00 00 00 0B 0C 20 00 00 |........|
0008 : 01 00 02 |... |
2023-10-04 08:42:45.655 [socket: 1028] Receiving packet:
0000 : 00 00 00 E7 06 00 00 00 |........|
0008 : 00 00 04 01 03 01 05 00 |........|
0016 : 02 5F 3D 01 0F 02 05 78 |._=....x|
0024 : 01 06 01 D3 02 00 00 00 |........|
0032 : 00 00 04 FF FF FF FF 00 |........|
0040 : 00 00 00 00 00 04 00 00 |........|
0048 : 00 01 01 03 02 05 78 01 |......x.|
0056 : 01 01 00 01 01 16 01 BD |........|
0064 : 3F 4F 52 41 2D 30 31 34 |?ORA-014|
0072 : 30 30 3A 20 63 61 6E 6E |00:.cann|
0080 : 6F 74 20 69 6E 73 65 72 |ot.inser|
0088 : 74 20 4E 55 4C 4C 20 69 |t.NULL.i|
0096 : 6E 74 6F 20 28 22 42 43 |nto.("BC|
0104 : 41 4D 22 2E 22 54 41 42 |AM"."TAB|
0112 : 4C 45 5F 31 22 2E 22 43 |LE_1"."C|
0120 : 4F 4C 5F 31 36 22 29 0A |OL_16").|
0128 : 00 00 02 5F 3D 00 60 4F |..._=.`O|
0136 : 52 41 2D 32 34 33 38 31 |RA-24381|
0144 : 3A 20 65 72 72 6F 72 28 |:.error(|
0152 : 73 29 20 69 6E 20 61 72 |s).in.ar|
0160 : 72 61 79 20 44 4D 4C 0A |ray.DML.|
0168 : 4F 52 41 2D 30 31 34 30 |ORA-0140|
0176 : 30 3A 20 63 61 6E 6E 6F |0:.canno|
0184 : 74 20 69 6E 73 65 72 74 |t.insert|
0192 : 20 4E 55 4C 4C 20 69 6E |.NULL.in|
0200 : 74 6F 20 28 22 42 43 41 |to.("***|
0208 : 4D 22 2E 22 54 41 42 4C |*"."TABL|
0216 : 45 5F 31 22 2E 22 43 4F |E_1"."CO|
0224 : 4C 5F 31 36 22 29 0A |L_16"). |