rollback; with function begin_transaction return varchar2 is begin dbms_lock.sleep(2); return dbms_transaction.LOCAL_TRANSACTION_ID(TRUE); end; select systimestamp beforetime , dbms_transaction.LOCAL_TRANSACTION_ID not_in_a_transaction , begin_transaction , dbms_transaction.LOCAL_TRANSACTION_ID inside_a_transaction , systimestamp aftertime from dual ; beforetime not_in_a_transaction begin_transaction inside_a_transaction aftertime 27.06.2017 16:44:23,134 (null) 5.24.3524 5.24.3524 27.06.2017 16:44:23,134SQL function systimestamp is returning consistent results inside a cursor. Columns beforetime and aftertime returns the same time allthou pl/sql function call to declared begin_transaction is coded to take two seconds in between. PL/SQL function calls inside a SQL clause have some order in which they are executed as one can see form this example results. The first call of dbms_transaction.LOCAL_TRANSACTION_ID for not_in_a_transaction returns null. Second call for dbms_transaction.LOCAL_TRANSACTION_ID function starts an transaction as it gets TRUE parameter. The third call returns the transaction id in inside_a_transaction.
2017-06-27
Passing a PL/SQL Boolean Parameter in a SQL clause
Oracle SQL does not have a boolean data type. Here is an example how to pass a PL/SQL boolean parameter to a function in a SQL statement. This is using 12c version ability to declare a function in with part of a query.
Subscribe to:
Post Comments (Atom)
About Me
- Rafu
- I am Timo Raitalaakso. I have been working since 2001 at Solita Oy as a Senior Database Specialist. My main focus is on projects involving Oracle database. Oracle ACE alumni 2012-2018. In this Rafu on db blog I write some interesting issues that evolves from my interaction with databases. Mainly Oracle.
No comments:
Post a Comment