sudo mysql_secure_installation
# 대답은 전부 Y 로 함.
systemctl status mysql
# mysql5.7 / mariadb10.1 이상의 root 계정은 터미널에서만 사용만 가능.
CREATE USER '아이디'@'%' IDENTIFIED BY '비밀번호';
GRANT ALL PRIVILEGES ON *.* TO '아이디'@'%';
# root 권한 부여
UPDATE mysql.user SET GRANT_PRIV = 'Y', SUPER_PRIV = 'Y' WHERE USER = '아이디';
FLUSH PRIVILEGES;
* UDF.system call
sudo apt-get install make gcc
sudo apt-get install libmysqlclient-dev
sudo apt install libmariadb-dev
sudo apt install default-libmysqlclient-dev
# libmysqlclient15-dev 는 안됨.
mysql_config --include
>> -I/usr/include/mariadb -I/usr/include/mariadb/mysql : 여기에 my_global.h, m_ctype.h 등이 있어야 함.
# "lib_mysqludf_sys.c" 에서,
아래 삭제후 저장
#include <my_global.h>
#include <my_sys.h>
#include <m_ctype.h>
#include <m_string.h>
#include <mysql.h> 가 include 되는 게 중요.
sudo ./install.sh # so 생성을 위해서
mysql> SHOW VARIABLES LIKE 'plugin_dir';
+---------------+------------------------+
| Variable_name | Value |
+---------------+------------------------+
| plugin_dir | /usr/lib/mysql/plugin/ |
+---------------+------------------------+
1 row in set (0.001 sec)
# /usr/lib/mysql/plugin/ 에 so 가 있어야 함.
sudo cp /usr/lib/lib_mysqludf_sys.so /usr/lib/mysql/plugin/
sudo ./install.sh # so 를 function 에 등록을 위해서
export ORACLE_SID=MYSID sqlplus / as sysdba <conn myUser/myPass set heading off set termout off set trimout off set newpage none set pages 0 set feedback off set echo off set verify off set trimspool on set sqlprompt "" set colsep "," set linesize 32767 @/home/username/file.sql exit EOF
테이블 안에 특정 컬럼 값이 테이블 구조처럼 관리하고 사용되어 지는 방식을 말한다. 자동적으로 group by 형태로 저장하는 방식중에 하나이다.
CREATE OR REPLACE TYPE my_tab_t AS TABLE OF VARCHAR2(30); / CREATE TABLE nested_table (id NUMBER, col1 my_tab_t) NESTED TABLE col1 STORE AS col1_tab; SQL> desc nested_table Name Null? Type ----------------------------------------- -------- ---------------------------- ID NUMBER COL1 MY_TAB_T
Insert data into table:
INSERT INTO nested_table VALUES (1, my_tab_t('A')); INSERT INTO nested_table VALUES (2, my_tab_t('B', 'C')); INSERT INTO nested_table VALUES (3, my_tab_t('D', 'E', 'F')); COMMIT;
Select from nested table:
SQL> SELECT * FROM nested_table; ID COL1 ---------- ------------------------ 1 MY_TAB_T('A') 2 MY_TAB_T('B', 'C') 3 MY_TAB_T('D', 'E', 'F')
Unnesting the subtable:
SQL> SELECT id, COLUMN_VALUE FROM nested_table t1, TABLE(t1.col1) t2; ID COLUMN_VALUE ---------- ------------------------ 1 A 2 B 2 C 3 D 3 E 3 F 6 rows selected.
실예제>
nested table column을 통하여 한명의 고객이 주소값으로 여러개의 컬럼 값을 가질수 있게 관리합니다.
CREATE TYPE address_t AS OBJECT ( street VARCHAR2(30), city VARCHAR2(20), state CHAR(2), zip CHAR(5) ); /
CREATE TYPE address_tab IS TABLE OF address_t; /
CREATE TABLE customers ( custid NUMBER, address address_tab ) NESTED TABLE address STORE AS customer_addresses;
SQL> select c.custid, u.* 2 from customers c, table (c.address) u 3 ;
CUSTID STREET CITY ST ZIP ---------- ------------------------------ -------------------- -- ----- 1 101 First Redwood Shores CA 94065 1 123 Maple Mill Valley CA 90952
뷰에서 확인하는 방법
NESTED TABLE column 을 생성하면 USER_NESTED_TABLES and USER_NESTED_TABLE_COLS 두개의 뷰에서 확인할 수 있습니다.
6. d:\oracle_instantclient_11_2\network\admin 디렉토리를 생성한다. tnsnames.ora는 ORACLE_HOME에 두어도 상관없지만 통상 oracle 설치될 때 ORACLE_HOME\network\admin에 존재하므로 비슷하게 만들었다.
7. TNS_ADMIN 디렉토리에 tnsnames.ora 파일을 생성하고 아래와 같은 형식으로 입력한다. ORCL = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP) (HOST = xxx.xxx.xxx.xxx) (PORT = 1521)) (CONNECT_DATA = (SID = ORCL)) )