PEAR::DBでOracleをもうちょっと便利に(1)
PEAR::DBやPEAR::DB_DataObjectを使っていると、PEAR::DBがOracleにおざなりな対応しかしていないために、いろいろと不便な思いをすることがあり、自分で解析してHackしてしまうことが、ままあります。
今回のHackは、OracleのPrimary Key制約をDB_DataObjectが自動的に見つけられるようにするためのものです。
DB/oci8.php
1005,1017c1005,1008
< $q_fields= 'SELECT t.column_name, t.data_type, t.data_length, '
< . ' t.nullable, c.position '
< . 'FROM user_tab_columns t,'
< . ' (SELECT ucc.table_name, ucc.column_name, ucc.position'
< . ' FROM user_constraints uc, user_cons_columns ucc'
< . ' WHERE uc.owner = ucc.owner AND'
< . ' uc.constraint_name = ucc.constraint_name AND'
< . ' uc.constraint_type = 'P' AND '
< . ' uc.table_name = ucc.table_name) c '
< . "WHERE t.table_name = '$result' AND "
< . ' t.table_name = c.table_name(+) AND'
< . ' t.column_name = c.column_name(+) '
< . 'ORDER BY t.column_id';
---
> $q_fields = 'SELECT column_name, data_type, data_length, '
> . 'nullable '
> . 'FROM user_tab_columns '
> . "WHERE table_name='$result' ORDER BY column_id";
1035,1036c1026
< 'flags' => ((@OCIResult($stmt, 4) == 'N') ? 'not_null' : '') .
< ((@OCIResult($stmt, 5) > 0) ? ' primary' : ''),
---
> 'flags' => (@OCIResult($stmt, 4) == 'N') ? 'not_null' : '',
これで、少なくともPrimary Key制約は自動的に取ってこれるようになります。また必要になったらUnique Keyなども取れるようにするかもしれませんが、今回はこれまで。
| 固定リンク


コメント