2013-10-21 44 views
0

提取列名和結果的列數據類型我有一個火鳥2.5數據庫。正如我已經存儲了一個名字QRESULT其預期收益過程的示例是:Firebird 2.5.x.從存儲過程

Parameter - DATATYPE 

a   - date 
b   - numeric(18,0) 
c   - integer 
d   - varchar(50) 

等等... 。

我使用PHP - PDO使用過程QRESULT這樣的查詢Firebird數據庫:

SELECT a,b,d from QRESULT() where a = "some value" 

我需要之前運行一些查詢程序,我需要它返回QRESULT在運行時將返回的所有列的數據類型。所以我可以幫助用戶爲我的「where」子句輸入適當的值。我知道我可以在用戶界面中手動設置它,但是在真實項目中有很多過程,並且如果有一種方法可以使我的過濾器界面動態生成我會很高興。如果這是不可能的存儲過程,我可以使用select語句。我只需要一些領導。

+1

如果你有一個Firebird數據庫,那爲什麼在這個問題上有一個'sql-server'標籤?這只是一個錯字嗎? – RBarryYoung

+0

我刪除了'sql-server'標記,因爲它對於有關Firebird的問題沒有意義。 –

回答

2

你想要的是在RDB$PROCEDURE_PARAMETERS表中的信息,基本上你需要的是查詢

SELECT r.RDB$PARAMETER_NAME ParName, F.RDB$FIELD_TYPE ParType 
FROM RDB$PROCEDURE_PARAMETERS r 
JOIN RDB$FIELDS F ON(F.RDB$FIELD_NAME = R.RDB$FIELD_SOURCE) 
WHERE r.RDB$PROCEDURE_NAME = 'QRESULT' 
    AND r.RDB$PARAMETER_TYPE = 1 
ORDER BY r.RDB$PARAMETER_TYPE, r.RDB$PARAMETER_NUMBER 

注意,SP的名稱應該是大寫,因爲這是它是如何存儲到系統表(除非你使用帶引號的標識符)。如果要同時獲取輸入和輸出參數,請從WHERE中刪除r.RDB$PARAMETER_TYPE = 1謂詞(類型0是輸入參數,輸出爲1)。

這個查詢返回的類型是該類型整數ID,快速谷歌搜索發現這一點:

 
14,"TEXT " 
7,"SHORT " 
8,"LONG " 
9,"QUAD " 
10,"FLOAT " 
27,"DOUBLE " 
35,"TIMESTAMP " 
37,"VARYING " 
261,"BLOB " 
40,"CSTRING " 
45,"BLOB_ID " 
12,"DATE " 
13,"TIME " 
16,"INT64 " 

,但如果你想擁有更精確的類型,然後see this SO post

+0

這正是我所需要的。非常感謝您的幫助。對於我的所有存儲過程都非常適用。 –