DBI - часть 6
my @types = @{$table_data->TYPE};
# $table_data->is_not_null возвращает ссылку на массив типа Boolean,
# указывающий, в каких полях установлен флат 'NOT NULL'.
my @>not_null = @{$table_data->is_not_null};
# $table_data->length возвращает ссылку на массив длин полей. Они
фиксированные
# для типов INT и REAL, но переменые (заданные при создании
# таблицы) для CHAR.
my @length = @{$table_data->length};
# Все перечисленные выше массивы возвращаются в одном и том же порядке,
# поэтому $fields[0], $types[0], $ndt_null[0] and $length[0] относятся к одному полю.
foreach $field (0..$#fields) {
print "<TR>\n";
print "<TD>$fields[$field]<TD>$types[$field]<TD>";
print $length[$field]
if $types[$field] eq 'SQL_CHAR';
print "<TD>";
print 'Y' if ($not_null[$field]);
print "</tr>\n"; }
print <<END_OF_HTML; </table>
<P>
<B>Data</b><br>
<OL>
END_OF_HTML
# Теперь мы будем построчно перемещаться по данным с помощью DBI::fetchrow_array().
# Мы сохраним данные в массиве в таком же порядке, как и в информационных
# массивах (§fields, @types, etc,), которые мы создали раньше.
while(my(@data)=$table_data->fetchrow_array) {
print "<LI>\n<UL>";
for (0..$#data) {
print "<LI>$fields[$_] => $data[$_]</li>\n"; }
print "</ulx/li>"; }
print «END_OF_HTML;
</ol>
</body></html>
END_OF_HTML