2017-12-23 42 views
0

Oracle 모드에서 H2를 사용하고 있습니다. 테이블 foobar 열을 추가하고 값으로 채 웠습니다. 이제 돌아가서 열에 NOT NULL 제약 조건을 부여하고 싶습니다.H2는 Oracle 구문을 사용하여 NOT NULL 제약 조건 테이블 열을 추가하기 위해 지원됩니다.

ALTER TABLE foo ALTER COLUMN bar NOT NULL; 

H2는 Unknown data type: "NOT" …, 저에게 말한다 : ALTER TABLE에 대한 몇 가지 old Oracle docs 보면

, 내가 처음이 시도.

그래서 나는 ALTER TABLE 구문에 대한 몇 가지 more recent Oracle documentation에서보고,이 시도 :

ALTER TABLE foo MODIFY (bar VARCHAR2(255) NOT NULL); 

(내가 유형을 변경하지 않아도됩니다 만, 생산 다이어그램이 필요한 것을 나타내는 것 같다. 내가 잘못 여기서 뭐하는 거지 H2는 저에게 말한다

, Syntax error in SQL statement "ALTER TABLE FOO MODIFY ([*]BAR VARCHAR2(255) NOT NULL) " …

?이 H2의 오라클 모드의 버그인가, 또는 (가능성이) 나는 구문 중요한 뭔가를 놓친 거지? (실제로 시도하지 않은 그것 Orac에 르,하지만 나는 오라클 모드에서 H2에서 지원할 수있는 기본적인 것을 찾았습니다.)

사람들은 질문을 읽어보십시오!오라클 구문을 원합니다. 예, H2에 대해 테스트하고 있습니다. H2가 Oracle 구문을 지원하는지 여부를 알고 싶습니다. H2 구문을 말해 주면 H2가 Oracle 구문을 지원하는지 어떻게 알 수 있습니까 ??

+1

H2를 사용하는 경우 오라클 설명서가 아닌 [H2 매뉴얼] (http://h2database.com/html/grammar.html)을 읽어야합니다. "오라클 모드"는 매우 기본적인 오라클 구문 부분 만 시뮬레이트합니다. 그것은 H2가 오라클처럼 행동하지 못하게합니다. –

+0

우리는 오라클처럼 행동하기를 원합니다. 오라클 모드에서 오라클과 같지 않은 경우 티켓을 제출하고 H2를 수정하는 데 리소스를 사용하여 오라클 모드에서 Oracle처럼 작동합니다. 질문은 : 위에서 제공된 SQL 명령 중 어느 것이 유효한 Oracle 구문인지? SQL을 망쳤거나 H2가이 구문을 지원하지 않기 때문에 작동하지 않습니까? (예, H2 매뉴얼을 읽을 것이지만 정확한 오라클 신택스가 있는지 명확히하고 싶습니다.) –

+0

이것은 이해가되지 않습니다. 왜 오라클을 사용하지 않습니까? –

답변

1

올바른 syntax for Oracle 12.2처럼 간다 검색어 :

ALTER TABLE foo MODIFY (bar VARCHAR2(255) NOT NULL); 

그러나 명령문은 외부 괄호없이 Oracle에 대해 올바르게 실행됩니다.이 괄호는 사용자가 계속할 수있는 H2에서도 작동합니다. github issue #694에 대해 pull request #703 수정 사항을 추가했습니다.

+0

이것은 훌륭한 답변의 모델입니다! 권위있는 참조를 사용하여 올바른 구문을 제공했습니다. 해결 방법을 제공했습니다. 앞으로 귀하가 더 나은 일을 할 수 있도록 H2에 대한 요청을 제출했습니다. 당신은 내가하고 싶은 것을 정말로하고 싶었는지에 대해 나와 논쟁하지 않았습니다. 귀하는 짧고 적절한 시점에 링크를 적절하게 제공했습니다. 나는 무엇을 더 요구할 수 있 었는가? 대단히 감사합니다 !! 나는이 질문에 현상금을 추가하여 당신에게 수여 할 것입니다. 즐거운 휴일! –

+0

종류의 의견을 보내 주셔서 감사합니다! –

0

괄호 밖으로 떠나보십시오 :

ALTER TABLE foo MODIFY bar VARCHAR2(255) NOT NULL; 
+0

그러나 https://docs.oracle.com/cd/B28359_01/server.111/b28286/statements_3001.htm#SQLRF01001의 Oracle Production 다이어그램은 괄호가 필요하다는 것을 나타 냅니까? –

2

내가 H2를 못하는,하지만 순수 오라클에 당신이에 명시된대로

SQL> create table foo (bar varchar2(255)); 

Table created. 

SQL> alter table foo modify bar not null; 

Table altered. 

SQL>