programing

50개 이상의 열 이름을 입력하지 않고 동일한 테이블에 행 복사(2개의 열을 변경)

starjava 2023. 6. 11. 10:14
반응형

50개 이상의 열 이름을 입력하지 않고 동일한 테이블에 행 복사(2개의 열을 변경)

업무 중에는 주로 행을 복사하면서 기본 키를 변경하고 새 스탬프를 주고 외부 키를 변경해야 합니다.

문제는 하는 동안 모든 열 이름을 입력하고 싶지 않다는 것입니다.

insert into table_name
select pk_seq.nextval, 
       'foreign-key', 
       col3,
       col4...col51
  from table_name
 where pk_id = "original_primary_key"

그리고 select 문에서 *를 실행하면 처음 두 개의 열을 업데이트할 수 없습니다.

제가 하고 싶은 대로 할 수 있는 방법이 없을까요?

자세한 내용은 다음과 같습니다. 하지만 이 PL/SQL은 옵션입니다.

begin
  for r in (select *
              from table_name
             where pk_id = 'original_primary_key')
  loop
    r.pk := pk_seq.nextval;
    r.fk := 'foreign-key';
    insert into table_name values r;
  end loop;
end;

Tony의 답변을 기반으로 합니다.

기본 키에서 검색 중이므로 최대 하나의 행이 반환된다는 것으로 알고 있습니다.유효한 키 값이 지정된 경우 적어도 하나의 행이 반환됩니다.그래서 우리는 루프가 필요하지 않습니다.

declare
    r table_name%ROWTYPE;
begin
    select *
    into r
    from table_name
    where pk_id = "original_primary_key";
-- 
    select pk_seq.nextval into r.pk_id from dual;
     -- For 11g can use instead: r.pk_id := pk_seq.nextval;
    r.fk_id := "new_foreign_key";
    insert into table_name values r;
end;

죄송합니다. 전부인지 아닌지에 대한 문제입니다.
사이에 아무것도 없습니다.SELECT *특정 열을 나열합니다. 하나 또는 다른 열입니다.

데이터 사전을 쿼리하여 SQL을 생성할 수 있습니다.

SELECT 'tbl.' || column_name || ','
FROM   user_tab_columns
WHERE  table_name = 'MYTABLE'
ORDER BY column_id;

이 쿼리의 결과를 가져와 SQL 문에 붙여넣고 필요에 따라 조정한 다음 voila.

'temp' 테이블을 만들고, 두 개의 열을 업데이트하고, 이 'temp' 테이블에서 삽입 선택을 수행할 수 있습니다.

예:

create table temptemp as 
select *
  from table_name
 where pk_id = "original_primary_key"

update temptemp
set col1 = ...
,   col2 =....

insert into table2
select * from temptemp;

테이블 이름을 사용하고 데이터 사전을 사용하여 선택 문 텍스트(선택한 텍스트)를 작성하는 간단한 저장 프로시저를 만들 수 있습니다.그런 다음 복사, 붙여넣기 및 수정합니다.

언급URL : https://stackoverflow.com/questions/3780383/copying-a-row-in-the-same-table-without-having-to-type-the-50-column-names-whi

반응형