라벨이 오라클인 게시물 표시

[Oracle] ALTER TABLE ADD 스크립트 예제 추출하기

이미지
오라클에서 ALTER TABLE ADD 스크립트를 추출하는 방법을 안내해 드리려고 합니다. 데이터 딕셔너리 테이블 중 하나인 ALL_TAB_COLUMNS를 참고하는 예제입니다. SELECT ' ALTER TABLE ' || OWNER || '.' || TABLE_NAME || ' ADD ' || COLUMN_NAME || ' ' || CASE DATA_TYPE WHEN 'DATE' THEN 'DATE' WHEN 'NUMBER' THEN 'NUMBER(' || DATA_PRECISION || ',' || DATA_SCALE || ')' WHEN 'CHAR' THEN DATA_TYPE || '(' || DATA_LENGTH || ')' WHEN 'VARCHAR2' THEN DATA_TYPE || '(' || DATA_LENGTH || ')' ELSE '' END || '; ' Q, TAB.* FROM ALL_TAB_COLUMNS TAB WHERE TABLE_NAME = 'EMP' AND DATA_TYPE IN ('DATE', 'NUMBER', 'CHA

ORA-01428: '0' 인수가 범위를 벗어났습니다 (ORA-01428: argument '0' is out of range)

이미지
ORA-01428: argument '0' is out of range 오류는 오라클에서 기본적으로 제공하는 내장 수학함수(mathematical function) 등에서 적합하지 않은 매개변수를 설정하는 경우에 발생합니다. 이번 주제는 SQRT 함수를 예제로 안내해 드리겠습니다. 참고로 SQRT는 제곱근의 영어를 뜻하며 Square Root의 약자입니다. 아, 그리고 아규먼트 0는 입력하는 값에 따라 바뀌며, 이번 예제는 -1이 발생할 것입니다. ORA-01428: '0' 인수가 범위를 벗어났습니다 다음 예제는 SQRT 함수에 인자 값을 -1로 설정하였을 때 오류가 발생하는 현상을 보여드리고 있습니다. SELECT SQRT (-1) FROM DUAL; ERROR at line 1: ORA-01428: argument '-1' is out of range 예시의 SQRT 함수는 제곱근을 뜻하는 함수이며, 제곱하여 해당 값이 되는 수를 가리킵니다. 예를 들면 제곱근 4는 제곱하여 4가 되는 수인 2라는 값을 반환합니다. SELECT SQRT (4) FROM DUAL; SQRT(4) ---------- 2 이것이 버전 차이에서 발생하는 현상인지는 모르겠으나, 오라클 문서에서는 스퀘어루트 함수의 매개변수를 다음과 같이 음수 값이 가능하다고 표현하고 있습니다. "숫자 값입니다. 예를 들어 Sqrt(100)는 값 10을 반환합니다. 숫자 값에는 소수 및 음수 값이 포함될 수 있습니다." ORA-01428: argument '0' is out of range 다만, 데이터베이스에서 허수가 유의미한 경우는 많지 않을 것입니다. 그리하여 저 또한 제곱근에 음수 값을 넣지 않습니다. 마찬가지로 ORA-01428: argument '0' is out of range 오류를 해결하기 위해서 사용하려는 수학함수의 인수 범위를 확인하여 예외발생을 방지할

ORA-02432: cannot enable primary key - primary key not defined for table (ORA-02432: 기본키를 사용가능하게 할 수 없음 - 테이블에 기본키가 정의되지 않았습니다.)

이미지
ORA-02432: cannot enable primary key - primary key not defined for table 오류는 기본키가 테이블에 정의되어 있지 않을 때 발생합니다. 없는 기본키에 대해 활성화 또는 비활성화를 시도할 때에 발생하는 오류이니, 해당 테이블이 맞는지 점검해 주세요. 아니면 기본키가 초기 단계에서 누락되어 있을 가능성도 있으며, 또는 삭제됐을 가능성이 있을 것입니다. ORA-02432: cannot enable primary key - primary key not defined for table 기본키 활성화 시도 시 발생하는 오류입니다. ALTER TABLE TABLE_NAME MODIFY PRIMARY KEY ENABLE; ERROR at line 1: ORA-02432: cannot enable primary key - primary key not defined for table

ORA-04098: 트리거가 부적합하며 재검증을 실패했습니다 (ORA-04098: trigger is invalid and failed re-validation)

이미지
ORA-04098: 트리거가 부적합하며 재검증을 실패했습니다 ( ORA-04098: trigger is invalid and failed re-validation) 오류는 트리거 소스의 부적합으로 인하여 발생하며 어떻게 오류를 해결할 수 있는지 알아봅시다. 하기의 괄호 내부 단축키는 토드(TOAD: Tool for Oracle Application Development) 기준입니다. ORA-04098 오류 해결하기 : Describe Trigger Errors 첫 번째 방법은 트리거를 Describe(F4)하여 Errors 탭에서 오류가 발생한 라인, 컬럼 및 메시지를 확인하여 처리하는 방법입니다. 라인 및 컬럼은 정확한 수치가 아니기에 해당 위치로 이동한 다음(Goto line: Ctrl + G)에 문제가 되는 부분을 찾기 위한 참고 용도로 사용해야 합니다. 오류 메시지를 중점으로 분석하면 답이 나올 것입니다. ORA-04098 오류 해결하기 : Execute Trigger Statement 두 번째 방법은 스테이트먼트를 직접 실행해 보는 것(단축키 F9)입니다. 예시자료에 해당하는 경우는 일부러 트리거 생성시점부터 오류가 발생하도록 유도하였습니다. 실제로는 해당과 같은 오류는 거의 발생하지 않을 것이고 이외의 객체 참조 문제, 권한 문제 등으로 오류가 발생하는 경우가 대부분이기에 직접 실행 이전에는 주의가 필요합니다~

ORA-02433: cannot disable primary key - primary key not defined for table (ORA-02433: 기본 키를 사용 안함으로 설정 불가 - 테이블에 대해 기본 키가 정의되지 않았습니다.)

이미지
ORA-02433: cannot disable primary key - primary key not defined for table 오류는 기본키가 정의되어 있지 않은 테이블에 대해 기본키를 비활성화 하려고 시도 하여 발생하는 오류입니다. 해결 방법은 따로 존재하지 않습니다. 기본키가 없으므로 비활성화 할 필요가 없기 때문입니다. 그대로 진행하시면 된답니다! ALTER TABLE TABLE_NAME MODIFY PRIMARY KEY DISABLE CASCADE; ERROR at line 1: ORA-02433: cannot disable primary key - primary key not defined for table

ORA-01830: 날짜 형식의 지정에 불필요한 데이터가 포함되어 있습니다 (ORA-01830: date format picture ends before converting entire input string)

이미지
ORA-01830: date format picture ends before converting entire input string 오류의 발생 원인과 해결 방법에 대하여 알아봅시다. date format prcture에서 date format은 날짜 형식으로 해석할 수 있을 것입니다. picture는 묘사하다는 뜻으로 사용하였습니다. 그러니까  ORA-01830 오류는 날짜 형식을 묘사하는 것이 전체 입력 문자열을 변환하기 전에 종료가 되었다 는 뜻입니다. 오라클 오류는 가끔 직역한 부분이 이해하기가 힘들 정도로 표시가 되어 자세히 풀어보았습니다. 자, 이제 해당 오류가 발생하는 예제를 하나 보여드리겠습니다. SELECT TO_DATE ('2021-01-15-17-40-50', 'YYYY-MM-DD') FROM DUAL; ERROR at line 1: ORA-01830: date format picture ends before converting entire input string 전체 입력 문자열 예시는 2021년 1월 15일 17시 40분 50초입니다. 이것을 TO_DATE 함수로 날짜형식으로 변환하는 과정에서 'YYYY-MM-DD'만 설정하였기에 ORA-01830 오류가 발생한 것 입니다. 해당 오류를 수정하려면 다음과 같이 날짜 형식을 모두 묘사해 주시면 됩니다. 예제자료는 형식을 다음과 같이 설정하였습니다.  'YYYY-MM-DD HH24:MI:SS' SELECT TO_DATE ('2021-01-15-17-40-50', 'YYYY-MM-DD HH24:MI:SS') FROM DUAL; TO_DATE ('2021-01-15-17-40-50', 'YYYY-MM-DD HH24:MI:SS') -------- 2021-01-15 오후 5:40:50

ORA-02437: cannot validate - primary key violated (ORA-02437: 을 검증할 수 없습니다 - 잘못된 기본 키입니다)

이미지
ORA-02437: cannot validate - primary key violated 오류 는 기본키를 추가하려는 시도를 할 때, 검증이 불가한 경우에 발생합니다. 그 이유는 기본키의 속성인 유일성이 보장되지 않은 속성 조합에 기본키를 설정하려는 시도를 하였기 때문입니다. 해당 오류를 해결하려면 추가하려는 기본키에 위배되는 컬럼 조합을 가지고 있는 데이터를 정리해 주세요. 다음의 예제에서 테이블(TABLE_NAME)은 2개의 컬럼을 가지며 각각 COLUMN_NAME과 COLUMN_NAME_2입니다. 이때, 2개의 컬럼을 기본키로 설정을 하려는 경우, 해당 조합에 중복이 존재한다면 검증에 실패하게 됩니다. ALTER TABLE USER_NAME.TABLE_NAME ADD ( CONSTRAINT CN_TABLE_NAME PRIMARY KEY (COLUMN_NAME, COLUMN_NAME_2)); CONSTRAINT CN_TABLE_NAME ERROR at line 2: ORA-02437: cannot validate (USER_NAME.CN_TABLE_NAME) - primary key violated 예제 데이터는 현재와 같이 중복된 로우가 있습니다. (1, 1)이 중복된 데이터입니다. --테이블 현재 데이터 (컬럼1과 컬럼2에 각각 1인 데이터가 중복) SELECT * FROM TABLE_NAME; COLUMN_NAME COLUMN_NAME_2 ------------------------- 1 1 1 1 1 2 다음의 쿼리를 통해 중복되는 데이터를 조회해 볼 수 있습니다. SELECT COLUMN_NAME, COLUMN_NAME_2, COUNT (*) FROM TABLE_NAME GROUP BY COLUMN_NAME, COLUMN_NAME_2 HAVING COUNT (*) > 1; COLUMN_NA

ORA-01468: a predicate may reference only one outer-joined table (ORA-01468: outer-join된 테이블은 1개만 지정할 수 있습니다)

이미지
ORA-01468 a predicate may reference only one outer-joined table 오류는 오라클 조인에서 풀 아우터 조인을 시도할 때에 발생합니다. 오라클 조인을 풀 아우터 조인을 지원하지 않기에 ANSI 조인으로 변경하여 해결할 수 있습니다. 다음은 ORA-01468 오류가 발생하는 예제 자료입니다. SELECT * FROM EMP, DEPT WHERE DEPT.DEPTNO(+) = EMP.DEPTNO(+); ERROR at line 3: ORA-01468: a predicate may reference only one outer-joined table 레프트 또는 라이트 아우터 조인을 사용하려고 한 경우에는 (+) 사인을 한쪽에만 입력하거나, ANSI조인으로 변경하도록 검토하셔야 합니다. 풀 아우터 조인을 사용하려는 의도가 맞다면, ANSI조인을 사용하셔야 합니다. 다음과 같이 수정하여 해결할 수 있습니다. SELECT * FROM EMP FULL JOIN DEPT ON DEPT.DEPTNO = EMP.DEPTNO; 15 rows selected.

ORA-02283: 시퀀스 시작 번호는 변경할 수 없습니다. (ORA-02283: cannot alter starting sequence number)

이미지
ORA-02283: 시퀀스 시작 번호는 변경할 수 없습니다. (cannot alter starting sequence number) 오류는 ALTER SEQUENCE SEQUENCE_NAME START WITH 1; 과 같은 명령어로 스타트를 수정하려고 시도하는 경우에 발생합니다. 보통 특정 시작 번호를 설정하기보다는 1부터 다시 시작하고 싶은 경우가 많을 것이므로 해당의 경우를 예시로 하여 안내해 드리겠습니다. 해당 오류를 수정하려면 보통 두 가지 방법을 제시합니다. 시퀀스 사이클을 설정하여 다시 1로 돌아가는 방법 다음과 같이 현재 시퀀스가 100인 상태를 가정해 봅시다. CREATE SEQUENCE SEQUENCE_NAME START WITH 100 MAXVALUE 9999 MINVALUE 1 NOCYCLE CACHE 2 NOORDER; 이때에 시퀀스를 1로 설정하고 싶은 경우 다음의 명령어를 실행하면 ORA-02283: 시퀀스 시작 번호는 변경할 수 없습니다. 예외가 발생하게 된답니다. ALTER SEQUENCE SEQUENCE_NAME START WITH 1; 1행에 오류: ORA-02283: 시퀀스 시작 번호는 변경할 수 없습니다. 이때, 시퀀스의 MINVALUE, MAXVALUE 및 CACHE 등을 고려하여 다음과 같이 설정하여 1부터 다시 시작할 수 있도록 하는 방법이 있습니다. 해당 예시는 NEXTVAL을 1로 표시하기 위하여 조회를 한 번 더 하였습니다. --사이클을 설정하여 1부터 시작하도록 하겠습니다. ALTER SEQUENCE SEQUENCE_NAME CYCLE; --맥스, 민, 캐시를 고려하여 증가치를 수정합니다. ALTER SEQUENCE SEQUENCE_NAME NOCACHE; ALTER SEQUENCE SEQUENCE_NAME INCREMENT BY 4998; --조회를 해보면 1이 됩니다. (다시 조회하시면 돌아가니 조심해 주세요) SELECT SEQUENCE_NAME.NEXT

ORA-02010: missing host connect string (ORA-02010: 호스트 접속 문자열을 지정해 주십시오)

이미지
ORA-02010: missing host connect string 오류는 데이터베이스 링크 생성과 관련이 있습니다. ORA-02010: missing host connect string 원인 다음과 같이 ORA-02010 오류가 발생하도록 예제를 준비해 보았습니다. 해당 예외의 발생 원인은 string의 누락 때문입니다. USING 절의 호스트 커넥트 스트링에서 아포스트로피('), 즉 단일 인용부가 누락되어 발생합니다. CREATE PUBLIC DATABASE LINK DATABASE_LINK_NAME CONNECT TO USER_NAME IDENTIFIED BY PASSWORD USING HOST_CONNECT_STRING; ERROR at line 4: ORA-02010: missing host connect string ORA-02010: missing host connect string 해결하기 ORA-02010 오류는 USING 절 부분을 확인하여 해결할 수 있습니다. USING 키워드 다음에 인용부를 추가하여 해결해 주세요. CREATE PUBLIC DATABASE LINK DATABASE_LINK_NAME CONNECT TO USER_NAME IDENTIFIED BY PASSWORD USING 'HOST_CONNECT_STRING'; Database link created.

ORA-01452: 중복 키가 있습니다. 유일한 인덱스를 작성할 수 없습니다. (ORA-01452: cannot CREATE UNIQUE INDEX; duplicate keys found)

이미지
ORA-01452: 중복 키가 있습니다. 유일한 인덱스를 작성할 수 없습니다. 오류는 오라클 데이터베이스에서 대상 컬럼 조합에 유니크 인덱스를 생성하려고 할 때에 발생합니다. 이 오류에서 말하는 중복 키는 키의 대상이 되는 컬럼 목록입니다. ORA-01452: 중복 키가 있습니다. 유일한 인덱스를 작성할 수 없습니다. 원인 ORA-01452: cannot CREATE UNIQUE INDEX; duplicate keys found 오류가 발생하는 예제 자료를 하나 소개해 드리겠습니다. SELECT * FROM TABLE_NAME; COLUMN_NAME COLUMN_NAME_2 COLUMN_NAME_3 -------------------- -------------------- -------------------- 1 1 2 1 1 9 1 2 3 해당 테이블은 상기와 같이 데이터가 있으며, 주목할 부분은 컬럼1과 컬럼2에 (1, 1) 데이터가 중복되어 있다는 것입니다. ORA-01452: cannot CREATE UNIQUE INDEX; duplicate keys found 해결하기 이때, 해당 테이블의 (COLUMN_NAME, COLUMN_NAME_2) 컬럼에 유니크 인덱스를 생성하면 어떻게 될까요? CREATE UNIQUE INDEX PK ON TABLE_NAME (COLUMN_NAME, COLUMN_NAME_2); ERROR at line 2: ORA-01452: cannot CREATE UNIQUE INDEX; duplicate keys found 중복키가 있기에 ORA-01452 예외가 발생하게 됩니다. 해당 오류를 수정하려면 중복키를 우선 정리하여야 합니다. 중복키를 조회하는 기본적인 방법은

ORA-00918: 열의 정의가 애매합니다 (ORA-00918: column ambiguously defined)

이미지
ORA-00918: column ambiguously defined 오류는 설명과 같이 컬럼이 애매하거나 모호하게 설정되어 발생합니다. 주요하게 발생하는 원인 중 두 가지는 다음과 같습니다. 첫 번째는 두 테이블 간의 동일한 컬럼명이 조인 결과에 의해 같이 선택되었을 때, 외부의 뷰에서 해당 컬럼을 SELECT 시도할 때 발생합니다. 인라인뷰에서는 1번 테이블의 컬럼명, 2번 테이블의 컬럼명이 동일하게 명명되어 있는데, 외부에서 해당 컬럼명을 조회할 때 발생하게 되는 것입니다. 두 번째는 별도의 조인 없이 하나의 테이블을 조회할 때, 컬럼 개수가 많아지면서 전반부와 후반부의 컬럼명을 실수로 동일하게 설정하는 문제입니다. 조인에 의해 열의 정의가 애매해지는 현상 EMP테이블과 DEPT테이블은 외래키 DEPTNO가 존재합니다. 이너 조인한 결과에서 각 테이블의 DEPTNO 컬럼을 조회해 보겠습니다. 테이블을 명시하였기에 열의 정의가 애매하지는 않습니다. SELECT EMP.DEPTNO, DEPT.DEPTNO FROM DEPT JOIN EMP ON EMP.DEPTNO = DEPT.DEPTNO WHERE EMPNO = 7839; DEPTNO DEPTNO ---------- ---------- 10 10 하지만 단순히 DEPTNO를 조회하는 경우에는 이 컬럼이 {EMP 테이블}의 [DEPTNO 컬럼]을 말하는 건지, {DEPT 테이블}의 [DEPTNO 컬럼]을 말하는 건지, 열의 정의가 애매해지는 현상이 발생합니다. 그리하여 ORA-00918: 열의 정의가 애매합니다 오류가 발생합니다. SELECT DEPTNO FROM DEPT JOIN EMP ON EMP.DEPTNO = DEPT.DEPTNO WHERE EMPNO = 7839; SELECT DEPTNO ERROR at line 1: ORA-00918: column ambiguously defined 테이블의 컬럼을

PLS-00215: String length constraints must be in range (1 .. 32767)

이미지
PLS-00215: String length constraints must be in range (1 .. 32767) 오류는 블록의 선언부에 정의한 VARCHAR2와 같은 String 변수에 대해 길이를 설정하지 않아서 발생합니다. 해결 방법에 대해 알아보도록 하겠습니다~ 다음은 PLS-00215: String length constraints must be in range (1 .. 32767) 예외가 발생하는 예제 자료입니다. DECLARE TABLENAME VARCHAR2; BEGIN EXECUTE IMMEDIATE 'INSERT INTO USER_NAME.TABLE_NAME (COLUMN_NAME) VALUES (:1) ' USING 'BEOMSANG'; END; / ERROR at line 2: ORA-06550: line 2, column 16: PLS-00215: String length constraints must be in range (1 .. 32767) 오류를 해결하려면 안내와 같이 1에서 32767에 해당하는 길이만큼 문자열 길이를 설정해 주세요. 다음은 길이를 추가하여 해결한 결과입니다. DECLARE TABLENAME VARCHAR2 (100); BEGIN EXECUTE IMMEDIATE 'INSERT INTO USER_NAME.TABLE_NAME (COLUMN_NAME) VALUES (:1) ' USING 'BEOMSANG'; END; / PL/SQL procedure successfully completed. 특정 테이블의 컬럼과 동일하게 선언이 되어야 하면, 해당 타입을 선언하는 것도 좋은 방법입니다. 다음은 테이블명 변수에 대해 딕셔너리를 참고하여 데이터 값을 선언하였습니다. 참고로, 오라클 데이터베이스 테이블 이름은 최대 30바이트이며 해당 컬럼 또한 3

ORA-02441: Cannot drop nonexistent primary key (ORA-02441: 존재하지 않는 기본 키를 삭제할 수 없습니다)

이미지
기본키를 새로 추가하거나, 기존의 기본키를 삭제하고 싶을 때 ALTER TABLE 명령어를 사용할 수 있습니다. 하지만, 이때 ORA-02441: Cannot drop nonexistent primary key 오류가 발생하는 경우가 있습니다. 기본키를 바꾸는 것이 그렇게 자주  발생하는 이벤트가 아니다 보니 해당 오류를 보는 것은 아마 쉽지 않을 것입니다. 이번 주제는 해당 오류를 해결하는 방법에 대한 안내입니다. ORA-02441: Cannot drop nonexistent primary key 드랍 프라이머리 키 명령어를 실행하였으나 오류가 발생하였습니다. 사유는 간단하게 존재하지 않는 기본키를 드랍할 수 없다고 합니다. ALTER TABLE USER_NAME.TABLE_NAME DROP PRIMARY KEY CASCADE; ERROR at line 1: ORA-02441: Cannot drop nonexistent primary key 각 회사마다 코딩 컨벤션이 있을 것입니다. 코딩 컨벤션은 개발표준이라고 보통 해석합니다. 예를 들면 우리는 기본키에 대한 제약조건을 "PK_ 로 시작하도록 이름을 설정하겠다."와 같은 것입니다. 이때 PK로 시작하는 인덱스를 보고 프라이머리키가 있다고 판단하여 해당과 같은 현상이 발생할 수 있습니다. 인덱스를 한 번 더 점검하거나, 테이블의 제약조건을 다시 확인해 주세요. 기본키가 실제로 없을 가능성이 있거나, 테이블 이름을 잘못 입력하였을 가능성이 있습니다. 제약조건이 존재하지 않는다면, 기본키가 없을 가능성이 높습니다. SELECT * FROM ALL_CONSTRAINTS WHERE OWNER = 'USER_NAME' AND TABLE_NAME = 'TABLE_NAME'; no rows selected

ORA-00959: 테이블스페이스 존재하지 않습니다 (ORA-00959: tablespace does not exist)

이미지
ORA-00959: 테이블스페이스 존재하지 않습니다 오류는 테이블, 인덱스 또는 LOB 컬럼 객체를 생성하려고 할 때, 지정한 테이블스페이스가 존재하지 않기 때문에 발생합니다. 해당 오류를 해결하기 위해서는 먼저 테이블스페이스 명칭을 제대로 입력하였는지 확인을 해보고, 문제가 없다면 나머지 2가지 방법 중 하나를 고려해 보아야 합니다. 1. 생성하려는 테이블스페이스의 이름을 제대로 입력했는지 재확인합니다. 2-1. 기존의 다른 테이블스페이스를 사용하도록 검토합니다. 2-2. 원하는 명칭의 테이블스페이스를 신규로 생성하도록 검토합니다. 테이블스페이스 생성하기 테이블스페이스 생성하기 예제 자료입니다. CREATE TABLESPACE TABLESPACENAME DATAFILE 'C:\ORACLEXE\APP\ORACLE\ORADATA\XE\TABLESPACENAME.DBF' SIZE 360M AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED LOGGING ONLINE EXTENT MANAGEMENT LOCAL AUTOALLOCATE BLOCKSIZE 8K SEGMENT SPACE MANAGEMENT AUTO FLASHBACK ON; ORA-01543: tablespace already exists 혹시라도 이미 존재하는 테이블스페이스를 생성하려고 시도하는 경우에 발생할 수 있는 오류입니다. 해당 사용자로 확인할 수없더라도 다른 스키마에 생성되어 있을 수도 있습니다.

ORA-00913: 값의 수가 너무 많습니다 (ORA-00913: too many values)

이미지
ORA-00913: too many values 오류는 테이블 또는 뷰에 정의한 열의 개수보다 더 많은 값을 인서트, 혹은 셀렉트를 시도할 때 발생합니다. 이번 시간에는 SELECT문과 INSERT문 두 가지 예시를 각각 들어 ORA-00913: 값의 수가 너무 많습니다 오류의 발생 원인을 이해하고 해결해 보도록 하겠습니다~ INSERT 시도 시, ORA-00913: 값의 수가 너무 많습니다 해결하기 ORA-00913 오류는 일반적으로 INSERT 문을 사용하여 테이블에 데이터를 인서트 하려고 할 때 발생하는 경우가 많습니다. 다음은 인서트 하는 값의 수가 테이블의 컬럼 수보다 많아서 오류가 발생하는 예시 자료입니다. 이 예제에서 DEPT 테이블에 (DEPTNO, DNAME) 컬럼을 인서트 하려고 시도하는데, VALUES 대상이 (0, 'DEV, 'BUSAN')으로 값의 수가 많은 경우를 보여드립니다. 두 개의 컬럼에 세 개의 값을 인서트를 하려고 했기에, ORA-00913: too many values 오류가 발생하는 것을 확인할 수 있습니다. INSERT INTO DEPT (DEPTNO, DNAME) VALUES (0, 'DEV', 'BUSAN'); ERROR at line 1: ORA-00913: too many values ORA-00913: 값의 수가 너무 많습니다 오류를 해결하려면 인서트 값의 수가 테이블의 컬럼 수와 일치하도록 확인해야 합니다. 다음은 값의 수를 맞추어 정상적으로 인서트 하는 예시입니다. INSERT INTO DEPT (DEPTNO, DNAME) VALUES (0, 'DEV'); 1 row created. SELECT 시도 시, ORA-00913: 값의 수가 너무 많습니다 해결하기 컬럼의 수가 많은 경우는 인서트 외에도 셀렉트 등에도 일어날 수 있는 오류입니다. 다음은 IN 조건에 1개의 컬럼이 와야

오라클 정규식 설명 (Oracle Regular Expression Description)

이미지
오라클에서 정규식 또는 정규표현식의 패턴에 대해 이해해 보는 시간입니다. 오라클 다큐먼트를 직접 참고하고 싶으시면 "Regular Expression" 또는 "REGEXP"에  "Syntax", "Description" 등을 검색하여 더 상세한 내용을 확인할 수 있습니다. Oracle Regular Expression Pattern 연산자 설명서 \ 백슬래시는 문맥에 따라 용도가 나누어지는데, 보통 이스케이프 문자로 사용합니다. (escape character => 다음 문자가 특수문자임의 표시하는 문자) * 0개 이상 일치 ( >= 0 ) + 1개 이상 일치 ( >= 1 ) ? 0 또는 1개 일치 ( 0 or 1 ) | 대체 선택 연산자 ( or : alternation operator) ^ 표현식 시작(begin), <싱글라인모드 기준> $ 표현식 끝(end), <싱글라인모드 기준> . 어떠한 문자든 일치 여부 (NULL 제외) [ ] 표현식에 적중시키려는 문자 배열을 지정합니다. 대괄호 내부에서 ^ 로 시작하는 경우 [^], [ ] 표현과 반대로 제외시키려는 문자 배열을 지정합니다. ( ) 표현식을 하위표현식으로 그룹핑(grouping) 합니다. {m} 표현이 m번 적중 {m,} 표현이 적어도 m번 적중 {m,n} 표현이 적어도 m번을 적중하는데, 최대 n번까지 적중합니다. \n 역참조(backreference), n번 째(1~9) 선행 하위표현식(괄호로 grouping 된 표현식)과 일치 [..] 묶었을 때 한 글자가 되는 표현입니다. 예를 들면 Spanish 에서는 ch 가 한 글자라고 합니다. [.ch.]와 같이 사용하여 해당 글자를 캡처할 수 있는데, 실제로 쓰이는 건 거의 못 봤기에 이 정도가 있구나 하고 넘어가시면 됩니다

잘못된 작업입니다. 연결이 닫혔습니다. 해결 방법

이미지
잘못된 작업입니다. 연결이 닫혔습니다. 오류가 발생하였나요? 해당 오류는 IDbConnection 객체의 ConnectionState가 Closed 되어 발생합니다. 오류 발생 예시 데이터베이스 커넥션 설정 시 Open을 누락한 경우 데이터베이스 커넥션 타임아웃으로 연결이 닫힌 경우 System.InvalidOperationException: 잘못된 작업입니다. 연결이 닫혔습니다. 위치: System.Data.ProviderBase.DbConnectionClosed.BeginTransaction(IsolationLevel il) 위치: System.Data.OracleClient.OracleConnection.BeginDbTransaction(IsolationLevel isolationLevel) 위치: System.Data.Common.DbConnection.System.Data.IDbConnection.BeginTransaction() 커넥션 객체가 생성이 된다고 하여 스테이트가 자동으로 열리지는 않습니다. 명시적으로 메서드를 호출하셔야 합니다. 다음은 잘못된 작업입니다. 연결이 닫혔습니다. 오류 예제 자료입니다. using (IDbConnection con = new OracleConnection("User Id=userName;Password=password;Data Source=dataSourceName")) { //System.InvalidOperationException: 잘못된 작업입니다. 연결이 닫혔습니다. //con.Open(); using (IDbCommand cmd = con.CreateCommand()) { using (IDbTransaction tx = con.BeginTransaction()) { cmd.Transaction = (OracleTransaction)tx; cmd.CommandText

ORA-28002: the password will expire within 7 days 해결 방법 (ORA-28002: 7일 안에 비밀번호 가 만기될 것입니다)

이미지
ORA-28002: the password will expire within 7 days 오류는 사용자의 비밀번호가 일정 기간 후에 만료될 것임을 나타냅니다. 이 오류를 해결하기 위해 다음 두 가지 선택지가 있습니다. 비밀번호 변경하기 기초적인 해결 방법은 사용자의 비밀번호를 변경하는 것입니다. 이렇게 하면 비밀번호의 만료 기간이 재설정 할 수 있습니다. 아래의 SQL 문을 사용하여 사용자의 비밀번호를 변경할 수 있습니다. 여기서 USER_NAME은 사용자 이름, PASSWORD는 비밀번호입니다. 신규 비밀번호가 기존 비밀번호와 동일하여도 진행상에 문제는 없습니다. 다만, 권장하지는 않습니다. ALTER USER USER_NAME IDENTIFIED BY PASSWORD; 이 명령을 실행하면 비밀번호가 변경되고 만료 기간이 다시 설정된답니다. 프로파일 변경하기 오라클 데이터베이스는 사용자 비밀번호 정책을 프로파일을 통해 관리합니다. 사용자의 비밀번호 만료 기간을 제한 없이 설정하려면 다음과 같이 기본 프로파일을 변경할 수 있습니다. 프로파일 조회 부분과 프로파일 수정 구문을 준비해 보았습니다. 프로파일 조회 SELECT * FROM DBA_PROFILES WHERE RESOURCE_TYPE = 'PASSWORD'; PROFILE RESOURCE_NAME RESOURCE_TYPE ------------------------------------------------------------ ---------------------------------------------------------------- ---------------- LIMIT ------------------------------------------------------

PLS-00306: 호출 시 인수의 갯수나 유형이 잘못되었습니다 해결하기 (PLS-00306: wrong number or types of arguments in call to)

이미지
'PLS-00306: 호출 시 인수의 갯수나 유형이 잘못되었습니다' 오류가 발생하였나요? 해결해 보도록 합시다. 😘 오라클 PL/SQL에서 발생하는 오류는 PLS라는 접두어와 함께 코드를 표시해드립니다. 이번 게시물에서는 'PLS-00306' 오류가 발생하는 예제를 살펴보고 어떻게 해결할 수 있는지 해결 방법에 대해 알아보도록 하겠습니다. 아래의 예시에서는 프로시저를 호출할 때 인수의 갯수와 유형이 일치하지 않아 오류가 발생하는 상황을 보여드립니다. 우선 매개변수를 2개로 하는 프로시저를 하나 만들어보겠습니다. -- 프로시저 생성 CREATE OR REPLACE PROCEDURE PROCEDURE_NAME (P_PARAM1 NUMBER, P_PARAM2 VARCHAR2) AS BEGIN DBMS_OUTPUT.PUT_LINE ('Parameter 1: ' || P_PARAM1); DBMS_OUTPUT.PUT_LINE ('Parameter 2: ' || P_PARAM2); END; /