환경
centos 5.5
oracle 10g


SELECT * FROM sys.props$ where name='NLS_CHARACTERSET';  //캐릭터셋 확인


C:\>sqlplus /nolog;
sql>conn /as sysdba;
 
변경하고자하는 캐릭터셋을 수정
sql>update sys.props$ set value$='UTF8' where name='NLS_CHARACTERSET';
sql>update sys.props$ set value$='UTF8' where name='NLS_NCHAR_CHARACTERSET';
sql>update sys.props$ set value$='KOREAN_KOREA.UTF8' where name='NLS_LANGUAGE';
sql>commit;

오라클 재시작 해야함


유저 생성 후에 위와 같은 에러가 발생하면 생성하고 세션 권한을 주지 않아서 발생함

grant create session to 유저이름;

SELECT * FROM AAA
AS OF TIMESTAMP (SYSTIMESTAMP - INTERVAL '10' MINUTE);
  1. start with 절에 명시된 루트노드에 해당되는 로우를 찾는다
  2. 루트노드에서 파생된 자식노드에 해당하는 로우를 찾는다. 각각의 자식노드는 루트노드와 connect by 절에 명시된 조건에 만족하는 로우가 된다
  3. 루트노드에 해당되는 자식노드를 찾으면, 그 자식노드와 다시 부모-자식 관계를 갖는 로우를 찾는다. 여기에서는 이전 단계에서의 자식노드가 다시 부모노드가 되며, 그 부모노드와 connect by 절의 조건에 부합되는 자식노드를 다시 검색하면 된다. 이런 절차를 반복해서 최종적으로 리프노드에 해당되는 로우가 나올 때까지 검색을 수행한다.
  4. 리프노드까지 찾은 후에는 다시 2번 과정을 반복하며 가장 마지막 리프노드에 해당되는 로우를 찾을 때까지 검색 한다.
  5. 쿼리에서 where 절에 조인 이외의 조건이 있는 경우, 지금까지 검색된 로우에서 where 절의조건을 만족하지 않는 로우들을 제거한다. 이 경우 오라클은 where 절에 명시된 조건을 만족하지 않는 모든 자식노드에 해당하는 로우들을 한 번에 없애지 않고, 계층형 쿼리의 결과로 검색된 각각의 자식노드를 검색하여 조건에 맞지 않는 로우를 제거한다.


오라클이 계층형 쿼리를 처리하는 순서
  1. 조인이 사용되었다면 가장 먼저 조인을 먼저 처리한다.
  2. 그 다음으로 connect by 조건을 처리한다.
  3. 마지막으로 나머지 조건(where 절에서 조인 이외의 조건)을 처리한다.

계층형 쿼리의 확장
루트노드 찾기 : CONNECT_BY_ROOT
중복 참조값 찾기 : CONNECT_BY_ISCYCLE
리프노드 찾기 : CONNECT_BY_ISLEAF
루트 찾아가기 : SYS_CONNECT_BY_PATH


SELECT t.no, t.parentno, lpad(t.no, t.lev * 10), t.lev
FROM test t
START WITH t.parentno=0   ==>계층형 쿼리의 부모로 사용될 행 지정
CONNECT BY PRIOR t.no=t.parentno==> 자신키 = 부모키
ORDER SIBLINGS BY t.no ==> 마지막 소팅 컬럼

생성
ALTER TABLE 테이블명 ADD CONSTRAINT uk_테이블명_컬럼명 UNIQUE(컬럼명)

삭제
ALTER TABLE 테이블명 DROP CONSTRAINT uk_테이블명_컬럼명

추가
ALTER TABLE 테이블명 ADD ( 컬럼명 자료형);

삭제
ALTER TABLE 테이블명 DROP(컬럼명);

수정
ALTER TABLE 테이블명 MODIFY(컬럼명 자료형);

컬럼이름 변경(9iR2 이후 버전에만 제공된 쿼리)
ALTER TABLE 테이블명 RENAME COLUMN 기존컬럼명 TO 변경하고싶은컬럼명;


SELECT TABLE_NAME, CONSTRAINT_NAME
FROM USER_CONSTRAINTS 
WHERE TABLE_NAME IN('테이블명1','테이블명2');

column TABLE_NAME format a15
column COLUMN_NAME format a15
column CONSTRAINT_NAME format a15

SELECT TABLE_NAME, COLUMN_NAME, CONSTRAINT_NAME
FROM USER_CONS_COLUMNS
WHERE TABLE_NAME='BBS';


create table bbs (
 no number not null,
 id varchar2(20) not null,
 bbspasswd varchar2(20) not null,
 title varchar2(100) not null,
 content varchar2(1000) not null,
 regdate date not null,
 readcount number not null,
);

생성
SQL> ALTER TABLE 테이블명 ADD CONSTRAINT fk_bbs_id FOREIGN KEY(id) REFERENCES 참조되는 테이블명(id);

삭제
SQL> ALTER TABLE 테이블명 DROP CONSTRAINT fk_bbs_id;

생성
create table 테이블명(
no number constraint 테이블명_pk_no primary key,
name varchar2(40)
);

생성과 동시에 데이터 복사
create table copy_tb as select * from ori_tb;

기존 테이블에 데이터만 가져오기
insert into copy_tb select * from ori_tb;

<<<<<<<<<<<  sysdate >>>>>>>>>>>

현재의 시간과 날자를 반환한다.

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
<<<<<<     실     습 1 ::  date(날짜) data type을 갖는 table 생성     >>>>>>
1. sequence test용 table생성
create table sysdate_test01(
 no number primary key,
 regdate date
);


2. 2000년 10월 1일 입력하기
insert into sysdate_test01(no,regdate)
values(1,'2000-10-1');

//=> table에서 확인
select * from sysdate_test01;

//=> 현재의 시간을 sysdate을 이용하여 입력
insert into sysdate_test01(no,regdate)
values(2,sysdate);

//=> table에서 확인
select * from sysdate_test01;


4. 다른 방법으로 sequnce 확인하기

//==> 현재의 sequence value 확인
select seq_seq_test01_no.CURRVAL from dual;

//==> 다음의 sequence value 확인
select seq_seq_test01_no.NEXTVAL from dual;

//==>확인하면
insert into seq_test01(no,remark)
values(seq_seq_test01_no.NEXTVAL,'연습1');

select * from seq_test01;


//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
<<<<<<     실     습  2 :: date(날짜) data type  Java에서 처리  >>>>>>

varchar2  ===> rs.getString("columnName");
number  ===> rs.getInt("columnName");
date  ===> rs.getDate("columnName");  또는
date  ===>rs.getTimestamp("columnName");

+ Recent posts