質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Q&A

解決済

1回答

818閲覧

VisualStudio2017 Professinal にて OracleデータをSQL発行から得ようとする型付きデータセットを定義しようとしているが、Syntaxエラーを招く

saya24

総合スコア247

Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

0グッド

0クリップ

投稿2020/11/18 11:45

開発端末の情報: Windows10 / VisualStudio2017 Professinal
データベースサーバ:Oracle12C

当該VisualStudioには ODTという OracleDataBaseとやりとりをスムースに進めるための開発ライブラリを導入中です。
SELECT発行の結果を 型付きデータセットに得られるよう、予めそのライブラリにて 無事に発行できるSQL文を作成しました。

以下の画像1のとおりです。(無事に結果を得られている)

画像1

データが得られる

その仕上がったSELECT文をデータセットのクエリ文に採用すると 以下の画像2のようになってしまいます。

画像2

CASE文の失敗
###対策があれば教えてください。CASE文を解釈できない不具合でしょうか

ORACLE

1SELECT A.ITEMCODE AS 親品目コード, TO_CHAR(SUBSTR(A.RECIPECODE, - 4)) AS 構成パターン, B.INPUTORDER AS 工程順序, B.RECIPEORDER AS 出力順, 2'' AS 代替グループコード, TO_CHAR(SYSDATE, 'YYYYMMDD') AS 使用開始日, 3B.INPUTITEMCODE AS 子品目コード, 'R00001' AS 手順コード, 4C.OUTPUTVOLUME AS 親必要量, 5CASE WHEN D.STRENGTHUNITFLAGEX=-1 THEN ROUND((B.VOLUME * ABS(B.RATIOFLG) / D.STANDARDSTRENGTHUNITRATIO), B.DECIMALPOINTDEGIT) ELSE ROUND(B.VOLUME * ABS(B.RATIOFLG), B.DECIMALPOINTDEGIT) END AS 子投入量, 6CASE WHEN D.STRENGTHUNITFLAGEX=-1 THEN ROUND((B.VOLUME * ABS(B.RATIOFLG) / D.STANDARDSTRENGTHUNITRATIO), B.DECIMALPOINTDEGIT) ELSE ROUND(B.VOLUME * ABS(B.RATIOFLG), B.DECIMALPOINTDEGIT) END AS 子必要量, 7'0' AS 在庫引当区分, '' AS 代替品目選択区分, 1 AS 代替品目比率, 0 AS 引当優先順位, 8'' AS 着手日起算リードタイム, '' AS 完了日起算リードタイム, 29991231 AS 使用停止日, '0' AS 主原料フラグ, 9'0' AS 賦形薬フラグ, '' AS リビジョン, '' AS 改定日, B.BUDOMARIVOLUME AS 子固定必要量, 10'0' AS MRP対象外フラグ, ' ' AS 明細カテゴリ, '' AS 明細テキスト, '' AS 機器コード, 11D.STANDARDSTRENGTHUNITRATIO AS 標準力価換算係数, D.STRENGTHUNITFLAGEX AS 特殊力価品区分 12FROM SMV_RECIPEPROCESS A INNER JOIN 13SMV_PROCESSINPUT B ON A.INSTRUCTID = B.INSTRUCTID INNER JOIN 14SMV_PROCESSOUTPUT C ON B.INSTRUCTID = C.INSTRUCTID INNER JOIN 15CMV_ITEM D ON B.INPUTITEMCODE = D.ITEMCODE

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Orlofsky

2020/11/18 12:36

10年以上前にオラクル・サポートに相談して公開許可をもらったことですが、テーブル名や列名などにマルチバイト文字を使う時はテーブル名や列名をダブルクォートで囲まないと動作保証されません。
saya24

2020/11/18 12:46

御見解ありがとうございます。 あいにく会社を出てしまったのですが、利用しているテーブルに全角のフィールド名の項目はなかったと思います。 AS名の場合もダブルクォートで括らないとダメでしょうか?? ま、明日確認すれば分かることですが
Orlofsky

2020/11/18 13:00

>ダブルクォートで囲まないと動作保証されません。 サポート契約が有効で明日パッチを適応したらダブルクォーティングしていないマルチバイトのテーブル名や列名などが全部エラーになっても自己責任です、という意味です。
Orlofsky

2020/11/19 09:38

直しておかないと後で恥ずかしい思いをするかと。 DEGIT ↓ DIGIT 見易さを考えたら STANDARDSTRENGTHUNITRATIO ↓ STANDARD_STRENGTH_UNIT_RATIO 他略 くらいにしておいたと方が良いのでは?
saya24

2020/11/19 22:47

データベースの項目名の話ですね? 導入した社外パッケージのデータベースですから 事実フィールド名がそうなっているもので どうすることもできません。
Orlofsky

2020/11/19 22:56

ネーミングがひどいシステムでまともに動作するソフトウェアに出会ったことはありません。心してかかってください。 VIEWを使ってまともなネーミングに直すって方法もありますが。 CREATE TABLE文を載せる気がなければ自己解決にしては?
guest

回答1

0

自己解決

数日間考えていたのですが
購入した社外パッケージのデータベース・テーブル名やレイアウトを公にすると 厄介なことになりかねないので CREATE TABLEの公開は 辞めておきます。
VisualStudioとODTwithODAC(Oracle提供のライブラリ)の関係で 今までも開発過程で諦めなければならない開発手続きを経験してきましたが 今回もその部類とように受け止め 本件をクローズします。

お時間を頂き ありがとうございました。

投稿2020/11/21 00:22

saya24

総合スコア247

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問