我的目標是編寫一個存儲過程,可以將來自多行的所有字段值收集到一個輸出變量(可能是varchar(some_length))中。這可能看起來奇怪的解決方案,但我相當積極,它是我可以在這種情況下使用的唯一一個。我以前沒有使用過Firebird,並且存儲過程看起來與其他着名的數據庫系統不同。 我的火鳥是1.5和方言3(不知道這是什麼意思)。 所以也許有人可以幫助我一個算法的例子。Firebird存儲過程用於連接來自多行的所有字段值
5
A
回答
5
以下步驟做你的描述:
SET TERM !!;
CREATE PROCEDURE concat_names
RETURNS (concat VARCHAR(2000))
AS
DECLARE VARIABLE name VARCHAR(100);
BEGIN
concat = '';
FOR SELECT first_name || ' ' || last_name FROM employee INTO :name
DO BEGIN
concat = concat || name || ', ';
END
END!!
SET TERM ;!!
EXECUTE PROCEDURE concat_names;
但我懷疑這個解決方案的智慧。你怎麼知道VARCHAR對於你想要的數據集中的所有行足夠長?
運行查詢以逐行將結果返回給應用程序變得更加容易和安全。每種應用程序編程語言都有連接字符串的方法,但更重要的是,它們有更靈活的方法來管理數據的增長。
順便說一下,Firebird和InterBase中的「方言」是指引入的兼容模式,以便爲InterBase 5.x開發的應用程序可以與更高版本的InterBase和Firebird一起使用。這是大約十年前,和AFAIK今天有沒有必要使用任何超過方言低3
0
你要測試空值串聯的時候,這裏是兩個領域的例子,它們之間的分隔符:
CREATE PROCEDURE CONCAT(
F1 VARCHAR(385),
F2 VARCHAR(385),
SEPARATOR VARCHAR(10))
RETURNS (
RESULT VARCHAR(780))
AS
begin
if ((:f1 is not null) and (:f1 <> '')) then
result = :f1;
if ((:f2 is not null) and (:f2 <> '')) then
if ((result is not null) and (result <> '')) then
begin
if ((:separator is not null) and (separator <> '')) then
result = result||separator||f2;
else
result = result||f2;
end
else
result = f2;
suspend;
end
0
使用Firebird存儲過程返回多行非常容易。
不要使用:
execute procedure proc_name(value);
而是使用:
select * from proc_name(value);
相關問題
- 1. Firebird 2.1存儲過程以連接多行上的文本
- 2. 存儲過程中字段的多值
- 3. 使用JOOQ執行Firebird存儲過程
- 4. 連接來自同一字段的多個行的值,彙總
- 5. 連接來自所有表的值;
- 6. 連接表的行的存儲過程
- 7. ArrayField來存儲自定義字段值
- 8. 在SQL存儲過程中連接值
- 9. 搜索多值字段自連接
- 10. SQL存儲過程值來自頁面
- 11. Firebird存儲過程中的「select..into」
- 12. 存儲過程中的Firebird CASE聲明
- 13. 存儲過程所有權鏈接
- 14. 是否有可能在Firebird的存儲過程中返回多行?
- 15. 設置來自Pentaho的Firebird連接的字符集DI
- 16. 存儲過程設置自動增量字段的起始值
- 17. Firebird存儲過程語法 - 拒絕;
- 18. Firebird 2.5.x.從存儲過程
- 19. 檢查從存儲過程返回的字段是否有值?
- 20. 使用來自連接查詢的字段值作爲列
- 21. SQL - 在表中執行的存儲過程對於所有的值
- 22. 使用來自存儲過程的多個結果的Crystal Reports
- 23. 在firebird執行非常緩慢的存儲過程
- 24. 是否有可能在Firebird中創建私有存儲過程?
- 25. 有沒有在特定時間運行Firebird存儲過程的方法?
- 26. MySQL的存儲過程中用連字符的值
- 27. joins-如何通過參數的存儲過程來執行連接查詢
- 28. 關閉存儲過程中的連接
- 29. MYSQL連接代碼的存儲過程
- 30. 的MySQL連接器EF存儲過程
如果使用火鳥2.1,你可以用列表聚集函數提供了文本BLOB結果。即沒有限制的varchar字段。 – 2008-10-08 19:42:32