2014-07-07 21 views
0

在Oracle中,爲什麼在更新語句時未反映子查詢問題。此查詢運行時沒有任何異常或錯誤。Oracle在子查詢中沒有顯示錯誤

update rdt_order set recepientcode ='szdwyes', 
vendornad = (select contactnad from rdt_organization where oucode ='szdwyes') 

在這裏,contactnad無效標識符問題來運行時,作爲單獨的查詢。

(select contactnad from rdt_organization where oucode ='szdwyes') 

請幫我理解爲什麼會發生這種情況。

表Decscription:

SQL> desc rdt_organization; 
Name   Type   Nullable Default Comments 
--------------- ------------- -------- ------- -------- 
ID    INTEGER         
PARENTID  INTEGER  Y       
HEADUSERID  INTEGER  Y       
DUNS   VARCHAR2(32) Y       
ORGTYPE   INTEGER  Y       
OUCODE   VARCHAR2(32) Y       
FUCODE   VARCHAR2(32) Y       
ORGNAME   VARCHAR2(32) Y       
LONGNAME  VARCHAR2(256) Y       
COMPREGNUM  VARCHAR2(64) Y       
TAXREFNUM  VARCHAR2(64) Y       
GROUPNAME  VARCHAR2(32) Y       
ACTIVATIONDATE DATE   Y       
EXPIRYDATE  DATE   Y       
REGDATE   DATE   Y       
STATUS   INTEGER  Y       
CONTACTNADID INTEGER  Y       
LASTUPDATEDATE DATE   Y       
LASTUPDATEDBY VARCHAR2(15) Y       
DEFAULTTIMEZONE VARCHAR2(16) Y       
DEFAULTLANGUAGE INTEGER  Y       
DEFAULTCURRENCY INTEGER  Y       
COMPANYNAME  VARCHAR2(256) Y       
LASTUPDATEIP VARCHAR2(32) Y       
UNITNAME  VARCHAR2(256) Y       
TURNOVER  NUMBER(22,6) Y       
NOOFEMPLOYEES INTEGER  Y       
CONTROLLER  INTEGER  Y       

