2024년 6월 29일 토요일

ORACLE DB - INDEX

 
/***********************************************
  Oracle DB 인덱스 생성
   Oracle 19c 기준으로 작성되었습니다. 
***********************************************/



/***********************************************
 CUST, CUST_DTL 테이블, 인덱스 상태 조회
   STR 계정 접속
***********************************************/
SELECT
    OBJECT_TYPE,
    OBJECT_NAME,
    CREATED
FROM USER_OBJECTS
ORDER BY 2,1;



/***********************************************
 통계 정보 생성
   STR 계정 접속
***********************************************/
SELECT
    TABLE_NAME,
    TABLESPACE_NAME,
    LAST_ANALYZED
FROM USER_TABLES
ORDER BY 1;
-- 통계 정보 생성
EXEC DBMS_STATS.GATHER_TABLE_STATS(OWNNAME=>'STR', TABNAME=>'CUST');
EXEC DBMS_STATS.GATHER_TABLE_STATS(OWNNAME=>'STR', TABNAME=>'CUST_DTL');
-- 통계 정보 삭제
EXEC DBMS_STATS.DELETE_TABLE_STATS(OWNNAME=>'STR', TABNAME=>'CUST');
EXEC DBMS_STATS.DELETE_TABLE_STATS(OWNNAME=>'STR', TABNAME=>'CUST_DTL');



/***********************************************
 인덱스 추가 생성
  테이블명: CUST 
  인덱스명: CUST_X1(CUST_NM)
   STR 계정 접속
***********************************************/

SELECT *
FROM STR.CUST
WHERE CUST_NO = '20221125TKDN00000007';

-- CUST_NM 조회
-- 김영칠 3건, 김일영 2건, 김일삼 1건
SELECT *
FROM STR.CUST
WHERE CUST_NM = '김영칠';

CREATE INDEX STR.CUST_X1 ON STR.CUST
(CUST_NM)
TABLESPACE TS_STR_I;


SELECT
    TABLE_NAME,
    INDEX_NAME,
    COLUMN_NAME,
    COLUMN_POSITION
FROM USER_IND_COLUMNS
ORDER BY 1, 2;


/***********************************************
 FBI 인덱스 추가 생성
  테이블명: CUST 
  인덱스명: CUST_X1(CUST_NM)
   STR 계정 접속
***********************************************/
SELECT * 
FROM STR.CUST_DTL
WHERE MBL_NO = '015-0101-0101';
SELECT * 
FROM STR.CUST_DTL
WHERE MBL_NO = '01501010101';
SELECT
  MBL_NO,
  REPLACE(MBL_NO,'-','')
FROM STR.CUST_DTL;
SELECT * 
FROM STR.CUST_DTL
WHERE REPLACE(MBL_NO,'-','') = '01501010101';

CREATE INDEX STR.CUST_DTL_X1 ON STR.CUST_DTL
(REPLACE(MBL_NO,'-',''))
TABLESPACE TS_STR_I;
SELECT
    A.TABLE_NAME,
    A.INDEX_NAME,
    B.INDEX_TYPE,
    A.COLUMN_NAME,
    A.COLUMN_POSITION
FROM 
    USER_IND_COLUMNS A,
    USER_INDEXES B
WHERE A.TABLE_NAME = B.TABLE_NAME 
AND A.INDEX_NAME = B.INDEX_NAME
ORDER BY 1, 2;



-- 인덱스 삭제
DROP INDEX STR.CUST_X1;
DROP INDEX STR.CUST_DTL_X1;


[출처] DB보다


ORACLE DB - TABLESPACE, 계정


/***********************************************
  Oracle DB 계정 생성
  Oracle 19c 기준으로 작성되었습니다. 
***********************************************/

/***********************************************
  DB계정 상태 확인
***********************************************/
--DB계정 상태 확인
SELECT
    USERNAME,
    PROFILE,
    ACCOUNT_STATUS,
    DEFAULT_TABLESPACE,
    TEMPORARY_TABLESPACE,
    CREATED,
    EXPIRY_DATE
FROM DBA_USERS;


/***********************************************
  Tablespace 상태 확인
***********************************************/
-- Tablespace 상태 확인
SELECT 
    TABLESPACE_NAME, 
    FILE_NAME, 
    BYTES/1024/1024 AS "SIZE_MB"
FROM DBA_DATA_FILES;


/***********************************************
  Tablespace 생성
    데이터파일 위치 확인: /oracle/app/oracle/oradata/STR/
***********************************************/
-- 테이블 영역
CREATE TABLESPACE TS_STR_D
DATAFILE '/oracle/app/oracle/oradata/STR/TS_STR_D_001.DBF' SIZE 2048M;
-- 인덱스 영역
CREATE TABLESPACE TS_STR_I
DATAFILE '/oracle/app/oracle/oradata/STR/TS_STR_I_001.DBF' SIZE 2048M;


/***********************************************
  STR DB 계정 생성
***********************************************/
-- STR DB계정 생성
CREATE USER STR
IDENTIFIED BY "oracle"
DEFAULT TABLESPACE TS_STR_D
ACCOUNT UNLOCK;
-- STR DB계정 권한 생성
GRANT CONNECT, RESOURCE TO STR;


/***********************************************
  STR DB 계정 프로파일 변경
***********************************************/
-- DEFAULT 프로파일 상태 확인
SELECT 
    * 
FROM DBA_PROFILES
WHERE PROFILE = 'DEFAULT';

FAILED_LOGIN_ATTEMPTS        비밀번호 실패 허용 수
PASSWORD_LIFE_TIME             비밀번호 유효 기간  
PASSWORD_LOCK_TIME           비밀번호  잠김 시간
PASSWORD_GRACE_TIME        비밀번호 변경 메세지 출력 일자

