0

以下のクエリを見つけてください。このクエリを実行すると、ORA-00907: 右括弧がありませんというエラーが発生します。このクエリの問題を理解できません。このエラーの解決策を教えてください。このトピックに関するいくつかの関連トピックを読みました。しかし、私は正しい解決策を得られませんでした。Oracle 10g バージョンを使用しています。

クエリ:

SELECT A.City||'.' AS AAddress,
    M_InOut_Header_v.Org_Location_ID AS Org_Location_ID, 
    M_InOut_Header_v.ContactName, 
    M_InOut_Header_v.Title, 
    M_InOut_Header_v.EMail, 
    M_InOut_Header_v.Phone, 
    M_InOut_Header_v.BPGreeting, 
    M_InOut_Header_v.Name2, 
    M_InOut_Header_v.Name, 
    B.City||'.' AS BAddress, 
    M_InOut_Header_v.C_Location_ID AS C_Location_ID, 
    M_InOut_Header_v.BPContactGreeting,
    --M_InOut_Header_v.BPGreeting,
    --M_InOut_Header_v.Name,
    --M_InOut_Header_v.Name2, 
    M_InOut_Header_v.Address1, 
    M_InOut_Header_v.Address2, 
    M_InOut_Header_v.Address3, 
    M_InOut_Header_v.Address4, 
    M_InOut_Header_v.City, 
    M_InOut_Header_v.POSTAL1, 
    M_InOut_Header_v.CountryName, 
    --M_InOut_Header_v.BPContactGreeting, 
    --M_InOut_Header_v.Name, 
    M_InOut_Header_v.OrderRemarks, 
    (SELECT NVL(C_Order.DocumentNo,'')||'
      - '||NVL(TRIM(TO_CHAR(C_Order.DateOrdered,'DD/MM/YYYY')),'') 
        FROM C_Order 
        WHERE M_InOut_Header_v.C_Order_ID=C_Order.C_Order_ID
    ) AS CC_Order_ID, 
    M_InOut_Header_v.C_Order_ID AS C_Order_ID, 
    M_InOut_Header_v.OrderType, 
    M_InOut_Header_v.ReferenceNo, 
    M_InOut_Header_v.POReference, 
    (SELECT NVL(M_Warehouse.Name,'') 
        FROM M_Warehouse 
        WHERE M_InOut_Header_v.M_Warehouse_ID=M_Warehouse.M_Warehouse_ID
    ) AS DM_Warehouse_ID, 
    M_InOut_Header_v.M_Warehouse_ID AS M_Warehouse_ID, 
    (SELECT NVL(M_Shipper.Name,'') 
        FROM M_Shipper 
        WHERE M_InOut_Header_v.M_Shipper_ID=M_Shipper.M_Shipper_ID
    ) AS EM_Shipper_ID, 
    M_InOut_Header_v.M_Shipper_ID AS M_Shipper_ID, 
    M_InOut_Header_v.Vehicle_No_BizInt, 
    M_InOut_Header_v.TrackingNo, 
    M_InOut_Header_v.Permit_No_BizInt, 
    M_InOut_Header_v.LR_Number_BizInt, 
    M_InOut_Header_v.FREIGHTCOSTRULE2, 
    M_InOut_Header_v.FreightAmt, 
    M_InOut_Header_v.POREMARKS, 
    M_InOut_Header_v.NoPackages,
    M_InOut_Header_v.Gross_Weight_BizInt, 
    M_InOut_Header_v.UOMSymbol, 
    M_InOut_Header_v.SalesRepPhone, 
    M_InOut_Header_v.SalesRepEmail, 
    M_InOut_Header_v.DocumentType, 
    InOut_Header_v.DocumentNo, 
    M_InOut_Header_v.MovementDate, 
    M_InOut_Header_v.Description, 
    (SELECT NVL(M_InOut.DocumentNo,'')||'
      - '||NVL(TRIM(TO_CHAR(M_InOut.MovementDate,'DD/MM/YYYY')),'') 
        FROM M_InOut 
        WHERE M_InOut_Header_v.M_InOut_ID=M_InOut.M_InOut_ID
    ) AS FM_InOut_ID, 
    M_InOut_Header_v.M_InOut_ID AS M_InOut_ID, 
    M_InOut_Header_v.DocumentTypeNote, 
    M_InOut_Header_v.REMARKS1, 
    M_InOut_Header_v.REMARKS2, 
    M_InOut_Header_v.REMARKS3, 
    M_InOut_Header_v.REMARKS4 
FROM M_InOut_Header_v 
LEFT OUTER JOIN C_Location A 
ON (M_InOut_Header_v.Org_Location_ID=A.C_Location_ID) 
LEFT OUTER JOIN C_Location B 
ON (M_InOut_Header_v.C_Location_ID=B.C_Location_ID) 
WHERE (M_InOut_Header_v.M_InOut_ID=1002241) 
    AND M_InOut_Header_v.AD_Client_ID IN (1000008,0) 
    AND M_InOut_Header_v.AD_Org_ID IN (1000099,1000098,0,1000100,1000096,1000097) 
    AND (A.C_Location_ID IS NULL 
            OR A.C_Location_ID NOT IN ( 
                SELECT PA.Record_ID FROM AD_Private_Access AS PA 
                WHERE PA.AD_Table_ID = 162 AND PA.AD_User_ID <> 1013144 
                AND PA.IsActive = 'Y' 
            )) 
    AND ( B.C_Location_ID IS NULL 
            OR B.C_Location_ID NOT IN ( 
                SELECT ADP.Record_ID FROM AD_Private_Access AS ADP 
                WHERE ADP.AD_Table_ID = 162 AND ADP.AD_User_ID <> 1013144 
                AND ADP.IsActive = 'Y' 
            ))
ORDER BY M_InOut_Header_v.DocumentNo;

これは私に与えます:

ORA-00907: missing right parenthesis
00907. 00000 -  "missing right parenthesis"
*Cause:    
*Action:
Error at Line: 80 Column: 26

しかし、その行に間違いは見つかりませんでした。構文的に正しいと思います。

4

1 に答える 1

5

行番号は少し紛らわしいですが、問題の始まりを示しています。問題は、次の 2 つのサブクエリにあります。

                    SELECT PA.Record_ID FROM AD_Private_Access AS PA 
                    WHERE PA.AD_Table_ID = 162 AND PA.AD_User_ID <> 1013144 
                    AND PA.IsActive = 'Y' 

と:

                    SELECT ADP.Record_ID FROM AD_Private_Access AS ADP 
                    WHERE ADP.AD_Table_ID = 162 AND ADP.AD_User_ID <> 1013144 
                    AND ADP.IsActive = 'Y' 

を使用してテーブル名のエイリアスASをマークすることはできません。 (オプションで) 列名または式のみをマークします。実際には括弧が欠けているわけではありません。パーサーが何を考えているかを正確に知ることは困難ですが、この場合、サブクエリの列エイリアスとしてを解釈しようとしているように見えます。すでに括弧を閉じています。(別のオプションは、テーブル alias として扱われることを試みることであったかもしれませんが、その場合は何を意味するかを決定しようとする必要がありました; plusはキーワードであるため、エイリアス名としては有効ではありません)。AS PAAS PAAS

それらの両方からキーワードを削除するだけで機能ASします(または別のエラーに進みます)。

                    SELECT PA.Record_ID FROM AD_Private_Access PA 
                    ...

と:

                    SELECT ADP.Record_ID FROM AD_Private_Access ADP 
                    ...
于 2013-08-22T10:50:41.470 に答える