如何使用mybatis输入动态table在PostgreSQL中运行?
How to input dynamic table to function in PostgreSQL using mybatis?
我实现了一个将 table 名称、列名和列 ID 作为参数的 Postgres 函数。
它是动态的,因为结果会根据 table 名称而变化。
在 sql 中测试时效果很好。
postgresql 函数
create or replace function test(layer_name anyelement, field_name text, object_id text)
returns setof anyelement
language plpgsql
as $function$
begin
return query execute format('
select
*
from
%s
where
%s = cast( as int4)'
, pg_typeof(layer_name), field_name)
using object_id;
end;
$function$
;
通话
select * from test(null::table_name,'field_name','2');
但是我用mybatis调用函数,没有收到结果就失败了
<select id="test" parameterType="map" resultType="map">
select * from test(null::#{layer_name}, #{field_name}, #{object_id})
</select>
或
<select id="test" parameterType="map" resultType="map">
select * from test(cast(null as #{layer_name}), #{field_name}, #{object_id})
</select>
我错过了什么,我需要做什么才能让它发挥作用?
错误代码 1
### The error occurred while setting parameters
### SQL: select * from test(null::?, ?, ?)
### Cause: org.postgresql.util.PSQLException: ERROR: syntax error at or near ""
错误代码 2
### The error occurred while setting parameters
### SQL: select * from test(cast(null as ?), ?, ?)
### Cause: org.postgresql.util.PSQLException: ERROR: syntax error at or near ""
我实现了一个将 table 名称、列名和列 ID 作为参数的 Postgres 函数。
它是动态的,因为结果会根据 table 名称而变化。
在 sql 中测试时效果很好。
postgresql 函数
create or replace function test(layer_name anyelement, field_name text, object_id text)
returns setof anyelement
language plpgsql
as $function$
begin
return query execute format('
select
*
from
%s
where
%s = cast( as int4)'
, pg_typeof(layer_name), field_name)
using object_id;
end;
$function$
;
通话
select * from test(null::table_name,'field_name','2');
但是我用mybatis调用函数,没有收到结果就失败了
<select id="test" parameterType="map" resultType="map">
select * from test(null::#{layer_name}, #{field_name}, #{object_id})
</select>
或
<select id="test" parameterType="map" resultType="map">
select * from test(cast(null as #{layer_name}), #{field_name}, #{object_id})
</select>
我错过了什么,我需要做什么才能让它发挥作用?
错误代码 1
### The error occurred while setting parameters
### SQL: select * from test(null::?, ?, ?)
### Cause: org.postgresql.util.PSQLException: ERROR: syntax error at or near ""
错误代码 2
### The error occurred while setting parameters
### SQL: select * from test(cast(null as ?), ?, ?)
### Cause: org.postgresql.util.PSQLException: ERROR: syntax error at or near ""