Hallo Leute, ich habe mir 2 Skripte geschrieben um den aktuellen Inhalt einer Oracle Datenbank mit dem Inhalt wie es sein soll zu vergleichen.
Das erste Script zum vergleichen der Dateninhalte der Datenbank klappt.
Hier dennoch mal der Quellcode:
Als zweites versuche ich nun die Indices zu vergleichen, gleiches Prinzip wie oben.
Leider kalppt dies nicht.
Wenn ich die Datei im Brwoser aufrufe, kommt es zum error: HTTP 500 Interner Serverfehler.
Hat vielleicht einer von euch ne Ahnung was da schief läuft und/oder kann mir direkt helfen
Das erste Script zum vergleichen der Dateninhalte der Datenbank klappt.
Hier dennoch mal der Quellcode:
PHP Code:
include 'oracle_test_array.php';
function array_key_exists_r($needle, $haystack)
{
$result = array_key_exists($needle, $haystack);
if ($result) return $result;
foreach ($haystack as $v) {
if (is_array($v)) {
$result = array_key_exists_r($needle, $v);
}
if ($result) return $result;
}
return $result;
}
$table_array = array();
$db->queryStmt('SELECT table_name FROM USER_TABLES');
while ($row = $db->fetchRow())
{
if(strpos($row['table_name'],'$'))
continue;
$db2->queryStmt('SELECT ' .
'LOWER(table_name) as table_name, ' .
'LOWER(column_name) as column_name, ' .
'LOWER(data_type) as data_type, ' .
'data_length, ' .
'data_default, ' .
'nullable ' .
'FROM user_tab_columns ' .
'WHERE table_name=\'' . $row['table_name'] . '\'');
while ($col = $db2->fetchRow())
{
$table_array[$col['table_name']][$col['column_name']]['data_type'] = $col['data_type'];
$table_array[$col['table_name']][$col['column_name']]['data_length'] = $col['data_length'];
$table_array[$col['table_name']][$col['column_name']]['data_default'] = $col['data_default'];
$table_array[$col['table_name']][$col['column_name']]['nullable'] = $col['nullable'];
}
}
$array_for_existing_units = array();
$array_for_missing_units = array();
foreach ($oracle_test_array as $table => $column)
{
if(array_key_exists($table, $table_array)) // array_key_exists($table, $table_array)
$array_for_existing_units[] = "Tabelle: <b>" . $table . "</b> existiert";
else
$array_for_missing_units[] = "Tabelle: <b>" . $table . "</b> existiert nicht";
if (is_array($column))
{
foreach ($column as $columnname => $attributes)
{
if(array_key_exists_r($columnname, $table_array)) // array_key_exists_r($columnname, $table_array)
$array_for_existing_units[] = "Feld: <b>" . $columnname . "</b> in Tabelle <br>" . $table . "</b> existiert";
else
{
$array_for_missing_units[] = "Feld: <b>" . $columnname . "</b> existiert nicht in Tabelle: <b>" . $table. "</b>";
continue;
}
if (is_array($attributes))
{
foreach ($attributes as $attrib_name => $attrib_value)
{
if(array_key_exists_r($attrib_name, $table_array))
$array_for_existing_units[] = "Attribut: <b>" . $attrib_name . "</b> des Feld <b>" . $columnname . "</b> existiert";
else
$array_for_missing_units[] = "Attribut: <b>" . $attrib_name . "</b> des Feld <b>" . $columnname . "</b> existiert nicht in <b>" . $table. "</b>";
if($attrib_value != $table_array[$table][$columnname][$attrib_name])
{
$array_for_missing_units[] = "Der Wert <b>" . $attrib_value . "</b> des Attribut <b>" . $attrib_name . "</b> (Tabelle: " . $table . ") entspricht nicht dem aktuellen Wert in der DB. "
. "<br> Möglicherweise Resultat eines geänderten Feld-Name.";
}
}
}
}
}
}
$count_of_array_for_missing_units = count($array_for_missing_units);
if($count_of_array_for_missing_units >= 1)
{
echo "Hier stimmt etwas nicht: <br>";
foreach ($array_for_missing_units as $key =>$value)
{
echo $value."<br>";
}
}
Leider kalppt dies nicht.
PHP Code:
include 'oracle_test_indexes.php';
function array_key_exists_r($needle, $haystack)
{
$result = array_key_exists($needle, $haystack);
if ($result) return $result;
foreach ($haystack as $v) {
if (is_array($v)) {
$result = array_key_exists_r($needle, $v);
}
if ($result) return $result;
}
return $result;
}
$index_array = array();
$db1->queryStmt('SELECT table_name FROM USER_IND_COLUMNS');
while ($row = $db1->fetchRow())
{
if(strpos($row['table_name'],'$'))
continue;
$db3->queryStmt('SELECT ' .
'LOWER(table_name) as table_name, ' .
'LOWER(column_name) as column_name, ' .
'index_name ' .
'FROM USER_IND_COLUMNS ' .
'WHERE table_name=\'' . $row['table_name'] . '\'');
while($index = $db3->fetchRow())
{
$index_array[$index['table_name']][$index['column_name']]['index_name'] = $index['index_name'];
}
}
$array_for_missing_indexes = array();
foreach($oracle_test_indexes as $table => $column)
{
if(is_array($column))
{
foreach($column as $value => $column)
{
if(is_array($value))
{
foreach($value as $key => $value)
if(array_key_exists_r($key, $index_array))
{
if($index_array[$table][$key] == $value)
continue;
else
{
$array_for_missing_indexes[] = "<b>Fehler</b> - Der Wert für: " . $key . "( = " . $index_array[$table][column][$key] . ")"
. "weicht vom erwarteten Wert in oracle_test_indexes ab: " . $oracle_test_indexes[$table][column][$key];
}
}
}
}
}
}
$count_of_array_for_missing_indexes = count($array_for_missing_indexes);
if($count_of_array_for_missing_indexes >= 1)
{
echo "Hier stimmt etwas nicht: <br>";
foreach ($array_for_missing_indexes as $key => $value)
{
echo $value."<br>";
}
}
Hat vielleicht einer von euch ne Ahnung was da schief läuft und/oder kann mir direkt helfen
Comment