我在我的數據庫中有以下代碼片段{代碼#1,代碼#2,代碼#3}。爲什麼PostgreSQL中SETOF的奇怪行爲?
CODE#1:創建類似「JAVA中的ENUM」的表「Class_Type」的語句。
它包含了一些數據,{ 「A級」,「B類」, 「體育-A」, 「紅」, 「藍」,...}
我現在想使用存儲過程是CODE#2和CODE#3抓取這些值
預期的CODE#2和輸出代碼#3:
{
| classtype character varying |
| class-A |
| class-B |
| sports-A |
| RED |
| BLUE |
| ....... |
}
What did i find Strange?
的CODE#2正在返回預期的輸出一些時間和一些倍它返回「意外的輸出」。背後的原因是什麼?
代碼#3工作正常,每次都會產生預期輸出。
的CODE#意外輸出2:
{
| get_class_type_list character varying |
| class-A |
| class-B |
| sports-A |
| RED |
| BLUE |
| ....... |
}
以下是代碼段:
CODE#1
{
CREATE TABLE test.class_type
(
value character varying(80) NOT NULL,
is_active boolean NOT NULL DEFAULT true,
sort_order integer,
CONSTRAINT class_type_pkey PRIMARY KEY (value)
)
WITH (
OIDS=FALSE
);
}
CODE#2
{
CREATE OR REPLACE FUNCTION test.get_class_type_list()
RETURNS SETOF character varying AS
$BODY$
DECLARE
SQL VARCHAR;
BEGIN
RETURN QUERY
(SELECT value AS "classType"
FROM TEST.CLASS_TYPE);
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100
ROWS 1000;
}
CODE#3
{
CREATE OR REPLACE FUNCTION test.get_class_type_list()
RETURNS TABLE(classType character varying) AS
$BODY$
DECLARE
SQL VARCHAR;
BEGIN
RETURN QUERY
(SELECT value AS "classType"
FROM TEST.CLASS_TYPE);
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100
ROWS 1000;
}
Edited:
我希望返回函數的列名爲「classType」,但不是函數名。
「預期」和「意外」結果之間的實際區別是什麼? (你的格式很難跟蹤,爲什麼你不顯示'psql'的實際輸出?) – 2014-11-06 10:40:07
@CraigRinger我已經添加了一個SQLFiddle示例代碼 – 09Q71AO534 2014-11-06 16:02:48
那麼你的問題是什麼? – 2014-11-06 19:02:36