스포츠 토토 9.2.24 문서 | ||||
---|---|---|---|---|
PostgreSQL : 문서 : 9.2 : 와이즈 토토 프로 시저 | up | 39 장.pl/pgsql-SQL절차 언어 | 다음 |
이 섹션에서는 일부 구현 세부 정보에 대해 설명합니다pl/pgsql사용자가 알고 있습니다.
a 내 SQL 문 및 표현식pl/pgsql함수는 변수를 참조 할 수 있습니다pl/pgsql쿼리 매개 변수를 대체합니다
foo (foo) 값 (foo)에 삽입;
첫 번째 발생foo해야합니다foo. 두 번째 발생은 a의 이름이어야합니다
참고 : 스포츠 토토9.0 이전 버전은 변수를 대체하려고합니다.
변수 이름은 구문 적으로 다르지 않기 때문입니다
dest에 삽입 (col) src에서 foo + bar를 선택하십시오.
여기,destandSRC테이블 이름이어야합니다.coldest11849_11857fooandbar합리적으로있을 수 있습니다SRC.
기본적으로pl/pgsql의지pl/pgsql어떤 해석
가장 간단한 솔루션은 변수 또는 열의 이름을 바꾸는 것입니다. 에이pl/pgsql당신보다 변수V_뭔가열이 없지만V_, 충돌은 없습니다
또는 대안 적으로 모호한 참조를 할 수 있습니다src.fooPostgre범퍼카 토토 : 문서 : 9.2 : PL/PG범퍼카 토토의 구조). 을 위한
<< 블록
여기block.foo변수를 의미합니다fooinSRC. 기능 매개 변수뿐만 아니라발견, can
때로는 모호한 모든 것을 고치는 것이 비현실적입니다pl/pgsql코드. 그러한 경우에 당신은 할 수 있습니다PL/PGSQLPL/PGSQL'sPostgreSQL9.0) 또는 테이블 열 (일부와 호환됩니다.Oracle).
시스템 전체 에서이 동작을 변경하려면plpgsql.variable_conflict오류,use_variable또는use_column(where오류공장 기본값입니다). 이 매개 변수pl/pgsql기능이지만 진술은 아닙니다pl/pgsql함수는 가능합니다
당신은 또한 기능별로 동작을 설정할 수도 있습니다
#variable_conflict 오류
이 명령은 작성된 함수에만 영향을 미칩니다.plpgsql.variable_conflict. 예는입니다.
함수 만들기 stamp_user (id int, 댓글 텍스트)를 $$로 반환합니다.
in업데이트명령,CURTIME,댓글및id함수를 참조합니다사용자그 이름의 열이 있습니다. 우리가 주목하십시오users.idin여기서테이블 열을 참조하는 조항. 그러나 우리는하지 않았다댓글업데이트구문 적 으로야하기 때문에사용자. 우리는 쓸 수 있습니다variable_conflict이런 식으로 설정 :
함수 만들기 stamp_user (id int, 댓글 텍스트) void를 $$로 반환합니다.
명령 문자열에서 변수 대체가 발생하지 않습니다execute또는 그 중 하나사용,섹션.
가변 대체는 현재에서만 작동합니다select,삽입,업데이트및삭제기본 SQL 엔진이기 때문에 명령executeit.
thepl/pgsql통역사pl/pgsql진술SQL표현 및SQL함수에 사용 된 명령은 그렇지 않습니다
각 표현 및SQL명령에서 처음 실행됩니다pl/pgsql통역사는 명령을 구문 분석하고 분석하여 a를 생성합니다SPI관리자SPI_PREPARE
함수. 후속 방문
pl/pgsql(또는 그 이상pl/pgsql가변 값)를 사용 할 수 있습니다제네릭그렇지 않은 계획pl/pgsql변수에 참조. 만약
때문에pl/pgsql저장pl/pgsql함수는 동일한 것을 참조해야합니다pl/pgsql execute진술 - 가격에
레코드 변수의 변이 성 특성은 다른 것을 제시합니다execute이 문제를 해결하는 데 사용할 수 있습니다
동일한 함수가 둘 이상의 트리거로 사용되는 경우pl/pgsql준비 및키발생하더라도
마찬가지로 다형성 인수 유형을 갖는 기능에는 a가 있습니다
Statement Caching은 때때로 놀라운 영향을 미칠 수 있습니다
함수 생성 logfunc1 (logtxt 텍스트)은 $$로 void를 반환합니다
and :
함수 생성 logfunc2 (logtxt 텍스트)는 void를 $$로 반환합니다
의 경우logfunc1
, ThePostgreSQLMain Parser는 알고 있습니다삽입'now'타임 스탬프,의 대상 열이기 때문에logtable
는 그 유형입니다. 따라서,'now'A로 변환됩니다타임 스탬프삽입는 분석 한 다음 모든 것에 사용됩니다logfunc1
now ()또는current_timestamp기능.
의 경우logfunc2
, The스포츠 토토메인 파서가합니다'now'텍스트문자열 포함now. 다음으로 현지인에게 임무를 수행하는 동안CURTIME, Thepl/pgsql인터프리터는이 문자열을 발사합니다타임 스탬프전화하여 타이핑text_out
및Timestamp_in
변환 기능.now ()함수는 여전히 더 나은 아이디어가 될 것입니다.