-- PROFILE 설정 변경
ALTER PROFILE DEFAULT
LIMIT
FAILED_LOGIN_ATTEMPTS   UNLIMITED
PASSWORD_LIFE_TIME        UNLIMITED
PASSWORD_LOCK_TIME      UNLIMITED
PASSWORD_GRACE_TIME   UNLIMITED
;

-- PROFILE 설정 원복
ALTER PROFILE DEFAULT
LIMIT
FAILED_LOGIN_ATTEMPTS 10
PASSWORD_LIFE_TIME    180
PASSWORD_LOCK_TIME    1
PASSWORD_GRACE_TIME   7
;


/***********************************************
  STR DB 계정 삭제 및 테이블스페이스 삭제
***********************************************/
-- DB계정 삭제
DROP USER STR CASCADE;

-- 테이블스페이스 삭제
DROP TABLESPACE TS_STR_D INCLUDING CONTENTS AND DATAFILES;
DROP TABLESPACE TS_STR_I INCLUDING CONTENTS AND DATAFILES;
 

[출처] DB보다


2024년 6월 28일 금요일

ORACLE DB - SEQUENCE


/***********************************************

Oracle DB 계정 생성

Oracle 19c 기준으로 작성되었습니다.
***********************************************/

/********************************************************
시퀀스 생성
시퀀스명: SEQ_TEST_1
STR 계정 접속
********************************************************/

-- 시퀀스 생성
CREATE SEQUENCE STR.SEQ_TEST_1
MINVALUE 1
MAXVALUE 999999999
INCREMENT BY 1
START WITH 1
CACHE 20
ORDER
CYCLE;

-- 시퀀스 상태
SELECT
SEQUENCE_NAME,
LAST_NUMBER,
MIN_VALUE,
MAX_VALUE,
LENGTH(MAX_VALUE) AS "LENGTH",
INCREMENT_BY,
CYCLE_FLAG,
ORDER_FLAG,
CACHE_SIZE
FROM USER_SEQUENCES
WHERE SEQUENCE_NAME = 'SEQ_TEST_1';


/********************************************************
시퀀스 사용 방법
STR 계정 접속
********************************************************/

-- 시퀀스 다음 값 생성
SELECT STR.SEQ_TEST_1.NEXTVAL FROM DUAL;

-- 시퀀스 현재 상태 값
SELECT STR.SEQ_TEST_1.CURRVAL FROM DUAL;

-- 시퀀스 증가 번호 변경
ALTER SEQUENCE STR.SEQ_TEST_1 INCREMENT BY 1;

-- 시퀀스 시작 번호 변경
ALTER SEQUENCE STR.SEQ_TEST_1 RESTART START WITH 1;


/********************************************************
시퀀스 꿀팁
STR 계정 접속
********************************************************/

SELECT STR.SEQ_TEST_1.NEXTVAL FROM DUAL;

SELECT TO_CHAR(STR.SEQ_TEST_1.NEXTVAL,'FM000000000') FROM DUAL;

SELECT
TO_CHAR(SYSDATE, 'YYYYMMDD') ||
TO_CHAR(STR.SEQ_TEST_1.NEXTVAL, 'FM000000000')
FROM DUAL;


/********************************************************
테이블 생성(시퀀스 사용을 위한 테이블 생성)
STR 계정 접속
********************************************************/

-- 테이블 생성
CREATE TABLE STR.TEST
(
TEST_NO VARCHAR2(20)
)
TABLESPACE TS_STR_D;

-- 10건 데이터 입력
INSERT INTO STR.TEST
SELECT
TO_CHAR(SYSDATE, 'YYYYMMDD') ||
TO_CHAR(STR.SEQ_TEST_1.NEXTVAL, 'FM000000000') "TEST_NO"
FROM DUAL
CONNECT BY LEVEL <= 10;

COMMIT;

-- 데이터 조회
SELECT * FROM STR.TEST;

-- 시퀀스 현재 상태 값
SELECT STR.SEQ_TEST_1.CURRVAL FROM DUAL;

-- 시퀀스 증가 번호 변경
ALTER SEQUENCE STR.SEQ_TEST_1 INCREMENT BY 1;



/********************************************************
고객 번호 시퀀스 생성 예제
시퀀스명: SEQ_CUST_1
STR 계정 접속
********************************************************/

-- 시퀀스 생성
CREATE SEQUENCE STR.SEQ_CUST_1
MINVALUE 1
MAXVALUE 99999999
INCREMENT BY 1
START WITH 1
CACHE 20
ORDER
CYCLE;

-- 고객 번호 생성
SELECT
TO_CHAR(SYSDATE,'YYYYMMDD') ||
DBMS_RANDOM.STRING('U',4) ||
TO_CHAR(STR.SEQ_CUST_1.NEXTVAL,'FM00000000') AS "CUST_NO"
FROM DUAL
CONNECT BY LEVEL <= 5;

-- 오브젝트 삭제
SELECT
'DROP '||OBJECT_TYPE||' STR.'||OBJECT_NAME||';'
FROM USER_OBJECTS
WHERE OBJECT_NAME IN ('SEQ_CUST_1','SEQ_TEST_1','TEST');

[출처] DB보다


ORACLE DB - CREATE

 

/***********************************************
  Oracle DB 테이블 생성
   Oracle 19c 기준으로 작성되었습니다. 
***********************************************/


/***********************************************
 CUST(고객) 테이블 생성
 STR 계정 접속
***********************************************/
CREATE TABLE STR.CUST
(
	CUST_NO   VARCHAR2(20)    NOT NULL,
	CUST_NM   VARCHAR2(1000)  NOT NULL,
	JOIN_DY   VARCHAR2(8)     NULL,
	PASSWD    VARCHAR2(100)   NOT NULL,
	BRTH_DD   VARCHAR2(8)     NULL
)
TABLESPACE TS_STR_D;


