[SQL] 포스트 그레스 컬럼에 데이터를 반환하지 않는 테이블을 반환하는 기능
SQL포스트 그레스 컬럼에 데이터를 반환하지 않는 테이블을 반환하는 기능
나는 테이블을 반환하는 포스트 그레스 기능이 :
CREATE OR REPLACE FUNCTION testFunction() RETURNS TABLE(a int, b int) AS
$BODY$
DECLARE a int DEFAULT 0;
DECLARE b int DEFAULT 0;
BEGIN
CREATE TABLE tempTable AS SELECT a, b;
RETURN QUERY SELECT * FROM tempTable;
DROP TABLE tempTable;
END;
$BODY$
LANGUAGE plpgsql;
이 함수는 행과 열 형식으로 데이터를 반환하지 않는다. 대신 데이터를로 반환
(0,0)
즉, 데이터를 추출의 ColdFusion cfquery를 블록에서 문제를 야기한다. 테이블이 함수에서 반환 될 때 어떻게 행과 열에서 데이터를받을 수 있나요? 즉 : 왜 PL / pgSQL의 기능은 열 등의 데이터를 반환하지 않습니다?
해결법
-
==============================
1.대신 행 유형의 개별 열을 얻으려면, 기능과 전화 :
대신 행 유형의 개별 열을 얻으려면, 기능과 전화 :
SELECT * FROM testfunction();
그냥 당신이 테이블에서 모든 열을 선택 것 같은. 또한 테스트 기능이 검토 양식을 고려 :
CREATE OR REPLACE FUNCTION testfunction() RETURNS TABLE(a int, b int) AS $func$ DECLARE _a int := 0; _b int := 0; BEGIN CREATE TEMP TABLE tbl AS SELECT _a, _b; RETURN QUERY SELECT * FROM tbl; DROP TABLE tempTable; END $func$ LANGUAGE plpgsql;
특히:
임시 테이블의 예에서 완전히 쓸모가 (아마도 지나치게 단순화). 당신은 할 감소시킬 수있다 :
CREATE OR REPLACE FUNCTION testfunction(OUT a int, OUT b int) AS $func$ BEGIN a := 0; b := 0; END $func$ LANGUAGE plpgsql;
-
==============================
2.물론 당신은 에릭 Brandstetter이 정답처럼, FROM 절에있는 함수 호출을 넣어이 작업을 수행 할 수 있습니다. 그러나,이 때로는 이미 FROM 절에서 다른 일을 가지고 쿼리에서 복잡하게된다. 함수가 반환, 당신은이 구문을 사용할 수있는 개별 열을 얻으려면 :
물론 당신은 에릭 Brandstetter이 정답처럼, FROM 절에있는 함수 호출을 넣어이 작업을 수행 할 수 있습니다. 그러나,이 때로는 이미 FROM 절에서 다른 일을 가지고 쿼리에서 복잡하게된다. 함수가 반환, 당신은이 구문을 사용할 수있는 개별 열을 얻으려면 :
SELECT (testfunction()).*
또는 전화에만 열을 얻기 위해 "A":
SELECT (testfunction()).a
도트 뒤에 괄호 입력 값 (S)을 원하는 열 이름 또는 별표를 포함하여 전체 기능을 놓는다.
함수가 반환, 당신은 하나에해야하는 열 이름을 얻으려면 :
입력 값은 여전히 FROM 절에서 나올 수있다. 다만이 문제를 설명하기 위해이 기능을 테스트 데이터를 고려 :
CREATE FUNCTION funky(a integer, b integer) RETURNS TABLE(x double precision, y double precision) AS $$ SELECT a*random(), b*random(); $$ LANGUAGE SQL; CREATE TABLE mytable(a integer, b integer); INSERT INTO mytable SELECT generate_series(1,100), generate_series(101,200);
당신은 FROM 절에 넣을 필요없이, "(A, B) 펑키"함수를 호출 할 수 있습니다 :
SELECT (funky(mytable.a, mytable.b)).* FROM mytable;
2 열이 발생할 것이다 :
x | y -------------------+------------------- 0.202419687062502 | 55.417385618668 1.97231830470264 | 63.3628275180236 1.89781916560605 | 1.98870931006968 (...)
from https://stackoverflow.com/questions/14628771/postgres-function-returning-table-not-returning-data-in-columns by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 어떻게 MySQL의에서 자동 증가 필드와 동일한 테이블의 행과 삽입을 복사하려면? (0) | 2020.05.14 |
---|---|
[SQL] SQL 서버에 연결하기 위해 PHP를 사용하는 방법 (0) | 2020.05.14 |
[SQL] 삽입의 성능을 최대 SQL 속도? (0) | 2020.05.14 |
[SQL] 드라이버 (SSL) 암호화 보안 소켓 레이어를 사용하여 SQL 서버에 대한 보안 연결을 설정할 수 없음 (0) | 2020.05.14 |
[SQL] 어떻게 오라클에 Timestamp_to_scn 및 Scn_to_timestamp를 사용 하는가? (0) | 2020.05.14 |