PostgreSQL : 함수의 CASE 표현식 내에서 SELECT 문을 사용하는 방법은 무엇입니까?

함수의 CASE 조건식 내에서 SELECT 문을 사용할 수 있습니까?
위의 작업을 수행하기 위해 다음 기능을 시도했습니다.

예 : 일부 행을 포함하는 테이블을 표시하는 데 사용되는 함수가 있습니다.

create or replace function test(n integer) 
returns table (name text,city text) as
$body$
begin
     case n when 1 then
     select * from table1

     when 2 then
     select * from table2

     when 3 then
     select * from view1

     end;
end;
$body$
language plpgsql;

-호출 기능

select * from test(1);  
/*have to show details of table1*/

select * from test(2);
/*have to show details of table2*/

select * from test(3);
/*have to display details of view1*/
Erwin Brandstetter

실제로 SQL 표현식 과 혼동하지 말아야 할 plpgsql CASE 이 있습니다 .CASE

CREATE OR REPLACE function test(n integer) 
  RETURNS TABLE (name text, city text) AS
$func$
BEGIN

CASE n
WHEN 1 THEN
    RETURN QUERY SELECT t.name, t.city FROM table1 t;
WHEN 2 THEN
    RETURN QUERY SELECT t.foo, t.bar   FROM table2 t;
WHEN 3 THEN
    RETURN QUERY SELECT t.bar, t.bamm  FROM view1 t;
END CASE;

END
$func$ LANGUAGE plpgsql;
  • 함수를로 선언하면 RETURNS TABLE (name text, city text)SELECT 문에 유형이 일치하는 열 목록이 있어야합니다.
    반면에 원하는 경우 그에 따라 SELECT *함수를 선언하십시오 RETURNS SETOF table1.

  • 반환 유형에서 열 이름을 지정할 때 해당 변수는 함수 본문에 표시됩니다. 동일한 이름과 충돌하는 열 이름을 테이블 규정해야합니다. 그래서 t.name그냥 name.

  • 함수 내부 쿼리의 열 이름은 외부에 표시되지 않습니다. 선언 된 반환 유형 만. 따라서 이름은 일치 할 필요가 없으며 데이터 유형 만 있습니다.

어느 쪽이든 단순화하는 것이 좋습니다.

CREATE OR REPLACE function test(n integer) 
  RETURNS SETOF table1 AS
$func$

SELECT * FROM table1 t WHERE n = 1
UNION ALL
SELECT * FROM table2 t WHERE n = 2
UNION ALL
SELECT * FROM view1  t WHERE n = 3;

$func$ LANGUAGE sql;

같은 결과. 빨리. SQL 또는 PL / pgSQL 함수는 취향과 기타 세부 사항의 문제입니다. PL / pgSQL은 아마도 독립형 호출에 더 빠를 것입니다. SQL은 더 쉽게 중첩 될 수 있습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

PostgreSQL : 함수의 CASE 표현식 내에서 단일 테이블의 선택된 열만 표시하는 방법은 무엇입니까?

분류에서Dev

SQL & PHP의 'SELECT DISTINCT CASE WHEN'문에서 'ORDER BY'문을 사용하는 방법은 무엇입니까?

분류에서Dev

mySQL의 Case 표현식 안에 IF 문을 배치하는 방법은 무엇입니까?

분류에서Dev

사용자 정의 함수에 if-then 표현식을 추가하는 방법은 무엇입니까?

분류에서Dev

PostgreSQL : 'select'문 내에서 정수 값을 제공하는 방법은 무엇입니까?

분류에서Dev

삽입에 select 문의 값을 포함하는 방법은 무엇입니까? (PostgreSQL)

분류에서Dev

Spring에서 @Scheduled 주석과 함께 Cron 표현식을 사용하는 방법은 무엇입니까?

분류에서Dev

시스템 Verilog의 Enum에서 산술 표현식을 사용하는 방법은 무엇입니까?

분류에서Dev

Laravel 쿼리의 WHERE 절에서 정규 표현식을 사용하는 방법은 무엇입니까?

분류에서Dev

PostgreSQL에서 사용자 지정 형식의 다차원 배열을 함수 매개 변수로 전달하는 방법은 무엇입니까?

분류에서Dev

postgresql에서 여러 select 문을 결합하는 방법은 무엇입니까?

분류에서Dev

정규 표현식을 사용하는 Java에서 길이를 알 수없는 문자열에서 숫자를 캡처하는 방법은 무엇입니까?

분류에서Dev

CASE WHEN 표현식을 사용하여 SQL에서 가장 가까운 날짜 값을 선택하는 방법은 무엇입니까?

분류에서Dev

Lambda 표현식을 사용하여 ResultSet의 데이터를 HashMap에 넣는 방법은 무엇입니까?

분류에서Dev

매개 변수가있는 Select 문 결과에 따라 CASE 문을 만드는 방법은 무엇입니까?

분류에서Dev

awk – if / else 로직 내에서 사용하려는 경우 정규 표현식을 변수에 넣는 방법은 무엇입니까?

분류에서Dev

Handlebars 도우미 표현식에서 문자열을 인수로 전달하는 방법은 무엇입니까?

분류에서Dev

PostgreSQL 함수 내에서 문자열을 선언하는 방법은 무엇입니까?

분류에서Dev

