SAP BTP - HANA Client를 이용하여 User, Table 만들고 데이터 삽입하기
User, Table을 만들고 Data를 Import 해보자
hdbsql의 명령어를 알아보자
hdbsql -h | more
cockpit의 EndPoint를 copy해서 명령어를 쳐보자
hdbsql -n ENDPOINT -u DBADMIN
점심시간이 끝나고 와서 보니 세션이 끝나서 디비도 내려갔음..
다시 재기동하고 나니 정상적으로 접속됨
스펙 확인
\s
USER 만들기
CREATE USER 유저명 PASSWORD 패스워드 no force_first_password_change;
데이터에 대한 영향은 없고 유저가 만들어 졌는지 확인
유저에다가 스키마를 생성 할 권한을 주고
GRANT CREATE SCHEMA TO USER1;
USER1로 계정 전환
CONNECT USER1 PASSWORD Password1;
SCHEMA 생성
CREATE SCHEMA BJSYSTEMS;
SCHEMA 셋팅
SET SCHEMA BJSYSTEMS;
현재 접속중인 유저와 스키마를 확인한다
SELECT CURRENT_USER, CURRENT_SCHEMA FROM DUMMY;
아래와 같은 구조
스키마까지 만들었으니 일단 client는 종료하고 매번 저렇게 EndPoint, password 를 입력할 수 없으니 hdbuserstore에 저장하여 사용해보자.
명령어 입력
hdbuserstore Set 키닉네임 엔드포인트 유저명 패스워드
ex)
hdbuserstore Set Nuruhee hanacloud.ondemand.com:443 USER1 Password1
오류 발생
관리자 권한으로 다시 cmd창을 켜서 명령어를 입력하니 정상적으로 동작
만들어 둔 키를 이용하여 디비에 접근해보자
hdbsql -U 키닉네임
정상접속 완료
아까 만들어두었던 스키마로 셋팅
본인이 접근할 경로에 example.sql 파일 생성.
SET SCHEMA BJSYSTEMS;
CREATE COLUMN TABLE HOTEL(
hno INTEGER PRIMARY KEY,
name NVARCHAR(50) NOT NULL,
address NVARCHAR(40) NOT NULL,
city NVARCHAR(30) NOT NULL,
state NVARCHAR(2) NOT NULL,
zip NVARCHAR(6)
);
CREATE COLUMN TABLE ROOM(
hno INTEGER,
type NVARCHAR(6),
free NUMERIC(3),
price NUMERIC(6,2),
PRIMARY KEY (hno, type),
FOREIGN KEY (hno) REFERENCES HOTEL
);
CREATE COLUMN TABLE CUSTOMER(
cno INTEGER PRIMARY KEY,
title NVARCHAR(7),
firstname NVARCHAR(20),
name NVARCHAR(40) NOT NULL,
address NVARCHAR(40) NOT NULL,
zip NVARCHAR(6)
);
CREATE COLUMN TABLE RESERVATION(
resno INTEGER NOT NULL GENERATED BY DEFAULT AS IDENTITY,
rno INTEGER NOT NULL,
cno INTEGER,
hno INTEGER,
type NVARCHAR(6),
arrival DATE NOT NULL,
departure DATE NOT NULL,
PRIMARY KEY (
"RESNO", "ARRIVAL"
),
FOREIGN KEY(hno) REFERENCES HOTEL,
FOREIGN KEY(cno) REFERENCES CUSTOMER
);
CREATE COLUMN TABLE MAINTENANCE(
mno INTEGER PRIMARY KEY,
hno INTEGER,
description NVARCHAR(100),
date_performed DATE,
performed_by NVARCHAR(40)
);
CREATE OR REPLACE PROCEDURE SHOW_RESERVATIONS(
IN IN_HNO INTEGER, IN IN_ARRIVAL DATE)
SQL SECURITY INVOKER
READS SQL DATA
AS BEGIN
SELECT
R.RESNO,
R.ARRIVAL,
DAYS_BETWEEN (R.ARRIVAL, R.DEPARTURE) as "Nights",
H.NAME,
CUS.TITLE,
CUS.FIRSTNAME AS "FIRST NAME",
CUS.NAME AS "LAST NAME"
FROM
RESERVATION AS R
LEFT OUTER JOIN
HOTEL as H
ON H.HNO = R.HNO
LEFT OUTER JOIN
CUSTOMER AS CUS
ON CUS.CNO = R.CNO
WHERE R.ARRIVAL = :IN_ARRIVAL AND
H.HNO = :IN_HNO
ORDER BY
H.NAME ASC,
R.ARRIVAL DESC;
END;
INSERT INTO HOTEL VALUES(10, 'Congress', '155 Beechwood St.', 'Seattle', 'WA', '20005');
INSERT INTO HOTEL VALUES(11, 'Regency', '477 17th Avenue', 'Seattle', 'WA', '20037');
INSERT INTO HOTEL VALUES(12, 'Long Island', '1499 Grove Street', 'Long Island', 'NY', '11788');
INSERT INTO HOTEL VALUES(13, 'Empire State', '65 Yellowstone Dr.', 'Albany', 'NY', '12203');
INSERT INTO HOTEL VALUES(14, 'Midtown', '12 Barnard St.', 'New York', 'NY', '10019');
INSERT INTO HOTEL VALUES(15, 'Eighth Avenue', '112 8th Avenue', 'New York', 'NY', '10019');
INSERT INTO HOTEL VALUES(16, 'Lake Michigan', '354 OAK Terrace', 'Chicago', 'IL', '60601');
INSERT INTO HOTEL VALUES(17, 'Airport', '650 C Parkway', 'Rosemont', 'IL', '60018');
INSERT INTO HOTEL VALUES(18, 'Sunshine', '200 Yellowstone Dr.', 'Clearwater', 'FL', '33575');
INSERT INTO HOTEL VALUES(19, 'Beach', '1980 34th St.', 'Daytona Beach', 'FL', '32018');
INSERT INTO HOTEL VALUES(20, 'Atlantic', '111 78th St.', 'Deerfield Beach', 'FL', '33441');
INSERT INTO HOTEL VALUES(21, 'Long Beach', '35 Broadway', 'Long Beach', 'CA', '90804');
INSERT INTO HOTEL VALUES(22, 'Indian Horse', '16 MAIN STREET', 'Palm Springs', 'CA', '92262');
INSERT INTO HOTEL VALUES(23, 'Star', '13 Beechwood Place', 'Hollywood', 'CA', '90029');
INSERT INTO HOTEL VALUES(24, 'River Boat', '788 MAIN STREET', 'New Orleans', 'LA', '70112');
INSERT INTO HOTEL VALUES(25, 'Ocean Star', '45 Pacific Avenue', 'Atlantic City', 'NJ', '08401');
INSERT INTO HOTEL VALUES(26, 'Bella Ciente', '1407 Marshall Ave', 'Longview', 'TX', '75601');
INSERT INTO ROOM VALUES(10, 'single', 20, 135.00);
INSERT INTO ROOM VALUES(10, 'double', 45, 200.00);
INSERT INTO ROOM VALUES(12, 'single', 10, 70.00);
INSERT INTO ROOM VALUES(12, 'double', 13, 100.00);
INSERT INTO ROOM VALUES(13, 'single', 12, 45.00);
INSERT INTO ROOM VALUES(13, 'double', 15, 80.00);
INSERT INTO ROOM VALUES(14, 'single', 20, 85.00);
INSERT INTO ROOM VALUES(14, 'double', 35, 140.00);
INSERT INTO ROOM VALUES(15, 'single', 50, 105.00);
INSERT INTO ROOM VALUES(15, 'double', 230, 180.00);
INSERT INTO ROOM VALUES(15, 'suite', 12, 500.00);
INSERT INTO ROOM VALUES(16, 'single', 10, 120.00);
INSERT INTO ROOM VALUES(16, 'double', 39, 200.00);
INSERT INTO ROOM VALUES(16, 'suite', 20, 500.00);
INSERT INTO ROOM VALUES(17, 'single', 4, 115.00);
INSERT INTO ROOM VALUES(17, 'double', 11, 180.00);
INSERT INTO ROOM VALUES(18, 'single', 15, 90.00);
INSERT INTO ROOM VALUES(18, 'double', 19, 150.00);
INSERT INTO ROOM VALUES(18, 'suite', 5, 400.00);
INSERT INTO ROOM VALUES(19, 'single', 45, 90.00);
INSERT INTO ROOM VALUES(19, 'double', 145, 150.00);
INSERT INTO ROOM VALUES(19, 'suite', 60, 300.00);
INSERT INTO ROOM VALUES(20, 'single', 11, 60.00);
INSERT INTO ROOM VALUES(20, 'double', 24, 100.00);
INSERT INTO ROOM VALUES(21, 'single', 2, 70.00);
INSERT INTO ROOM VALUES(21, 'double', 10, 130.00);
INSERT INTO ROOM VALUES(22, 'single', 34, 80.00);
INSERT INTO ROOM VALUES(22, 'double', 78, 140.00);
INSERT INTO ROOM VALUES(22, 'suite', 55, 350.00);
INSERT INTO ROOM VALUES(23, 'single', 89, 160.00);
INSERT INTO ROOM VALUES(23, 'double', 300, 270.00);
INSERT INTO ROOM VALUES(23, 'suite', 100, 700.00);
INSERT INTO ROOM VALUES(24, 'single', 10, 125.00);
INSERT INTO ROOM VALUES(24, 'double', 9, 200.00);
INSERT INTO ROOM VALUES(24, 'suite', 78, 600.00);
INSERT INTO ROOM VALUES(25, 'single', 44, 100.00);
INSERT INTO ROOM VALUES(25, 'double', 115, 190.00);
INSERT INTO ROOM VALUES(25, 'suite', 6, 450.00);
INSERT INTO CUSTOMER VALUES(1000, 'Mrs', 'Jenny', 'Porter', '1340 N. Ash Street, #3', '10580');
INSERT INTO CUSTOMER VALUES(1001, 'Mr', 'Peter', 'Brown', '1001 34th St., APT.3', '48226');
INSERT INTO CUSTOMER VALUES(1002, 'Company', NULL, 'Datasoft', '486 Maple St.', '90018');
INSERT INTO CUSTOMER VALUES(1003, 'Mrs', 'Rose', 'Brian', '500 Yellowstone Drive, #2', '75243');
INSERT INTO CUSTOMER VALUES(1004, 'Mrs', 'Mary', 'Griffith', '3401 Elder Lane', '20005');
INSERT INTO CUSTOMER VALUES(1005, 'Mr', 'Martin', 'Randolph', '340 MAIN STREET, #7', '60615');
INSERT INTO CUSTOMER VALUES(1006, 'Mrs', 'Sally', 'Smith', '250 Curtis Street', '75243');
INSERT INTO CUSTOMER VALUES(1007, 'Mr', 'Mike', 'Jackson', '133 BROADWAY APT. 1', '45211');
INSERT INTO CUSTOMER VALUES(1008, 'Mrs', 'Rita', 'Doe', '2000 Humboldt St., #6', '97213');
INSERT INTO CUSTOMER VALUES(1009, 'Mr', 'George', 'Howe', '111 B Parkway, #23', '75243');
INSERT INTO CUSTOMER VALUES(1010, 'Mr', 'Frank', 'Miller', '27 5th St., 76', '95054');
INSERT INTO CUSTOMER VALUES(1011, 'Mrs', 'Susan', 'Baker', '200 MAIN STREET, #94', '90018');
INSERT INTO CUSTOMER VALUES(1012, 'Mr', 'Joseph', 'Peters', '700 S. Ash St., APT.12', '92714');
INSERT INTO CUSTOMER VALUES(1013, 'Company', NULL, 'TOOLware', '410 Mariposa St., #10', '20019');
INSERT INTO CUSTOMER VALUES(1014, 'Mr', 'Antony', 'Jenkins', '55 A Parkway, #15', '20903');
INSERT INTO RESERVATION VALUES(1, 100, 1000, 11, 'single', '2020-12-24', '2020-12-27');
INSERT INTO RESERVATION VALUES(2, 110, 1001, 11, 'double', '2020-12-24', '2021-01-03');
INSERT INTO RESERVATION VALUES(3, 120, 1002, 15, 'suite', '2020-11-14', '2020-11-18');
INSERT INTO RESERVATION VALUES(4, 130, 1009, 21, 'single', '2019-02-01', '2019-02-03');
INSERT INTO RESERVATION VALUES(5, 150, 1006, 17, 'double', '2019-03-14', '2019-03-24');
INSERT INTO RESERVATION VALUES(6, 140, 1013, 20, 'double', '2020-04-12', '2020-04-30');
INSERT INTO RESERVATION VALUES(7, 160, 1011, 17, 'single', '2020-04-12', '2020-04-15');
INSERT INTO RESERVATION VALUES(8, 170, 1014, 25, 'suite', '2020-09-01', '2020-09-03');
INSERT INTO RESERVATION VALUES(9, 180, 1001, 22, 'double', '2020-12-23', '2021-01-08');
INSERT INTO RESERVATION VALUES(10, 190, 1013, 24, 'double', '2020-11-14', '2020-11-17');
INSERT INTO MAINTENANCE VALUES(10, 24, 'Replace pool liner and pump', '2019-03-21', 'Discount Pool Supplies');
INSERT INTO MAINTENANCE VALUES(11, 25, 'Renovate the bar area. Replace TV and speakers', '2020-11-29', 'TV and Audio Superstore');
INSERT INTO MAINTENANCE VALUES(12, 26, 'Roof repair due to storm', null, null);
SELECT SCHEMA_NAME, OBJECT_NAME, OBJECT_TYPE, OWNER_NAME FROM "PUBLIC"."OWNERSHOP" WHERE OWNER_NAME = 'USER1';
경로로 이동하여 sql을 실행
hdbsql -U Nuruhee -I example.sql
데이터를 조회해보니 잘 들어간 것 같다.
매개 변수를 선언하여 값을 전달해서 쿼리를 실행 시킬 수 있다. 매개 변수의 값은 커맨드라인에서 정해주고 Query 문에서 받아서 사용 가능하다.
sql을 하나 만들어서 변수를 받을 수 있도록 만들어보자.
아까 만들어준 sql과 같은 경로에 아래 쿼리를 적어서 만들어보자
SELECT * FROM BJSYSTEMS.CUSTOMER WHERE FIRSTNAME LIKE '&nameParam'
nameParam으로 변수를 받아 처리하는데, 커맨드 라인에서 nameParam에 값이 들어갈 수 있도록 명령어를 날려보자.
CUSTOMER 테이블에서 FIRSTNAME이 J로 시작하는 row들을 출력해보자.
이번에는 직접 명령어를 쳐서 변수를 선언해서 사용해보자
db를 접속하면서 변수 선언
hdbsql -A -U Nuruhee -V nameParam=J%
추가로 변수 선언
hdbsql=> \vd titleParam Mr
변수 선언 확인
\vl
인자값을 받아서 쿼리 실행
SELECT * FROM BJSYSTEMS.CUSTOMER WHERE TITLE = '&titleParam' AND FIRSTNAME LIKE '&nameParam'
매개 변수를 입력 받을 수 있도록 쿼리 실행
SELECT * FROM HOTEL.CUSTOMER WHERE FIRSTNAME LIKE ?;