SQL> desc rdt_order; 
Name    Type   Nullable Default Comments 
------------------ ------------- -------- ------- -------- 
ID     INTEGER         
TRANSID   INTEGER  Y       
CONTROLLERID  INTEGER         
ORGTRANSREF  VARCHAR2(128) Y       
DOCNUM    VARCHAR2(128) Y       
BARCODENUM   VARCHAR2(128) Y       
REFNUM    VARCHAR2(128) Y       
SUBTYPE   VARCHAR2(32) Y       
GENDATE   DATE   Y       
STATUS    INTEGER  Y       
ISSUEDATE   DATE   Y       
CANCELDATE   DATE   Y       
REVISIONDATE  DATE   Y       
REVISIONNUM  VARCHAR2(6) Y       
BATCHNUM   VARCHAR2(128) Y       
ORGINATORCODE  VARCHAR2(32) Y       
APPROVERCODE  VARCHAR2(32) Y       
APPROVERUSER  INTEGER  Y       
ORGINATORUSER  VARCHAR2(32) Y       
SENDERMAILBOXID VARCHAR2(64) Y       
RECEPIENTMAILBOXID VARCHAR2(64) Y       
RECEPIENTCODE  VARCHAR2(32) Y       
REMARKS1   VARCHAR2(256) Y       
REMARKS2   VARCHAR2(256) Y       
INTERNALNOTE  VARCHAR2(256) Y       
TERMSCOND   BLOB   Y       
WFCODE    VARCHAR2(32) Y       
ORIGINATORDUNS  VARCHAR2(32) Y       
RECEPIENTDUNS  VARCHAR2(32) Y       
SHIPTOPLANTCODE VARCHAR2(32) Y       
ORDERBYPLANTCODE VARCHAR2(32) Y       
CUSTOMERCODE  VARCHAR2(32) Y       
CUSTOMERNAD  INTEGER  Y       
BUDGETCODE   VARCHAR2(32) Y       
ACCOUNTCODE  VARCHAR2(32) Y       
CONTRACTCODE  VARCHAR2(32) Y       
MODEL    VARCHAR2(128) Y       
SHIPPERCODE  VARCHAR2(32) Y       
VENDORCODE   VARCHAR2(32) Y       
WHCODE    VARCHAR2(32) Y       
FWCODE    VARCHAR2(32) Y       
TRAFFICCODE  VARCHAR2(32) Y       
TARRIFCODE   VARCHAR2(32) Y       
FININSTCODE  VARCHAR2(32) Y       
CUSTOMSCODE  VARCHAR2(32) Y       
PURCHASEGROUP  VARCHAR2(128) Y       
MSGFUNCTIONCODE VARCHAR2(64) Y       
BUYERCODE   VARCHAR2(32) Y       
SHIPTOLOCATION  VARCHAR2(64) Y       
BILLTOCODE   VARCHAR2(32) Y       
FUNDCODE   VARCHAR2(32) Y       
CONSIGNEECODE  VARCHAR2(32) Y       
CONTACTCODE  VARCHAR2(32) Y       
CONTACTNAD   INTEGER  Y       
FUNDNAD   INTEGER  Y       
CONSIGNEENAD  INTEGER  Y       
ACCOUNTNAD   INTEGER  Y       
PROJECTNAD   INTEGER  Y       
CONTRACTNAD  INTEGER  Y       
SHIPPERNAD   INTEGER  Y       
VENDORNAD   INTEGER  Y       
WHNAD    INTEGER  Y       
FWNAD    INTEGER  Y       
TRAFFICNAD   INTEGER  Y       
TARRIFNAD   INTEGER  Y       
FININSTNAD   INTEGER  Y       
CUSTOMSNAD   INTEGER  Y       
BUYERNAD   INTEGER  Y       
SHIPTOLOCATIONNAD INTEGER  Y       
BILLTONAD   INTEGER  Y       
PROJECTCODE  VARCHAR2(32) Y       
CURRENCYCODE  INTEGER  Y       
SUBPROJECTCODE  VARCHAR2(32) Y       
COSTCENTRE   VARCHAR2(64) Y       
TOTALAMOUNT  NUMBER(22,6) Y       
TOTALITEMS   INTEGER  Y       
CLASSIFICATION1 VARCHAR2(256) Y       
CLASSIFICATION2 VARCHAR2(256) Y       
CLASSIFICATION3 VARCHAR2(256) Y       
FRIEGHT   VARCHAR2(128) Y       
PAYMENTTERM1  VARCHAR2(256) Y       
PAYMENTTERM2  VARCHAR2(256) Y       
PRICETERM2   VARCHAR2(256) Y       
PRICETERM1   VARCHAR2(256) Y       
SHIPMENTTERM1  VARCHAR2(256) Y       
SHIPMENTTERM2  VARCHAR2(256) Y       
INSURANCE1   VARCHAR2(256) Y       
INSURANCE2   VARCHAR2(256) Y       
SHIPMENTMODE  VARCHAR2(32) Y       
VALIDFROM   DATE   Y       
VALIDTO   DATE   Y       
ACTIONSTATUS  INTEGER  Y       
LATEST    INTEGER  Y       
LASTUPDATEBY  VARCHAR2(15) Y       
LASTUPDATE   DATE   Y       
LASTUPDATESTKHID INTEGER  Y       
CREATEDBY   INTEGER  Y       
BEHALFOF   INTEGER  Y       
PROCESSDEFID  INTEGER  Y       
PROCESSID   INTEGER  Y       
CLOSED    INTEGER  Y       
APPREVNUM   VARCHAR2(256) Y       
APPREVDATE   DATE   Y       
XTRACODE1   VARCHAR2(256) Y       
XTRACODE2   VARCHAR2(32) Y       
XTRACODE3   VARCHAR2(32) Y       
XTRACODE4   VARCHAR2(32) Y       
XTRACODE5   VARCHAR2(32) Y       
XTRASTRING1  VARCHAR2(128) Y       
XTRASTRING2  VARCHAR2(128) Y       
XTRASTRING3  VARCHAR2(128) Y       
XTRASTRING4  VARCHAR2(128) Y       
XTRASTRING5  VARCHAR2(128) Y       
XTRABIGSTRING1  VARCHAR2(256) Y       
XTRABIGSTRING2  VARCHAR2(256) Y       
XTRABIGSTRING3  VARCHAR2(256) Y       
XTRABIGSTRING4  VARCHAR2(256) Y       
XTRABLOB1   BLOB   Y       
XTRABLOB2   BLOB   Y       
XTRABLOB3   BLOB   Y       
XTRANUM1   NUMBER  Y       
XTRANUM2   NUMBER  Y       
XTRANUM3   NUMBER  Y       
XTRANUM4   NUMBER  Y       
XTRANUM5   NUMBER  Y       
XTRAINT1   INTEGER  Y       
XTRAINT2   INTEGER  Y       
XTRAINT3   INTEGER  Y       
XTRAINT4   INTEGER  Y       
XTRAINT5   INTEGER  Y       
XTRDATE1   DATE   Y       
XTRDATE2   DATE   Y       
XTRDATE3   DATE   Y       

SQL> 
+1

也許在'rdt_order'中有'contactnad'列? – Mureinik

+0

是的你是對的。但我已經提到rdt_organization contactnad然後它可以chrk與rdt_order?,感謝您的答覆。 – sunleo

+0

你可以發佈兩個表'desc'。識別結構問題要容易得多。 –

回答

2

如SQL標準規定這工作。任何子查詢(隱式)都可以訪問「外部」表中的所有列。如果在內部查詢中找不到列,則將使用外部查詢中的匹配列。

這是記錄在甲骨文手冊:
http://docs.oracle.com/cd/E11882_01/server.112/e41084/queries007.htm#SQLRF52357

如果在子查詢列具有相同的名稱,如含聲明列,則必須前綴的參考表中的列從包含聲明的表名或別名

通常強烈建議您始終爲查詢中的每個表使用表別名(並將其用於每列t如果您的查詢使用多個表格,則可以訪問該帽子)。

+0

感謝您的答案。 – sunleo