select 문 내에서 case 표현식을 사용하면 잘못된 출력을 가져옵니다. 출력은 연결된 링크입니다.

분류에서Dev

MATLAB에서 정규 표현식을 사용하여 경로 (문자열)의 끝 부분을 제거하는 방법은 무엇입니까?

분류에서Dev

MVEL 표현식 내에서 변수를 사용하는 방법은 무엇입니까?

분류에서Dev

파워 쿼리의 SELECT 문에서 Excel 셀 값을 변수로 사용하는 방법은 무엇입니까?

분류에서Dev

함수 표현식에서 속성을 호출하는 방법은 무엇입니까?

분류에서Dev

PHP의 정규식을 사용하여 SQL 쿼리에서 SELECT와 FROM 사이의 문자열을 추출하는 방법은 무엇입니까?

분류에서Dev

사용자 지정 함수 내에서 Google 시트 수식을 호출하는 방법은 무엇입니까?

분류에서Dev

Java에서 문자열의 일부에서 정규 표현식을 사용하는 방법은 무엇입니까?

분류에서Dev

MySQL에서 case 문을 사용하여 열 차이 수 범위를 얻는 방법은 무엇입니까?

분류에서Dev

CASE 문의 THEN 부분에서 IN 절을 오류없이 사용하는 방법은 무엇입니까?

분류에서Dev

가변 템플릿 함수에서 각 유형을 인스턴스화하기 위해 접기 표현식을 사용하는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    PostgreSQL : 함수의 CASE 표현식 내에서 단일 테이블의 선택된 열만 표시하는 방법은 무엇입니까?

  2. 2

    SQL & PHP의 'SELECT DISTINCT CASE WHEN'문에서 'ORDER BY'문을 사용하는 방법은 무엇입니까?

  3. 3

    mySQL의 Case 표현식 안에 IF 문을 배치하는 방법은 무엇입니까?

  4. 4

    사용자 정의 함수에 if-then 표현식을 추가하는 방법은 무엇입니까?

  5. 5

    PostgreSQL : 'select'문 내에서 정수 값을 제공하는 방법은 무엇입니까?

  6. 6

    삽입에 select 문의 값을 포함하는 방법은 무엇입니까? (PostgreSQL)

  7. 7

    Spring에서 @Scheduled 주석과 함께 Cron 표현식을 사용하는 방법은 무엇입니까?

  8. 8

    시스템 Verilog의 Enum에서 산술 표현식을 사용하는 방법은 무엇입니까?

  9. 9

    Laravel 쿼리의 WHERE 절에서 정규 표현식을 사용하는 방법은 무엇입니까?

  10. 10

    PostgreSQL에서 사용자 지정 형식의 다차원 배열을 함수 매개 변수로 전달하는 방법은 무엇입니까?

  11. 11

    postgresql에서 여러 select 문을 결합하는 방법은 무엇입니까?

  12. 12

    정규 표현식을 사용하는 Java에서 길이를 알 수없는 문자열에서 숫자를 캡처하는 방법은 무엇입니까?

  13. 13

    CASE WHEN 표현식을 사용하여 SQL에서 가장 가까운 날짜 값을 선택하는 방법은 무엇입니까?

  14. 14

    Lambda 표현식을 사용하여 ResultSet의 데이터를 HashMap에 넣는 방법은 무엇입니까?

  15. 15

    매개 변수가있는 Select 문 결과에 따라 CASE 문을 만드는 방법은 무엇입니까?

  16. 16

    awk – if / else 로직 내에서 사용하려는 경우 정규 표현식을 변수에 넣는 방법은 무엇입니까?

  17. 17

    Handlebars 도우미 표현식에서 문자열을 인수로 전달하는 방법은 무엇입니까?

  18. 18

    PostgreSQL 함수 내에서 문자열을 선언하는 방법은 무엇입니까?

  19. 19

    select 문 내에서 case 표현식을 사용하면 잘못된 출력을 가져옵니다. 출력은 연결된 링크입니다.

  20. 20

    MATLAB에서 정규 표현식을 사용하여 경로 (문자열)의 끝 부분을 제거하는 방법은 무엇입니까?

  21. 21

    MVEL 표현식 내에서 변수를 사용하는 방법은 무엇입니까?

  22. 22

    파워 쿼리의 SELECT 문에서 Excel 셀 값을 변수로 사용하는 방법은 무엇입니까?

  23. 23

    함수 표현식에서 속성을 호출하는 방법은 무엇입니까?

  24. 24

    PHP의 정규식을 사용하여 SQL 쿼리에서 SELECT와 FROM 사이의 문자열을 추출하는 방법은 무엇입니까?

  25. 25

    사용자 지정 함수 내에서 Google 시트 수식을 호출하는 방법은 무엇입니까?

  26. 26

    Java에서 문자열의 일부에서 정규 표현식을 사용하는 방법은 무엇입니까?

  27. 27

    MySQL에서 case 문을 사용하여 열 차이 수 범위를 얻는 방법은 무엇입니까?

  28. 28

    CASE 문의 THEN 부분에서 IN 절을 오류없이 사용하는 방법은 무엇입니까?

  29. 29

    가변 템플릿 함수에서 각 유형을 인스턴스화하기 위해 접기 표현식을 사용하는 방법은 무엇입니까?

뜨겁다태그

보관