状況は次のとおりです。ZendFramework2を使用してOracleデータベースに接続しています。アダプタのドライバとして「Pdo_Oci」を指定しました。Selectオブジェクトを使用してクエリを作成し、実行しています。
Selectオブジェクトでlimitメソッドを使用しようとするまで、すべてがうまくいきました。私はOracleと話していて、OracleにはLIMITがないので、フレームワークがOracleにとって意味のあるSQL文字列を生成し、LIMITをエミュレートすることを期待していました(ROWNUMを使用していると思います)。
ただし、生成されたSQLにはLIMITキーワードが含まれているだけです。もちろん、データベースがそれをどう処理するかわからないため、実行時にエラーが発生します。
したがって、2つの可能性があります。
1)私の期待は間違っており、limit()メソッドは、Oracleデータベースでは使用できないLIMITの単純なラッパーにすぎません。このような投稿は、そうではないことを示唆しているようですが、私はそれを間違って読んでいる可能性があります。
2)私は何か他のことを間違っています。別のドライバーを使用する必要がありますか?
編集: ZF2学生の質問に答えるだけでなく、人々が私を助けるためのより多くのコンテキストを提供することを期待して:
接続文字列を明示的に形成していません。local.phpに必要なdbconfigがあります。
return array(
'db' => array(
'driver' => 'Pdo_Oci',
'database' => 'my_database_host',
'username' => 'my_user_name',
'password' => 'my_password'
),
);
私のglobal.phpで、アダプタファクトリを設定しました。
return array(
'service_manager' => array(
'factories' => array(
'Zend\Db\Adapter\Adapter' => 'Zend\Db\Adapter\AdapterServiceFactory',
),
'aliases' => array(
'db' => 'Zend\Db\Adapter\Adapter',
),
),
);
そして、次のようにコントローラーでアダプターを取得します。
$db = $this->getServiceLocator()->get('db');