Oracle db에 간단한 테이블이 있다고 가정합니다.
CREATE TABLE schema.d_test
(
id_record integer GENERATED AS IDENTITY START WITH 95000 NOT NULL,
DT DATE NOT NULL,
var varchar(50),
num float,
PRIMARY KEY (ID_RECORD)
)
그리고 R에 데이터 프레임이 있습니다.
dt= c('2022-01-01', '2005-04-01', '2011-10-02')
var= c('sgdsg', 'hjhgjg', 'rurtur')
num= c(165, 1658.5, 8978.12354)
data= data.frame(dt, var, num)%>%
mutate(dt= as.Date(dt))
삽입하려고 합니다데이터
오라클로d_test
code를 사용하는 테이블
data %>%
dbWriteTable(
oracle_con,
value= .,
date= T,
'D_TEST',
append= T,
row.names=F,
overwrite= F
)
하지만 다음 오류가 반환되었습니다.
Error in .oci.WriteTable(conn, name, value, row.names= row.names, overwrite= overwrite, :
Error in .oci.GetQuery(con, stmt, data= value) :
ORA-00947: not enough values
무엇이 문제입니까? 어떻게 고칠 수 있습니까? 감사합니다.
- 답변 # 1
이것은 순수한 Oracle입니다(저는 R을 모릅니다).
샘플 테이블:
저의 초기 아이디어는 Oracle이 값을 삭제하고 자체 값을 생성하기를 바라며 ID 열에 모든 값을 삽입하도록 제안하는 것이었습니다. 그러나 작동하지 않습니다.
그러나 ID 열의 값을 자동으로 생성하지 않고 "해결 방법"을 사용하도록 테이블을 다시 생성할 수 있는 경우(ID 열이 상대적으로 Oracle의 새로운 기능) -시퀀스 및 트리거 -"수정"할 수 있습니다.
삽입만
이름
(오라클은 트리거를 사용하여ID
):이것이 code에서 수행할 작업입니다. 더미를 제공하세요.
ID
값, 그냥 피하기현재 오류가 발생했습니다. Trigger는 이를 폐기하고 어쨌든 시퀀스를 사용합니다.