メニューボタン
IBMi海外記事2024.06.26

SQLとRPGを使ったお遊びプログラム

Gregory Simmons 著

編集者注: この記事は、当初は4月1日に公開する予定でした(冗談抜きで)。諸事情により、エイプリル フールには間に合いませんでしたが、面白い内容ですので、普通の日でもお楽しみいただけると思います。

その日は朝から、ちょっと面白そうなことをやってみたい気分でした。嘘ではありません。ACSのRSSで、以下のSQLを実行してみようと思うことはよくあります。

 select *
 from json_table(
      QSYS2.HTTP_GET('https://icanhazdadjoke.com/',
              '{"header": "Accept,application/json", "sslTolerate":"true"}'),
              'lax $' columns ("joke" varchar(200) CCSID 1208)
      )

それなりに面白いオヤジギャグでした。これなら、あまり害のない健全なお遊びと言えるでしょう。しかし私は思いました。これを簡単なRPGプログラムに変換するとしたらどうなるでしょうか。そうすれば、いつでもそのプログラムを呼び出して、同僚全員にオヤジギャグをメール送信することも可能になります。ただし、すべてのRPGショップに騒動を広めたと非難されたくはないので、V7R4 TR6またはV7R5でRPGへの新たな機能強化として追加されたsnd-msg命令コードを使用して、自分のジョブ・ログへ項目を書き込むだけにとどめようと思います。思い付いたプログラムは、次のようなものでした。

**Free
Ctl-Opt Main(DAD_Joke_Generator);
Ctl-Opt Debug Option(*SrcStmt:*NoDebugIO);
Ctl-Opt ActGrp(*Caller);

Dcl-Proc DAD_Joke_Generator;

Dcl-Pi DAD_Joke_Generator;
End-Pi;

Dcl-s dad_joke VarChar(200);

Exec SQL
  Select *
  Into :dad_joke
  From json_table(QSYS2.HTTP_GET('https://icanhazdadjoke.com/',
 '{"header": "Accept,application/json",                          "sslTolerate":"true"}'),
                  'lax $'
                  columns ("joke" varchar(200) CCSID 1208)
                 );

snd-msg dad_joke;

// Or if you're feeling devious, email all your coworkers a dad joke...

Return;

On-Exit;
End-Proc DAD_Joke_Generator;
 

ご覧の通り、前述のSQLステートメントを実行して、 https://icanhazdadjoke.com/ からオヤジギャグを取得する、簡単なリニア メインRPGプログラムです。次いで、新たなsnd-msg命令コードを使用して、自分のジョブ・ログに項目を書き込みます。これを実行すると、次のようになります。

改めて言いますが、こうすることを容認または推奨しようとしているわけではありません。デモ プログラムでメール送信ロジックを省いたのは、そういう理由からです。もしかしたら、このプログラムを実行してみたいという方もいるかもしれません。たとえば、毎週、月曜日の朝に、自分宛てにオヤジギャグをメール送信するだけなら、IBM i のジョブ スケジューラーを使用することもできます。項目の追加は、次のように、ADDJOBSCDE(ジョブ・スケジュール項目追加)コマンドを使用すれば簡単です。

ADDJOBSCDE JOB(APRILFOOLS)          
                           CMD(CALL PGM(APRILFOOLS))
                           FRQ(*WEEKLY)            
                           SCDDATE(*NONE)          
                           SCDDAY(*MON)            
                           SCDTIME('06:00:00')     

V7R2M0で、DB2 for iチームによって、SCHEDULED_JOB_INFOビューが提供されています。このビューは、たとえば、月曜日の朝、午前6時00分00秒に実行するようにスケジュールされているすべてのジョブを確認しようと思ったときには、実に有用です。

SELECT SCDJOBNAME,STATUS,SBMTIMSTMP,SCHEDULED_DATE_VALUE,
   		  SCHEDULED_TIME,SCHEDULED_DAYS, COMMAND_STRING
FROM QSYS2.SCHEDULED_JOB_INFO
Where STATUS = 'SCHEDULED' and
      	  SCHEDULED_DAYS = '*MON' and
      	  SCHEDULED_TIME = '06.00.00'
ORDER BY SCDJOBNAME

ジョブ スケジュール項目の処理で利用可能なコマンドは他にもあります。

もし仮に、悪巧みがもっと先に進んでいて、本当に、同僚にメール送信するようにするように、DADJOKESプログラムをセットアップしてしまっているのだとすれば、RMVJOBSCDE(ジョブ・スケジュール項目除去)コマンドを使用して、スケジュールされているジョブ項目をすぐにも削除したいと思うかもしれません。その場合は、たとえば、次のようにします。

RMVJOBSCDE JOB(APRILFOOLS)

このオヤジギャグを取得するSQLステートメントを、ご自身でも試してみてください。クスッとでも笑えるようなものが見つかるとよいと思います。また、ジョブ スケジュール項目の処理と同様に、snd-msg命令コードが有用であることがお分かりいただけたとすれば幸いです。

あわせて読みたい記事

PAGE TOP