Skip to Main Content

SQL & PL/SQL

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

Interested in getting your voice heard by members of the Developer Marketing team at Oracle? Check out this post for AppDev or this post for AI focus group information.

Is there a way to capture complete query along with the bind values in oracle ?

Sai ChallaSep 9 2015 — edited Sep 10 2015

I am trying to capture all the queries being executed on a table in the database. These queries will be stored in a table and will be later executed on a different database to keep both the databases synchronized. In the trigger we are using the below select statement to capture the query :

select sq.sql_text from v$open_cursor oc,v$sql sq where sid = sys_context('USERENV','SID') order
by sq.last_active_time desc ;

But, if the queries are being executed as prepared statements then the above query being used is capturing the sql statements as:

UPDATE <TABLE_NAME> SET COL1_NAME = :1   WHERE COL2_NAME =:2   AND COL3_NAME = :3

I am unable to get the values of the above fields in my query. Is there any other way that I can achieve this and get the complete query ?

Comments

662454
Result of my own research is, that utl_file.fcopy isn't meant for copying binary files as xls or pdf files are. Copied file's length had changed a bit which can be explained by fcopy putting CR+LF characters after each "line". Whatever line it finds in a binary file. Thus, it's not suitable for my needs.

The DBMS_FILE_TRANSFER package won't do either, because it requieres directory objects as source and destination. Because physical file structure provides a special folder for each file and its versions, I would have to dynamically (re-)create directory objects for each copy process. This could be done by dynamic DDL but can't be done because of the whole process being started by a trigger which doesn't allow the auto commit of DDL statements. Yes, I could wrap that in an autonomous transaction but, well, that seems to be no good practise. And more, the copy method of that package relies on a very specific file size in exact multiples of 512 bit (I didn't quite get the reason for that).

Seems, I will have to put all that files (which are more than 1000 an more than 2GB) in BLOBs. Wonder, what problems that will give to me...

Yet, any hints and opinions are still welcome.

Regards
Claus.
662454
Problem solved by using DBMS_SCHEDULER ablilities.

Claus.
Rnr-Oracle
To expand on what I assume the solution was (for reference).

The poster probably used the dbms_scheduler get_file and put_file functions which are new in 11g.

They allow files to be copied to/from the operating system as a particular user. The username and password of the operating system must be stored in the database as a credential object using dbms_scheduler.create_credential.

Hope someone finds this useful,
Ravi.
662454
Hi there

We are driving a 10g version, so I wasn't able using the get_file/put_file methods. No, I just created an executable type job and provided a rather lengthy string as job action.
This action string contains calling cmd.exe witch again calls copy.bat.
Like that:
"c:\winnt\system32\cmd.exe /q c:\copy.bat path\to\sourcefile path\to\destinationfile > nul"

No other parameters for cmd.exe should be provided, in contradiction to what other examples say. Copy.bat is a wrapper batch file for native copy command.

That's all.

Claus.
1 - 4
Locked Post
New comments cannot be posted to this locked post.

Post Details

Locked on Oct 8 2015
Added on Sep 9 2015
12 comments
582 views