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
다음은 다른 명령 유형을 사용하는 예입니다.
$ query = "my_table 값에 삽입 (1, 'test')"; $ rv = spi_exec_query ($ query);
그런 다음 명령 상태에 액세스 할 수 있습니다 (예 :SPI_OK_INSERT
) :
$ res = $ rv- status;
영향을받는 행의 수를 얻으려면 :
$ nrows = $ rv- processed;
여기에 완전한 예가 있습니다 :
테이블 테스트 생성 ( 나는 int, v varchar ); 테스트에 삽입 (i, v) 값 (1, 'First Line'); 테스트에 삽입 (i, v) 값 (2, '두 번째 줄'); 테스트에 삽입 (i, v) 값 (3, '세 번째 줄'); 테스트에 삽입 (i, v) 값 (4, '불멸'); 함수 생성 또는 교체 test_munge () setof test를 $$로 반환합니다. my $ rv = spi_exec_query ( 'select i, v test;'); 내 $ 상태 = $ rv- status; my $ nrows = $ rv- proceded; foreach my $ rn (0 .. $ nrows -1) 내 $ row = $ rv- rows [$ rn]; 정의 된 경우 $ row- i += 200 ($ row- i); $ row- v = ~ tr/a-za-z/a-za-z/if (정의 ($ row- v)); return_next ($ 행); Undef를 반환하십시오. $$ 언어 plperl; 선택 *에서 test_munge ();에서 선택하십시오.
SPI_QUERY (명령
)
spi_fetchrow (커서
)
SPI_CURSOR_CLOSE (커서
)
SPI_QUERY
andspi_fetchrow
큰 줄 세트 또는 행이 도착할 때 줄을 반환하려는 경우 쌍으로 함께 작업하십시오.spi_fetchrow
Works전용withSPI_QUERY
. 다음 예는 함께 사용하는 방법을 보여줍니다.
foo_type 유형 생성 (the_num integer, the_text 텍스트); 함수 생성 또는 교체 lota_md5 (정수) foo_type를 $$로 설정합니다. 다이제스트 사용 :: MD5 QW (MD5_HEX); 내 $ file = '/usr/share/dict/words'; 내 $ t = localtime; elog (통지, "$ t에서 $ 파일 열기"); 내 $ fh, '<', $ 파일 # ooh, 파일 액세스 권한입니다! 또는 elog (오류, "읽기를 위해 $ 파일을 열 수 없습니다 : $!"); 내 @words = <$ fh; 닫기 $ FH; $ t = LocalTime; elog (통지, "닫힌 파일 $ 파일 at $ t"); chomp (@words); 내 $ 행; my $ sh = spi_query ( "select * from generate_series (1, $ _ [0])로 b (a)"); while (정의 ($ row = spi_fetchrow ($ sth))) return_next ( the_num = $ row- a, the_text = md5_Hex ($ word [rand @words]) ); 반품; $$ 언어 plperlu; lota_md5 (500)에서 *를 선택하십시오.
정상,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를 $$로 반환합니다 $ _shared my_plan = spi_prepare ( 'select (now (now () + $ 1) :: 날짜와 같이 날짜', '간격'); $$ 언어 plperl; 함수 생성 또는 교체 add_time (간격) 텍스트를 $$로 반환합니다. 반환 spi_exec_prepared ( $ _shared my_plan, $ _ [0] )- rows- [0]- now; $$ 언어 plperl; function doid ()를 작성하거나 바꾸십시오 spi_freeplan ($ _shared my_plan); undef $ _shared my_plan; $$ 언어 plperl; init (); add_time ( '1 일'), add_time ( '2 일'), add_time ( '3 일')을 선택하십시오. select done (); add_time | add_time | add_time ------------+------------+------------ 2005-12-10 | 2005-12-11 | 2005-12-12
매개 변수 첨자SPI_PREPARE
| $ 1, $ 2, $ 3 등을 통해 정의되므로, 쿼리 문자열을 이중 인용구로 선언하지 않아서 쉽게 캐치하기 어려운 버그로 이어질 수 있습니다.
다른 예제는 선택적 매개 변수의 사용법을 보여줍니다spi_exec_prepared
:
select id, ( '192.168.1.'|| id) :: inet으로 테이블 호스트를 작성하십시오 Generate_Series (1,3)에서 ID로; function init_hosts_query () 함수를 만들거나 바꾸십시오 $ _shared plan = spi_prepare ( 'select * from hosts 여기서 주소 << $ 1 ','inet '); $$ 언어 plperl; 함수 생성 또는 교체 반환 spi_exec_prepared ( $ _shared plan, limit = 2, $ _ [0] )- rows; $$ 언어 plperl; 함수 release_hosts_query ()를 만들거나 바꾸십시오 spi_freeplan ($ _ shared plan); undef $ _shared plan; $$ 언어 plperl; init_hosts_query ()를 선택하십시오. select query_hosts ( '192.168.1.0/30'); 릴리스 릴리 _hosts_query (); query_hosts ------------------ (1,192.168.1.1) (2,192.168.1.2) (2 줄)
spi_commit ()
spi_rollback ()
현재 트랜잭션을 커밋하거나 롤백합니다. 절차 또는 익명 코드 블록 (에서만 호출 할 수 있습니다.do
명령) 최상위에서 호출되었습니다. (SQL 명령을 실행할 수는 없습니다커밋
또는롤백
viaSPI_EXEC_QUERY
또는 이와 유사합니다. 이 기능을 사용하여 수행해야합니다.) 트랜잭션이 종료 된 후 새 트랜잭션이 자동으로 시작되므로 별도의 기능이 없습니다..
예는 다음과 같습니다.
프로 시저 생성 트랜잭션 _test1 () 언어 plperl $$로 foreach my $ i (0..9) SPI_EXEC_QUERY ( "Test1 (a) 값 ($ i)"에 삽입); if ($ i % 2 == 0) spi_commit (); 또 다른 spi_rollback ();
elog (레벨
, msg
)
로그 또는 오류 메시지를 방출합니다. 가능한 레벨은디버그
, log
, info
, 통지
, 경고
및오류
. 오류
오류 조건을 제기합니다. 주변 Perl 코드에 의해 갇히지 않으면 오류가 호출 쿼리로 전파되어 현재 트랜잭션 또는 서브 트랜잭션이 중단됩니다. 이것은 사실상 perl과 동일합니다다이
명령. 다른 수준은 우선 순위가 다른 메시지 만 생성합니다. 특정 우선 순위의 메시지가 클라이언트에게보고되었는지, 서버 로그에 기록되었는지 또는 둘 다에 의해 제어되는지log_min_messagesandclient_min_messages구성 변수. 보다배트맨 토토 : 문서 : 11 : 19 장. 서버 구성자세한 내용은
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
및Infinity
숫자로 간주됩니다.
is_array_ref (인수
)
주어진 인수가 배열 참조로 취급 될 수있는 경우, 즉 인수의 Ref가 인 경우 진정한 값을 반환합니다.배열
또는사설 토토 사이트 :: inserver :: array
. 그렇지 않으면 거짓을 반환합니다.