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
'programing' 카테고리의 다른 글
C#과 VB의 식 트리 차이입니다.그물 (0) | 2023.06.11 |
---|---|
루비의 블록에 대한 do..end vs curly brace (0) | 2023.06.11 |
data.frame의 두 열 사이에 열을 추가(삽입)합니다. (0) | 2023.06.11 |
서버를 위한 ASP.Net Core 대체 방법에서 절대 경로를 얻는 방법.지도 경로 (0) | 2023.06.11 |
redirectMode="ResponseRewrite"를 설정할 때 사용자 지정 오류가 작동하지 않음 (0) | 2023.06.11 |