2014-10-16 2 views
2

데이터베이스에 큰 테이블 (Oracle 11g)을 가지고 있는데 여기에 특정 숫자가있는 테이블의 열을 업데이트하고 싶습니다. 이 열의 모든 값에서 prefix의 값으로 설정하여 업데이트하고 싶습니다.오라클 : 기존 값을 추가하여 데이터row를 업데이트하십시오.

(SpecificNumber은 int이고 PK가 값 1이 Varchar2하고 있으므로 마지막 열이다)

실제 데이터 (내 SQL 후)

[SpecificNumber] [Value1] [column2gettingupdated] 
[1] 123456789  Test  text  
[2] 123456789102  sth  text2  
[3] 12233   text  test3 

미래 데이터 :

[SpecificNumber] [Value1] [column2gettingupdated] 
[1] 123456789  Test  PREFIX-text  
[2] 123456789102  sth  PREFIX-text2  
[3] 12233   text  PREFIX-test3 

그래서 내가 생각한 것 :

Update table 
set column2gettingupdated=("prefix"+ 
    (select column2gettingupdated from table where SpecificNumber = '12233') 
) 
where SpecificNumber = '12233'; 

하지만 그건 ORA-00904: "p": invalid identifier 오류가 발생합니다. 내가 이것을 시도하는 경우

는 그리고 :

Update table 
set column2gettingupdated=("prefix"+ 
    (select column2gettingupdated from table where SpecificNumber = '12233') 
) 
where SpecificNumber = '12233'; 

가 나는 ORA-01722: invalid number 오류가 발생합니다.

이것도 가능합니까? 이미 도와 줘서 고마워! 문자열에 대한

+0

'SET column2gettingupdated = CONCAT ("접두어 -"column2gettingupdated)' – Mihai

+0

@Mihai 사실 . 어떻게 든 CONCAT을 잊어 버렸고 항상 mysql 만 생각했습니다. 어쨌든 답으로 게시하면 크레딧을받습니다! (하지만 "with"를 사용하면 "-"잘못된 식별자 오류가 발생합니다.) – DatRid

답변

5

이 모든 것을이 필요는 연결 연산자, ||를 사용하는 것입니다. 업데이트 구문에서는 값 12233에 대해 column2gettingupdated을 얻는 하위 쿼리가 필요하지 않습니다.

또한 Oracle VARCHAR2의 경우 큰 따옴표가 아닌 작은 따옴표를 사용합니다. 이것은이 문이 구문 결과 : 여기

UPDATE table 
    SET column2gettingupdated = 'prefix' || column2gettingupdated 
WHERE SpecificNumber  = 12233; 

는 예를 들어 스키마 SCOTT의 예는 다음과 같습니다

[email protected]> CREATE TABLE DEPT2 as (
    2   SELECT * 
    3   FROM DEPT 
    4  ); 

Table created. 

[email protected]> commit; 

Commit complete. 

[email protected]> UPDATE DEPT2 
    2  SET DNAME = 'PRE '|| DNAME 
    3 WHERE DEPTNO = 20; 

1 row updated. 

[email protected]> commit; 

Commit complete. 

[email protected]> SELECT * 
    2 FROM dept 
    3 WHERE deptno = 20 
    4 UNION 
    5 SELECT * 
    6 FROM dept2 
    7 WHERE deptno = 20 
    8 
[email protected]>/

    DEPTNO DNAME   LOC 
========== ============== ============= 
     20 PRE RESEARCH DALLAS 
     20 RESEARCH  DALLAS 
2

를 사용하여 연결 :

update <table_name> 
    set column2gettingupdated = 'Prefix-' || column2gettingupdated 
where specificnumber = 12233; -- use NUMBER literal instead of string one 
관련 문제