gpt4 book ai didi

perl - 如何在 DBIx::Class 中调用 Postgres 函数

转载 作者:行者123 更新时间:2023-11-29 13:28:07 27 4
gpt4 key购买 nike

我目前正在研究 DBIx::Class我想知道如何使用 DBIx 在某个数据库模式中调用现有的 Postgres 函数。

我的 DBI 代码:

my $table = $self->{dbh}->quote_identifier(
undef,
'foo',
'myFunction'
);

my $sqlst = qq{ SELECT foobar FROM $table($some_data); };

到目前为止,我发现的事情是使用从我的 DBIx::Class::Schema 检索到的 dbh 对象调用所述函数对象:

my $return_data = {};

my $sql = qq{SELECT foobar FROM "foo"."myFunction"($some_data)};

$self->{schema}->storage->dbh_do( sub {
my ($storage, $dbh) = @_;
$menu_list = $dbh->selectrow_hashref(
$sql,
{ slice => {} }
);
});

有比这更好/更简单的解决方案吗?

我也偶然发现了DBIx::ProcedureCall ,但在使用数据库模式时我无法让它工作。

非常感谢任何帮助!

最佳答案

如果你想使用SQL Functions as Table Sources , 应该可以创建一个虚拟的 DBIx::Class::ResultSource::View像这样:

package MyApp::Schema::Result::MyFunction;

use base qw/DBIx::Class::Core/;

__PACKAGE__->table_class('DBIx::Class::ResultSource::View');

__PACKAGE__->table('myFunction');
__PACKAGE__->result_source_instance->is_virtual(1);
__PACKAGE__->result_source_instance->view_definition(
'SELECT foobar FROM "foo"."myFunction"(?)'
);
__PACKAGE__->add_columns(
'foobar' => {
data_type => 'varchar',
},
);

View 可以这样使用:

my $rs = $schema->resultset('MyFunction')->select({}, {
bind => [ 'arg' ],
});

这将创建一个不是真正必要的子查询:

SELECT me.foobar FROM (SELECT foobar FROM "foo"."myFunction"(?)) me

但我认为它应该有效。

关于perl - 如何在 DBIx::Class 中调用 Postgres 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29877373/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com