2013-03-08 2 views
0

내가 찾고있는 것은 "매개 변수화 된 뷰"라고합니다. 인터넷에서 주위를 둘러 보았을 때 PostgreSQL이 지원하지 않는다는 것을 알았습니다. 대신 함수를 사용해야합니다. 함수의 매개 변수화 된 뷰 또는 일반 반환 값

그래서 내가 함수 작성 : 나는 다른 기록에 가입하여 해당 학생의 좀 더 선택하려면, 그러나

CREATE OR REPLACE FUNCTION public.student_get_byschool(
    _schoolid integer 
) RETURNS SETOF student AS 
$body$ 
    SELECT * FROM student WHERE schoolid=_schoolid; 
$body$ 
LANGUAGE 'sql'; 

을 내 RETURNS 절은 더 이상 올바르지 않습니다.

  1. 사용 RETURNS SETOF RECORD하지만 나에게 모든 열 정의를 포기하지 않는 즉, 내 C# .NET 응용 프로그램에서 몇 가지 문제를 갖고있는 것 같아요 : 나는 두 가지 방법으로 그 문제를 해결 할 수있다.
  2. 반환하려는 모든 데이터를 보유하고 있지만 데이터베이스 디자인에서 피할 수있는 중복성을 도입하는 새로운 형식을 만듭니다.

이제 내 질문에 대한 답변이 유일한 옵션이거나 더 가능합니다. 방금 PostgreSQL과 C# .NET을 시작했습니다.

+0

'returns table (col1 integer, ...) '사용 –

답변

1

documentation for CREATE FUNCTION에 따르면 OUT 매개 변수 또는 RETURNS TABLE을 사용할 수 있습니다. RETURNS TABLE 가독성이 높습니다.

This Postgres Online article이 흥미로울 수도 있지만 자세한 내용을 확인하고 최신 정보인지 확인하십시오.

+0

네,'RETURNS TABLE'도 찾았습니다. 모두 하나의 정의 안에 있어도 여전히 중복이 있습니다. 나는 지금 WHERE 조항으로보기에 기대고있다. –

+0

@BartFriederichs 변형 수가 적 으면 좋은 선택 일 수 있으며 가끔 인라인을 더 잘 볼 수 있습니다. 함수를 사용한다면 평범한'SQL' 함수를 사용하고 인라인 할 수있게하려면'STRICT'를 표시하지 * 않습니다 *. 일부 리던던시는 불행하게도 Pg가 함수 몸체를 실제로 검사하기 전에 함수에서 쿼리의 출력 유형을 알아야하기 때문에 필요합니다. 다양한 플러그 형 절차 언어를 지원할 수있는 비용 중 하나입니다. –

+0

정보를 제공해 주셔서 감사합니다. 나는 나의 아이디어가 유효하다는 것도 분명히 확인하고 있었다. –