프로그래밍/오라클 SQL과 PLSQL

오라클 insert문의 values 인자 오류

이자다 2023. 6. 5. 18:06
반응형

챗GPT 한테 테이블의 구조와 들어갈 값들을 말해주고 sql 구문을 뱉게 했다.

 

그런데 create 는 잘 됐는데 insert 에서 오류가 났다.

 

 

INSERT INTO sqldemp (empno, ename, edate, enum)
VALUES
    (1, '홍길동', '2012-01-01', NULL),
    (2, '강감찬', '2012-01-01', '001'),
    (3, '이순신', '2013-01-01', '001'),
    (4, '이민정', '2013-01-01', '001'),
    (5, '이병헌', '2013-01-01', NULL),
    (6, '안성기', '2014-01-01', '005'),
    (7, '이수근', '2014-01-01', '005'),
    (8, '김병만', '2014-01-01', '005');

테이블에 위와 같이 값을 삽입하려고 했고 구문 오류가 발생했다.

 

 

 

 

명령의 8 행에서 시작하는 중 오류 발생 -
INSERT INTO sqldemp (empno, ename, edate, enum)
VALUES
    (1, '홍길동', '2012-01-01', NULL),
    (2, '강감찬', '2012-01-01', '001'),
    (3, '이순신', '2013-01-01', '001'),
    (4, '이민정', '2013-01-01', '001'),
    (5, '이병헌', '2013-01-01', NULL),
    (6, '안성기', '2014-01-01', '005'),
    (7, '이수근', '2014-01-01', '005'),
    (8, '김병만', '2014-01-01', '005')
오류 발생 명령행: 11 열: 5
오류 보고 -
SQL 오류: ORA-00933: SQL 명령어가 올바르게 종료되지 않았습니다
00933. 00000 -  "SQL command not properly ended"
*Cause:    
*Action:

 

문법, 타이핑 오류로 출력되는 문구이다.

 

 

sqld 시험 오픈톡방 사람들에게 물어보니 위와 같은 방법은 MS SQL에서만 가능한 방법이라고 한다.

 

그래서 오라클에서 사용할 sql 이라는 조건을 달고 질의해서 답을 얻었다.

 

아래와 같은 방법으로 구문을 바꿔 insert를 진행했다.

 

INSERT ALL
    INTO sqldemp (empno, ename, edate, enum) VALUES (1, '홍길동', DATE '2012-01-01', NULL)
    INTO sqldemp (empno, ename, edate, enum) VALUES (2, '강감찬', DATE '2012-01-01', '001')
    INTO sqldemp (empno, ename, edate, enum) VALUES (3, '이순신', DATE '2013-01-01', '001')
    INTO sqldemp (empno, ename, edate, enum) VALUES (4, '이민정', DATE '2013-01-01', '001')
    INTO sqldemp (empno, ename, edate, enum) VALUES (5, '이병헌', DATE '2013-01-01', NULL)
    INTO sqldemp (empno, ename, edate, enum) VALUES (6, '안성기', DATE '2014-01-01', '005')
    INTO sqldemp (empno, ename, edate, enum) VALUES (7, '이수근', DATE '2014-01-01', '005')
    INTO sqldemp (empno, ename, edate, enum) VALUES (8, '김병만', DATE '2014-01-01', '005')
SELECT 1 FROM DUAL;

 

이것 외에도 아래와 같은 구문이 가능하다.

 

INSERT INTO sqldemp (empno, ename, edate, enum)
SELECT 1, '홍길동', TO_DATE('2012-01-01', 'YYYY-MM-DD'), NULL FROM DUAL UNION ALL
SELECT 2, '강감찬', TO_DATE('2012-01-01', 'YYYY-MM-DD'), '001' FROM DUAL UNION ALL
SELECT 3, '이순신', TO_DATE('2013-01-01', 'YYYY-MM-DD'), '001' FROM DUAL UNION ALL
SELECT 4, '이민정', TO_DATE('2013-01-01', 'YYYY-MM-DD'), '001' FROM DUAL UNION ALL
SELECT 5, '이병헌', TO_DATE('2013-01-01', 'YYYY-MM-DD'), NULL FROM DUAL UNION ALL
SELECT 6, '안성기', TO_DATE('2014-01-01', 'YYYY-MM-DD'), '005' FROM DUAL UNION ALL
SELECT 7, '이수근', TO_DATE('2014-01-01', 'YYYY-MM-DD'), '005' FROM DUAL UNION ALL
SELECT 8, '김병만', TO_DATE('2014-01-01', 'YYYY-MM-DD'), '005' FROM DUAL;

 

어쩐지 테이블 만들 때 정수형을 number가 아니라 int로 설정하더니 오라클 용 sql 이 아니었다.

 

앞으로 질의할 때 이 부분도 유의해야겠다.

반응형