CREATE UNIQUE INDEX STR.CUST_PK ON STR.CUST
(CUST_NO)
TABLESPACE TS_STR_I;


ALTER TABLE STR.CUST
ADD CONSTRAINT CUST_PK 
PRIMARY KEY(CUST_NO);


COMMENT ON TABLE  STR.CUST IS '고객';

COMMENT ON COLUMN STR.CUST.CUST_NO IS '고객번호';
COMMENT ON COLUMN STR.CUST.CUST_NM IS '고객명';
COMMENT ON COLUMN STR.CUST.JOIN_DY IS '가입일자';
COMMENT ON COLUMN STR.CUST.PASSWD IS '비밀번호';
COMMENT ON COLUMN STR.CUST.BRTH_DD IS '생년월일';


/***********************************************
 CUST_DTL(고객상세) 테이블 생성
 STR 계정 접속
***********************************************/

CREATE TABLE STR.CUST_DTL
(
	CUST_NO       VARCHAR2(20)   NOT NULL,
	MBL_NO        VARCHAR2(13)   NULL,
	HOME_ADDR     VARCHAR2(1000) NULL,
	ZIP_CD        VARCHAR2(10)   NULL,
	EMAIL         VARCHAR2(200)  NULL
)
TABLESPACE TS_STR_D;


CREATE UNIQUE INDEX STR.CUST_DTL_PK ON STR.CUST_DTL
(CUST_NO)
TABLESPACE TS_STR_I;

ALTER TABLE STR.CUST_DTL
ADD CONSTRAINT CUST_DTL_PK 
PRIMARY KEY(CUST_NO);


COMMENT ON TABLE  STR.CUST_DTL    IS '고객상세';

COMMENT ON COLUMN STR.CUST_DTL.CUST_NO IS '고객번호';
COMMENT ON COLUMN STR.CUST_DTL.MBL_NO IS '휴대폰번호';
COMMENT ON COLUMN STR.CUST_DTL.HOME_ADDR IS '집주소';
COMMENT ON COLUMN STR.CUST_DTL.ZIP_CD IS '우편번호';
COMMENT ON COLUMN STR.CUST_DTL.EMAIL IS '이메일';



/***********************************************
 테이블, 인덱스 상태 확인
 STR 계정 접속
***********************************************/
SELECT
    OBJECT_TYPE,
    OBJECT_NAME,
    CREATED
FROM USER_OBJECTS
ORDER BY 2,1;


/***********************************************
 테이블 상태 확인
 STR 계정 접속
***********************************************/

SELECT 
    A.TABLE_NAME, 
    B.COMMENTS AS "TABLE_COMMENT",
    A.COLUMN_NAME, 
    C.COMMENTS AS "COLUMN_COMMENT",
    A.COLUMN_ID 
FROM 
    USER_TAB_COLUMNS A,
    USER_TAB_COMMENTS B,
    USER_COL_COMMENTS C
WHERE A.TABLE_NAME = B.TABLE_NAME
AND A.TABLE_NAME = C.TABLE_NAME
AND A.COLUMN_NAME = C.COLUMN_NAME
ORDER BY A.TABLE_NAME, A.COLUMN_ID;




/***********************************************
 CUST(고객) 데이터 입력
 STR 계정 접속
***********************************************/
-- CUST(고객) 테이블 데이터 50건 입력
-- 데이터 특이사항 (김영일 3명, 김영칠 3명)

