2009-11-26 7 views
0

Je peux interroger le DB du serveur SQL très bien. Le problème se produit lorsque j'essaie d'interroger une vue.Comment interroger une vue à partir d'un serveur SQL avec Perl et DBD :: ODBC?

Je ne cherche pas à faire quelque chose de fou:

$sql = 'select * from location_v'; 
$stj = $db_destination->prepare($sql); 

Il continue à mourir sur la ligne se préparer. Voici ce que je suis en train de revenir (ce qui est tout ce qui utile):

DBD::ODBC::db prepare failed: (DBD: st_prepare/SQLPrepare err=-1) 

Ne devrait pas être vues traitées exactement la même chose que d'une table? Merci d'avance.

Répondre

3

Avez-vous essayé d'utiliser le dbo. préfixe sur le nom de la vue (SELECT * FROM dbo.location_v)? Avez-vous vérifié que la vue est réellement dans le dbo. schéma? Avez-vous vérifié les autorisations sur la vue et/ou les tables de base sélectionnées dans la vue? Malheureusement, ODBC ne donne pas un message d'erreur très significatif ici, il peut donc s'agir de n'importe quel nombre de choses, mais il est très probable que l'objet soit introuvable (à cause du préfixe, ou vous êtes dans la mauvaise base de données).

1

Oui, les vues doivent être indiscernables des tables pour cette requête.

Pouvez-vous réellement interroger la vue (plutôt que la base de données en général)?

Un code d'erreur de -1 n'est pas fortement indicatif de quelque chose de spécifique en tant que problème. Cela peut parfois être «pas de permission», mais cela pourrait être presque n'importe quoi.

Je suggère de regarder pour voir où le problème est en utilisant DBI_TRACE = 9 (ou peut-être plus petits nombres) mis dans l'environnement (ou utiliser $dbh->trace(9)). Cela devrait vous donner beaucoup d'informations (pas tout à fait compréhensible) sur ce qui se passe; il peut vous montrer où le problème est réellement.

0

Arg. J'ai trouvé le problème. J'ai eu quelques requêtes avant d'interroger la vue et je ne fermais pas mon handle avant d'en ouvrir un nouveau. Tout ce que j'avais besoin de faire était ceci avant que j'aie couru la question:

undef $stj; 

Espérons que ceci aide quelqu'un d'autre.

Questions connexes