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.

Cursor with statement "Full Outer Join" fails if the reffered table is a synonym for a DBLINK table

PericlesFeb 16 2025 — edited Feb 18 2025

Hello

Using a 21c DB and I'm trying to build a procedure which use a cursor to run over the rows of a query which uses two tables, one local and the other one on a remote database linked using a dblink. For the remote database table employees_time@DEV_FE I have already created the synonym employees_time_FE on the local DB

If the query is wrote using the Full outer join statement I'm getting an ORA-00942 Table or view does not exists, but if the same cursor is declared using the (+) notation it works as expected.

CASE 1: Fails

cursor commitment is 
select a.id_project,a.id_owner,nvl(a.owner_month_commitment,0)-nvl(sum(b.time_consumed),0) owner_month_commitmen,nvl(sum(b.time_consumed),0)
from projects a
full outer join employees_time_FE b
on a.id_owner=b.id_employee and
  a.id_project=b.id_project and
  b.date_report between add_months(trunc(sysdate,'MM'),-1) and trunc(sysdate,'MM')-1
where a.end_date>add_months(trunc(sysdate,'MM'),-1) and
     nvl(a.owner_month_commitment,0)>0
having nvl(sum(b.time_consumed),0)<nvl(a.owner_month_commitment,0)
group by a.id_project,a.id_owner,nvl(a.owner_month_commitment,0);

CASE 2: Works ok

cursor commitment is 
select a.id_project,a.id_owner,nvl(a.owner_month_commitment,0)-nvl(sum(b.time_consumed),0) owner_month_commitmen,nvl(sum(b.time_consumed),0)
from btr_projects a,btr_employees_time_FE b
where a.end_date>add_months(trunc(sysdate,'MM'),-1) and
     nvl(a.owner_month_commitment,0)>0 and
     a.id_owner=b.id_employee (+) and
     a.id_project=b.id_project (+) and
     b.date_report (+) between add_months(trunc(sysdate,'MM'),-1) and trunc(sysdate,'MM')-1
having nvl(sum(b.time_consumed),0)<nvl(a.owner_month_commitment,0)
group by a.id_project,a.id_owner,nvl(a.owner_month_commitment,0);

I've found that if instead of using the synonym for the table, the declarative external object is used, the procedure is created without any issue

CASE 3: Work around

cursor commitment is 
select a.id_project,a.id_owner,nvl(a.owner_month_commitment,0)-nvl(sum(b.time_consumed),0) owner_month_commitmen,nvl(sum(b.time_consumed),0)
from btr_projects a
full outer join btr_employees_time@dev_fe b
on a.id_owner=b.id_employee and
  a.id_project=b.id_project and
  b.date_report between add_months(trunc(sysdate,'MM'),-1) and trunc(sysdate,'MM')-1
where a.end_date>add_months(trunc(sysdate,'MM'),-1) and
     nvl(a.owner_month_commitment,0)>0
having nvl(sum(b.time_consumed),0)<nvl(a.owner_month_commitment,0)
group by a.id_project,a.id_owner,nvl(a.owner_month_commitment,0);

This post is just to check if this is a DB release issue or is something that is common for the full outer join statement

Thanks

Comments

James Su Feb 14 2025

Do you have a MOS account? You can see the solution here:

https://support.oracle.com/knowledge/Oracle%20Cloud/2767882_1.html

BTW the toad behavior is normal and I usually choose rollback.

ronald_2017 Feb 15 2025

No, I don't have. Can you please copy paste the solution? Thanks.

James Su Feb 15 2025

Please leave an email address.

ronald_2017 Feb 15 2025

I log in. However, it asks Support Identifier. What should I write?

Thanks

James Su Feb 16 2025

You need to purchase the service to see the content.

I may be able to help you in private but if you don't want to post your email I have no way to contact you.

ronald_2017 Feb 16 2025

First of all thanks for your help. My words are not for you. The illogical thing is why should I purchase the service in order to solve the problem which caused by Oracle. What is Oracle support is used for? Besides, it used to be send dm in Oracle forum. Apparently, it is not active now. These kinds of restrictions are really ridiculous in today's world.

BluShadow Feb 17 2025

Oracle support is for paying customers. Like most businesses, not everything is free.

A part of the contract with having support is that customers are not permitted to share the content that is given within support anywhere in public, hence why James cannot post the solution for you here.

For that error you're getting though, it's a bit of a deceptive message. You may want to look at your Firewall (or get your network guys to) as that's a likely cause.

ronald_2017 Feb 17 2025

For that error you're getting though, it's a bit of a deceptive message. You may want to look at your Firewall (or get your network guys to) as that's a likely cause.

After I login, I am redirected to registration page. I don't think it is related to firewall. It is written “Connect your User Account” and there is an item called Support Identifier. What should I type there?

Thanks.

Cookiemonster76 Feb 17 2025

I believe that BluShadow is talking about the error you're getting in toad there, not your issues with oracle support.

BluShadow Feb 17 2025

Indeed, I'm referring to the ORA-24757: duplicate transaction identifier
I'm not trying to tell you how to get into Oracle Support. For that you would need to have a customer support identifier CSID which you only get when you pay for support. If you're working for a company then maybe your company has support with Oracle? In which case your company would have someone who is the support administrator and can assign your login to have support with Oracle (they will tie up your login with the company's support identifier for you). In many companies this is a DBA who has this access.

ronald_2017 Feb 17 2025

First of all thanks for your support. The thing is, even I just select via db link I get ORA-24757 duplicate transaction identifier error. I didn't do any DML. I use it in my laptop, not for the company. It is for the educational purposes. Where should I check in firewall?

Cookiemonster76 Feb 17 2025

So where are these two DB's that you're linking together?

Is one of them on your laptop?

ronald_2017 Feb 17 2025

One is in my laptop. It is a test db. The other one is in my friend's virtual windows server. Maybe somethings need to be changed in the virtual server.

ronald_2017 6 days ago

What do you recommend? Thanks.

Cookiemonster76 5 days ago

Any and all firewalls between your laptop and the virtual windows server need to have the port(s) you're trying to use completely open.

Alternatively stop trying to link those 2 DBs.

Is there a specific reason you need to link to that DB?

If you're just trying out how DB links work you could just create a loopback link (one that connects to the same DB).

ronald_2017 3 days ago

Yes, I want to use dblink between each other. I just recreated the db link as shared this time. However, it gives another error. It works at first but then gives an error.

ronald_2017 3 days ago

I am just wondering that should I replace 'localhost' in the server's listener file with the server's IP address?

1 - 17

Post Details

Added on Feb 16 2025
1 comment
74 views