INSERT INTO STR.CUST VALUES('20221125JPYM00000001','김영일','20040101','flne5450','20000701');
INSERT INTO STR.CUST VALUES('20221125DROE00000002','김영이','20040101','npek0233','20000702');
INSERT INTO STR.CUST VALUES('20221125KJQN00000003','김영삼','20040305','zxet2771','20000703');
INSERT INTO STR.CUST VALUES('20221125WEGD00000004','김영사','20040305','tgli5670','20000704');
INSERT INTO STR.CUST VALUES('20221125AJKK00000005','김영오','20040405','iayw6265','20020705');
INSERT INTO STR.CUST VALUES('20221125LADR00000006','김영육','20040407','ohew6324','20020706');
INSERT INTO STR.CUST VALUES('20221125TKDN00000007','김영칠','20040507','jdsf1139','20020707');
INSERT INTO STR.CUST VALUES('20221125FGJP00000008','김영팔','20050207','pqmj2289','20020708');
INSERT INTO STR.CUST VALUES('20221125ZERM00000009','김영구','20050207','sgie6302','20020709');
INSERT INTO STR.CUST VALUES('20221125IOUS00000010','김일영','20050207','kyqd0483','20020710');
INSERT INTO STR.CUST VALUES('20221125FREG00000011','김일일','20051119','ljix4309','20020711');
INSERT INTO STR.CUST VALUES('20221125JXYA00000012','김일이','20060119','vzvi3915','20050712');
INSERT INTO STR.CUST VALUES('20221125ANQL00000013','김일삼','20060119','dzid2179','19620713');
INSERT INTO STR.CUST VALUES('20221125IKVD00000014','김일사','20060119','cmuf6339','19620714');
INSERT INTO STR.CUST VALUES('20221125ABAI00000015','김일오','20060119','zysq7590','19620715');
INSERT INTO STR.CUST VALUES('20221125YXTK00000016','김일육','20060119','ykwm7623','19620716');
INSERT INTO STR.CUST VALUES('20221125OHAF00000017','김일칠','20060225','qsne5403','19550717');
INSERT INTO STR.CUST VALUES('20221125SAVG00000018','김일팔','20060225','vzsa4413','19550718');
INSERT INTO STR.CUST VALUES('20221125APRV00000019','김일구','20090225','zums3447','19550719');
INSERT INTO STR.CUST VALUES('20221125XCRU00000020','김일영','20090225','xjvz8461','19550720');
INSERT INTO STR.CUST VALUES('20221125XUZN00000021','김이일','20090508','axov6969','20010801');
INSERT INTO STR.CUST VALUES('20221125RFSZ00000022','김이가','20090508','fitu9267','20010802');
INSERT INTO STR.CUST VALUES('20221125GSUH00000023','김이삼','20090508','pqnw5647','20010803');
INSERT INTO STR.CUST VALUES('20221125MNCU00000024','김이사','20090508','rviv2232','20010804');
INSERT INTO STR.CUST VALUES('20221125ZFMC00000025','김이오','20100217','omor3320','19910805');
INSERT INTO STR.CUST VALUES('20221125XUGB00000026','김이육','20100217','iwcm7473','19910806');
INSERT INTO STR.CUST VALUES('20221125CIGG00000027','김이칠','20100217','ultb6084','19910807');
INSERT INTO STR.CUST VALUES('20221125NNXY00000028','김이팔','20100217','ixwx3137','19910808');
INSERT INTO STR.CUST VALUES('20221125VZWP00000029','김이구','20100217','tpin3069','19830809');
INSERT INTO STR.CUST VALUES('20221125CLJU00000030','김삼영','20100217','olha1635','19830810');
INSERT INTO STR.CUST VALUES('20221125AVME00000031','김삼일','20120602','dyho5331','19880811');
INSERT INTO STR.CUST VALUES('20221125NYAA00000032','김영칠','20120602','jfly1680','19980812');
INSERT INTO STR.CUST VALUES('20221125UDXV00000033','김삼삼','20120602','ydeo9942','19980813');
INSERT INTO STR.CUST VALUES('20221125WYVA00000034','김삼사','20120602','fylt4787','19980814');
INSERT INTO STR.CUST VALUES('20221125CFTF00000035','김삼오','20120602','aoyd7537','19670815');
INSERT INTO STR.CUST VALUES('20221125SQXC00000036','김삼육','20120602','waaz3678','19670816');
INSERT INTO STR.CUST VALUES('20221125SQWO00000037','김삼칠','20220102','maat3026','19670817');
INSERT INTO STR.CUST VALUES('20221125ZMPZ00000038','김영일','20220102','iuzn5413','19670818');
INSERT INTO STR.CUST VALUES('20221125AYGK00000039','김삼구','20220102','mwzc8562','19670819');
INSERT INTO STR.CUST VALUES('20221125THBX00000040','김사영','20220102','tvgz0417','19750820');
INSERT INTO STR.CUST VALUES('20221125MDBK00000041','김사일','20220115','alvz3064','19750901');
INSERT INTO STR.CUST VALUES('20221125LTYY00000042','김사가','20220115','xuhp4988','19750902');
INSERT INTO STR.CUST VALUES('20221125FPUV00000043','김사삼','20220115','ssly9245','19750903');
INSERT INTO STR.CUST VALUES('20221125CHXS00000044','김사사','20220415','glzn5012','19750904');
INSERT INTO STR.CUST VALUES('20221125MJTM00000045','김사오','20220415','tlht5713','19700905');
INSERT INTO STR.CUST VALUES('20221125LQZU00000046','김사육','20220415','whtk7257','19700906');
INSERT INTO STR.CUST VALUES('20221125CEGQ00000047','김사칠','20220808','xamu3455','19960907');
INSERT INTO STR.CUST VALUES('20221125FWXP00000048','김사팔','20220808','uxub8838','19960908');
INSERT INTO STR.CUST VALUES('20221125JVPE00000049','김영칠','20220808','vnry4863','19960909');
INSERT INTO STR.CUST VALUES('20221125JWBX00000050','김영일','20220808','kdlb3873','19960910');

COMMIT;


/***********************************************
 CUST_DTL(고객상세) 데이터 입력
  STR 계정 접속
***********************************************/
-- CUST_DTL(고객상세) 테이블 데이터 50건 입력
-- 데이터 특이사항 NULL값 4건, Empty String값 4건

