์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- url
- tcp
- OOP
- ์ด๋ ธํ ์ด์
- http method
- OpenAPI
- ๊ธฐ์ด100์
- reflection
- 2024-08-21
- Factory Method Pattern
- Android Studio
- menutab
- ํ๋ IT&E
- uri
- ์ฝ๋์
- swagger
- Python
- AndroidStudio
- di
- udp
- URN
- 2024-08-20
- Dialog
- IOC
- ์ฑ์ฉํ์ ํ
- ๊ฐ์ฒด์งํฅํ๋ก๊ทธ๋๋ฐ
- Kotlin
- datepicker
- fontstyle
- FACTORY
dingdong coding
[ Oracle ] ๊ธฐ๋ณธ ๊ฐ๋ ๋ณธ๋ฌธ
๋ฌธ์์ด
CHAR: ๊ณ ์ ๋ ๊ธธ์ด์ ๋ฌธ์์ด์ ์ ์ฅ
EX) CHAR(20) ์ง์ ํ 'AA'๋ง ์ ์ฅํ๋ฉด ๋๋จธ์ง ๊ณต๊ฐ์ ๊ณต๋ฐฑ์ผ๋ก ์ฑ์
VARCHAR2 : ๊ฐ๋ณ ๋ฌธ์์ด์ ์ ์ฅ.
EX) VARCHAR2(20) ์ง์ ํ 'AA'๋ง ์ ์ฅ. ์ฆ, ์ ์ฅ ๊ธธ์ด๊ฐ ๊ฐ๋ณ์ .
VARCHAR : VARCHAR2์ ๊ฐ์ง๋ง ์ค๋ผํด์์ ํฅ ํ ๋ค๋ฅธ ์ฉ๋๋ก ์ฌ์ฉํ๋ค๊ณ ๊ณต์๋ฌธ์์ ์ ํ์๋ค. ๊ทธ๋์ ๋๋ถ๋ถ VARCHAR2 ์ฌ์ฉ
[ ์ต๋ํฌ๊ธฐ ]
CHAR : 2000Byte
VARCHAR2, VARCHAR:4000๋ฐ์ดํธ
์ซ์ NUMBER
NUMBER(์ ํจ ์๋ฆฟ์, ์์์ ๊ฐฏ์)
NUMBER(5, 0) : ์์์ ์ด ์๋ ์ซ์ 5์๋ฆฌ ๊น์ง ์ ์ฅ
NUMBER(3, 2) : 123.45๋ฅผ ์ ์ฅ ์ ์ค๋ฅ
์ ํจ์ซ์ 3์๋ฆฌ .๊ธฐ์ค ์ผ์ชฝ์ ์ซ์ ํ ๊ฐ๋ง ํ์ ๊ฐ๋ฅ, ์์์ 2์๋ฆฌ๊น์ง ํ์
NUMBER(11, 2) : 1.345๊ฐ ๋ค์ด์ค๋ฉด 1.35๊ฐ ์ ์ฅ๋จ, ์ฆ ๋ฐ์ฌ๋ฆผ
๋ ์ง DATE, TIMESTAMP
DATE: ๋ ์ง, ์๊ฐ, ๋ถ, ์ด๋ฅผ ์ ์ฅ (์ฃผ๋ก ์ฌ์ฉ)
TIMESTAMP : ๋ ์ง, ์๊ฐ, ๋ถ, ์ด ์ด๋จ์ ์ดํ 9์๋ฆฌ๊น์ง ์ ์ฅ (์๊ฐ์ด ๋งค์ฐ ์ค์ํ ๊ฒฝ์ฐ ์ฌ์ฉ)
๋ฌด๊ฒฐ์ฑ
๋ฌด๊ฒฐ์ฑ ์ ์ฝ์กฐ๊ฑด: ์ ์ฝ์กฐ๊ฑด์ ๋ฐ์ดํฐ์ ๋ฌด๊ฒฐ์ฑ์ ๋ณด์ฅ๋ฐ๊ธฐ ์ํด์ ์ฌ์ฉ
๋ฌด๊ฒฐ์ฑ : ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ดํฐ์ ์ ํ์ฑ (์ผ๊ด์ฑ)
์ ์ฝ ์กฐ๊ฑด (Constraint) : NOT NULL, UNIQUE, PRIMARY KEY, FOREIGN KEY, CHECK
* NOT NULL
ํ์ : ์ปฌ๋ผ๋ช ๋ฐ์ดํฐํ์ NOT NULL
CREATE TABLE MYUSER (
USERNO NUMBER(11,0),
USERID VARCHAR2(20),
USERPW VARCHAR(30) NOT NULL,
NICKNAME VARCHAR(30),
EMAIL VARCHAR(50) NULL,
PRIMARY KEY (USERNO)
);
NOT NULL์ ๋ฐ์ดํฐ์ฝ์ (INSERT)์ ๊ฐ์ ๊ผญ ๋ฃ์ด์ค์ผ๋ฉ๋๋ค.
์ด์ ๋ฐ๋๋ก ๋ฐ์ดํฐ๋ฅผ ๋ฃ์ง์๊ฒ๋๋ฉด ์ฆ NULL๊ฐ์ด ๋ค์ด๊ฐ๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
์ฌ์ฉํ๋ฉด ์ข์ ๋ : ์์ด์๋ ์๋๋ ์ค์ํ ๊ฐ์ผ ๊ฒฝ์ฐ.
* NULL์ ๊ดํด
INSERT์ ๊ฐ์ ๋ฃ์ง ์๊ฒ๋๋ฉด NULL๋ก์ ํ์๋ฉ๋๋ค. ์ฆ ๋ฐ์ดํฐ๊ฐ์ด ์กด์ฌํ์ง ์๋ค๋ ๊ฒ ์ ๋๋ค.
ํ์ง๋ง ์ค๋ผํด์์๋ ''๋น ๊ณต๋ฐฑ, ๋น ๊ฐ์ NULL๋ก ์ธ์ํ๋ฉฐ ''๋ =''๊ฐ ์๋ IS NULL๋ก ์กฐํํด์ผํฉ๋๋ค.
* PRIMARY KEY
ํ์: PRIMARY KEY (์ปฌ๋ผ๋ช 1, ์ปฌ๋ผ๋ช 2, ์ปฌ๋ผ๋ช 3,..)
CREATE TABLE MYUSER (
USERNO NUMBER(11,0),
USERID VARCHAR2(20),
USERPW VARCHAR(30) NOT NULL,
NICKNAME VARCHAR(30),
EMAIL VARCHAR(50) NULL,
PRIMARY KEY (USERNO)
);
- PRIMAY KEY ์ฆ ๊ธฐ๋ณธํค๋ ํ๋์ ํ ์ด๋ธ์ ์๋ ๋ฐ์ดํฐ๋ค์ ๊ณ ์ ํ๊ฒ ์๋ณํ๋ ์ ์ฝ์กฐ๊ฑด์ ๋๋ค.
- ๊ธฐ๋ณธํค๋ ํ ๊ฐ์ ํ ์ด๋ธ์ ํ๋๋ง ์์ฑ๊ฐ๋ฅ ํฉ๋๋ค.
- ๊ธฐ๋ณธํค๋ก ์ค์ ๋ ์ด์ ์ค๋ณต๋ ๊ฐ์ ๊ฐ์ง ์ ์์ผ๋ฉฐ NULL๊ฐ ๋ํ ๊ฐ์ง ์ ์์ต๋๋ค.
* FOREIGN KEY
ํ์: ์ปฌ๋ผ๋ช ๋ฐ์ดํฐํ์ CONSTRAINT ์ธ๋ํค ์ด๋ฆ REFERENCES ์ฐธ์กฐํ ์ด๋ธ ๋ช (์ฐธ์กฐ ์ปฌ๋ผ)
CREATE TABLE MYUSER (
USERNO NUMBER(11,0),
USERID VARCHAR2(20),
USERPW VARCHAR(30) NOT NULL,
NICKNAME VARCHAR(30),
EMAIL VARCHAR(50) NULL,
PRIMARY KEY (USERNO)
);
CREATE TABLE MARKET_CART(
CARTNO NUMBER(11,0),
USERNO NUMBER(11,0) CONSTRAINT FK_USERNO REFERENCES MYUSER(USERNO),
PRIMARY KEY (CARTNO )
);
- FOREIGN KEY ์ฆ, ์ธ๋ํค๋ ์ฐธ์กฐํ๋ ํ ์ด๋ธ์ ์กด์ฌํ๋ ๊ฐ๋ง ์ฌ์ฉํ๋ ์ ์ฝ์กฐ๊ฑด์ ๋๋ค.
- ์ฐธ์กฐํ ์ ์๋ ์ปฌ๋ผ์ ์ฐธ์กฐํ ์ ์๋ ํ ์ด๋ธ์ ๊ธฐ๋ณธํค์ด๊ฑฐ๋ UNIQUE๋ง ๊ฐ๋ฅํฉ๋๋ค.
* CHECK
ํ์ : CONSTRAINT ์ ์ฝ๋ช CHECK(์กฐ๊ฑด)
CREATE TABLE MYUSER (
USERNO NUMBER(11,0),
USERID VARCHAR2(20),
USERPW VARCHAR(30) NOT NULL,
NICKNAME VARCHAR(30),
EMAIL VARCHAR(50) NULL,
BIRTHYEAR NUMBER(11,0) CONTSRAINTS (CH_BIRTHYEAR > 14),
PRIMARY KEY (USERNO) CHECK(BIRTHYEAR)
);
- CHECK ์๊ดํธ ์์ ์กฐ๊ฑด์ ๋ง๋ ๋ฐ์ดํฐ๋ง ์ฝ์ ๊ฐ๋ฅํ ์ ์ฝ์กฐ๊ฑด
- ์กฐ๊ฑด์๋ ๊ธฐ๋ณธ์ฐ์ฐ์, ๋น๊ต์ฐ์ฐ์, IN, NOT IN ๋ฑ์ ์ฌ์ฉ
* UNIQUE
ํ์: ์ปฌ๋ผ๋ช ๋ฐ์ดํฐํ์ UNIQUE
CREATE TABLE MYUSER (
USERNO NUMBER(11,0),
USERID VARCHAR2(20),
USERPW VARCHAR(30) NOT NULL,
NICKNAME VARCHAR(30) UNIQUE,
EMAIL VARCHAR(50) NULL,
BIRTHYEAR NUMBER(11,0) CONSTRAINTS CH_BIRTHYEAR CHECK(BIRTHYEAR >14),
PRIMARY KEY (USERNO)
);
- UNIQUE๋ก ์ค์ ๋ ํด๋น ์ปฌ๋ผ์ ์ค๋ณต๊ฐ์ ํ์ฉํ์ง ์์
DROP TABLE
ํ์ : DROP TABLE ํ ์ด๋ธ๋ช
DROP TABLE MYUSER;
- DROP TABLE ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ๋ฉด ํ ์ด๋ธ์ ๋ชจ๋ ๋ฐ์ดํฐ, ๊ตฌ์กฐ๋ฅผ ์ญ์ ํ๋ค.
ALTER TABLE
์ปฌ๋ผ ์ญ์ ํ์ : ALTER TABLE ํ ์ด๋ธ๋ช DROP COLUMN ์ปฌ๋ผ๋ช
ALTER TABLE MYUSER DROP COLUMN BIRTHYEAR;
์ปฌ๋ผ ์ถ๊ฐ ํ์ : ALTER TABLE ํ ์ด๋ธ๋ช ADD ์ถ๊ฐํ ์ปฌ๋ผ๋ช ๋ฐ์ดํฐํ์ (NOT NULL, NULL)
ALTER TABLE MYUSER ADD BIRTHYEAR NUMBER(11, 0) NOT NULL;
์ปฌ๋ผ ๋ณ๊ฒฝ ํ์ : ALTER TABLE ํ ์ด๋ธ๋ช MODIFY ์ปฌ๋ผ๋ช ๋ณ๊ฒฝํ ๋ฐ์ดํฐํ์ (NOT NULL, NULL)
ALTER TABLE MYUSER MODIFY EMAIL VARCHAR(100) NULL;
์ํ์ค
USERNO NUMBER(11,0) ๊ธฐ๋ณธํค๋ฅผ ์ฌ์ฉ์๊ฐ ๋ค์ ์ซ์๋ฅผ ์์ํ๊ณ ์ ๋ ฅํ๋ ๊ฒ์ ๋ถ๊ฐ๋ฅํ๋ค.
๊ทธ๋ ๋ค๋ฉด ์ด๋ป๊ฒ ํด์ผํ ๊น?
์ค๋ผํด์์ ์ํ์ค๋ฅผ ์ฌ์ฉ
: ์๋์ผ๋ก ๋ค์ ์ซ์๋ฅผ ์์ฑํ๊ณ ๊ธฐ๋ณธํค๋ก ์ฌ์ฉ๊ฐ๋ฅํ๋ค.
์ํ์ค ์์ฑํ์
CREATE SEQUENCE ์ํ์ค๋ช
START WITH ์์๋ฒํธ
INCREMENT BY ์ฆ๊ฐ๊ฐ
MAXVALUE ์ต๋๊ฐ
MINVALUE ์ต์๊ฐ
CYCLE ๋๋ NOCYCLE;
์ํ์ค ๊ฒ์
SELECT * FROM USER_SEQUENCES;
์ํ์ค ์์ฑ
CREATE SEQUENCE SEQ_MYUSER
START WITH 1
INCREMENT BY 1
MAXVALUE 100000
MINVALUE 1
NOCYCLE;
์ํ์ค์ ๋ค์๊ฐ์ ์ด์ฉํ ์ ์ ํ ์ด๋ธ์ ๊ธฐ๋ณธํค(USERNO)๊ฐ ๋ฃ๊ธฐ
INSERT INTO MYUSER
(
USERNO,
USERID,
USERPW,
NICKNAME,
EMAIL,
BIRTHYEAR
)
VALUES
(
SEQ_MYUSER.nextval,
'id1234',
'pw1234',
'nm1234',
'aaa@namer.com',
50
);
์ํ์ค์ ํ์ฌ ๊ฐ ์กฐํ
SELECT seq_myuser.currval FROM DUAL;
์ํ์ค ์์
ALTER SEQUENCE ์ํ์ค๋ช
INCREMENT BY ์์ ํ ์ฆ๊ฐ๊ฐ
MAXVALUE ์์ ํ ์ต๋๊ฐ
MINVALUE ์์ ํ ์ต์๊ฐ
CYCLE ๋๋ NOCYCLE;
- ์ํ์ค์ ์์ ๊ฐ์ ๋ณ๊ฒฝํ๋ ๋ฐฉ๋ฒ์ ์ํ์ค๋ฅผ ์ญ์ ํ ๋ค์ ์์ฑํด์ผํ๋ค.
- ๋๋ INCREMENT BY ์์ ํ ์ฆ๊ฐ๊ฐ์ ๋ณ๊ฒฝํ์ฌ ์ํ๋ ์์๊ฐ์ผ๋ก ์ด๋
์ํ์ค ์ญ์
DROP SEQUENCE ์ํ์ค๋ช
;
๋ฐ์ดํฐ ์ ๋ ฌ ORDER BY
์ค๋ฆ์ฐจ์ ์ ๋ ฌ ORDER BY ASC
ํ์ : ORDER BY ASC
- ๋ฐ์ดํฐ๋ฅผ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ์ํจ๋ค.
- ์ซ์๋ ์์ ์ซ์๋ถํฐ, ๋ฌธ์๋ ์ํ๋ฒณ ์์๋ก ์ถ๋ ฅ๋๋ค.
- Default ๊ฐ์ Ascending ์ค๋ฆ์ฐจ์์ผ๋ก์จ ASC๋ ์๋ตํด๋๋๋ค.
SELECT *
FROM BBSTABLE
ORDER BY BBSNO ASC;
ASC๋ DEFAULT ๊ฐ์ด๋ผ ์๋ต๊ฐ๋ฅํ๋ค.
๋ํ SELECT์ ์ ORDER BY์ ์ฌ์ฉ๋ ์ปฌ๋ผ์ ๊ผญ ์ฌ์ฉํ ํ์๋ ์๋ค.
SELECT BBSTITLE
FROM BBSTABLE
ORDER BY BBSNO;
๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ ORDER BY DESC
ํ์ : ORDER BY DESC
- ๋ฐ์ดํฐ๋ฅผ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌ์ํจ๋ค. ์ซ์๋ ํฐ ์ซ์๋ถํฐ ๋ฌธ์๋ ์ํ๋ฒณ ์ญ์์๋ก ์ถ๋ ฅ๋๋ค.
- ASC ์ ๋ฌ๋ฆฌ DESC๋ ๊ผญ ๋ช ์ํด ์ฃผ์ด์ผ ํ๋ค.
SELECT *
FROM BBSTABLE
ORDER BY BBSNO DESC;
ORDER BY ์ฌ๋ฌ ๊ฐ ์ฌ์ฉ
SELECT *
FROM BBSTABLE
ORDER BY BBSTITLE DESC,bbscontents ASC;
- ์ ๋ ฌ ํ ์ค๋ณต๋๋ ๋ฐ์ดํฐ๋ ์ฝค๋ง(,)๋ค์ ์ค๋ ์ ๋ ฌ์์๋ฅผ ์ ์ฉ.
์กฐ๊ฑด์ WHERE๊ณผ AND, OR, SELECT ์ ROWNUM๊ณผ DISTINCT
WHERE๊ณผ AND
- MYUSER์ USERID๊ฐ 500์ด๊ณ EMAIL์ NULL์ด ์๋ ๊ฒ๋ง ์กฐํ
SELECT * FROM MYUSER WHERE USERID = 500 AND EMAIL != NULL;
BBSTABLE์ ๊ฒ์ํ๋ฒํธ๊ฐ 100์ดํ์ด๊ณ ๊ฒ์ํ์ ๋ชฉ์ด ABC๋ก ์์ํ๋ ๊ฒ
SELECT * FROM BBSCONTENTS WHERE BBSNO<=100 AND BBSTITLE LIKE 'ABC%'
WHERE๊ณผ OR
- MYUSER์ USERID๊ฐ 500๋๋ EMAIL์ NULL์ด ์๋๊ฒ๋ง ์กฐํ
SELECT * FROM MYUSER WHERE USERID = 500 OR EMAIL != NULL;
BBSTABLE์ ๊ฒ์ํ๋ฒํธ๊ฐ 100์ด๊ณผ ๋๋ ๊ฒ์ํ์ ๋ชฉ์ด ABC๊ฐ ํฌํจ๋ ๊ฒ๋ง ์กฐํ
SELECT * FROM BBSCONTENTS WHERE BBSNO>100 OR BBSTITLE LIKE '%ABC%'
SELECT์ ROWNUM
์กฐํ๋๋ ํ์ ์๋ฅผ ์ ํํ ์ ์๋ค.
๊ธ 1๊ฐ๋ง ์กฐํ
SELECT *
FROM BBSTABLE
WHERE ROWNUM = 1;
๊ธ10๊ฐ๋ง ์กฐํ(ํ์ ์ 10๊ฐ)
SELECT *
FROM BBSTABLE
WHERE ROWNUM <= 10;
SELECT์ DISTINCT
์ค๋ณต๋ ๊ฐ์ ์ ๊ฑฐํ๊ณ ํ๋๋ง ๊ฒฐ๊ณผ๋ก์ ์กฐํํ๋ค.
์ค๋ณต๋ ๊ธ ์ ๋ชฉ์ 2๊ฐ ์ด์ ์กฐํ์๋๋๋ก SELECT
SELECT DISTINCT BBSTITLE
FROM BBSTABLE;
์ค๋ผํด ํจ์
* ๋ฌธ์์ด ํจ์
LOWER(๋ฌธ์์ด): ์๋ฌธ์๋ก ๋ณํ
SELECT LOWER(BBSTITLE)
FROM BBSTABLE;
UPPER(๋ฌธ์์ด): ๋๋ฌธ์๋ก ๋ณํ
SELECT UPPER(BBSTITLE)
FROM BBSTABLE;
CONCAT(‘๋ฌธ์์ด1’,’๋ฌธ์์ด2’): ๋ฌธ์์ด1๊ณผ ๋ฌธ์์ด2๋ฅผ ํฉ์นจ. ์ฐ๊ฒฐ์ฐ์ฐ์||์ ๊ฐ์ ์ญํ .
SELECT CONCAT('abc','def')
FROM DUAL;
SUBSTR('๋ฌธ์์ด',์์์์น,๊ฐฏ์): ๋ฌธ์์ด์์ ์์์์น๋ก๋ถํฐ ๊ฐฏ์๋งํผ ๋ฆฌํด.
SELECT SUBSTR('abcdefghij',3,4)
FROM DUAL;
LPAD(๋ฐ์ดํฐ,์ ์ฒด๊ธธ์ด,'์ถ๊ฐํ ๋ฌธ์์ด'):๋ชจ์๋ ๊ธธ์ด๋งํผ ์ผ์ชฝ์์๋ถํฐ ๋ฌธ์์ด์ ์ถ๊ฐํด์ค๋ค
SELECT LPAD(BBSCONTENTS,20,'A')
FROM BBSTABLE;
RPAD(๋ฐ์ดํฐ,์ ์ฒด๊ธธ์ด,'์ถ๊ฐํ ๋ฌธ์์ด'):๋ชจ์๋ ๊ธธ์ด๋งํผ ์ค๋ฅธ์ชฝ์์๋ถํฐ ๋ฌธ์์ด์ ์ถ๊ฐํด์ค๋ค.
SELECT RPAD(BBSCONTENTS,20,‘B')
FROM BBSTABLE;
TRIM(‘๋ฌธ์์ด’):๋ฌธ์์ด ์์ชฝ ๊ณต๋ฐฑ์ ์ ๊ฑฐํด์ค๋ค.
SELECT TRIM(' ABC ')
FROM DUAL;
TRIM('ํน์ ๋ฌธ์' FROM '๋ฌธ์์ด'):๋ฌธ์์ด ์๋ค๋ก ํน์ ๋ฌธ์๋ฅผ ์ ๊ฑฐํด์ค๋ค.
SELECT TRIM('A' FROM 'AABA BC AA DD AABA')
FROM DUAL;
TRUNC(์ซ์,์์์ ํ์ํ ์):์์์ ์ซ์๋ฅผ ์ด๋๊น์ง ๋ณด์ฌ์ฃผ๊ณ ๋๋จธ์ง๋ ๋ฒ๋ฆฐ๋ค.
SELECT TRUNC(123.56789,2)
FROM DUAL;
ROUND(์ซ์,์์์ ํ์ํ ์):์์์ ์ซ์๋ฅผ ์ด๋๊น์ง ๋ณด์ฌ์ฃผ๊ณ ๋๋จธ์ง๋ ๋ฐ์ฌ๋ฆผํ๋ค.
SELECT ROUND(123.56789,2)
FROM DUAL;
MOD(์ซ์,๋๋ ์ซ์):์ซ์๋ฅผ ๋๋๊ณ ๋๋จธ์ง๊ฐ์ ์ป๋๋ค.
SELECT MOD(1234567,10)
FROM DUAL;
ADD_MONTHS('25-DEC-91',6):
SELECT ADD_MONTHS(SYSDATE, 1)
FROM DUAL;
SELECT ADD_MONTHS(SYSDATE, -1)
FROM DUAL;
ํ๋ฃจ์ถ๊ฐ
SELECT SYSDATE+1 FROM DUAL;
** ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋ ๊ฒ์ผ๋ก ์์๋จ.๊ทธ๋งํผ ์ค์. **
NVL(๊ฐ, NULL์ผ์ ์ถ๋ ฅํ ๊ฐ)
SELECT NVL(NULL,'NULL์ด๊ตฐ์') FROM DUAL;
NVL2(๊ฐ , NULL์ด ์๋๋ฉด ์ถ๋ ฅํ ๊ฐ,NULL์ผ์ ์ถ๋ ฅํ ๊ฐ)
SELECT NVL2(NULL,'NULL์ด ์๋๋๋ค','NULL์ด๊ตฐ์')
FROM DUAL;
Inner Join,Left Outer Join,Right Outer Join,Self Join
Join์ ์ฌ์ฉํ๋ ์ด์
join์ ์ฌ์ฉํ๋ฉด ๊ด๋ จ์๋ ํ ์ด๋ธ๋ผ์ง ๋ฌถ์ด์ค ์ ์๋ค.
INNER JOIN
SELECT A.*,B.*
FROM MYUSER A
INNER JOIN BUYLIST B
ON A.USERNO = B.USERNO;
- ์ปฌ๋ผ๋ช ์ด ๋์ผํ ๊ฒฝ์ฐ ๋ณ๋ช ์ ์ฌ์ฉํ๊ฑฐ๋ ๊ฐ ํ ์ด๋ธ ๋ช ์ ๊ธฐ์ .
์ฌ๊ธฐ์ ์ ์ ์๋ ์ฌ์ค Aํ ์ด๋ธXBํ ์ด๋ธ:
SELECT A.*,B.*
FROM MYUSER A
INNER JOIN BUYLIST B
ON 1=1;
๊ฐ์ ๊ฒ ๋ผ๋ฆฌ๋ง ๊ฒฐ๊ณผ ์ป๊ธฐ.
SELECT A.*,B.*
FROM MYUSER A
INNER JOIN BUYLIST B
ON A.USERNO = B.USERNO;
์ ๊ฒฐ๊ณผ์์ USERNO=2์ธ ๊ฒ๋ง ์กฐํํ๊ธฐ.
SELECT A.*,B.*
FROM MYUSER A
INNER JOIN BUYLIST B
ON A.USERNO = B.USERNO
WHERE A.USERNO = 2;
LEFT OUTER JOIN
INNER JOIN์ฒ๋ผ ๊ฐ์ ๊ฒ ๋ผ๋ฆฌ ๋ฌถ์ด์ค๋ค.
๊ทธ ํ์ LEFT OUTER JOIN์ ์ผ์ชฝ์ ๋๋จธ์งํ๋ ๊ฒฐ๊ณผ์ ํฌํจ์ํจ๋ค.
SELECT A.*,B.*
FROM MYUSER A
LEFT OUTER JOIN BUYLIST B
ON A.USERNO = B.USERNO;
RIGHT OUTER JOIN
INNER JOIN์ฒ๋ผ ๊ฐ์ ๊ฒ ๋ผ๋ฆฌ ๋ฌถ์ด์ค๋ค.
๊ทธ ํ์ RIGHT OUTER JOIN์ ์ค๋ฅธ์ชฝ์ ๋๋จธ์งํ๋ ๊ฒฐ๊ณผ์ ํฌํจ์ํจ๋ค.
SELECT A.*,B.*
FROM MYUSER A
RIGHT OUTER JOIN BUYLIST B
ON A.USERNO = B.USERNO;
LEFT OUTER JOIN: ์ผ์ชฝ ๋๋จธ์ง๋ ํฌํจ
RIGHT OUTER JOIN: ์ค๋ฅธ์ชฝ ๋๋จธ์ง๋ ํฌํจ.
Union, Union All
UNION: ๋๊ฐ์ ์ฟผ๋ฆฌ๋ฌธ์ ํฉ์ณ ํ๋์ ๊ฒฐ๊ณผ์งํฉ์ผ๋ก ๋ง๋ค์ด์ค๋๋ค.์ค๋ณต๋ ํ์ ์ ๊ฑฐํด์ค๋๋ค.
UNION ALL: ๋๊ฐ์ ์ฟผ๋ฆฌ๋ฌธ์ ํฉ์ณ ํ๋์ ๊ฒฐ๊ณผ์งํฉ์ผ๋ก ๋ง๋ค์ด์ค๋๋ค.
์ฌ์ฉ์ ์ ์ฝ์กฐ๊ฑด: ์ปฌ๋ผํ์ ์ด ๊ฐ์์ผํ๋ค.
SELECT
1 AS COLUMN0,
'1ssss' AS COLUMN1
FROM DUAL
UNION
SELECT
2 AS COLUMN0,
'2aaaa' AS COLUMN1
FROM DUAL
UNION
SELECT
3 AS COLUMN0,
'3aaaa' AS COLUMN1
FROM DUAL;
SELECT
BIRTHYEAR
FROM MYUSER
UNION
SELECT
BIRTHYEAR
FROM MYUSER
WHERE USERNO =7;
SELECT
BIRTHYEAR
FROM MYUSER
UNION ALL
SELECT
BIRTHYEAR
FROM MYUSER
WHERE USERNO =7;
SELECT
1 AS COL0,
USERNO AS COL1,
USERID AS COL2,
USERPW AS COL3
FROM MYUSER
UNION ALL
SELECT
2 AS COL0,
BBSNO AS COL1,
TO_CHAR(USERNO) AS COL2,
BBSTITLE AS COL3
FROM BBSTABLE;
์๋ธ์ฟผ๋ฆฌ
ํ๋์ SQL๋ฌธ์ ์กด์ฌํ๋ ๋ ๋ค๋ฅธ SQL๋ฌธ.
WHERE ์ ์๋ธ์ฟผ๋ฆฌ
SELECT *
FROM MYUSER A
WHERE A.USERNO IN (
SELECT B.USERNO
FROM BUYLIST B)
SELECT *
FROM MYUSER A
WHERE A.USERNO NOT IN (
SELECT B.USERNO
FROM BUYLIST B)
SELECT ์ ์๋ธ์ฟผ๋ฆฌ
๋ฐ๋์ ๋จ์ผ ๊ฐ๋ง์ ๊ฒฐ๊ณผ๋ก์ ์ป์ด์ผํ๋ค. SUM, AVG, COUNT, MIN, MAX์ ๊ฐ์ ์ง๊ณํจ์์ ๋ง์ด ์ฌ์ฉ๋๋ค.
๊ตฌ๋งค์์์ ๋ณด์ ๊ตฌ๋งค์์ ์ ์ฒด๊ตฌ๋งค๊ธ์ก.
SELECT A.*,(
SELECT SUM(PRICE)
FROM BUYLIST
WHERE BUYLIST.USERNO = A.USERNO)
AS TOTALBUY)
FROM MYUSER A
WHERE A.USERNO = 2;
FROM ์ ์๋ธ์ฟผ๋ฆฌ
FROM ๋ค์ ์ค๋ ์๋ธ์ฟผ๋ฆฌ์ ๊ฒฐ๊ณผ๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ๋๋ค.
SELECT
A.USERNO,
A.USERID,
A.USERPW,
B.BBSNO,
B.USERNO,
B.BBSTITLE
FROM MYUSER A, (SELECT BBSNO,USERNO,BBSTITLE FROM BBSTABLE) B;
INSERT+์๋ธ์ฟผ๋ฆฌ
SELECT๊ฒฐ๊ณผ๋ฅผ INSERT INTO ๋ค์์ค๋ ํ ์ด๋ธ(์ฌ๊ธฐ์๋MYUSER)์ ๋ฐ์ดํฐ์ฝ์ .
INSERT INTO MYUSER
(
USERNO,
USERID,
USERPW,
NICKNAME,
EMAIL,
BIRTHYEAR
)
SELECT
9, --๊ฐ์ ์ ์์ง๋ง ํ๋ก์์ ๋ก ๋ฐ๋ ๋งค๊ฐ๋ณ์๊ฐ, ๋ณ์๊ฐ์ ์ฌ์ฉ๊ฐ๋ฅ.
'bbbbb',
'bbbbb',
'55555',
'bbb@naver.com',
55
FROM DUAL;
Group By์ ๊ทธ๋ฃน ํจ์
ํน์ ์ปฌ๋ผ์ ๊ธฐ์ค์ผ๋ก ๊ทธ๋ฃน์ผ๋ก ๋ฌถ์ด์ค๋ค.
SELECT USERNO
FROM BBSTABLE
GROUP BY USERNO;
GROUP BY ๋ค์์์ค๋ ์ปฌ๋ผ ์ธ์๋ ์ง๊ณํจ์(SUM, AVG, MIN, MAX, COUNT ๋ฑ)์ ์จ์ค๋ค
์ค๋ฅ์ ์
SELECT USERNO,BBSTITLE
FROM BBSTABLE
GROUP BY USERNO;
USERNO๋ฅผ ๊ธฐ์ค์ผ๋ก ๊ทธ๋ฃน์ผ๋ก ๋ฌถ์ด์ฃผ์์ง๋ง ๋๋จธ์ง๋ ๊ทธ๋ฃนํจ์์ ๋์์ด ํ์ํ๋ค.
COUNT ํจ์
GROUP BY์ ์ฌ์ฉ๋๋ ์ปฌ๋ผ์ ๊ธฐ์ค์ผ๋ก ๊ทธ๋ฃน์ผ๋ก ๋ฌถ์ด์ค ์ COUNT(์ปฌ๋ผ)์ ์ ์ด์ฃผ๋ฉด COUNT(์ปฌ๋ผ)์ ์ ํ ์ปฌ๋ผ๋ ๋ฌถ์ด์ํ์,
์์ฝํ์ ํด์ฃผ์ง๋ง ํ์ ์๋ฅผ ์์ฝํด์ค๋ค. ๋จ NULL์ ์ธ์ง ์๋๋ค.
SELECT COUNT(BBSNO),USERNO,COUNT(BBSTITLE)
FROM BBSTABLE
GROUP BY USERNO;
SUMํจ์
๋์ ๊ตฌ๋งค์ก์,๊ธฐ๋ง๊ณ ์ฌ์ค๊ฐ๊ณ ์ฌ ์ํ์ํ์ ํฉ๊ณ ๋ฑ๋ฑ์ ์ฌ์ฉ๊ฐ๋ฅํ๋ค.
๊ทธ๋ฃน์ผ๋ก ๋ฌถ์ด์ํ์, ์์ฝํ์ ํด์ฃผ๋ฉด์ SUM์ด์ฌ์ฉ๋ ์ปฌ๋ผ์ ์ซ์์ ์ธ ํฉ๊ณ๋ฅผ ๊ณ์ฐํ ๋ ์ฌ์ฉํ๋ค
SELECT SUM(BBSNO),USERNO
FROM BBSTABLE
GROUP BY USERNO;
ํ์๋ง๋ค ๋์ ๊ตฌ๋งค์ก์
SELECT USERNO,SUM(PRICE)
FROM BUYLIST
GROUP BY USERNO;
AVGํจ์
๊ทธ๋ฃน์ผ๋ก ๋ฌถ์ด์ํ์,
์์ฝํ์ ํด์ฃผ๋ฉด์ AVG์ด ์ฌ์ฉ๋ ์ปฌ๋ผ์ ์ซ์์ ์ธ ํ๊ท ์ ๊ณ์ฐํ ๋ ์ฌ์ฉํ๋ค.
--ํ์๋ง๋ค ํ๊ท ์ํ๊ธ์ก
SELECT USERNO,AVG(PRICE)
FROM BUYLIST
GROUP BY USERNO;
--์ ์ฒด ํ๊ท ์ํ๊ธ์ก
SELECT AVG(PRICE)
FROM BUYLIST;
MAXํจ์
๊ทธ๋ฃน์ผ๋ก ๋ฌถ์ด์ํ์, ์์ฝํ์ ํด์ฃผ๋ฉด์ ๊ทธ๋ฃน๋ง๋ค ์ซ์์ ์ธ ์ต๋๊ฐ์ ํ์ํด์ค๋ค.
--ํ์๋ง๋ค ๊ตฌ๋งคํ ์ํ์ค ์ต๊ณ ์ํ๊ธ์ก
SELECT USERNO,MAX(PRICE)
FROM BUYLIST
GROUP BY USERNO;
--๊ตฌ๋งคํ ์ํ์ค ์ต๊ณ ์ํ๊ธ์ก
SELECT MAX(PRICE)
FROM BUYLIST;
MINํจ์
๊ทธ๋ฃน์ผ๋ก ๋ฌถ์ด์ํ์, ์์ฝํ์ ํด์ฃผ๋ฉด์ ๊ทธ๋ฃน๋ง๋ค ์ซ์์ ์ธ ์ต์๊ฐ์ ํ์ํด์ค๋ค.
--ํ์๋ง๋ค ๊ตฌ๋งคํ ์ํ์ค ์ต์ ์ํ๊ธ์ก
SELECT USERNO,MIN(PRICE)
FROM BUYLIST
GROUP BY USERNO;
--๊ตฌ๋งคํ ์ํ์ค ์ต์ ์ํ๊ธ์ก
SELECT MIN(PRICE)
FROM BUYLIST;
HAVING
GROUP BY๋ก ๋ฌถ์ธ ๊ทธ๋ฃน์ ์กฐ๊ฑด์ ์ค๋ค.
BBSNO์ NULL์ด ์๋ ํ์ ๊ฐฏ์ 10๊ฐ ์ด๊ณผ๋ง ์กฐํ.
SELECT COUNT(BBSNO),USERNO,COUNT(BBSTITLE)
FROM BBSTABLE
GROUP BY USERNO
HAVING COUNT(BBSNO)>10;
HAVING์ ์ฌ์ฉํ๋์ด์
SELECT COUNT(BBSNO),USERNO,COUNT(BBSTITLE)
FROM BBSTABLE
WHERE COUNT(BBSNO)>10
GROUP BY USERNO;--์ค๋ฅ์ฟผ๋ฆฌ
๊ทธ๋ฃนํจ์(SUM,AVG,COUNT,MAX,MIN)๋ WHERE์ ์์ ์ฌ์ฉ๋ถ๊ฐ.
ํธ๋์ญ์
ํธ๋์ญ์ ์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ์ ํ ๋จ์ ์ ๋๋ค
ํธ๋์ญ์ ์ ํตํด ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ์ ๋ณด์ฆํฉ๋๋ค.
COMMIT: ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํธ๋์ญ์ ์ผ๋ก ๋ฌถ์ธ ์์ ์ ์๊ตฌ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ ํ ํธ๋์ญ์ ์ข ๋ฃ.
ROLLBACK: ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํธ๋์ญ์ ์ผ๋ก ๋ฌถ์ธ ์์ ์ ์ทจ์ํจ.
ROLLBACK์ด ์ฌ์ฉ๋๋ ๊ณณ
์ฌ๋ฐ๋ฅด์ง ์์ ๋ฐ์ดํฐ๊ฐ ์ ๋ ฅ๋์๊ฑฐ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ ๊ฒฝ์ฐ ํธ๋์ญ์ ์ ์ทจ์ํ๋ ๋ช ๋ น์ด์ ๋๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ๋น์ ์์ ์ผ๋ก ์ข ๋ฃ๋๋ฉด ์๋์ผ๋ก ROLLBACK์ด ์ด๋ฃจ์ด์ง๋ค.
COMMIT:๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์๊ตฌ์ ์ผ๋ก ์์ ์ด ๋ฐ์๋๋ค.
: ์ฌ๊ธฐ์ ROLLBACK์ ์ฌ์ฉํ๋คํด๋ INSERT ๋ฌธ์ด ์ทจ์๊ฐ ์๋๋ค. ๊ทธ๋ฌํ๊ธฐ ๋๋ฌธ์ ์กฐ์ฌํ ํ์๊ฐ ์๋ค.
: ์๋COMMIT: COMMIT๋ช ๋ น์ ์ฌ์ฉํ์ง ์์๋ ์๋ COMMIT๋๋ ๊ฒฝ์ฐ๋ ์๋์ ๊ฐ์.
: DDL(Data Definition Language:CREATE,DROP ๋ฑ)๋ฌธ ๋๋ DCL(Data Control Language:GRANT,REVOKE)๋ฌธ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ.
์ฌ๋ฌ ์ฌ๋์ด ๋ค๋ฅธ ์ปดํจํฐ์์์ ๋์ผํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์์ ์ ํ๋ค.
: A๊ฐ BUYLISTํ ์ด๋ธ์ UPDATE,DELETE,INSERT๋ฌธ์ ํตํด COMMIT,ROLLBACK์์ด ์์ .(BUYLISTํ ์ด๋ธ์ LOCK์ด ๊ฑธ๋ฆผ) B๊ฐ BUYLISTํ ์ด๋ธ์ ์ ๊ทผํ์ฌ ๋ณ๊ฒฝํ๋ ค๊ณ ํ๋ฉด ๋ณ๊ฒฝํ ์ ์๋ค.
: A๊ฐ ํด๋น Transaction์ Commit๋๋ Rollback์ ํ๋ฉด B๊ฐ ์ฌ์ฉ๊ฐ๋ฅ.(LOCK์ด ํด์ ๋จ.)
์ด๋ ๋ฏ ์์ฌ ๋๋ ์ฌํ ๊ฐ๋ฐ์์ ํฉ์๋ ์ฌ์์ ๋ํด์๋ง COMMIT ๋๋ ROLLBACK์ ๊ผญ ํด์ค์ผ๋๋ค.
PL/SQL
PL/SQL(Procedure Language/SQL)
: PL/SQL์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ์ ์ฐจ์ ํน์ง๊ณผ ํจ๊ป SQL์ ์กฐํฉ์ด๋ค.
: ์ด๋ก์ธํด SQL์ ๋ชจ๋ํ. ์์ ์ฒ๋ฆฌ ์๋์ ์ฑ๋ฅํฅ์์ ๋๋ชจํ ์ ์์
PL/SQL Block ์์
DECLARE
Variable declaration
BEGIN
Program Execution
EXCEPTION
Exception handling
END;
ํ๋ก์์ ๋?
: ์ด๋ฆ์ ๊ฐ์ง๊ณ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ๋๋ PL/SQL ๋ธ๋ก์ผ๋ก์จ ๋งค๊ฐ๋ณ์๋ฅผ ๋ฐ๊ณ ๋ฐ๋ณต์ ์ผ๋ก ํธ์ถ๊ฐ๋ฅํ๋ค.
: ๋ํ ๋ญ๋ฆฌ๋ฌธ์ ์ฌ๋ฌ ๊ฐ ์คํํ ์ ์๋ค.
: ์ฌ๋ฌ ์ดํ๋ฆฌ์ผ์ด์ ์์ ๊ณต์ ๊ฐ๋ฅ
ํ๋ก์์ ํ์
CREATE OR REPLACE PROCEDURE ํ๋ก์์ ์ด๋ฆ
(
ํ๋ผ๋ฏธํฐ๋ช
ํ๋ผ๋ฏธํฐ๋ฐฉํฅ ํ๋ผ๋ฏธํฐํ์
,
ํ๋ผ๋ฏธํฐ๋ช
ํ๋ผ๋ฏธํฐ๋ฐฉํฅ ํ๋ผ๋ฏธํฐํ์
) IS
ํ๋ก์์ ์์ ์ฌ์ฉํ ๋ณ์์ ์ธ.
BEGIN
์ฟผ๋ฆฌ์์ฑ.
END;
create or replace PROCEDURE PROC_INMYUSER
(
In_userid IN VARCHAR2,
Out_state OUT NUMBER
)
IS
--๋ณ์
BEGIN
INSERT INTO MYUSER
(
USERNO,
USERID,
USERPW,
NICKNAME,
EMAIL,
BIRTHYEAR
)
VALUES
(
16,
In_userid,
'assv',
'asssv4',
'aaas@naber.com',
50
);
UPDATE MYUSER
SET EMAIL = 'bbbb@naber.com'
WHERE USERNO = 16;
Out_state := 0;
END;
๋ช ๋ น์ด๋ก ํธ์ถ
EXEC ํ๋ก์์ ์ด๋ฆ; --ํ๋ผ๋ฏธํฐ๊ฐ ์๋ ํ๋ก์์ ํธ์ถ ์.
EXEC ํ๋ก์์ ์ด๋ฆ(๊ฐ1,๊ฐ2,๊ฐ3,....); --ํ๋ผ๋ฏธํฐ๊ฐ ์กด์ฌํ๋ ํ๋ก์์ ํธ์ถ ์.
ํ ์คํธ์ฉ ์ฌ์ ์์
DELETE FROM MYUSER;
CREATE SEQUENCE SEQ_MYUSER
START WITH 0
INCREMENT BY 1
MAXVALUE 1000000000
MINVALUE 0
NOCYCLE;
ํ๋ก์์ ํธ์ถ
์ต๋ช ๋ธ๋ก์ผ๋ก PL/SQL ์์ฑ
set serveroutput on;
--์ฟผ๋ฆฌ๊ฒฐ๊ณผ๋ฅผ ํ๋ฉด์ ์ถ๋ ฅ.
DECLARE
-- [๋ณ์์ด๋ฆ] [๋ณ์ํ์
] [:=์ด๊ธฐ๊ฐ];
v_state NUMBER(11,0):=50;
BEGIN
--ํ๋ก์์ ํธ์ถ.
INSERT_USER('aabs543',v_state);
--๊ฒฐ๊ณผ๊ฐ ์ถ๋ ฅ
dbms_output.put_line('๊ฒฐ๊ณผ'||v_state);
END;
:= VS =
:=๋ ๋์ ์ฐ์ฐ์์ด๋ค ์๋ฐ์ = ๊ณผ ๊ฐ๋ค.
=๋ ๋น๊ต์ฐ์ฐ์์ด๋ค ์๋ฐ์ ==๊ณผ ๊ฐ๋ค.
create or replace PROCEDURE INSERT_USER
(
In_userid IN VARCHAR2,
In_userpw IN VARCHAR2,
In_nickname IN VARCHAR2,
InOut_state IN OUT NUMBER
)
IS
[๋ณ์๋ช
] [๋ณ์ํ์
] [:=์ด๊ธฐ๊ฐ(์๋ต๊ฐ๋ฅ)];
v_username VARCHAR2(250) := 'AAA';
v_userno NUMBER(11,0);
BEGIN
ํ๋ก์์ ์ ๋ณ์์ ์ธ:
create or replace PROCEDURE PROC_INMYUSER
(
In_userid IN VARCHAR2,
In_userpw IN VARCHAR2,
In_usernickname IN VARCHAR2,
Out_state OUT NUMBER
)
IS
--๋ณ์
v_userid VARCHAR2(250) := 'AAA';
v_state NUMBER(11,0);
BEGIN
SELECT 5 INTO v_state
FROM MYUSER
WHERE USERID =In_userid
AND ROWNUM = 1;
INSERT INTO MYUSER
(
USERNO,
USERID,
USERPW,
NICKNAME,
EMAIL,
BIRTHYEAR
)
VALUES
(
SEQ_MYUSER.nextval,
In_userid,
In_userpw,
In_usernickname,
'aaas@naber.com',
50
);
UPDATE MYUSER
SET EMAIL = 'bbbb@naber.com';
Out_state := v_state;
END;
PL/SQL ์์ธ์ฒ๋ฆฌ
ํ ์คํธ๋ฐฉ๋ฒ: ํ๋ก์์ ํธ์ถ ์
SELECT 1 INTO v_userno
FROM MYUSER
WHERE USERID = In_userid
AND ROWNUM = 1;
์ฟผ๋ฆฌ์์ ์ผ์นํ๋ USERID๊ฐ ๋ฏธ์กด์ฌ๋ก ์ค๋ฅ ๋ฐ์์.
BEGIN
SELECT 1 INTO v_userno
FROM MYUSER
WHERE USERID = In_userid
AND ROWNUM = 1;
InOut_state:=v_userno;
EXCEPTION WHEN NO_DATA_FOUND THEN
InOut_state:=0;
END;
create or replace PROCEDURE INSERT_USER
(
In_userid IN VARCHAR2,
In_userpw IN VARCHAR2,
In_nickname IN VARCHAR2,
InOut_state IN OUT NUMBER
)
IS
v_username VARCHAR2(250) := 'AAA';
v_userno NUMBER(11,0);
BEGIN
/*
SELECT๋๋
INSERT,
DELETE์กด์ฌ๊ฐ๋ฅ.
์๋จ์ ๋ก์ง..
*/
BEGIN
SELECT 1 INTO v_userno
FROM MYUSER
WHERE USERID = In_userid
AND ROWNUM = 1;
InOut_state:=v_userno;
EXCEPTION WHEN NO_DATA_FOUND THEN
InOut_state:=0;
END;
/*
๋ท๋จ์ ๋ก์ง์ฒ๋ฆฌ..
*/
INSERT INTO MYUSER
(
USERNO,
USERID,
USERPW,
NICKNAME,
EMAIL,
BIRTHYEAR
)
VALUES
(
SEQ_MYUSER.nextval,
In_userid,
In_userpw,
In_nickname,
'aa@naver.com',
50
);
UPDATE MYUSER
SET EMAIL = 'bb@naver.com'
WHERE BIRTHYEAR = 50;
END;
๋ฐ์ดํฐ๋ฒ ์ด์ค EXCEPTION์์ ์ฃผ๋กํ๋ ์ผ
ROLLBACK; INSERT INTO ํ ์ด๋ธ(์ปฌ๋ผ1,์ปฌ๋ผ2...) VALUES('ํ๋ก์์ ์ด๋ฆ',์ค๋ฅ๋ฐ์์์น,ํ๋ผ๋ฏธํฐ๋ก ๋ฐ์๊ฐ,์๋ฌ์ฝ๋,์๋ฌ๋ฉ์์ง); ํ์ผ๋ก ๊ธฐ๋ก๋จ๊ธฐ๊ธฐ ๋ฑ๋ฑ..
์ฐ์ต์ฉ ํ
์ด๋ธ์์ฑ:
CREATE TABLE ERROR_LOG(
ERRORID NUMBER(10,0),
PROCNM VARCHAR2(250),
STEP NUMBER(5,0),
ERRORNO NUMBER(10,0),
ERRORMSG VARCHAR2(2000),
TXT_PARAMETER VARCHAR2(2000),
ERRORDAY DATE
);
์ํ์ค ์์ฑ
CREATE SEQUENCE SEQ_ERRORLOG
START WITH 1
INCREMENT BY 1
MAXVALUE 100000
MINVALUE 1
NOCYCLE;
create or replace PROCEDURE PROC_INMYUSER
(
In_userid IN VARCHAR2,
In_userpw IN VARCHAR2,
In_usernickname IN VARCHAR2,
Out_state OUT NUMBER
)
IS
--๋ณ์
v_userid VARCHAR2(250) := 'AAA';
v_state NUMBER(11,0);
v_step NUMBER(5,0):=0;
v_errcode NUMBER(10,0);
v_errmsg VARCHAR2(2000);
v_userparm VARCHAR2(2000);
BEGIN
/*SELECT,DELETE,UPDATE,INSERT*/
v_step:=0;
SELECT 5 INTO v_state
FROM MYUSER
WHERE USERID =In_userid
AND ROWNUM = 1;
/*SELECT,DELETE,UPDATE,INSERT*/
v_step:=1;
INSERT INTO MYUSER
(
USERNO,
USERID,
USERPW,
NICKNAME,
EMAIL,
BIRTHYEAR
)
VALUES
(
SEQ_MYUSER.nextval,
In_userid,
In_userpw,
In_usernickname,
'aaas@naber.com',
50
);
v_step:=2;
UPDATE MYUSER
SET EMAIL = 'bbbb@naber.com';
v_step:=3;
--Out_state := v_state;
EXCEPTION WHEN OTHERS THEN
ROLLBACK;
v_errcode:=SQLCODE;
v_errmsg:=SQLERRM;
v_userparm:=('In_userid:'||In_userid||','||'In_userpw:'||In_userpw||',In_usernickname:'||In_usernickname);
dbms_output.put_line('PROC_INMYUSER์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค.');
INSERT INTO ERROR_LOG(ERRORID, PROCNM, STEP, ERRONO, ERRORMSG, TXT_PARAMETER, ERRORDAY) VALUES(SEQ_ERRORLOG.nextval,'PROC_INMYUSER',v_step,v_errcode,v_errmsg,v_userparm,sysdate);
COMMIT;
END;
์ต๋ช ๋ธ๋ก์ผ๋ก PL/SQL ์์ฑ
set serveroutput on;
--์ฟผ๋ฆฌ๊ฒฐ๊ณผ๋ฅผ ํ๋ฉด์ ์ถ๋ ฅ.
DECLARE
-- [๋ณ์์ด๋ฆ] [๋ณ์ํ์
] [:=์ด๊ธฐ๊ฐ];
v_state NUMBER(11,0):=50;
BEGIN
--ํ๋ก์์ ํธ์ถ.
INSERT_USER('aa','bb','cc',v_state);
--๊ฒฐ๊ณผ๊ฐ ์ถ๋ ฅ
dbms_output.put_line('๊ฒฐ๊ณผ'||v_state);
END;
ํจํค์ง๋?
ํจํค์ง๋ ๋ค์์ ํ๋ก์์ ๋ฅผ ๋ฌถ์ด์ ๊ด๋ฆฌํด์ฃผ๋ ์ญํ ์ ํด์ค๋ค. ์ฌ ์ฌ์ฉ์ฑ์ ๋์ฌ์ค. ์ ์ง๋ณด์๊ฐ ์ฌ์์ง.
ํจํค์ง๋ ์ ์ธ๋ถ์ ๋ณธ๋ฌธ ๋ ๋ถ๋ถ์ผ๋ก ๋๋๋ค.
ํจํค์ง ์ ์ธ๋ถ(Package Specification)
CREATE OR REPLACE PACKAGE ํจํค์ง๋ช
[AS ๋๋ IS]
์ปค์ ์ ์ธ
๋ณ์ ์ ์ธ
ํ๋ก์์ ์ ์ธ
ํจ์ ์ ์ธ
์์ธ ์ ์ธ
ํจํค์ง ๋ณธ๋ฌธ(Package Body)
ํ๋ก์์ ์ ์
ํจ์ ์ ์
์์ ํ๋ก์์ ๋ฅผ ํจํค์ง์์ ๋ฃ์ด๋ณด์.(์ ์ธ๋ถ)
create or replace PACKAGE USERENTER IS
PROCEDURE PROC_INMYUSER
(
In_userid IN VARCHAR2,
In_userpw IN VARCHAR2,
In_usernickname IN VARCHAR2,
Out_state OUT NUMBER
);
--์์ผ๋ก ์์ฑํ ํ๋ก์์
PROCEDURE INSERT_BUYLIST
(
In_name IN VARCHAR2
);
END USERENTER;
create or replace PACKAGE BODY USERENTER IS
PROCEDURE PROC_INMYUSER
(
In_userid IN VARCHAR2,
In_userpw IN VARCHAR2,
In_usernickname IN VARCHAR2,
Out_state OUT NUMBER
)
IS
--๋ณ์
v_userid VARCHAR2(250) := 'AAA';
v_state NUMBER(11,0);
v_step NUMBER(5,0):=0;
v_errcode NUMBER(10,0);
v_errmsg VARCHAR2(2000);
v_userparm VARCHAR2(2000);
BEGIN
/*SELECT,DELETE,UPDATE,INSERT*/
v_step:=0;
SELECT 5 INTO v_state
FROM MYUSER
WHERE USERID =In_userid
AND ROWNUM = 1;
/*SELECT,DELETE,UPDATE,INSERT*/
v_step:=1;
INSERT INTO MYUSER
(
USERNO,
USERID,
USERPW,
NICKNAME,
EMAIL,
BIRTHYEAR
)
VALUES
(
SEQ_MYUSER.nextval,
In_userid,
In_userpw,
In_usernickname,
'aaas@naber.com',
50
);
v_step:=2;
UPDATE MYUSER
SET EMAIL = 'bbbb@naber.com';
v_step:=3;
--Out_state := v_state;
EXCEPTION WHEN OTHERS THEN
ROLLBACK;
v_errcode:=SQLCODE;
v_errmsg:=SQLERRM;
v_userparm:=('In_userid:'||In_userid||','||'In_userpw:'||In_userpw||',In_usernickname:'||In_usernickname);
dbms_output.put_line('PROC_INMYUSER์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค.');
INSERT INTO ERROR_LOG(ERRORID, PROCNM, STEP, ERRONO, ERRORMSG, TXT_PARAMETER, ERRORDAY) VALUES(SEQ_ERRORLOG.nextval,'PROC_INMYUSER',v_step,v_errcode,v_errmsg,v_userparm,sysdate);
COMMIT;
END PROC_INMYUSER;
PROCEDURE INSERT_BUYLIST
(
In_name IN VARCHAR2
)IS
BEGIN
INSERT INTO BUYLIST
(
BUYNO,
USERNO,
NAME,
BUYDAY,
PRICE
)
VALUES
(
500,--๊ณ ์ ์ผ๋ก๋ฃ์ง๋ง ๋์ค์ ๋ค์์คํ ํ ๋ ๋ณ๊ฒฝํด์ผ ์ค๋ฅ๊ฐ์๋จ.
4,
'AA์ด์ฝ๋ฆฟ',
sysdate,
5000
);
END INSERT_BUYLIST;
END USERENTER;
ํจํค์ง์์ ํ๋ก์์ ํธ์ถ.
ํ์: EXEC ํจํค์ง๋ช .ํ๋ก์์ ๋ช (‘๊ฐ1’,’๊ฐ2’…..);
์์ : EXEC USERENTER.INSERT_BUYLIST('aaaaaaa');
114p ๋ถํฐ ๋ค์ ๋ณด๊ธฐ!
'๐ฌDB' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ MySQL ] ๊ธฐ๋ณธ ์ฟผ๋ฆฌ๋ฌธ ์ ๋ฆฌ (2) | 2022.07.07 |
---|---|
SQL Injection (0) | 2022.06.17 |