2016-06-16 12 views
0

列の名前とともに表の内容を表示する必要があります。Oracleでcolumn_namesを選択するときの列の順序

私は列

"SELECT COLUMN_NAME FROM ALL_TAB_COLUMNS WHERE TABLE_NAME = $mytable" 

のためのSQLクエリを使用していると私は両方が正常に動作しているコンテンツ

"SELECT * FROM $mytable" 

のためのSQLクエリを使用していました。唯一のことは、列の順序が異なることです。いくつかの時間はちょうど逆です。 $ mytableの列数に応じて2〜3列のシフトがあると逆転することがあります。

+0

私は答えを提供していますが、列名データクエリから分離を照会するために、このアプローチを取っている私はなぜわかりませんか? – Wolf

+0

ALL_TAB_COLUMNSではなくUSER_TAB_COLUMNSを使用できますか。同じ名前の異なるスキーマに複数の表が存在し、ユーザーがこれらの表に付与している場合は、ALL_TAB_COLUMNSの両方の表に関連する列名が取得されます。 USER_TAB_COLUMNSを使用しない場合は、OWNER = 条件をクエリに追加します。あなたの問題を解決するには、ORDER BY COLUMN_IDを追加してください。 –

答えて

2

あなたがCOLUMN_IDALL_TAB_COLUMNSを照会する際順を含める必要があります。

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

これは、作成した順序で列を注文。

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; 
    } 
} 
関連する問題