INSERT INTO STR.CUST_DTL VALUES('20221125JPYM00000001','015-0101-0101','서울시 강남구 압구정동','06000','uljbou@superemail.com');
INSERT INTO STR.CUST_DTL VALUES('20221125DROE00000002','015-0101-0102','서울시 강남구 압구정동','06000','oldbic@superemail.com');
INSERT INTO STR.CUST_DTL VALUES('20221125KJQN00000003','015-0101-0103','서울시 강남구 압구정동','06000','wbojex@superemail.com');
INSERT INTO STR.CUST_DTL VALUES('20221125WEGD00000004','015-0101-0104','서울시 강남구 압구정동','06000','yhilhj@superemail.com');
INSERT INTO STR.CUST_DTL VALUES('20221125AJKK00000005','015-0101-0105','서울시 강남구 압구정동','06000','tasorz@superemail.com');
INSERT INTO STR.CUST_DTL VALUES('20221125LADR00000006','015-0101-0106','서울시 강남구 청담동','06074','wizgkj@superemail.com');
INSERT INTO STR.CUST_DTL VALUES('20221125TKDN00000007','015-0101-0107','서울시 강남구 청담동','06074','zvrexd@superemail.com');
INSERT INTO STR.CUST_DTL VALUES('20221125FGJP00000008','015-0101-0108','서울시 강남구 청담동','06074','ribait@superemail.com');
INSERT INTO STR.CUST_DTL VALUES('20221125ZERM00000009','015-0101-0109','서울시 강남구 청담동','06074','zuhzaq@superemail.com');
INSERT INTO STR.CUST_DTL VALUES('20221125IOUS00000010','015-0101-0110','서울시 강남구 청담동','06074','gnlcqg@superemail.com');
INSERT INTO STR.CUST_DTL VALUES('20221125FREG00000011','015-0101-0111','서울시 강남구 도곡동','06294','tcoesv@metajjemail.com');
INSERT INTO STR.CUST_DTL VALUES('20221125JXYA00000012','015-0101-0112','서울시 강남구 도곡동','06294','gwuujt@metajjemail.com');
INSERT INTO STR.CUST_DTL VALUES('20221125ANQL00000013','015-0101-0113','서울시 강남구 도곡동','06294','mzsgxy@metajjemail.com');
INSERT INTO STR.CUST_DTL VALUES('20221125IKVD00000014','015-0101-0114','서울시 강남구 도곡동','06294','evmcrl@metajjemail.com');
INSERT INTO STR.CUST_DTL VALUES('20221125ABAI00000015','015-0101-0115','서울시 강남구 도곡동','06294','fnbvau@metajjemail.com');
INSERT INTO STR.CUST_DTL VALUES('20221125YXTK00000016','015-0101-0116','서울시 강남구 신사동','06027','vqfsez@metajjemail.com');
INSERT INTO STR.CUST_DTL VALUES('20221125OHAF00000017','015-0101-0117','서울시 강남구 신사동','06027','scwfrs@metajjemail.com');
INSERT INTO STR.CUST_DTL VALUES('20221125SAVG00000018','015-0101-0118','서울시 강남구 신사동','06027','fsjzna@metajjemail.com');
INSERT INTO STR.CUST_DTL VALUES('20221125APRV00000019','015-0101-0119','서울시 강남구 신사동','06027','dcearf@metajjemail.com');
INSERT INTO STR.CUST_DTL VALUES('20221125XCRU00000020','015-0101-0120','서울시 강남구 신사동','06027','czpqas@metajjemail.com');
INSERT INTO STR.CUST_DTL VALUES('20221125XUZN00000021','015-0101-0121','서울시 서초구 반포동','06547','pcnann@gonnemail.com');
INSERT INTO STR.CUST_DTL VALUES('20221125RFSZ00000022','015-0101-0122','서울시 서초구 반포동','06547','sebplp@gonnemail.com');
INSERT INTO STR.CUST_DTL VALUES('20221125GSUH00000023','015-0101-0123','서울시 서초구 반포동','06547','rknvcf@gonnemail.com');
INSERT INTO STR.CUST_DTL VALUES('20221125MNCU00000024','015-0101-0124','서울시 서초구 반포동','06547','miqfws@gonnemail.com');
INSERT INTO STR.CUST_DTL VALUES('20221125ZFMC00000025','015-0101-0125','서울시 서초구 반포동','06547','zxpvie@gonnemail.com');
INSERT INTO STR.CUST_DTL VALUES('20221125XUGB00000026','015-0101-0126','서울시 강남구 대치동','06284','shfjff@gonnemail.com');
INSERT INTO STR.CUST_DTL VALUES('20221125CIGG00000027','015-0101-0127','서울시 강남구 대치동','06284','gyxloz@gonnemail.com');
INSERT INTO STR.CUST_DTL VALUES('20221125NNXY00000028','015-0101-0128','서울시 강남구 대치동','06284','qunrwt@gonnemail.com');
INSERT INTO STR.CUST_DTL VALUES('20221125VZWP00000029','015-0101-0129','서울시 강남구 대치동','06284','koigww@gonnemail.com');
INSERT INTO STR.CUST_DTL VALUES('20221125CLJU00000030','015-0101-0130','서울시 강남구 대치동','06284','koacww@gonnemail.com');
INSERT INTO STR.CUST_DTL VALUES('20221125AVME00000031','015-0101-0131','부산광역시 해운대구 중동','48099','rkmhzr@narademail.com');
INSERT INTO STR.CUST_DTL VALUES('20221125NYAA00000032','015-0101-0132','부산광역시 해운대구 중동','48099','vxikgq@narademail.com');
INSERT INTO STR.CUST_DTL VALUES('20221125UDXV00000033','015-0101-0133','부산광역시 해운대구 중동','48099','ecddxs@narademail.com');
INSERT INTO STR.CUST_DTL VALUES('20221125WYVA00000034','015-0101-0134','부산광역시 해운대구 중동','48099','mjmxcf@narademail.com');
INSERT INTO STR.CUST_DTL VALUES('20221125CFTF00000035','015-0101-0135','부산광역시 해운대구 중동','48099','bdwfmb@narademail.com');
INSERT INTO STR.CUST_DTL VALUES('20221125SQXC00000036','015-0101-0136','부산광역시 해운대구 우동','48092','byjkso@narademail.com');
INSERT INTO STR.CUST_DTL VALUES('20221125SQWO00000037','015-0101-0137','부산광역시 해운대구 우동','48092',' ');
INSERT INTO STR.CUST_DTL VALUES('20221125ZMPZ00000038','015-0101-0138','부산광역시 해운대구 우동','48092',' ');
INSERT INTO STR.CUST_DTL VALUES('20221125AYGK00000039','015-0101-0139','부산광역시 해운대구 우동','48092','');
INSERT INTO STR.CUST_DTL VALUES('20221125THBX00000040','015-0101-0140','부산광역시 해운대구 우동','48092','');
INSERT INTO STR.CUST_DTL VALUES('20221125MDBK00000041','015-0101-0141','부산광역시 부산진구 부전동','47300','twvruy@qoodaemail.com');
INSERT INTO STR.CUST_DTL VALUES('20221125LTYY00000042','015-0101-0142','부산광역시 부산진구 부전동','47300','fvovzz@qoodaemail.com');
INSERT INTO STR.CUST_DTL VALUES('20221125FPUV00000043','015-0101-0143','','47300','vwyein@qoodaemail.com');
INSERT INTO STR.CUST_DTL VALUES('20221125CHXS00000044','015-0101-0144','','47300','yqavsm@qoodaemail.com');
INSERT INTO STR.CUST_DTL VALUES('20221125MJTM00000045','015-0101-0145','부산광역시 부산진구 부전동','47300','adrwte@qoodaemail.com');
INSERT INTO STR.CUST_DTL VALUES('20221125LQZU00000046','015-0101-0146',' ','48230','zkionw@qoodaemail.com');
INSERT INTO STR.CUST_DTL VALUES('20221125CEGQ00000047','015-0101-0147',' ','48230','cpkghk@qoodaemail.com');
INSERT INTO STR.CUST_DTL VALUES('20221125FWXP00000048','015-0101-0148','부산광역시 수영구 수영동','48230','메일주소');
INSERT INTO STR.CUST_DTL VALUES('20221125JVPE00000049','999-9999-9999','몰라','48230','난아싸라@이메일이없어요');
INSERT INTO STR.CUST_DTL VALUES('20221125JWBX00000050','000-0000-0000','님 마음속','48230','이메일');

