PostgreSQL 8.4를 사용하고 있으며 원하는 정수 배열을 전달할 수있는 일련의 함수를 작성하고 있습니다. dblink 연결 쿼리에 의해 평가됩니다.dblink 연결 쿼리에서 배열을 인수로 사용하면 오류 메시지가 표시됩니다.
--======= Create a function that accepts an array of Top(n) Books and outputs the results to a temp table =======--
CREATE OR REPLACE FUNCTION get_weblog_facts_dblink(VARIADIC l_spids integer[])
RETURNS setof weblog_fact AS
$BODY$
DECLARE
rec weblog_fact%rowtype;
BEGIN
FOR rec IN SELECT * FROM dblink('dbname=weblog_db port=5432 host=111.111.111.001 user=db_dev password=*****',
'SELECT
id_hash,
logfile_id_hash,
logentry_timestamp,
ip,
method,
uri,
status_code,
bytes_transfered,
time_taken,
referrer,
user_agent_type_id,
special_id,
content_title_id,
content_release_id,
asset_type_id,
encode_type_id,
licensor_id,
broker_id,
campaign_id,
subsidized,
country_code3,
city,
postal_code,
longitude,
latitude,
language_id,
user_id,
tag,
app_id,
app_seconds,
app_cached,
cdn_id,
resource_name
FROM weblog_fact WHERE special_id = any(' || array_to_string(l_spids, ',') || ')')
AS weblog(
id_hash character varying(40),
logfile_id_hash character varying(40),
logentry_timestamp timestamp(6) with time zone,
ip cidr,
method character varying,
uri character varying,
status_code integer,
bytes_transfered bigint,
time_taken bigint,
referrer character varying,
user_agent_type_id integer,
special_id bigint,
content_title_id bigint,
content_release_id bigint,
asset_type_id integer,
encode_type_id integer,
licensor_id integer,
broker_id integer,
campaign_id integer,
subsidized boolean,
country_code3 character(3),
city character varying,
postal_code character varying,
longitude character varying,
latitude character varying,
language_id character varying,
user_id integer,
tag character varying(64),
app_id integer,
app_seconds bigint,
app_cached boolean,
cdn_id integer,
resource_name character varying)
LOOP
RETURN NEXT rec;
END LOOP;
RETURN ;
END
$BODY$
LANGUAGE plpgsql VOLATILE;
을하지만 실행할 때이 :이 기능은 다음과 같습니다
는SELECT * FROM get_weblog_facts_dblink (array[159783,157885,159301,159923,157952,159280,157454,157245,159831,157822])
내가받을 다음과 같은 오류가 :
ERROR: function get_weblog_facts_dblink(integer[]) does not exist
LINE 1: SELECT * FROM get_weblog_facts_dblink (array[159783,157885,1...
^
HINT: No function matches the given name and argument types. You might need to add explicit type casts.
********** Error **********
ERROR: function get_weblog_facts_dblink(integer[]) does not exist
SQL state: 42883
Hint: No function matches the given name and argument types. You might need to add explicit type casts.
Character: 15
이 함수에서 내 첫 번째 시도는을 수용 할 수있다 그 배열을 인수로 사용하고 dblink로 문제를 복잡하게 만들고 있음을 알고 있습니다. 독립 실행 형으로 dblink 선택 진술하지만, 나는 special_id IN (12345,12346,13456))
어떤 도움을 주시면 대단히 감사하겠습니다.
LOOP RETURN NEXT위한 대신 RETURN 쿼리 문을 사용할 수 있습니다 :
코드 수정하려고합니다. 'ERROR : 기능 get_weblog_facts (정수, 정수, 정수, 정수, 정수, 정수, 정수, 정수, 정수, 정수) 라인이 존재하지 않는 함수 정의과 동일한 호출을 사용하여, 나는 지금이 오류가 발생합니다 : get_weblog_facts (159783,157885,159301,159923,1 SELECT * FROM은 ... ^ 팁 : 없음 함수는 주어진 이름과 인수 유형과 일치하지 않습니다 당신은 명시 적 유형 캐스트 추가해야 할 수도 있습니다 *******를.. *** 오류 **********' – Smittles
좋아, 내가 잘못 함수를 호출 한 파악 I이 사용합니다. (get_weblog_facts로부터 배열 [159783,157885,159301,159923을' SELECT *를, 157952,159280,157454,157245,159831,157822])'적어도 시작하는 함수를 얻었습니다. 데이터베이스에 더 이상 연결되어 있지 않으므로 조사 할 필요가 있습니다. 감사합니다. 지금까지 도움, 파벨. – Smittles
왜 _variadic 다음에 쉼표가 있고 ','다시 인용합니까? _variadic 뒤에 빈 인수가 있어야하나요? – Smittles