Perl 기능에서 데이터베이스 자체에 대한 액세스는 다음 기능을 통해 수행 할 수 있습니다.
SPI_EXEC_QUERY
(쿼리
[,Limit
])
SPI_EXEC_QUERY
SQL 명령을 실행하고 해시 참조 배열에 대한 참조로 전체 행 설정을 반환합니다. 만약에Limit
지정되어 있고 0보다 크면SPI_EXEC_QUERY
최대 검색Limit
행, 쿼리에 a가 포함 된 것처럼Limit
절. 생략Limit
또는 0으로 지정하면 행 제한이 없습니다.
결과 세트가 비교적 작다는 것을 알고있을 때만이 명령을 사용해야합니다.다음은 쿼리의 예입니다 (select
명령) 선택의 최대 행 수와 함께 :
$ rv = spi_exec_query ( 'select * from my_table', 5);
이것은 테이블에서 최대 5 행을 반환합니다my_table
. 만약에my_table
열이 있습니다my_column
, 당신은 그 값을 행에서 얻을 수 있습니다$ i
다음과 같은 결과의 :
$ foo = $ rv- rows [$ i]- my_column;
a에서 반환 된 총 행 수select
쿼리에 액세스 할 수 있습니다.
$ nrows = $ rv- processed
113PostgreSQL : 문서 : 15 : 45.3.내장 기능95
$ query = "my_table 값에 삽입 (1, 'test')";
그런 다음 명령 상태에 액세스 할 수 있습니다 (예 :SPI_OK_INSERT
) :
$ res = $ rv- status;
영향을받는 행의 수를 얻으려면 :
$ nrows = $ rv- processed;
여기에 완전한 예가 있습니다 :
테이블 테스트 생성 (
SPI_QUERY (명령
)
spi_fetchrow (커서
)
SPI_CURSOR_CLOSE (커서
)
SPI_QUERY
andspi_fetchrow
큰 줄 세트 또는 도착 할 때 행을 반환하려는 경우에 쌍으로 쌍으로 협력하십시오.spi_fetchrow
Works전용withSPI_QUERY
. 다음 예는 함께 사용하는 방법을 보여줍니다.
foo_type 타입 생성 (the_num integer, the_text 텍스트);
정상적으로,spi_fetchrow
반환 될 때까지 반복해야합니다undef
, 더 이상 읽을 행이 없음을 나타냅니다. 커서는SPI_QUERY
spi_fetchrow
반환undef
. 모든 행을 읽고 싶지 않다면 대신 전화SPI_CURSOR_CLOSE
커서를 제거합니다. 그렇게하지 않으면 메모리 누출이 발생합니다.
SPI_PREPARE (명령
,인수 유형
)
spi_query_prepared (plan
,인수
)
spi_exec_prepared (plan
[,속성
],인수
)
spi_freeplan (plan
)
SPI_PREPARE
,SPI_QUERY_PREPARED
,spi_exec_prepared
및SPI_FreePlan
동일한 기능을 구현하지만 준비된 쿼리의 경우SPI_PREPARE
번호가 매겨진 인수 자리 표시 자 ($ 1, $ 2 등)와 인수 유형의 문자열 목록이있는 쿼리 문자열을 수락합니다.
$ plan = spi_prepare ( '선택 *에서 id $ 1 및 name = $ 2',
일단 쿼리 계획이 전화로 준비되면SPI_PREPARE
, 계획은 문자열 쿼리 대신에 사용할 수 있습니다.spi_exec_prepared
, 결과는 반환 된 것과 동일합니다SPI_EXEC_QUERY
또는 inSPI_QUERY_PREPARED
정확히 커서를 반환합니다SPI_QUERY
DOS, 나중에 전달할 수 있습니다spi_fetchrow
. 선택적인 두 번째 매개 변수spi_exec_prepared
속성에 대한 해시 참조입니다. 현재 지원되는 유일한 속성은입니다.Limit
, 쿼리에서 반환 된 최대 행 수를 설정합니다. 생략Limit
또는 0으로 지정하면 행 제한이없는 결과가 없습니다.
준비된 쿼리의 장점은 하나 이상의 쿼리 실행에 하나의 준비된 계획을 사용할 수 있다는 것입니다. 계획이 더 이상 필요하지 않은 후에는로 해방 될 수 있습니다.SPI_FreePlan
:
함수 생성 또는 교체 init ()는 void를 $$로 반환합니다
매개 변수 첨자SPI_PREPARE
| $ 1, $ 2, $ 3 등을 통해 정의되므로 쿼리 문자열을 이중 인용구로 선언하지 않아 쉽게 캐치 어려운 버그로 이어질 수 있습니다.
다른 예제는 옵션 매개 변수의 사용법을 보여줍니다spi_exec_prepared
:
선택 ID, ( '192.168.1.'|| id)로 테이블 호스트를 작성하십시오
spi_commit ()
spi_rollback ()
현재 거래를 커밋하거나 롤백하십시오. 절차 또는 익명 코드 블록 (에서만 호출 할 수 있습니다.do
명령) 최상위에서 호출됩니다. (SQL 명령을 실행할 수는 없습니다커밋
또는롤백
viaSPI_EXEC_QUERY
또는 이와 유사합니다. 이 기능을 사용하여 수행해야합니다.) 트랜잭션이 종료 된 후 새 트랜잭션이 자동으로 시작되므로 별도의 기능이 없습니다..
여기 예입니다.
절차 생성 트랜잭션 _test1 ()
elog (레벨
,msg
)
로그 또는 오류 메시지를 방출합니다. 가능한 레벨은디버그
,log
,정보
,통지
,경고
및오류
.오류
오류 조건을 제기합니다. 주변 Perl 코드에 의해 갇히지 않으면 오류가 호출 쿼리로 전파되어 현재 트랜잭션 또는 서브 트랜잭션이 중단됩니다.다이
명령. 다른 수준은 우선 순위가 다른 메시지 만 생성합니다.log_min_messages및client_min_messages구성 변수. 보다범퍼카 토토 : 문서 : 15 : CHAPTER 20. 서버 구성자세한 내용은
quote_literal (String
)
주어진 토토 결과을 SQL 문 토토 결과에서 토토 결과 문자로 사용하도록 적절하게 인용합니다. 내장 단일 크기와 백 슬래시가 제대로 두 배가됩니다.QUOTE_LITERAL
Undef 입력에서 Undef를 반환합니다. 논쟁이 undef 일 수 있다면QUOTE_NULLABLE
종종 더 적합합니다.
QUOTE_NULLABLE (String
)
주어진 문자열을 SQL 문 문자열에서 문자열 문자로 사용하기에 적절하게 인용 한 주어진 문자열을 반환합니다. 또는 인수가 undef 인 경우 인용되지 않은 문자열 "NULL"을 반환하십시오.
quote_ident (String
)
주어진 문자열을 SQL 문 문자열에서 식별자로 사용하도록 적절하게 인용 한 주어진 문자열을 반환합니다. 따옴표는 필요한 경우에만 추가됩니다 (즉, 문자열에 비 식별자 문자가 포함되어 있거나 케이스 폴드가있는 경우).
decode_bytea (String
)
지정된 문자열의 내용으로 표시되는 이스케이프 이진 데이터를 반환합니다.BYTEA
인코딩.
encode_bytea (String
)
반환BYTEA
주어진 토토 결과의 이진 데이터 내용의 인코딩 된 형태.
encode_array_literal (배열
)
encode_array_literal (배열
,Delimiter
)
참조 배열의 내용을 배열 문자형 형식의 문자열로 반환합니다 (참조섹션 8.15.2). 배열에 대한 참조가 아닌 경우 인수 값을 변경하지 않으면 반환합니다.,
"구분 기자가 지정되지 않았거나 undef 인 경우
encode_typed_literal (value
,typename
)
Perl 변수를 두 번째 인수로 전달 된 데이터 유형의 값으로 변환 하고이 값의 문자열 표현을 반환합니다. 중첩 어레이 및 복합 유형의 값을 올바르게 처리합니다.
encode_array_constructor (배열
)
참조 배열의 내용을 배열 생성자 형식의 문자열로 반환합니다 (참조섹션 4.2.12). 개별 값은를 사용하여 인용합니다.QUOTE_NULLABLE
. 인용 된 인용 인용 인용 인수 값을 반환합니다.QUOTE_NULLABLE
, 배열에 대한 참조가 아닌 경우.
Look_Ike_number (String
)
주어진 문자열의 내용이 숫자처럼 보이는 경우 true 값을 반환합니다. Perl에 따르면 그렇지 않으면 False를 반환합니다. 인수가 undef 인 경우 undef를 반환합니다.inf
andInfinity
숫자로 간주됩니다.
is_array_ref (인수
)
주어진 인수가 배열 참조로 취급 될 수있는 경우, 즉 인수의 Ref가 인 경우 진정한 값을 반환합니다.배열
또는토토 결과 :: inserver :: array
. 그렇지 않으면 거짓을 반환합니다.
문서에 올바른 것이 없으면 일치하지 않습니다.이 양식문서 문제를보고하려면