2014-07-07 3 views
0

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 표준에 지정된대로이 작동

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를 언급했다. 그래도 여전히 rdt_order로 chcek 할 수 있는가?, 답장을 보내 주셔서 감사합니다. – sunleo

+0

두 테이블'desc'를 게시 할 수 있습니까? 구조로 문제를 확인하는 것이 훨씬 쉬울 것입니다. –

답변

2

. 모든 하위 쿼리 (암시 적으로)는 "외부"테이블의 모든 열에 액세스 할 수 있습니다. 내부 쿼리에 열이 없으면 외부 쿼리의 일치하는 열이 사용됩니다.

은 Oracle 설명서에 설명되어 있습니다 : 하위 쿼리의 열이 포함 된 문에서 열 이름이 같은 경우
http://docs.oracle.com/cd/E11882_01/server.112/e41084/queries007.htm#SQLRF52357

는 다음 테이블의 컬럼에 대한 참조를 앞에 있어야합니다 테이블 이름이나 일반적으로 별칭

에 포함하는 문에서 매우 항상 검색어의 모든 테이블에 대한 테이블 별칭을 사용 (모든 열 t을 위해 그것을 사용하는 것이 좋습니다 모자를 사용하는 경우) 쿼리가 두 개 이상의 테이블을 사용하는 경우.

+0

답변 해 주셔서 감사합니다. – sunleo

관련 문제