COMMIT;




/***********************************************
 데이터 입력 에러 해결 방법(ORA-01950)
 SYS 계정 접속
***********************************************/

-- ORA-01950: 테이블스페이스 'TS_STR_D'에 대한 권한이 없습니다.

-- TS_STR_D 테이블스페이스 권한 생성
GRANT UNLIMITED TABLESPACE TO STR;

-- 권한 확인
SELECT * 
FROM DBA_SYS_PRIVS 
WHERE GRANTEE='STR';


-- TS_STR_D 테이블스페이스 권한 원복 
REVOKE UNLIMITED TABLESPACE FROM STR;

-- 권한 확인
SELECT * 
FROM DBA_SYS_PRIVS 
WHERE GRANTEE='STR';


/***********************************************
 SQL 실행
 STR 계정 접속
***********************************************/

SELECT
    A.CUST_NO,
    A.CUST_NM,
    A.BRTH_DD,
    B.MBL_NO,
    B.HOME_ADDR,
    B.EMAIL
FROM 
    STR.CUST A,
    STR.CUST_DTL B
WHERE A.CUST_NO = B.CUST_NO
AND A.CUST_NM = '김영구';
--AND A.CUST_NM IN ('김영구','김이오','김일구');



/***********************************************
 CUST(고객), CUST_DTL(고객상세) 데이터 삭제
 STR 계정 접속
***********************************************/

TRUNCATE TABLE STR.CUST;
TRUNCATE TABLE STR.CUST_DTL;


/***********************************************
 CUST(고객), CUST_DTL(고객상세) 테이블 삭제
 STR 계정 접속
***********************************************/

DROP TABLE STR.CUST;
DROP TABLE STR.CUST_DTL;

[출처] DB보다


2024년 6월 27일 목요일

javascript - 기본 및 활용

 
// ready
$(document).ready(function () {
// 버튼 클릭 이벤트
$("#btnID").click(function () {
});
// layer 클릭 이벤트
$(".layer").find("a[class='close_layer_popup']").click(함수호출);
// keypress 이벤트
$("#textID").keypress(inputOnlyNumber);
$("input[id^=txtPhoneNum]:text, input[id^=txtCellNum]:text").keypress(inputOnlyNumber);
// focusout 이벤트
$("#textID").focusout(function(e) {
});
// attr 속성 값 가지고 오기
var data_abc = parseInt($("#textID").attr("data-abc"));
});
// load
$(window).load(function () {
});

// 숫자키만 입력 + 특수문자 일부 허용
function inputOnlyNumber() {
    if (event.keyCode >= 44 && event.keyCode <= 57) {
        return true;
    } else {
        return false;
    }
}

// 간단한 ajax 사용 예문
$.ajax({
url: "url.asp",
type: "POST",
data: "IDX=" + idx + "&GUBUN=" + gubun,
contentType: "application/x-www-form-urlencoded; charset=euc-kr", // 한글 문제인 경우
async: false, // 동기화 처리
success: function (data) {
//alert(data == "SUCCESS" ? "성공" : "실패");
},
error: function (request, status, error) {
//alert("code:" + request.status + "\n" + "message:" + request.responseText + "\n" + "error:" + error);
}
});
// ajax (json)
$.ajax({
url: "/aaa/bbb.asp",
async: false,
type: "POST",
contentType: "application/json",
data: "{Num:'" + Num + "', vId:'" + vId + "', zipCode:'" + zipCode + "' , isfree:'" + 1 + "'}",
success: function (result) {
var aaa = result[0].AAA;
},
error: function() {
alert("장바구니 정보 수정에 실패하였습니다.");
}
});


// 체크박스 전체 선택 및 미선택
function CheckBox_All(obj, cbName) {
$("input:checkbox[name=" + cbName + "]").each(function () {
$(this).prop("checked", $(obj).is(":checked"));
});
}
 
// 체크되어 있는 체크박스 개수 확인
var checkLength = $("input:checkbox[name=" + cbName + "]:checked").length;
if (checkLength == 0) {
alert("일괄 수정할 선택한 상품이 없습니다.");
return false;
}

// 체크되어 있는 체크박스 찾아서 박복 처리
var checkRequestPrice = true;
var checkPrePrice = true;
$("input:checkbox[name=" + cbName + "]:checked").each(function () {
// table의 tr 중에 체크박스와 같은 tr을 찾아 tr 안에 있는 hidden 또는 text 값 구하기
var prePrice = $(this).closest('tr').find("input:hidden[name=prePrice]").val();
var requestPrice = ($(this).closest('tr').find("input:text[name=requestPrice]").val()).replace(",", "");
// 숫자 체크
if ($.isNumeric(requestPrice) == false || requestPrice == "0") {
checkRequestPrice = false;
}
// 문자를 숫자로 비교
if (parseInt(prePrice) == parseInt(requestPrice)) {
checkPrePrice = false;
}
// 해당 tr 삭제
$(this).closest("tr").remove();
});

