java 소스를로드 할 때 pl/sql에서 일부 Java 함수를 래핑하려고했지만 for-loops에서 콜론 문자에 ORA-29536이 발생했습니다.
필자는 콜론을 잘못 해석하고 바인딩하려고 시도하지 않았고 앞으로의 경로에 대한 제안을 얻지 못했기 때문에 왜 데이터베이스에 문제가 있는지 이해하고 싶었습니다.
모든 for-loops를 제거하기 위해 소스를 리팩터링하는 것을 피하고 가능한 경우 loadjava 도구를 사용하지 않으려합니다.
데이터베이스는 12cR1이고 ojdk는 1.6.0_71입니다.데이터베이스에 DDL 로딩 Java 소스에 대한 ORA-29536
다음은 예입니다.
을 감안할 때이 두 가지 사소한 안녕하세요 세계 형 클래스 :
public final class HelloWorld {
public static String greet(final String userName) {
return "Hello " + userName;
}
}
그리고 : 나는 데이터베이스에 컴파일 할 때, 첫 번째 미세에 가서 등록
import java.util.Arrays;
import java.util.List;
public final class LoopingTest {
public static String greet(final String userName) {
final List<String> emptyList = Arrays.asList(userName);
for (final String string : emptyList) {
System.out.println(string);
}
return "Hello " + userName;
}
}
JAVA SOURCE
및 JAVA CLASS
이 확인 오브젝트 (I 최종 타겟이> 32K 문자 이상이고, @
, &
등과 같이 원시 스크립트에서 이스케이프 처리를 복잡하게하기 때문에 동적 SQL과 clob을 사용합니다.
BEGIN
EXECUTE IMMEDIATE
'
CREATE OR REPLACE AND COMPILE JAVA SOURCE NAMED "HelloWorld" AS
public final class HelloWorld {
public static String greet(final String userName) {
return "Hello " + userName;
}
}
';
END;
/
PL/SQL procedure successfully completed.
그러나 두 번째는 가져올 실패
내가 어떤 변화가 있는지 내가 로딩이에 오라클을 동축 케이블 만들 수 있습니다 궁금BEGIN
EXECUTE IMMEDIATE
'
CREATE OR REPLACE AND COMPILE JAVA SOURCE NAMED "HelloWorld" AS
import java.util.Arrays;
import java.util.List;
public final class LoopingTest {
public static String greet(final String userName) {
final List<String> emptyList = Arrays.asList(userName);
for (final String string : emptyList) {
System.out.println(string);
}
return "Hello " + userName;
}
}
';
END;
/
ERROR at line 1:
ORA-29536: badly formed source: Encountered "final String string :" at line 1,
column 195.
.
loadjava를 사용하는 것이 가져올 수있는 유일한 방법 인 경우 받아 들일 수 있지만 가능하면 한 단계 DDL로로드하는 것이 좋습니다. 감사합니다
11gR2 (1.5.0_51)에서는 전체 오류 메시지가 예상대로 일반 '문자열'을 나열하지 않지만 '최종 문자열'을 좋아하지 않는 것으로 보입니다. '키워드가 삭제되었습니다. 지금 당장 12c에서 검사 할 수 없네. 너도 마찬가지야? –
감사합니다. @AlexPoole 재미 있습니다. 최종 키워드를 없애면 슬프지만 실용적인 타협이 될 수 있습니다. 나는 몇 시간 동안 내 컴퓨터에서 떨어져 있지만, 12c가 11g와 똑같은지 여부를 확인합니다. – alexgibbs
@AlexPoole 물론, 12c에서도 성공적으로로드하기 위해 필요한 유일한 변경은 'final'한정자를 루프에 놓는 것입니다. 내가 '최종'에서 약간 당혹스러워서 문제를 일으킨다는 사실은 분명하지만, 왜 여기서 '최종'이 지원되지 않는지에 대한 흥미로운 배경이 있습니다.이 장애물을 없애줍니다. 근원적 인 원인에 대한 해답과 가능한 길을 전하는 것으로 받아 들일 것입니다. 봐 주셔서 감사합니다. – alexgibbs