如何将参数的元数据获取到 postgresql 存储过程?
How can I get the metadata of the parameters to a postgresql stored procedure?
我一直在使用的,并且它没有用,是:
string schema;
string procedure;
DbCommand cmd;
// ...
cmd.CommandType = CommandType.Text;
cmd.CommandText =
"SELECT
parameters.parameter_name,
parameters.data_type,
parameters.character_maximum_length,
parameters.parameter_mode
FROM
information_schema.routines
JOIN information_schema.parameters
ON routines.specific_name = parameters.specific_name
WHERE
routines.specific_schema = :schemaname
and routines.routine_name = :paraname
ORDER BY
routines.routine_name,
parameters.ordinal_position";
cmd.Parameters.Add(MakeParameter("schemaname", schema));
cmd.Parameters.Add(MakeParameter("paraname", procedure));
但是这个returns“”(空字符串)为参数名。
空参数名可能是为了防止没有名称:
create function foo(bar text, text) returns text language sql as 'select bar||';
SELECT
parameters.parameter_name,
parameters.data_type,
parameters.character_maximum_length,
parameters.parameter_mode
FROM
information_schema.routines
JOIN information_schema.parameters
ON routines.specific_name = parameters.specific_name
WHERE
routines.specific_schema = 'public'
and routines.routine_name = 'foo'
ORDER BY
routines.routine_name,
parameters.ordinal_position;
┌────────────────┬───────────┬──────────────────────────┬────────────────┐
│ parameter_name │ data_type │ character_maximum_length │ parameter_mode │
├────────────────┼───────────┼──────────────────────────┼────────────────┤
│ bar │ text │ ░░░░ │ IN │
│ ░░░░ │ text │ ░░░░ │ IN │
└────────────────┴───────────┴──────────────────────────┴────────────────┘
我一直在使用的,并且它没有用,是:
string schema;
string procedure;
DbCommand cmd;
// ...
cmd.CommandType = CommandType.Text;
cmd.CommandText =
"SELECT
parameters.parameter_name,
parameters.data_type,
parameters.character_maximum_length,
parameters.parameter_mode
FROM
information_schema.routines
JOIN information_schema.parameters
ON routines.specific_name = parameters.specific_name
WHERE
routines.specific_schema = :schemaname
and routines.routine_name = :paraname
ORDER BY
routines.routine_name,
parameters.ordinal_position";
cmd.Parameters.Add(MakeParameter("schemaname", schema));
cmd.Parameters.Add(MakeParameter("paraname", procedure));
但是这个returns“”(空字符串)为参数名。
空参数名可能是为了防止没有名称:
create function foo(bar text, text) returns text language sql as 'select bar||';
SELECT
parameters.parameter_name,
parameters.data_type,
parameters.character_maximum_length,
parameters.parameter_mode
FROM
information_schema.routines
JOIN information_schema.parameters
ON routines.specific_name = parameters.specific_name
WHERE
routines.specific_schema = 'public'
and routines.routine_name = 'foo'
ORDER BY
routines.routine_name,
parameters.ordinal_position;
┌────────────────┬───────────┬──────────────────────────┬────────────────┐
│ parameter_name │ data_type │ character_maximum_length │ parameter_mode │
├────────────────┼───────────┼──────────────────────────┼────────────────┤
│ bar │ text │ ░░░░ │ IN │
│ ░░░░ │ text │ ░░░░ │ IN │
└────────────────┴───────────┴──────────────────────────┴────────────────┘