// 부모창 > 부모창 > 자식창에서 부모창 호출 방법
// 자식창
parent.WindowCloseAndRefresh();
// 부모창
function WindowCloseAndRefresh() {
parent.opener.location.reload();
window.close();
}

// iframe으로 데이터 submit하여 처리하는 방법 (formAction form에 있는 객체 데이터)
<div style="display: none;">
    <iframe name="ifrmAction" id="ifrmAction" height="0" width="0"></iframe>
</div>
formAction.action = "Exec.asp";
formAction.target = "ifrmAction";
formAction.submit();

// 객체 활성화 및 비활설화
$("#COUNT_EVERY").prop('disabled', true);
$("input").prop('disabled', false);

// table > tr > td 에 있는 html 값 가지고 오기
function ProdAdd() {
var items = $("input:checkbox[name=chkBoxName]:checked");
if (items.length == 0) {
alert("선택해 주세요.");
return false;
}
var a = "";
var b = "";
var c = "";
$(items).each(function () {
var tdObj = $(this).closest("tr").find('td');
a = $(this).val();
b = $(tdObj).eq(2).html();
c = $(tdObj).eq(3).html();
if (parent.IsFindProd(ProdNum) == false) {
parent.SeachProdSelectAdd(a, b, c);
}
});
}

// 반복 값 join 만들기
var arrays = $("input[name=chkboxName]:checkbox:checked").map(function () {
return "'" + $(this).attr("data-abc") + "'";
}).get();
var arrayJoin = "[" + arrays.join(",") + "]";


// 요소 추가
function SeachProdSelectAdd(a, b, c) {
var appendHtml = "<tr style='height: 22px;' onmouseover='this.style.backgroundColor=\"#E3FEEB\"' onmouseout='this.style.backgroundColor=\"#FFFFFF\"'><td style='text-align: center;'><input type='checkbox' name='chkBoxPRODADD' value='" + a + "' style='cursor: pointer;' /><input type='hidden' name='PROD_ADD' value='" + a + "'></td><td style='text-align: center;'>" + a + "</td><td>" + b + "</td><td>" + c + "</td></tr>"
//$("#tablePRODADD").append(appendHtml);  // 자식(children) 뒤 요소에 추가
$("#tablePRODADD").prepend(appendHtml);   // 자식(children) 앞 요소에 추가
}

// 텍스트 박스 엔터키 클리 시 submit 처리
<input type="text" name="s_word1" size="25" value="<%=strSWord1%>" onkeypress="FN_FormSubmit()">
function FN_FormSubmit() {
if (event.keyCode == 13) {
document.ListForm.submit();
}
}

// for 문
for (var i = 0; i < list.length; i++) {
}
// 공백제거
$.trim("문자")



C# - 기본 및 활용

 
//-----------------------------------------------
        [AllowAnonymous]
        public ActionResult 함수_페이지(string reftype = null)
        {
            return View(new Tuple<클래스타입1, 클래스타입2[], 클래스타입3[], 클래스타입4[]>(객체1, 객체2, 객체3, 객체4));
        }
        @using Model.Common
        @model Tuple<클래스타입1, 클래스타입2[], 클래스타입3[], 클래스타입4[]>


//-----------------------------------------------
        [AllowAnonymous, ChildActionOnly]
        public PartialViewResult 함수_Partial()
        {
            return PartialView(new Tuple<Banner>(adBanner));
        }
        @using Model.Common
        @model Tuple<Banner>

        @Html.Action("함수_Partial", "Main")

//-----------------------------------------------
        [HttpPost]
        public JsonResult 함수_기능(int Idx)
        {
            //return Json(new {객체1, 객체2});
            return Json(객체);
        }

//-----------------------------------------------
        [NonAction]
        private object 함수_기능()
        {
            return list.Select(x => new
            {
                PROD_NUM = x.PROD_NUM,
                IDX = x.IDX
            });
        }


//-----------------------------------------------
[FilterConfig.cs]
    [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = true)]
    public class UserAuthorizationAttribute : FilterAttribute, IAuthorizationFilter
    {
        public RoleType Role { get; set; }
        public void OnAuthorization(AuthorizationContext filterContext)
        {
            if ((Role & RoleType.Wos) == RoleType.Wos)
            {
                if (!객체.IsWos) // Wos가 아니면
                {
                    throw new Exception("Wos 권한이 없습니다.");
                }
            }
        }
    }

    [Flags]
    public enum RoleType
    {
        Wos
    }


[View1.cs]
        [UserAuthorization(Role = RoleType.Wos)]
        public ActionResult WosCart(string cList)
        {
            ViewBag.Name = Common.객체1.Name;
            return View(Json(cList));
        }



//-----------------------------------------------
        private Dictionary<string, string> GetParameterResultMap(string parameter)
        {
            // + 기호가 공백으로 넘어 오는경우 처리
            string decString = parameter.Replace(" ","+");
            Dictionary<string, string> resultMap = parseStringToMap(decString);
            return resultMap;
        }

        public static System.Collections.Generic.Dictionary<string, string> parseStringToMap(string text)
        {
            System.Collections.Generic.Dictionary<string, string> retMap = new System.Collections.Generic.Dictionary<string, string>();
            if (string.IsNullOrEmpty(text) || string.IsNullOrWhiteSpace(text))
                return retMap;
            string[] arText = text.Split('&');
            for (int i = 0; i < arText.Length; i++)
            {
                string[] arKeyVal = arText[i].Split('=');
                retMap.Add(arKeyVal[0], arKeyVal[1]);
            }
            return retMap;
        }




