Announcement

Collapse
No announcement yet.

Hilfe, vergleichen von Werten

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Hilfe, vergleichen von Werten

    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:
    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>";
        }    

    Als zweites versuche ich nun die Indices zu vergleichen, gleiches Prinzip wie oben.
    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>";
        }    

    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

  • #2
    Dann mal indirekte Hilfe:

    Was steht im error.log des Servers?
    Christian

    Comment


    • #3
      Originally posted by Christian Marquardt View Post
      Dann mal indirekte Hilfe:

      Was steht im error.log des Servers?
      Hi, hab den Fehler gefunden habe die Variable $value zweimal vergeben und deswegen hat es gehakt.

      Möchte die beiden Scripts jetzt aber gerne zusammen fügen aber bekomm das nicht hin, kann mir da einer heolfen?

      Comment


      • #4
        Originally posted by Pillemon View Post
        Hi, hab den Fehler gefunden habe die Variable $value zweimal vergeben und deswegen hat es gehakt.
        Nicht nur $value! Du verwendest auch $column mehrfach in ineinandergeschachtelten foreach-Schleifen!

        Originally posted by Pillemon View Post
        Möchte die beiden Scripts jetzt aber gerne zusammen fügen aber bekomm das nicht hin, kann mir da einer heolfen?
        Was ist fügen?

        Gruß Falk
        Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

        Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

        Comment

        Working...
        X