때때로 함수에 대한 두 호출 사이에 보관되거나 다른 함수 간에 공유되는 전역 데이터를 갖는 것이 유용할 수 있습니다. 이는 PL/윈 토토에서 쉽게 수행되지만 이해해야 할 몇 가지 제한 사항이 있습니다.
보안상의 이유로 PL/윈 토토은 해당 역할에 대한 별도의 윈 토토 해석기에서 하나의 SQL 역할에 의해 호출되는 함수를 실행합니다. 이는 한 사용자가 다른 사용자의 PL/윈 토토 기능 동작을 우발적으로 또는 악의적으로 간섭하는 것을 방지합니다. 이러한 각 통역사는 모든 항목에 대해 고유한 값을 갖습니다.“글로벌”윈 토토 변수. 따라서 두 PL/윈 토토 함수는 동일한 SQL 역할에 의해 실행되는 경우에만 동일한 전역 변수를 공유합니다. 단일 세션이 여러 SQL 역할에서 코드를 실행하는 애플리케이션에서(via보안 정의자함수, 사용역할 설정등) PL/윈 토토 함수가 데이터를 공유할 수 있도록 명시적인 조치를 취해야 할 수도 있습니다. 그러기 위해서는 통신해야 하는 기능이 동일한 사용자의 소유인지 확인하고 표시하세요.보안 정의자. 물론 이러한 기능을 사용하여 의도하지 않은 작업을 수행할 수 없도록 주의해야 합니다.
세션에 사용되는 모든 PL/윈 토토U 함수는 동일한 윈 토토 해석기에서 실행됩니다. 이는 물론 PL/윈 토토 함수에 사용되는 해석기와는 다릅니다. 따라서 전역 데이터는 PL/윈 토토U 기능 간에 자동으로 공유됩니다. 모든 PL/윈 토토U 기능은 동일한 신뢰 수준, 즉 데이터베이스 수퍼유저의 신뢰 수준에서 실행되므로 이는 보안 위험으로 간주되지 않습니다.
PL/Tcl 기능이 의도하지 않게 서로 간섭하는 것을 방지하기 위해 다음을 통해 각 기능에 전역 배열을 사용할 수 있습니다.upvar명령. 이 변수의 전역 이름은 함수의 내부 이름이고, 로컬 이름은GD. 다음을 권장합니다.GD함수의 영구 개인 데이터에 사용됩니다. 여러 함수 간에 공유하려는 값에 대해서만 일반 윈 토토 전역 변수를 사용하세요. (참고GD배열은 특정 인터프리터 내에서만 전역이므로 위에서 언급한 보안 제한 사항을 우회하지 않습니다.)
사용예GD에 나타남spi_execp아래 예.