我只是無法完全掌握它們(從今天開始使用PostgreSQL)。在Windows上使用版本9.0.4,使用pgAdmin III。 我對MS SQL Server功能和SP有相當長的經驗。 據我瞭解,到目前爲止,PostgreSQL中沒有直接模擬MSSQL SP-s(但函數看起來是一樣的)。但是你可以創建其他語言的程序,這些語言可以被構建到postgres中。到目前爲止,我能夠產生如下:說明PostgreSQL存儲過程
CREATE OR REPLACE FUNCTION GetProduct()
RETURNS refcursor AS
$BODY$
DECLARE pr_cur refcursor;
BEGIN
OPEN pr_cur FOR
SELECT * FROM "Product";
RETURN pr_cur;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
而且使用這樣的(Npgsql的使用庫):
NpgsqlConnection conn = new NpgsqlConnection("Server=127.0.0.1;Port=5432;User Id=*;Password=*;Database=Warehouse;");
conn.Open();
NpgsqlTransaction t = conn.BeginTransaction();
NpgsqlCommand command = new NpgsqlCommand("GetProduct", conn);
command.CommandType = CommandType.StoredProcedure;
NpgsqlDataAdapter da = new NpgsqlDataAdapter(command);
DataSet myDS = new DataSet();
da.Fill(myDS);
t.Commit();
conn.Close();
myDS.WriteXml("out.xml");
它的工作原理,但我不完全怎麼理解。首先,我還沒有在pgAdmin的創建函數對話框的返回類型中找到refcursor(它是否是其他東西的synonim?)。第二,我仍然無法設法從pgAdmin獲得行輸出功能:
SELECT * FROM GetProduct();
不符合預期:)。 第三:這個「功能」的工作方式與SQL Server的SP相同嗎(編譯,執行速度快等)?或者,這仍然只是一些解決方法,以獲得幾乎相同的行爲?
最後但並非最不重要的 - 任何從SQL Server遷移的好教程?
UPDATE:
調查問題進一步的它看起來確實有直接等同爲MSSQL的SP在pgSQL的,但你可以使用函數來代替。所以現在還有一個問題,使用pgSQL函數而不是SP是否合理?據我現在瞭解,我的查詢返回某種流水遊標結果。我幾乎從來沒有在MSSQL中使用過遊標,並且知道不建議這樣做,因爲它非常低效。或者是我們在這裏處理的某種其他類型的光標?
嗯,它可能更接近於想要實現但仍然返回的結果集不同於原始查詢「select * from」Product「;」 - 5列,而不是你的查詢返回的一些奇怪的(也許這對Npgsql沒有什麼不同,還沒有測試過)。 – 2011-05-17 12:00:16
我做了一個轉錄錯誤。你可能想再試一次。 – 2011-05-17 13:44:21
我注意到並糾正了第一次嘗試中的錯誤。它將返回一列所有5列數據。不過,我想收到5列。 – 2011-05-17 15:08:30