//-----------------------------------------------
    public enum CancelState : int
    {
        [Description("취소요청")]
        RequestCancel = 0,
        [Description("취소대기")]
        ProcessingCancel = 1,
        [Description("취소불가")]
        ImpossibleCancel = 2,
        [Description("취소완료")]
        CompleteCancel = 3
    }




//-----------------------------------------------
    public class InicisRequest
    {
        #region 기본 데이터 필드
        [Required]
        [StringLength(20)]
        public string version { get; set; }
        [Required]
        [StringLength(10)]
        public string mid { get; set; }
        [Required]
        public int price { get; set; }
        public int tax { get; set; }
        #endregion
    }



ASP - DATE

 
'====================================
Description : 주의시작은 일요일이라 가정한다
'====================================
 '-- 해당날짜에 해당하는 날짜의 일요일과 토요일날짜 구해옴( 형식 chkdate : 2009-01-01)
 FUNCTION week_day(chkdate)
  SELECT CASE weekday(CDate(chkdate))
   CASE 1 : temp1 = CDate(chkdate) - 0 : temp2 = CDate(chkdate) + 6 '일
   CASE 2 : temp1 = CDate(chkdate) - 1 : temp2 = CDate(chkdate) + 5 '월
   CASE 3 : temp1 = CDate(chkdate) - 2 : temp2 = CDate(chkdate) + 4 '화
   CASE 4 : temp1 = CDate(chkdate) - 3 : temp2 = CDate(chkdate) + 3 '수
   CASE 5 : temp1 = CDate(chkdate) - 4 : temp2 = CDate(chkdate) + 2 '목
   CASE 6 : temp1 = CDate(chkdate) - 5 : temp2 = CDate(chkdate) + 1 '금
   CASE 7 : temp1 = CDate(chkdate) - 6 : temp2 = CDate(chkdate) + 0 '토
  END SELECT
  week_day = temp1 &"|"& temp2
 END FUNCTION

'-- 현재일의 주차
FUNCTION now_week(getdate)
  now_week = int((Day(getdate) - weekday(getdate)+13)/7)
 END FUNCTION

 '-- 해당달의 마지막일
 FUNCTION last_day(year,month)
  temp = CDate(LEFT(dateadd("m",1,year &"-"& month &"-01"),7) &"-01")-1
  last_day = Split(temp,"-")(2)
 END FUNCTION
 
 '-- 현재월의 주차( 형식 getdate : 2009-01-01)
 FUNCTION now_week(getdate)
  now_week = int((Day(getdate) - weekday(getdate)+13)/7)
 END FUNCTION
 
 '-- 해당년의 전달까지의 주차수
 FUNCTION month_week(year, month)
  week = 0
  FOR i = 1 TO month - 1
   week = week + now_week(year &"-"& i &"-"& last_day(year,i))
  NEXT
  month_week = week
 END FUNCTION
 
 '-- 해당년의 주차수의 일요일(안됨;;)
 FUNCTION week_sunday(year,week)
  week_sunday = CDate(year &"-01-01")+(week-1)*7+1-WEEKDAY(CDate(year& "-01-01")+(week-1)*7)
 END FUNCTION

 '-- 해당년의 주차수의 일요일(형식 now_month_week("2009","02","2") : 2009년2월2주차)
FUNCTION now_month_week(year,month,week_cnt)
  a = CDate(year &"-01-01") '-- 시작기준일
  b = Datepart("ww",year &"-"& month &"-01",1,3) '-- 해당월의 시작일의 주차
  c = 7 * b '--7에 주차를 곱하면 몇일 뒤 인지 나옴
  d = DateAdd("d",c,a) '--시작기준일에서 날짜를 c 만큼 더해준다
  '-- 해당월의 시작일이 일요일이면 첫주이므로 원하는주차에서 7을 빼준다.
  IF weekday(year &"-"& month &"-01") = 1 THEN
   d = CDate(d) + (7 * week_cnt) - 7
  ELSE
   d = CDate(d) + (7 * week_cnt)
  END IF
  now_month_week = d
 END FUNCTION

function num_Week(arg_num)
    Select Case arg_num
        Case 1
            we = "일요일"
        Case 2
            we = "월요일"
        Case 3
            we = "화요일"
        Case 4
            we = "수요일"
        Case 5
            we = "목요일"
        Case 5
            we = "금요일"
        Case 7
            we = "토요일"
    End Select
    num_Week = we
end function

function Now_Week() "오늘의 요일
    MyWeekDay = Weekday (Now())
    Now_Week = num_Week(MyWeekDay)
end function

function first_Week() "이번달 1일의 요일
    MyWeekDay = Weekday(DateAdd("d",1-day(now()), now()) )
    first_Week = num_Week(MyWeekDay)
end function

function Count_Week() "오늘이 몇주차?
        "2째주 일요일 찾기
        se_sun = 9 - Weekday(DateAdd("d", 1-day(now()), now()))
        "2째주 일요일보다 작은 경우 오늘은1주차
        if cint(se_sun) > cint(day(now())) then
                Count_Week = 1
        else "2주이상
                "남은 날짜 계산
                mod_day = cint(day(now()) - se_sun + 1)
                " 남은 날짜를 7로 나눈 나머지가 0이면 몫을사용 아니면 몫+1 한다.
                if (mod_day mod 7) = 0 then
                        Count_Week = (mod_day / 7) + 1 "1주차를 더한다
                else
                        Count_Week = int(mod_day / 7) + 2 "1주차와 마지막주를 더한다 합이 2주
                end if
        end if
end function

ORACLE DB - INDEX

  /***********************************************   Oracle DB 인덱스 생성    Oracle 19c 기준으로 작성되었습니다.  *****************************************...