0

我有一个 Firebird 2.5 数据库。作为示例,我存储了一个名称QRESULT为预期返回的存储过程:

Parameter  - DATATYPE

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

等等....

我使用 PHP - PDO 使用如下过程查询 firebird 数据库QRESULT

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

我需要在QRESULT程序之前运行一些查询,并且我需要它返回所有列的数据类型,QRESULT如果它被运行则返回。所以我可以帮助用户为我的“where”子句输入正确的值。我知道我可以在用户界面中手动设置它,但在实际项目中有很多程序,如果有办法我可以制作我的过滤器界面动态生成我会很高兴的。如果这对于存储过程是不可能的,我可以使用选择语句来实现。我只需要一些线索。

4

1 回答 1

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 名称应为大写,因为这是将其存储到系统表中的方式(除非您使用带引号的标识符)。如果要同时获取输入和输出参数,请r.RDB$PARAMETER_TYPE = 1从中删除谓词WHERE(类型 0 是输入参数,类型 1 是输出)。

此查询返回的类型是该类型的整数 id,快速谷歌搜索发现:

14,"文本"
7、“短”
8、“长”
9、“四”
10,“浮动”
27、“双”
35,“时间戳”
37,“变化”
第261章
40,"CSTRING"
45,"BLOB_ID"
12,“日期”
13,“时间”
16,"INT64"

但如果你想有更精确的类型,那么请参阅这个 SO 帖子

于 2013-10-21T21:14:57.093 回答