OracleをSymfony2.8に接続しようとしていますが、実行すると
php app/console doctrine:mapping:convert xml ./src/Occidente/RspBundle/Resources/config/doctrine/metadata/orm --from-database --force
既存のデータベースからエンティティを作成するためのメタデータを生成すると、次のエラーメッセージが表示されます。
警告:oci_fetch_all():ORA-01427:単一行のサブクエリが複数の行を返します
Oracleデータベースからのインポートでもこの問題が発生していました。Doctrine / DBALをデバッグしたところ、テーブルのメタデータをインポートするときに、all_col_comments
Oracleメタデータテーブルでテーブルコメントが検索され、2つの異なるスキーマに2つのテーブル(または2に属する2つのテーブルがある場合)がテーブルに複数の行を生成することがわかりました。異なる所有者)、まったく同じテーブル名と列名。
私が送信したプルリクエストをこの(おそらく稀な)問題を修正するためのGitHub上の教義DBALリポジトリに。回避策として、競合の原因となっているテーブルをスキーマの1つから削除するか、プロジェクトのディレクトリの下OraclePlatform.php
の/lib/Doctrine/DBAL/Platforms/
ディレクトリにあるファイルを編集して、次のように関数をvendor
変更できgetListTableColumnsSQL
ます。
/**
* {@inheritDoc}
*/
public function getListTableColumnsSQL($table, $database = null)
{
$table = $this->normalizeIdentifier($table);
$table = $this->quoteStringLiteral($table->getName());
$tabColumnsTableName = "user_tab_columns";
$colCommentsTableName = "user_col_comments";
$ownerCondition = '';
$innerOwnerCondition = '';
if (null !== $database && '/' !== $database) {
$database = $this->normalizeIdentifier($database);
$database = $this->quoteStringLiteral($database->getName());
$tabColumnsTableName = "all_tab_columns";
$colCommentsTableName = "all_col_comments";
$ownerCondition = "AND c.owner = " . $database;
$innerOwnerCondition = "AND d.OWNER = c.OWNER";
}
return "SELECT c.*,
(
SELECT d.comments
FROM $colCommentsTableName d
WHERE d.TABLE_NAME = c.TABLE_NAME
AND d.COLUMN_NAME = c.COLUMN_NAME " . $innerOwnerCondition . "
) AS comments
FROM $tabColumnsTableName c
WHERE c.table_name = " . $table . " $ownerCondition
ORDER BY c.column_name";
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加