LANGUAGE/!$%!% ERROR NOTE 2017. 11. 5. 14:13

!markdown


# Java


## JDBC


Version

- JDK1.6

- Oracle 11gR2


### 1. Error (에러)


JDBC로 Oracle의 JAVA객체를 생성하려했는데 에러가 발생했다.


```log

java.sql.SQLException: ORA-29536: 부적합하게 형성된 소스: Encountered "ublic" at line 1, column 90.

Was expecting one of:

    "extends" ...

    "implements" ...

    "{" ...

    "<" ...

```




### 2. Problem (문제)


JAVA에서 `{` 이 꼬부랑 괄호(?)를 escape시키지 못하는 것 같다. 역슬래쉬를 앞에 붙여봐도 해결되지 않았다.






### 3. Solved (해결)


Procedure를 이용한 쿼리로 변경한다.


이런 JAVA 객체를 만드려 했다면,

```sql

CREATE OR REPLACE AND RESOLVE JAVA SOURCE NAMED "GenerateUUID" as 

  import java.sql.*; 

  import java.io.*; 

  import java.util.UUID; 


  public class GenerateUUID { 

    public static String getId ( ) { 

      return UUID.randomUUID ( ) .toString ( ) ; 

    } 

  }

```


위의 query를 V_SQL_TEXT 변수에 넣는다.


```sql

DECLARE 

V_SQL_TEXT CLOB := '${query}'; 

BEGIN 

EXECUTE IMMEDIATE V_SQL_TEXT; 

END;

```


그러면 아래와 같은 모습이 된다.


```sql

DECLARE

  V_SQL_TEXT CLOB := 'CREATE OR REPLACE AND RESOLVE JAVA SOURCE NAMED "GenerateUUID" as import java.sql.*; import java.io.*; import java.util.UUID; public class GenerateUUID { public static String getId ( ) { return UUID.randomUUID ( ) .toString ( ); } } ';

BEGIN

  EXECUTE IMMEDIATE V_SQL_TEXT;

END;

```


이 것을 JDBC로 실행하면 된다.




### 4. Reference (참조)


- Oracle ORA-29536 on DDL-loading java source into the database: [https://stackoverflow.com/questions/43173752/oracle-ora-29536-on-ddl-loading-java-source-into-the-database](https://stackoverflow.com/questions/43173752/oracle-ora-29536-on-ddl-loading-java-source-into-the-database)