Perl 如何使用DBIx::Class运行普通/任意SQL?
我需要使用DBIx::Class运行普通SQL:Perl 如何使用DBIx::Class运行普通/任意SQL?,perl,dbix-class,Perl,Dbix Class,我需要使用DBIx::Class运行普通SQL: select proc_name(); 有没有一种方法可以通过DBIx::Class实现这一点 UPD 我知道我可以使用DBI进行不同的连接,然后: $dbh->do( 'select proc_name();' ) 但我需要在同一事务中运行它 UPD 这不包括在内 UPD 对于底层投票者:我知道DBIx::Class不适用于普通SQL。但从一方面来说,有时查询太复杂,无法将其重写为DBIx::Class。从另一方面来说,我们需要DBI
select proc_name();
有没有一种方法可以通过DBIx::Class实现这一点
UPD
我知道我可以使用DBI进行不同的连接,然后:
$dbh->do( 'select proc_name();' )
但我需要在同一事务中运行它
UPD
这不包括在内
UPD
对于底层投票者:我知道DBIx::Class不适用于普通SQL。但从一方面来说,有时查询太复杂,无法将其重写为DBIx::Class。从另一方面来说,我们需要DBIx::Class的功能,这要感谢DBIx Class IRC频道上的mst的帮助
我应该用
UPD
模块建议另一种运行复杂查询的方法,并将行的DBIx::Class::Result对象作为结果
UPD
可能也会很有趣运行普通sql并获取DBIx::Class功能的另一种方法是使用 这里是Ovid提供的注意,DBIx::Class::Report被标记为Alpha质量代码。所以我避免使用dbh_do。
my @stuff = $schema->storage->dbh_do(
sub {
my ($storage, $dbh, @cols) = @_;
my $cols = join(q{, }, @cols);
$dbh->selectrow_array("SELECT $cols FROM foo");
},
@column_list
);
package MyApp::Schema::Result::Year2000CDs;
use base qw/DBIx::Class::Core/;
__PACKAGE__->table_class('DBIx::Class::ResultSource::View');
__PACKAGE__->table('year2000cds');
__PACKAGE__->result_source_instance->is_virtual(1);
__PACKAGE__->result_source_instance->view_definition(
# PUT HERE YOUR QUERY
"SELECT cdid, artist, title FROM cd WHERE year ='2000'"
);
__PACKAGE__->add_columns(
'cdid' => {
data_type => 'integer',
is_auto_increment => 1,
},
'artist' => {
data_type => 'integer',
},
'title' => {
data_type => 'varchar',
size => 100,
},
);