[SP-pm] DBIx::Class::Schema - Problemas com insert
Thiago Rondon
thiago at aware.com.br
Tue Jun 16 09:21:09 PDT 2009
Eu não disse que foi o Oracle que retornou, eu disse que você esta
usando Oracle pelo código. (*nextval no resultset->create) ;-)
Procurando pelo código do DBIx Class do Oracle, encontrei:
(http://cpansearch.perl.org/src/RIBASUSHI/DBIx-Class-0.08103/lib/DBIx/Class/Storage/DBI/Oracle/Generic.pm)
Veja se ler esta função do DBIx Class te ajuda, o problema ainda me
parece em relação a sequencia, talvez como ela esta sendo invocada ou
algo assim.
sub _dbh_get_autoinc_seq {
my ($self, $dbh, $source, $col) = @_;
# look up the correct sequence automatically
my $sql = q{
SELECT trigger_body FROM ALL_TRIGGERS t
WHERE t.table_name = ?
AND t.triggering_event = 'INSERT'
AND t.status = 'ENABLED'
};
# trigger_body is a LONG
$dbh->{LongReadLen} = 64 * 1024 if ($dbh->{LongReadLen} < 64 * 1024);
my $sth;
# check for fully-qualified name (eg. SCHEMA.TABLENAME)
if ( my ( $schema, $table ) = $source->name =~ /(\w+)\.(\w+)/ ) {
$sql = q{
SELECT trigger_body FROM ALL_TRIGGERS t
WHERE t.owner = ? AND t.table_name = ?
AND t.triggering_event = 'INSERT'
AND t.status = 'ENABLED'
};
$sth = $dbh->prepare($sql);
$sth->execute( uc($schema), uc($table) );
}
else {
$sth = $dbh->prepare($sql);
$sth->execute( uc( $source->name ) );
}
while (my ($insert_trigger) = $sth->fetchrow_array) {
return uc($1) if $insert_trigger =~ m!(\w+)\.nextval!i; # col name
goes here???
}
$self->throw_exception("Unable to find a sequence INSERT trigger on
table '" . $source->name . "'.");
}
Abs,
-Thiago Rondon
Andre Carneiro escreveu:
> Não é o Oracle q me retorna essa mensagem, é o DBIx::Class::ResultSet.
>
> Não tem nenhum ORAxxx erro da vida...
>
> Se eu comento a chamada para a sequence, o erro continua ocorrendo.
>
> Além disso, eu testei a mesma sequence diretamente no banco de dados e
> funcionou perfeitamente, e com DBI puro e também funcionou.
>
> No momento eu to fuçando alguma coisa q talvez seja necessário definir
> na classe que representa a minha tabela. Mas é um 'chute' apenas...
>
>
> Cheers!
>
>
>
> 2009/6/16 Thiago Rondon <thiago em aware.com.br <mailto:thiago em aware.com.br>>
>
>
> Andre,
>
> Isto parece Oracle (*nextval). :-) E tomando como base de que é
> Oracle.
>
> Parece que a sequencia/trigger não esta sendo encontrada na hora
> de inserir, e ele não esta conseguindo acessar o teu
> 'some_sequence.nextval' para incrementar o número. Verifique como
> esta a tua sequencia para auto-incremento do campo processo_id.
>
> Abs,
> -Thiago Rondon
>
> Andre Carneiro escreveu:
>
> Olá monges!
>
>
> Estou com um pequeno problema para inserir dados com
> DBIx::Class::Schema
> Tenho uma classe q representa a seguinte tabela abaixo:
>
> <code>
>
> package DBIC::Schema::Processo;
>
> use strict;
> use warnings;
>
> use base 'DBIx::Class';
>
> __PACKAGE__->load_components("Core");
> __PACKAGE__->table("processo");
> __PACKAGE__->add_columns(
> "processo_id",
> { data_type => "INTEGER", is_nullable => 0, size => undef },
> "fornecedor_id",
> { data_type => "INTEGER", is_nullable => 0, size => undef },
>
>
> );
> __PACKAGE__->set_primary_key("processo_id");
>
>
> 1;
> </code>
>
>
> Para inserir estou usando o seguinte codigo:
>
>
> <code>
>
> $schema->resultset('Processo')->create({
> processo_id =>
> \'some_sequence.nextval'
> fornecedor_id => $self->spider_id
> });
>
>
> </code>
>
>
> Estou obtendo a seguinte mensagem de erro:
>
> " DBIx::Class::ResultSet::create(): Unable to find a sequence
> INSERT trigger on table 'processo' "
>
>
> Não consigo encontrar o motivo disso. Isso nunca aconteceu
> antes. Será que alguém poderia me ajudar?
>
>
>
> Obrigado!
>
>
>
>
>
>
>
>
> --
> André Garcia Carneiro
> Analista/Desenvolvedor Perl
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> SaoPaulo-pm mailing list
> SaoPaulo-pm em pm.org <mailto:SaoPaulo-pm em pm.org>
> http://mail.pm.org/mailman/listinfo/saopaulo-pm
>
>
> _______________________________________________
> SaoPaulo-pm mailing list
> SaoPaulo-pm em pm.org <mailto:SaoPaulo-pm em pm.org>
> http://mail.pm.org/mailman/listinfo/saopaulo-pm
>
>
>
>
> --
> André Garcia Carneiro
> Analista/Desenvolvedor Perl
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> SaoPaulo-pm mailing list
> SaoPaulo-pm em pm.org
> http://mail.pm.org/mailman/listinfo/saopaulo-pm
More information about the SaoPaulo-pm
mailing list