PL/SQLで特定の年がうるう年かどうかを判定する方法
本記事では、PL/SQLを使用して、指定された年がうるう年(閏年)かどうかを判定する方法を解説します。PL/SQLでは、関連する宣言文や処理命令のグループがひとつのブロックとしてまとめられ、その中に一連のコマンドを記述していくのが基本的な構造です。
うるう年の判定ルール
うるう年かどうかの判定は、以下のアルゴリズムに基づいて行われます。
- その年が 4で割り切れ、かつ100で割り切れない 場合 → うるう年
- その年が 400で割り切れる 場合 → うるう年
- 上記以外の場合 → うるう年ではない
このロジックを擬似コードで表すと次のようになります。
isLeapYear(year):
begin
if year is divisible by 4 and not divisible by 100, then
it is leap year
else if the number is divisible by 400, then
it is leap year
else
it is not leap year
end
PL/SQLでの実装例
実際にPL/SQLでこの判定処理を書くと、以下のようになります。MOD関数 を使うことで、割り算の余りを簡単に取得でき、割り切れるかどうか(余りが0かどうか)をチェックできます。
DECLARE
year NUMBER := 2012;
BEGIN
IF MOD(year, 4)=0
AND
MOD(year, 100)!=0
OR
MOD(year, 400)=0 THEN
dbms_output.Put_line(year || ' is leap year ');
ELSE
dbms_output.Put_line(year || ' is not leap year.');
END IF;
END;
実行結果
2012 is leap year
コードのポイント
このサンプルでは、変数 year に2012を設定しています。IF文の条件式は以下のように評価されます。
MOD(year, 4)=0 AND MOD(year, 100)!=0:4で割り切れて100で割り切れないかどうかOR MOD(year, 400)=0:あるいは400で割り切れるかどうか
2012年は4で割り切れ、かつ100では割り切れないため、「leap year(うるう年)」と出力されます。なお、1900年のように100で割り切れる年は400でも割り切れないため平年となり、2000年は400で割り切れるためうるう年になります。この点を正確にカバーしているのが、この条件式のポイントです。
-
グラフが木(ツリー)であるかどうかを判定するアルゴリズム
木であるかの判定基準 この問題では、1つの無向グラフが与えられ、そのグラフが木(ツリー)であるかどうかを判定します。判定は木の性質を確認するだけで簡単に行えます。木には閉路(サイクル)が含まれないため、グラフ内に閉路がひとつでも存在すれば、そのグラフは木ではありません。 別のアプローチもあります。グラフが連結であり、かつ辺の本数が V−1 であれば、そのグラフは木であると判定できます。ここで V はグラフの頂点数です。これは「連結なグラフが V−1 本の辺を持つならば、必ず閉路を持たない」というグラフ理論の性質に基づいています。 入力と出力 入力: 隣接行列 0 0 0 0 1 0 0 0
-
PL/SQLでXMLを解析する方法:OracleでのXMLデータ処理ガイド
はじめに この記事では、Oracle® PL/SQLでXMLデータを扱うためのいくつかの方法について解説します。 XMLファイルのデータをOracle PL/SQLの行と列に変換したい場合、以下の2つのアプローチが利用できます。 XMLファイルをXML表にロードしてから解析する XML表にロードせず、XMLファイルを直接解析する XMLデータをOracleの表にロードするには、SQLLOADER、utl_file、XML CLOBなどのオプションを使用します。データを表にロードした後は、各XMLタグから値を抽出する必要があります。XMLデータの抽出には、XMLELEMENT、XMLAGG、