2011-07-21 9 views
0

Oracleドライバの多くの場所で「ORA-01722:無効な番号」というエラーが表示されます。あなたは回避策/解決策を指摘できますか?問題多くの箇所で「ORA-01722:number number invalid」エラーが発生しました

PDOException: SELECT base.fid AS fid, base.uid AS uid, 
    base.filename AS filename, base.uri AS uri, base.filemime AS filemime, 
    base.filesize AS filesize, base.status AS status, base.timestamp AS timestamp 
    FROM {file_managed} base 
    WHERE (base.fid IN (:db_condition_placeholder_0)) 
(prepared: SELECT base.fid AS fid, base."UID" AS "UID", 
    base.filename AS filename, base.uri AS uri, base.filemime AS filemime, 
    base.filesize AS filesize, base.status AS status, base.timestamp AS timestamp 
    FROM "FILE_MANAGED" base 
    WHERE (base.fid IN (:db_condition_placeholder_0)) 
) 
e: SQLSTATE[HY000]: General error: 1722 
OCIStmtExecute: ORA-01722: invalid number (ext\pdo_oci\oci_statement.c:146) 
args: Array ([:db_condition_placeholder_0] =>) 
in DrupalDefaultEntityController->load() 
(line 196 of C:\xampp\htdocs\new\drupal\includes\entity.inc). 

答えて

3

わかりやすくありません。しかし、私は推測の気分にあるので、ここに行く:

base.fidは数値の列です。 :db_condition_placeholder_0には、"23, 42, 69"などのトークンの文字列を渡そうとしています。

今、あなたが望んでいるものは、SQLエンジンは、このような行を生成するために一緒にそれをのmungeするということです。

where base.fid in ('23, 42, 69') 

where base.fid in (23, 42, 69) 

ああを、どのようなことが実際に発生することはこれです。論理的には次のようになります。

where base.fid = to_number('23, 42, 69') 

明らかに文字列は有効な数字ではないため、 e ORA-1722。

ここであなたがしていることは難しい問題です。ネストした表や配列、パイプライン関数、動的SQLなど、いくつかのアプローチがあります。どちらがあなたに最も適しているかは、要件の詳細によって異なります。

もちろん、私はあなたの問題についてとにかく推測しています:-)

関連する問題