2012-04-26 2 views
10

Postgres 저장 함수가 식별 된 열과 함께 테이블을 반환하는 방법을 알고 싶습니다. 내가 사용했습니다 반환 SETOF returnType이 : 또한Postgres 저장 함수가 테이블을 반환하는 방법

-- create employeeSearchResult returnType 
create type employeeAllReturnType as 
(
    id bigserial, 
    "positionId" integer, 
    "subjectId" bigint, 
    "dateEngaged" date, 
    "nextKin" text, 
    "nrcNo" text, 
    dob date, 
    father text, 
    mother text, 
    wife text, 
    "userId" integer, 
    "statusId" integer, 
    "mainCode" text, 
    "subCode" text 
); 


-- Search for emmployee by name 
CREATE OR REPLACE FUNCTION "employee_search_by_name"(employeeNameIN text) 
returns setof employeeAllReturnType as 
$$ 
declare 
    results record; 
    resultsRow employee%rowtype; 
    nameIn text; 
begin 
    nameIn = employeeNameIN || '%'; 
    for results in select 
     employee.id,-- bigserial NOT NULL, 
    employee."positionId",-- integer, 
    employee."subjectId",-- bigint NOT NULL, 
    employee."dateEngaged",-- date, 
    employee."nextKin",-- text, 
    employee."nrcNo",-- text, 
    employee.dob,-- date, 
    employee.father,-- text, 
    employee.mother,-- text, 
    employee.wife,-- text, 
    employee."userId",-- integer NOT NULL, 
    employee."statusId",-- integer, 
    employee."mainCode",-- character(5) NOT NULL, 
    employee."subCode"-- character(10), 
    from employee, subject where employee."subjectId" = subject.id and (subject.name1 ILIKE nameIn OR subject.name2 ILIKE nameIn OR subject.name3 ILIKE nameIn OR subject.name4 ILIKE nameIn) loop 
     return next results; 
    end loop; 
end; 
$$ language 'plpgsql'; 

과 (테이블 반환) :

"(1,1,1,2011-12-01,Timea,fg1254,1981-12-27,moses,sarada,timea,1,1,"ADM ","1   ")" 
"(37,3,10,2011-11-11,s,s,2011-11-11,s,s,s,1,1,"OP ","1   ")" 

있는 어쨌든 있나요 :

-- Search for emmployee by name 
CREATE OR REPLACE FUNCTION "employee_search_by_name"(employeeNameIN text) 
returns table (id bigserial, 
    position integer, 
    subject bigint, 
    date_engaged date, 
    next_kin text, 
    nrc_no text, 
    dob date, 
    father text, 
    mother text, 
    wife text, 
    user_id integer, 
    status_id integer, 
    main_code text, 
    sub_code text) as 
$$ 
declare 
    results record; 
    resultsRow employee%rowtype; 
    nameIn text; 
begin 
    nameIn = employeeNameIN || '%'; 
    for results in select 
     employee.id,-- bigserial NOT NULL, 
     employee."positionId",-- integer, 
     employee."subjectId",-- bigint NOT NULL, 
     employee."dateEngaged",-- date, 
     employee."nextKin",-- text, 
     employee."nrcNo",-- text, 
     employee.dob,-- date, 
     employee.father,-- text, 
     employee.mother,-- text, 
     employee.wife,-- text, 
     employee."userId",-- integer NOT NULL, 
     employee."statusId",-- integer, 
     employee."mainCode",-- character(5) NOT NULL, 
     employee."subCode"-- character(10), 
    from employee, subject where employee."subjectId" = subject.id and (subject.name1 ILIKE nameIn OR subject.name2 ILIKE nameIn OR subject.name3 ILIKE nameIn OR subject.name4 ILIKE nameIn) loop 
     return next results; 
    end loop; 
end; 
$$ language 'plpgsql'; 

그러나 모두 다음과 같은 형식의 출력이 테이블에서 선택 결과를 출력 할 수 있습니까?

"1";1;1;"2011-12-01";"Timea";"fg1254";"1981-12-27";"moses";"sarada";"timea";1;1;"ADM ";"1   " 

프런트 엔드의 처리 결과 데이터에는 파서가 필요하지 않습니다.

답변

11

당신은 다음과 같은 함수를 조회해야합니다

또한
SELECT * FROM employee_search_by_name('Bob'); 

, 당신의 기능을 단순화하기 위해, 당신은 RETURN QUERY EXECUTE ... 구조로 보일 수 있습니다. 그리고 plpgsql 키워드를 인용 할 필요가 없습니다.

+0

거기에 큰 따옴표가 필요하지 않습니다. –

+0

아래 답변을 확인하십시오 – greatkalu

관련 문제