Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

User-defined exceptions as ProgrammingError #360

Open
rafaelreuber opened this issue Sep 19, 2019 · 8 comments
Open

User-defined exceptions as ProgrammingError #360

rafaelreuber opened this issue Sep 19, 2019 · 8 comments

Comments

@rafaelreuber
Copy link

What kind of database errors are ProgrammingError? If you raise a user-defined exception through the procedure raise_application_error, the cx_Oracle raising an DatabaseError.

I think is more clear use ProgrammingError for user-defined exceptions instead of DatabaseError.

with connection.cursor() as cursor:
    try:
        cursor.execute("begin raise_application_error(-20000, 'Sometime strange thins just happens'); end;")
    except cx_Oracle.ProgrammingError as e:
        print("Yes, you are busines validation error")
    except cx_Oracle.DatabaseError as e:
        print("Hey i'm not a business validation")

Python Version: 3.7.4
cx_Oracle Version: 7.2.2
oracleinstantclient Version: 12.2
Oracle server Version : 11g XE
SO: Fedora 30

@rafaelreuber rafaelreuber changed the title Application error are not instance of ProgrammingError User-defined exceptions as ProgrammingError Sep 19, 2019
@alexolirib
Copy link

+1

@anthony-tuininga
Copy link
Member

ProgrammingError is only raised for errors like "positional and named binds cannot be intermixed". Almost all Oracle errors are raised as DatabaseError. There are some that are raised as IntegrityError and OperationalError. You can take a look at the source for the function cxoError_raiseFromInfo() for the details.

As for whether ORA-20000 should be defined as a ProgrammingError instead of DatabaseError, that's a matter for debate! I'm sure others might disagree with your evaluation and I'm not sure I'm convinced either. I'll ask @cjbj to give his opinion as well.

@rafaelreuber
Copy link
Author

rafaelreuber commented Sep 24, 2019

Another option would be to define a new exception named ApplicationError do deal with user-defined errors.

@cjbj
Copy link
Member

cjbj commented Sep 24, 2019

I don't think ProgrammingError makes sense for application runtime errors. ApplicationError might be nice, but is the backward compatibility break worth it?

@rafaelreuber
Copy link
Author

If ApplicationError is subclass of DatabaseError, this will not break the backward compatibility.

@anthony-tuininga
Copy link
Member

True enough. If @cjbj has no objections I'll add it to cx_Oracle 8. It will cover the error numbers from -20000 to -20999.

@cjbj cjbj added enhancement and removed question labels Mar 16, 2020
@ancc
Copy link

ancc commented May 17, 2022

8.3 doesn't have ApplicationError. Plan is valid to add it?

@cjbj
Copy link
Member

cjbj commented May 17, 2022

I don't see it in the next major version, so we'll have to revisit when we get a moment.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

5 participants