다음 규칙은 SPI(또는 기타 C 함수)를 사용하는 함수의 데이터 변경 가시성을 관리합니다.
SQL 명령을 실행하는 동안 명령에 의해 이루어진 모든 데이터 변경 사항은 명령 자체에 보이지 않습니다. 예를 들어, 다음과 같습니다:
SELECT * FROM a에 삽입;
삽입된 행은 다음에 보이지 않습니다.선택부분.
C 명령에 의한 변경 사항은 C 내부에서 시작되었는지(C 실행 중) 또는 C가 완료된 후에 시작되었는지에 관계없이 C 이후에 시작되는 모든 명령에 표시됩니다.
SQL 명령(일반 함수 또는 트리거)에 의해 호출되는 함수 내에서 SPI를 통해 실행되는 명령은 SPI에 전달된 읽기/쓰기 플래그에 따라 위 규칙 중 하나를 따릅니다. 읽기 전용 모드에서 실행되는 명령은 첫 번째 규칙을 따릅니다. 호출 명령의 변경 사항을 볼 수 없습니다. 읽기-쓰기 모드에서 실행되는 명령은 두 번째 규칙을 따릅니다. 즉, 지금까지 변경된 모든 내용을 볼 수 있습니다.
모든 표준 절차적 언어는 함수의 변동성 속성에 따라 SPI 읽기-쓰기 모드를 설정합니다. 명령안정적그리고불변기능은 읽기 전용 모드에서 수행되지만 다음 명령은휘발성기능은 읽기-쓰기 모드에서 수행됩니다. C 함수 작성자가 이 규칙을 위반할 수 있지만 그렇게 하는 것은 좋은 생각이 아닐 것입니다.
다음 섹션에는 이러한 규칙의 적용을 보여주는 예가 포함되어 있습니다.