Visual Studio 2008 のクエリ ペインでエラーが発生しますが、それがわかりません。
関数の引数のリストにエラーがあります: '=' が認識されません。クエリ テキストを解析できません。
構文をクリーンアップし、適切な引用符をいくつか追加した後も、問題は解決しませんでした。とにかくクエリを実行しようとしたところ、Visual Studio 2008 で際限なく待機してしまいました。
これがクエリです。
SELECT
leg.tsrido,
leg.tsrnum,
shipment.dosvlg,
condition(leg.tsakti = 1, load.land, unload.land),
condition(leg.tsakti = 1, load.postun, unload.postun),
condition(leg.tsakti = 1, load.tsadr1, unload.tsadr1)
FROM
tsroma leg
LEFT OUTER JOIN (SELECT * FROM tsdsmd WHERE (srtdos = 'd')) shipment
ON leg.dosvlg = shipment.dosvlg
LEFT OUTER JOIN (SELECT * FROM tsdnaw WHERE (tsroln = 1)) load
ON leg.dosvlg = load.dosvlg
LEFT OUTER JOIN (SELECT * FROM tsdnaw WHERE (tsroln = 3)) unload
ON leg.dosvlg = unload.dosvlg
WHERE (leg.tsrido = 79106279)
ORDER BY 2
ODBC を使用しており、接続文字列に Driver={UNIMS} が含まれています。私のアプリケーションでサポートする必要があるのは非常に古いデータベースです。
おそらくどこかで構文に問題があるのでしょうが、私にはわかりません。
Edit1: UNIMS データベースで「WORKS」する条件コードの例を次に示します。(古いアプリケーションの AnsiString から取り出したものです。)
condition(leg.tstohn = '" + pAuthorization[7] + "', shipment.pllaad, shipment.pllos)
condition(leg.tstohn = '" + pAuthorization[7] + "', shipment.tslzcd, shipment.tsuzcd)
condition(leg.tstohn = '" + pAuthorization[7] + "', shipment.lalaad, shipment.lalos)
condition(leg.tstohn = '" + pAuthorization[7] + "', shipment.nmlaad, shipment.nmlos) zkafz
condition(leg.tstohn = '" + pAuthorization[7] + "', shipment.adrlaa, shipment.adrlos)
編集2:
また、UNIMS SQL UNIMS SQL に関する多くのドキュメントを見つけることができません。さらに役立つ情報を次に示します。
- ドライバー={UNIMS};
- ODBC 用の .NET Framework データ プロバイダー
- UNIMS SQL
- ステートオープン
- バージョン 02.05.0028
Edit3: これがC#コード全体です
public string qShipments(string a)
{
string q = "";
#region Oracle
if (env == "Oracle")
{
/* string Oracle_Shipment
* Alias issue: http://stackoverflow.com/questions/14218695/ora-00972-identifier-is-too-long
SELECT DISTINCT
csl."tripNumber",
csl."shipmentNumber",
csl."legType",
csl."planSequence",
csl."toHubSearchname",
CASE WHEN csl."legType" = 1 THEN Address1."countryCode" ELSE Address3."countryCode" END countryCode,
CASE WHEN csl."legType" = 1 THEN Address1."postcode" ELSE Address3."postcode" END postcode,
CASE WHEN csl."legType" = 1 THEN Address1."streetLine1" ELSE Address3."streetLine1" END streetLine
FROM
"cef_v_cw_trip" ct
LEFT OUTER JOIN "cef_v_cw_shipmentLegs" csl
ON ct."tripNumber" = csl."tripNumber"
LEFT OUTER JOIN "cef_v_cw_shipment" cs
ON csl."shipmentNumber" = cs."shipmentNumber"
LEFT OUTER JOIN (SELECT * FROM "cef_v_cw_fileAddress" WHERE "addressRole" = 1) Address1
ON cs."shipmentNumber" = Address1."fileNumber"
LEFT OUTER JOIN (SELECT * FROM "cef_v_cw_fileAddress" WHERE "addressRole" = 3) Address3
ON cs."shipmentNumber" = Address3."fileNumber"
WHERE ct."tripNumber" = '1045013'
AND csl."toHubSearchname" <> ' '
ORDER BY 4
*/
q = string.Format("SELECT DISTINCT " +
"csl.\"tripNumber\", " +
"csl.\"shipmentNumber\", " +
"csl.\"legType\", " +
"csl.\"planSequence\", " +
"csl.\"toHubSearchname\", " +
"CASE WHEN csl.\"legType\" = 1 THEN Address1.\"countryCode\" ELSE Address3.\"countryCode\" END countryCode, " +
"CASE WHEN csl.\"legType\" = 1 THEN Address1.\"postcode\" ELSE Address3.\"postcode\" END postcode, " +
"CASE WHEN csl.\"legType\" = 1 THEN Address1.\"streetLine1\" ELSE Address3.\"streetLine1\" END streetLine " +
"FROM " +
"\"{0}v_cw_trip\" ct " +
"LEFT OUTER JOIN \"{0}v_cw_shipmentLegs\" csl " +
"ON ct.\"tripNumber\" = csl.\"tripNumber\" " +
"LEFT OUTER JOIN \"{0}v_cw_shipment\" cs " +
"ON csl.\"shipmentNumber\" = cs.\"shipmentNumber\" " +
"LEFT OUTER JOIN (SELECT * FROM \"{0}v_cw_fileAddress\" WHERE \"addressRole\" = 1) Address1 " +
"ON cs.\"shipmentNumber\" = Address1.\"fileNumber\" " +
"LEFT OUTER JOIN (SELECT * FROM \"{0}v_cw_fileAddress\" WHERE \"addressRole\" = 3) Address3 " +
"ON cs.\"shipmentNumber\" = Address3.\"fileNumber\" " +
"WHERE ct.\"tripNumber\" = {1} " +
"AND csl.\"toHubSearchname\" <> ' ' " +
"ORDER BY 4", prefix, a.ToString());
}
#endregion
#region UNIMS
if (env == "UNIMS")
{
/* string Unims shipment
* http://stackoverflow.com/questions/14379573/error-in-list-of-function-arguments-not-recognized-unable-to-parse-query-t
SELECT
leg.tsrido,
leg.tsrnum,
shipment.dosvlg,
condition(leg.tsakti = 1, load.land, unload.land),
condition(leg.tsakti = 1, load.postun, unload.postun),
condition(leg.tsakti = 1, load.tsadr1, unload.tsadr1)
FROM
tsroma leg
LEFT OUTER JOIN (SELECT * FROM tsdsmd WHERE (srtdos = 'd')) shipment
ON leg.dosvlg = shipment.dosvlg
LEFT OUTER JOIN (SELECT * FROM tsdnaw WHERE (tsroln = 1)) load
ON leg.dosvlg = load.dosvlg
LEFT OUTER JOIN (SELECT * FROM tsdnaw WHERE (tsroln = 3)) unload
ON leg.dosvlg = unload.dosvlg
WHERE (leg.tsrido = 79106279)
ORDER BY 2
*/
q = string.Format("SELECT " +
"leg.tsrido, " +
"leg.tsrnum, " +
"shipment.dosvlg, " +
"condition(leg.tsakti = 1, load.land, unload.land), " +
"condition(leg.tsakti = 1, load.postun, unload.postun), " +
"condition(leg.tsakti = 1, load.tsadr1, unload.tsadr1) " +
"FROM " +
"tsroma leg " +
"LEFT OUTER JOIN (SELECT * FROM tsdsmd WHERE srtdos = 'd') shipment " +
"ON leg.dosvlg = shipment.dosvlg " +
"LEFT OUTER JOIN (SELECT * FROM tsdnaw where tsroln = 1) load " +
"ON leg.dosvlg = load.dosvlg " +
"LEFT OUTER JOIN (SELECT * FROM tsdnaw where tsroln = 3) unload " +
"ON leg.dosvlg = unload.dosvlg " +
"WHERE leg.tsrido = {1} " +
"ORDER BY 2", prefix, a.ToString());
}
#endregion
return q;
}
Edit4: 以下のケースを削除すると、クエリが無限にあることに気付きました。まず、ODBC 接続を再検討しようと思います。
Edit5: ほとんどの場合、PuTTY またはマシンに直接接続しても機能しないようです。何らかの理由で、リソースを大量に消費するクエリになってしまいます。新しいアプローチ: PuTTY の適切なクエリで問題が解決されましたが、これは ODBC Unim ではまだ受け入れられていません。
select
leg.tsrido,
leg.tsrnum,
dosier.dosvlg,
condition(leg.tsakti = 1, dosier.lalaad, dosier.lalos),
condition(leg.tsakti = 1, dosier.pklaad, dosier.pklos),
condition(leg.tsakti = 1, dosier.tsla1, dosier.tsua1)
from
tsroma leg
left outer join dosier
on leg.dosvlg = dosier.dosvlg
where
leg.tsrido = 79106279
order by 2;
最終編集:
Visual Studio が条件の unims 構文を認識しないにもかかわらず、上記のコードは正しく動作します。サーバーによると、古いクエリがスタックし、サイズが 100 MB を超えたため、それらのプロセスが強制終了されました。10 年前のデータベースは実に奇妙なものです。