[Oracle] 프로시저를 통해서 Table 생성하기
- Computer / DB
- 2020. 9. 20.
JAVA를 통해서 입력받은 값을 통해 TABLE을 자유롭게 생성해야 하는 이유가 생겼다.
그래서 CREATE TABLE을 통해 만들 방법을 찾다가 2가지 경우가 되는 것을 확인되었다.
첫 번째 방법은 프로시저를 통해서 테이블을 만드는 방법이다.
CREATE OR REPLACE PROCEDURE PRO_CRE(v_name varchar2)
IS
cursor1 INTEGER;
credbsql VARCHAR2(100);
BEGIN
credbsql := 'CREATE TABLE ' || v_name || ' (abc number, bac varchar2(10))';
-- 테이블 생성
cursor1 := DBMS_SQL.OPEN_CURSOR;
DBMS_SQL.PARSE(cursor1, credbsql, dbms_sql.v7);
DBMS_SQL.CLOSE_CURSOR(cursor1);
END;
/
프로시저 저장방법은 이와 같다.
테이블은 프로시저의 매개변수로 입력받아 진행되었다.
public void test1() throws Exception
{
String st = "ABC";
System.out.println("프로시저");
CallableStatement cs = con.prepareCall("{call PRO_CRE(?)}");
cs.setString(1, st);
if(cs.executeUpdate() != 0)
{
System.out.println("저장 완료");
}
}
JAVA 문은 이렇다.
PreparedStatement 대신 CallableStatement를 이용해서 진행되었다.
ABC 테이블이라는 이름을 임의적으로 만들었고

사진처럼 테이블은 정상적으로 완성되었음을 확인하였다.
다만, 사진의 TABLE은 JAVA문을 여러 가지 TEST 하다 보니 칼럼명이 불일치의 모습을 보였다.
그렇다고 테이블을 반드시 프로시저로 만들 필요는 없다.
public void test() throws SQLException
{
String sql = "EXEC PRO_CRE(?)";
String abc = "tt1";
String st = "Create Table " + abc+" (a number, b number)";
pstmt = con.prepareStatement(st);
//pstmt.setString(1, "test_test");
if(0 != pstmt.executeUpdate())
{
System.out.println("작동 완료");
}
}
PreparedStatement를 통해서도 충분히 생성될 수 있다.
하지만, create table의 문구가 구분하기 어려우므로 약간 힘든 모습 또한 어쩔 수 없는 단점이다.
반응형
'Computer > DB' 카테고리의 다른 글
[MariaDB] DB 백업 / 복원하기 (0) | 2021.03.16 |
---|---|
[MYSQL] 계정 만들기 / 권한 확인하기 (0) | 2021.01.04 |
[ORACLE] DML 데이터 조작어 (0) | 2020.09.14 |
[ORACLE] DDL 데이터 정의어 (0) | 2020.09.14 |
[ORACLE] PL/SQL 기초 이해 (0) | 2020.09.01 |