在Oracle中选择column_names时的列顺序

时间:2016-06-16 04:48:48

标签: php oracle

我希望显示表格内容以及列名称。

我使用SQL查询列

"SELECT COLUMN_NAME FROM ALL_TAB_COLUMNS WHERE TABLE_NAME = $mytable"

我使用SQL查询内容

"SELECT * FROM $mytable"

两者都运转良好。唯一的是,列的顺序是不同的。有时它只是反过来。根据$ mytable中的列数,有时它会反转2-3列。

2 个答案:

答案 0 :(得分:4)

您需要在ALL_TAB_COLUMNS上查询COLUMN_ID时包含订单:

"SELECT COLUMN_NAME FROM ALL_TAB_COLUMNS WHERE TABLE_NAME = $mytable ORDER BY COLUMN_ID".

按订单创建的顺序对列进行排序。

答案 1 :(得分:0)

可能更好的方法是简单地从返回的结果集中读取列名。这意味着您只需要一个查询:

$conn = oci_connect($username, $password, $connectionString);
$stmt = oci_parse($conn, 'select * from mytable');
oci_execute($stmt);

$headers = false;
while ($row = oci_fetch_assoc($stmt)) {
    if (!$headers) {
        // this will only output the headers on the first iteration.
        print_r(array_keys($row));
        $headers = true;
    }
    print_r($row);
}

或者你可以对结果集使用oci_field_name(),但我总觉得上面的方法更简单。

编辑: 如果没有结果,您将无法获取密钥(因为数组为空)。您可以在while循环后添加以下代码来处理:

if (!$headers) {
    for ($i = 1; $i <= oci_num_fields($stmt); $i++) {
        echo oci_field_name($stmt, $i), PHP_EOL;
    }
}