다음 기능을 통해 Perl 기능에서 데이터베이스 자체에 접근할 수 있습니다:
spi_exec_query(질의 [, 한계]) spi_exec_querySQL 명령을 실행하고 전체 행 세트를 해시 참조 배열에 대한 참조로 스포츠 토토 사이트. 만일한계이 지정되고 0보다 큰 경우spi_exec_query최대 검색한계행, 마치 쿼리에 다음이 포함된 것처럼한도절. 생략한계또는 0으로 지정하면 행 제한이 없습니다.
결과 집합이 상대적으로 작을 것이라는 것을 알 때에만 이 명령을 사용해야 합니다.다음은 쿼리의 예입니다(선택명령)을 선택적 최대 행 수로 사용:
$rv = spi_exec_query('SELECT * FROM my_table', 5);
이것은 테이블에서 최대 5개의 행을 스포츠 토토 사이트.my_table. 만일my_table열이 있습니다my_column, 행에서 해당 값을 얻을 수 있습니다.$i다음과 같은 결과:
$foo = $rv-행[$i]-my_column;
a에서 반환된 총 행 수선택쿼리는 다음과 같이 액세스할 수 있습니다:
$nrows = $rv-처리됨
다음은 다른 명령 유형을 사용하는 예입니다:
$query = "my_table 값에 삽입(1, 'test')"; $rv = spi_exec_query($query);
그런 다음 명령 상태에 액세스할 수 있습니다(예:SPI_OK_INSERT) 이렇게 합니다:
$res = $rv-상태;
영향을 받은 행 수를 얻으려면 다음을 수행하십시오:
$nrows = $rv-처리됨;
다음은 완전한 예입니다:
테이블 생성 테스트(
나는 int,
v varchar
);
INSERT INTO test (i, v) VALUES (1, '첫 번째 줄');
INSERT INTO test (i, v) VALUES (2, '두 번째 줄');
INSERT INTO test (i, v) VALUES (3, '세 번째 줄');
INSERT INTO 테스트(i, v) VALUES(4, '불멸');
함수 생성 또는 교체 test_munge()는 SETOF 테스트를 $$로 반환합니다.
my $rv = spi_exec_query('테스트에서 i, v 선택;');
내 $status = $rv-상태;
내 $nrows = $rv-처리됨;
foreach 내 $rn (0 .. $nrows - 1)
내 $row = $rv-행[$rn];
$row-i += 정의된 경우 200($row-i);
$row-v =~ tr/A-Za-z/a-zA-Z/ if (defined($row-v));
return_next($행);
undef를 반환;
$$ 언어 plperl;
SELECT * FROM test_munge();
spi_query(명령) spi_fetchrow(커서) spi_cursor_close(커서) spi_query그리고spi_fetchrow큰 행 세트에 대해 또는 행이 도착할 때 반환하려는 경우에 대해 쌍으로 함께 작업합니다.spi_fetchrow작동만와spi_query. 다음 예에서는 이를 함께 사용하는 방법을 보여줍니다.
CREATE TYPE foo_type AS (the_num INTEGER, the_text TEXT);
함수 만들기 또는 바꾸기 lota_md5(INTEGER)는 SETOF foo_type을 $$로 반환합니다.
Digest::MD5 qw(md5_hex)를 사용하십시오.
내 $file = '/usr/share/dict/words';
내 $t = 현지 시간;
elog(NOTICE, "$t에서 $file 파일 열기" );
open my $fh, '<', $file # 오, 파일 접근이군요!
또는 elog(ERROR, "읽기 위해 $file을 열 수 없습니다: $!");
내 @words = <$fh;
$fh 닫기;
$t = 현지시간;
elog(NOTICE, "$t에서 $file 파일을 닫았습니다.");
씹어먹다(@words);
내 $행;
my $sth = spi_query("SELECT * FROM generate_series(1,$_[0]) AS b(a)");
while (정의됨 ($row = spi_fetchrow($sth)))
return_next(
the_num = $행-a,
the_text = md5_hex($words[rand @words])
);
반환;
$$ 언어 plperlu;
lotsa_md5(500)에서 * 선택;
보통은,spi_fetchrow반환될 때까지 반복되어야 함undef, 더 이상 읽을 행이 없음을 나타냅니다. 에서 반환된 커서spi_query다음 경우에 자동으로 해제됩니다.spi_fetchrow반환undef. 모든 행을 읽지 않으려면 대신 호출하십시오.spi_cursor_close커서를 해제합니다. 그렇지 않으면 메모리 누수가 발생합니다.
spi_prepare(명령, 인수 유형) spi_query_prepared(계획, 인수) spi_exec_prepared(계획 [, 속성], 인수) spi_freeplan(계획) spi_prepare, spi_query_prepared, spi_exec_prepared및spi_freeplan동일한 기능을 구현하지만 준비된 쿼리에 대해 구현합니다.spi_prepare번호가 지정된 인수 자리 표시자($1, $2 등)가 있는 쿼리 문자열과 인수 유형의 문자열 목록을 허용합니다.
$plan = spi_prepare('SELECT * FROM test WHERE id $1 AND name = $2',
'INTEGER', 'TEXT');
다음 호출을 통해 쿼리 계획이 준비되면spi_prepare, 문자열 쿼리 대신 계획을 사용할 수 있습니다.spi_exec_prepared, 여기서 결과는에서 반환된 것과 동일합니다.spi_exec_query또는spi_query_prepared이것은 정확히 다음과 같이 커서를 반환합니다.spi_query나중에 전달될 수 있음spi_fetchrow. 선택적 두 번째 매개변수는spi_exec_prepared은 속성의 해시 참조입니다. 현재 지원되는 유일한 속성은한계, 쿼리에서 반환되는 최대 행 수를 설정합니다. 생략한계또는 0으로 지정하면 행 제한이 없습니다.
준비된 쿼리의 장점은 하나 이상의 쿼리 실행에 하나의 준비된 계획을 사용할 수 있다는 것입니다. 계획이 더 이상 필요하지 않으면 다음을 사용하여 해제할 수 있습니다.spi_freeplan:
함수 생성 또는 교체 init()가 $$로 VOID를 반환합니다.
$_SHAREDmy_plan = spi_prepare('SELECT (now() + $1)::date AS now',
'간격');
$$ 언어 plperl;
함수 생성 또는 교체 add_time( INTERVAL )은 텍스트를 $$로 반환합니다.
spi_exec_prepared를 반환(
$_SHARED내_계획,
$_[0]
)-행-[0]-지금;
$$ 언어 plperl;
함수 만들기 또는 바꾸기 done()은 $$로 VOID를 반환합니다.
spi_freeplan( $_SHAREDmy_plan);
undef $_SHAREDmy_plan;
$$ 언어 plperl;
선택 초기화();
SELECT add_time('1일'), add_time('2일'), add_time('3일');
선택 완료();
추가_시간 | 추가_시간 | add_time
------------+------------+------------
2005-12-10 | 2005-12-11 | 2005-12-12
다음 매개변수 아래 첨자에 유의하세요.spi_prepare는 $1, $2, $3 등을 통해 정의되므로 잡기 어려운 버그로 쉽게 이어질 수 있는 큰따옴표로 쿼리 문자열을 선언하지 마세요.
또 다른 예는 다음에서 선택적 매개변수의 사용을 보여줍니다.spi_exec_prepared:
CREATE TABLE 호스트 AS SELECT id, ('192.168.1.'||id)::inet AS 주소
FROM generate_series(1,3) AS id;
함수 생성 또는 교체 init_hosts_query()는 VOID를 $$로 반환합니다.
$_SHARED계획 = spi_prepare('SELECT * FROM 호스트
WHERE 주소 << $1', 'inet');
$$ 언어 plperl;
생성 또는 교체 기능 query_hosts(inet) SETOF 호스트를 $$로 반환합니다.
spi_exec_prepared를 반환(
$_SHARED계획,
한도 = 2,
$_[0]
)-행;
$$ 언어 plperl;
함수 생성 또는 교체 release_hosts_query()는 VOID를 $$로 반환합니다.
spi_freeplan($_SHARED계획);
undef $_SHARED계획;
$$ 언어 plperl;
SELECT init_hosts_query();
SELECT 쿼리_호스트('192.168.1.0/30');
SELECT release_hosts_query();
쿼리_호스트
-----------------
(1,192.168.1.1)
(2,192.168.1.2)
(2행)
spi_commit() spi_rollback() 현재 트랜잭션을 커밋하거나 롤백합니다. 이는 프로시저 또는 익명 코드 블록()에서만 호출할 수 있습니다.DO명령)이 최상위 수준에서 호출됩니다. (SQL 명령을 실행할 수 없다는 점에 유의하세요.커밋또는롤백경유spi_exec_query또는 유사합니다. 이 기능을 이용해서 해야 합니다.) 트랜잭션이 종료되면 자동으로 새로운 트랜잭션이 시작되므로 이에 대한 별도의 기능은 없습니다.
다음은 예입니다:
프로시저 생성 transaction_test1()
언어 plperl
AS $$
내 $i를 foreach (0..9)
spi_exec_query("test1에 삽입 (a) VALUES ($i)");
if ($i % 2 == 0)
spi_commit();
그렇지 않으면
spi_rollback();
elog(레벨, msg) 로그 또는 오류 메시지를 내보냅니다. 가능한 수준은 다음과 같습니다.디버그, 로그, 정보, 공지사항, 경고및오류. 오류오류 조건을 발생시킵니다. 이것이 주변 Perl 코드에 의해 트랩되지 않으면 오류가 호출 쿼리로 전파되어 현재 트랜잭션이나 하위 트랜잭션이 중단됩니다. 이는 사실상 Perl과 동일합니다.다이명령. 다른 수준은 서로 다른 우선순위 수준의 메시지만 생성합니다. 특정 우선순위의 메시지가 클라이언트에 보고되는지, 서버 로그에 기록되는지 또는 둘 다에 의해 제어되는지 여부는log_min_messages그리고client_min_messages구성 변수. 참조사설 토토 : 문서 : 12 : 19 장 서버 구성더 많은 정보를 원하시면.
quote_literal(문자열) SQL 문 문자열에서 문자열 리터럴로 사용되도록 적절하게 인용된 주어진 문자열을 반환합니다. 포함된 작은따옴표와 백슬래시는 적절하게 두 배가 됩니다. 참고하세요quote_literalundef 입력 시 undef를 반환합니다. 인수가 정의되지 않은 경우,quote_nullable종종 더 적합합니다.
quote_nullable(문자열) SQL 문 문자열에서 문자열 리터럴로 사용되도록 적절하게 인용된 주어진 문자열을 반환합니다. 또는 인수가 undef인 경우 인용되지 않은 문자열 "NULL"을 반환합니다. 삽입된 작은따옴표와 백슬래시는 적절하게 두 배가 됩니다.
quote_ident(문자열) SQL 문 문자열에서 식별자로 사용되도록 적절하게 인용된 주어진 문자열을 반환합니다. 따옴표는 필요한 경우에만 추가됩니다(즉, 문자열에 식별자가 아닌 문자가 포함되어 있거나 대소문자가 구분되는 경우). 삽입된 따옴표는 적절하게 두 배로 표시됩니다.
decode_bytea(문자열) 주어진 문자열의 내용으로 표시되는 이스케이프되지 않은 바이너리 데이터를 반환합니다.바이테아인코딩되었습니다.
encode_bytea(문자열) 반환바이테아주어진 문자열의 바이너리 데이터 콘텐츠의 인코딩된 형식입니다.
encode_array_literal(배열) encode_array_literal(배열, 구분자)참조된 배열의 내용을 배열 리터럴 형식의 문자열로 반환합니다(참조섹션 8.15.2). 배열에 대한 참조가 아닌 경우 인수 값을 변경하지 않고 반환합니다. 배열 리터럴 요소 사이에 사용되는 구분 기호의 기본값은 "입니다.," 구분 기호가 지정되지 않았거나 정의되지 않은 경우.
encode_typed_literal(값, 유형 이름) Perl 변수를 두 번째 인수로 전달된 데이터 유형의 값으로 변환하고 이 값의 문자열 표현을 반환합니다. 중첩된 배열과 복합 유형의 값을 올바르게 처리합니다.
encode_array_constructor(배열) 참조된 배열의 내용을 배열 생성자 형식의 문자열로 반환합니다(참조섹션 4.2.12). 개별 값은 다음을 사용하여 인용됩니다.quote_nullable. 다음을 사용하여 인용된 인수 값을 반환합니다.quote_nullable, 배열에 대한 참조가 아닌 경우.
looks_like_number(문자열) Perl에 따르면 주어진 문자열의 내용이 숫자처럼 보이면 참값을 반환하고, 그렇지 않으면 거짓을 반환합니다. 인수가 undef이면 undef를 반환합니다. 선행 및 후행 공백은 무시됩니다.정보그리고무한대숫자로 간주됩니다.
is_array_ref(인수) 주어진 인수가 배열 참조로 처리될 수 있는 경우, 즉 인수의 참조가 다음과 같은 경우 참값을 반환합니다.어레이또는스포츠 토토 사이트::InServer::ARRAY. 그렇지 않으면 false를 반환합니다.