2009-10-05 66 views
-1

下面的语句是在存储过程中 合并成table1的一个甲骨文合并声明

USING (SELECT a.ROWID row_id, RTRIM(NVL(c.address_line1_text, '')) || ' ' || 
RTRIM(NVL(b.unit_number, '')) address_line1_text, 
RTRIM(c.city_name) city_name, RTRIM(c.state_code) state_code, 
RTRIM(c.basic_zip_code) basic_zip_code, 
NVL(b.unit_number, ' ') unit_number 

FROM table1 a ,table2 b ,table3 c 

WHERE 
    a.program_type_cd = 'P' 

     AND a.development_code = b.development_number 
    ) src 

     ON (a.ROWID = src.row_id) 
     --(ERROR IN LINE BELOW) 
     WHEN MATCHED THEN UPDATE SET street = RTRIM(NVL(src.address_line1_text, '')) 
     || ' ' || RTRIM(NVL(b.unit_number, '')), 

            city = RTRIM(src.city_name), 

            STATE = RTRIM(src.state_code), 

            zip = RTRIM(src.basic_zip_code), 

            unit_number = NVL(src.unit_number, ' '); 

我收到一个错误说:

"B"."UNIT_NUMBER": INVALID IDENTIFIER 

回答

0

我想你应该src.unit_number这里更换b.unit_number

|| ' ' || RTRIM(NVL(src.unit_number, '')), /* <-- */ 

           city = RTRIM(src.city_name), 

           STATE = RTRIM(src.state_code), 

           zip = RTRIM(src.basic_zip_code), 

           unit_number = NVL(src.unit_number, ' '); 
+0

我这样做后,我发布了问题,并工作。但是你认为我在SET语句中做了同样的事情吗?例如,如果在SET语句中,我只是说street = src.address_line1_text将不会像street = RTRIM(NVL(src.address_line1_text,'')) || ''|| RTRIM(NVL(b.unit_number,'')) – Drake 2009-10-05 17:58:14

+0

这就是我的想法。谢谢 – Drake 2009-10-05 18:37:07

+0

'street = RTRIM(NVL(src.address_line1_text,''))|| ''|| RTRIM(NVL(b.unit_number,''))'等于(根据表a,b和c):RTRIM(NVL(R.RIMIM(NVL(c.address_line1_text,''))||'' || RTRIM(NVL(b.unit_number,'')),''))|| ''|| RTRIM(NVL(NVL(b.unit_number,''),''))' 我想你只想要'street = src.address_line1_text' – manji 2009-10-05 18:37:32