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

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

新規登録して質問してみよう
ただいま回答率
85.48%
PL/SQL

PL/SQL (Procedural Language/Structured Query Language) はOracle CorporationによるSQL(非手続き型言語)を手続き型言語に拡張させるために開発されたプログラミング言語です。

Q&A

解決済

2回答

1138閲覧

PL/SQLでファイルのデータを読み込み、そのデータの計算結果を別ファイルに出力したい。

odanngo_taifu

総合スコア16

PL/SQL

PL/SQL (Procedural Language/Structured Query Language) はOracle CorporationによるSQL(非手続き型言語)を手続き型言語に拡張させるために開発されたプログラミング言語です。

0グッド

0クリップ

投稿2019/03/29 03:18

編集2019/04/01 23:40

前提・実現したいこと

ファイルsamplefile1.txtに

4+8 -6+3 6*2 10/4 10%3

という5つの数式が記述されています。
この数式を変数shiki、その解を変数kaiとします。
そしてファイルsamplefile2.txtに『shiki=kai』と出力したいです。
例えば今回だと

4+8=12 -6+3=-3 6*2=12 10/4=2.5 10%3=1

となります。

samplefile1.txtの数式は全て読み込みが完了しましたが、書き出しをする際、どのように計算が行われる処理を記述すれば良いかわかりません。
方法としては
①shikiの計算対象になる数字をSUBSTR関数を使い切り取る。
②①で切り取った数字をそれぞれ変数に置き換える(4+8だと変数hidari=4、変数migi=8)
③if文を使い
もしshiki内に'+'が含まれていた場合『hidari+migi=kai』
もしshiki内に'-'が含まれていた場合『hidari-migi=kai』



④samplefile2.txtに出力

という流れを想定しておりますが、SUBSTR関数を使いshikiから数字を2切り取る方法がわからず、悩んでおります。
もしよろしければ、アドバイスを頂けたら幸いです。
よろしくお願い致します。

試したこと

読み込みをしたプロシージャになります。

set serveroutput on --読み込みプロシージャの作成 create or replace procedure yomikomi is v_filename varchar2(200) := 'samplefile1.txt'; file_hand utl_file.file_type; --実行部 begin file_hand := utl_file.fopen('UTL_DATA',v_filename,'r'); loop begin --読み込み utl_file.get_line(file_hand,shiki); dbms_output.put_line(shiki); exception when no_data_found then exit; end; end loop; utl_file.fclose(file_hand); end yomikomi; / execute yomikomi

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

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

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

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

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

odanngo_taifu

2019/04/01 23:41

修正いたしました。ご指摘いただきありがとうございます。
guest

回答2

0

SQLで計算するというのはどうですか。

SQL

1 select 4+8 from dual

上記のSQLを動的SQLとして生成して実行する。

OracleのEXECUTE IMMEDIATE 動的SQL【PL/SQL】

plsql

1 EXECUTE IMMEDIATE 'select ' || shiki || ' from dual' INTO kai

ファイルの計算式で使用されている演算子が、SQLで使用される演算子と異なる場合は、変換。

投稿2019/03/29 04:37

編集2019/03/29 04:39
sazi

総合スコア25173

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

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

odanngo_taifu

2019/04/01 23:47

sazi様 お教えいただきありがとうございます! 動的SQLを使うという発想が思いつかなかったので、大変参考になります。 これから試してみたいと思います。
guest

0

ベストアンサー

INSTR で演算子の位置がわかれば自己解決できるのでは?

投稿2019/03/29 03:39

Orlofsky

総合スコア16415

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

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

odanngo_taifu

2019/04/01 23:43

Orlofsky様 教えていただいたINSTR関数を使い解決できました。 ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問