oracle / oracle/python-oracledb
Add support for named time zones in thin mode
Nobody has claimed this yet.
- Dominant language
- Python
- Stars
- 451
- Forks
- 119
- PR merge metrics
- No merged PRs in 30d
Description
Fetching timestamp with time zone raises error ORA-01805: possible error in date/time operation instead of returning datetime with time zone information.
-
What versions are you using?
- database version: Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production
- platform.python_version: 3.9.9
- oracledb.__version__: 1.0.1
-
Is it an error or a hang or a crash? Error
-
What error(s) or behavior you are seeing?
Error oracledb.exceptions.DatabaseError: ORA-01805: possible error in date/time operation is raised when trying to use at time zone in SQL . Below is a sample code to reproduce the problem.
-
Does your application call init_oracle_client()? Yes, uses Thick mode.
-
Include a runnable Python script that shows the problem.
import oracledb
from oracledb.thick_impl import init_oracle_client
def f(sql):
with oracledb.connect(user='hr', password='password', dsn='127.0.0.1:1511/xe') as connection:
with connection.cursor() as cursor:
query = cursor.execute(sql)
row = query.fetchone()
print(row[0].time())
init_oracle_client()
# this works because returns datetime without time zone
f("select systimestamp from dual")
# this raises error ORA-01805
f("select systimestamp at time zone 'America/Montreal' as d from dual")
# this is manual walkaround but datetime is still missing time zone information
f("select cast(systimestamp at time zone 'America/Montreal' as timestamp) as d from dual")
The above is an example using systimestamp but similar error can be achieved by crating table with column type timestamp with time zone
create table tz_table
(
tz_timestamp TIMESTAMP(6) WITH TIME ZONE not null
);
insert into tz_table values ( TIMESTAMP '2022-06-16 08:00:00 US/Central');
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with the runnable Python script in the issue and compare the failing named-time-zone query with the working timestamp queries in the stated Oracle 11g and driver setup. Done means fetching a timestamp with a named time zone returns datetime values that preserve time-zone information, including for the TIMESTAMP WITH TIME ZONE table example.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- databases
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100