質問: ### 前提・実現したいこと ファイル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の数式は全て読み込みが完了しましたが、書き出しをする際、どのように計算が行われる処理を記述すれば良いかわかりません。 方法としては 1shikiの計算対象になる数字をSUBSTR関数を使い切り取る。 21で切り取った数字をそれぞれ変数に置き換える(4+8だと変数hidari=4、変数migi=8) 3if文を使い もしshiki内に'+'が含まれていた場合『hidari+migi=kai』 もしshiki内に'-'が含まれていた場合『hidari-migi=kai』 ・ ・ ・ 4samplefile2.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 ```
回答: SQLで計算するというのはどうですか。 ``` select 4+8 from dual ``` 上記のSQLを動的SQLとして生成して実行する。 OracleのEXECUTE IMMEDIATE 動的SQL【PL/SQL】 ``` EXECUTE IMMEDIATE 'select ' || shiki || ' from dual' INTO kai ``` ファイルの計算式で使用されている演算子が、SQLで使用される演算子と異なる場合は、変換。