web-dev-qa-db-ja.com

SQL Developer「結合グラフの残りの部分から切断されました」

私は次のSQLを持っています:

select <misc things>
from pluspbillline 
left outer join workorder 
    on workorder.siteid=pluspbillline.siteid 
    and workorder.wonum = pluspbillline.refwo
    and workorder.orgid = pluspbillline.orgid
left outer join ticket
    on ticket.ticketid = pluspbillline.ticketid
    and ticket.class=pluspbillline.ticketclass
left outer join pluspsalesorder
    on pluspsalesorder.salesordernum=pluspbillline.salesordernum
    and pluspsalesorder.siteid=pluspbillline.siteid

Oracle SQL Developer 4.0.0.13(DB2データベースに接続)では、次の斜体の下に波線が表示されます。「from pluspbillline」および「left outer join workorder」 。

警告には、「pluspbilllineは結合グラフの残りの部分から切断されています」と表示されます。これは何を意味するのでしょうか?

17
ESP

Oracle SQL Developerでエラーが発生する原因はわかりません。しかし、適切にフォーマットするためにこのコメントをここに入れています。

結合グラフは次のようになります

pluspbillline  ------+----<  workorder
                     |
                     +----<  ticket
                     |
                     +----<  pluspsalesorder

グラフ上の線には、結合フィールドのラベルが付いている場合があります。しかし、これは基本的なアイデアを提供します。

この警告が表示される理由はわかりません。あなたのSQLの列名のタイプミス?または、Oracleのインターフェースで、DB2メタデータを適切に理解していないという奇妙なことがありますか? IBMのツールを試してみて、それが単なるプログラムであるかどうかを確認することを提案しました。

0
WarrenT

私もこれを得た。私はそれを明確にする方法が正確にわかりませんが、エラーはコードの論理的な流れに基づいているようです。

基本的に、pluspbilllineの前にworkorderというテーブルに言及しているため、結合がon pluspbillline.siteid=workorder.siteidなど.

結合の条件の順序は、最初に識別されたテーブルから最新のテーブルに流れるようです。そのため、次のことで幸せになります。

plusbillline to workorder       on pluspbillline.siteid=workorder.siteid...
    ""       to ticket          on pluspbillline.ticketid = ticket.ticketid...
    ""       to pluspsalesorder on pluspbillline.salesordernum = pluspsalesorder.salesordernum...

これにより、Oracleが行う作業が変わるとは思わない(オプティマイザーのヒントを使用しないと仮定した場合).

30
Ewanw

この問題は、Oracleプロシージャが、結合するテーブルの列と同じ名前の入力パラメータを持っていることが原因です。
ie bank_nbrという名前の入力パラメーターとBankDept.bank_nbrというテーブルがある場合、エラーが発生します。 .bank_nbr

0
Mark