programing

생성된 저장 프로시저 실패

javamemo 2023. 11. 6. 21:35
반응형

생성된 저장 프로시저 실패

이것이 코드입니다.

CREATE TABLE `church` (
  `ID` int(10) UNSIGNED NOT NULL,
  `StudentID` int(11) NOT NULL,
  `semesterID` int(11) NOT NULL,
  `attendedWed` int(11) NOT NULL,
  `attendedFri` int(11) NOT NULL,
  `attendedSabM` int(11) NOT NULL,
  `attendedSabE` int(11) NOT NULL,
  `ChurchScore` double(10,2) GENERATED ALWAYS AS ((((((`attendedWed` + `attendedFri`) + `attendedSabM`) + `attendedSabE`) * 100) / 60)) STORED
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

이것은 오류입니다.

작업 실패:SQL 스크립트를 데이터베이스에 적용하는 동안 오류가 발생했습니다.실행 중: ALTER TABLEcitizenshipgroup3.church열 변경ChurchScore ChurchScoreDUBLE(10,2) NULL DefaultattendedWed;

오류 1064:SQL 구문에 오류가 있습니다. MariaDB 서버 버전에 해당하는 설명서에서 '근처에 사용할 올바른 구문을 확인하십시오.attendedWed' 2행 SQL 문: ALTER TABLEcitizenshipgroup3.church열 변경ChurchScore ChurchScoreDUBLE(10,2) NULL DefaultattendedWed

당신의 구문은 괜찮습니다.문제는 MySQL이 생성된 열을 5.7까지 지원하지 않는다는 것입니다.아마도 이전 버전을 사용하고 있을 것입니다.

아마도 가장 간단한 해결책은 계산을 위해 뷰를 사용하는 것일 것입니다.

다음 시간에 오류가 나타납니다.ALTER TABLE, 열을 수정하려고 할 때ChurchScore세팅하기DEFAULT다른 열을 포함하는 식의 값attendedWed.

또한 당신의 오류 메시지는 MySQL이 아닌 MariaDB에서 온 것 같습니다.

Mariadb 설명서에서:

MariaDB 10.2.1부터는 DEFAULT에서 대부분의 함수를 사용할 수 있습니다. 표현식에는 괄호가 있어야 합니다.DEFAULT에서 비결정론적 함수를 사용하면 테이블에 대한 모든 삽입이 행 모드로 복제됩니다.DEFAULT 식에서 이전 열을 참조할 수도 있습니다.

CREATE TABLE t1 (a int DEFAULT (1+1), b int DEFAULT (a+1));
CREATE TABLE t2 (a bigint primary key DEFAULT UUID_SHORT());

따라서 다음과 같은 몇 가지 사항을 보장해야 합니다.

  1. MariaDB 버전을 10.2.1 이상으로 업그레이드합니다.최신 버전으로 업그레이드하는 것이 좋습니다(현재 10.3+입니다).
  2. 에 지정된 표현 주위에 괄호를 사용해야 합니다.DEFAULT

그래서.ALTER TABLE문장은 다음과 같습니다.

ALTER TABLE `citizenshipgroup3`.`church` 
CHANGE COLUMN `ChurchScore` `ChurchScore` DOUBLE(10,2) NULL 
DEFAULT (attendedWed) ;

언급URL : https://stackoverflow.com/questions/53467871/failed-generated-stored-procedure

반응형