sourcetip

Oracle: 기존 값에 추가하여 데이터 행 업데이트

fileupload 2023. 10. 25. 23:41
반응형

Oracle: 기존 값에 추가하여 데이터 행 업데이트

데이터베이스(Oracle 11g)에 큰 테이블이 있으며 여기서 특정 번호가 있는 테이블의 열을 업데이트합니다.a를 설정하여 업데이트하고 싶습니다.prefix이 열의 모든 값 앞에 있습니다.

예제(특정 번호는int그리고 PK, Value1은Varchar2마지막 열도 마찬가지입니다.):

실제 데이터:

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

향후 데이터(내 sql 이후):

    [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오류를 범실.

이게 가능하긴 해요?당신의 도움에 벌써 감사합니다!

연결 연산자만 사용하면 되고,||. 업데이트 구문에는 하위 쿼리를 가져올 필요가 없습니다.column2gettingupdated값의 경우 12233입니다.

또한 Oracle VARCHAR2에서는 큰따옴표가 아니라 작은따옴표를 사용합니다.따라서 이 문에 대한 구문은 다음과 같습니다.

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

예제 스키마 SCOT의 예제는 다음과 같습니다.

SCOTT@dev> CREATE TABLE DEPT2 as (
  2          SELECT *
  3            FROM DEPT
  4         );

Table created.

SCOTT@dev> commit;

Commit complete.

SCOTT@dev> UPDATE DEPT2
  2     SET DNAME  = 'PRE '|| DNAME
  3   WHERE DEPTNO = 20;

1 row updated.

SCOTT@dev> commit;

Commit complete.

SCOTT@dev> SELECT *
  2    FROM dept
  3   WHERE deptno = 20
  4   UNION
  5  SELECT *
  6    FROM dept2
  7   WHERE deptno = 20
  8  
SCOTT@dev> /

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

문자열에 연결 사용:

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

언급URL : https://stackoverflow.com/questions/26405864/oracle-update-a-datarow-by-adding-to-existing-value

반응형