0

この問題は私の大学のある実技試験で出題されました。Q: テーブルには次の列見出し/列があります:

medicine_name,medicine_manufacture_date,medicine_expiry_date.

列見出しの名前が示すように、それらには薬に関するそれぞれのデータがあります。ここで、有効期限が切れたすべての薬の名前のリストを作成するために、pl/sql ブロッ​​クを作成するように要求されました (つまり、現在のシステム日付が薬の有効期限の値よりも大きい)。連続する連続した整数 (1、2、3、... n など) の列をテーブルに追加する必要があると強く思います。これは、各薬名の主キーとして機能します。薬名は一意ですが、反復を実行するには整数の主キーを持つ必要があります。不整数の主キーを割り当てずに結果を取得することはまだ可能ですか?

私はテーブルを変更し、各レコードに主キーを割り当て、次のブロックを書きました...うまくいきましたが、主キーを割り当てずにやりたいです。すべての可能なスマートな方法が愛されます!Plz は私のコード内の任意のタイプの修正を提案します...私のコードは次のとおりです。

   declare
         a date;
         b date;
        diff number(10);
        medicine varchar(25);
   begin
              a:=sysdate;
                        for i in 1..5
               loop
                       select medicine_expiry_date into b from med_details where med_id=i ;
                            diff:=trunc(a-b);
                  if
                       diff>0  then
                            select medicine_name into medicine from med_details where med_id=i;
                                dbms_output.put_line(medicine);
                          end if;
             end loop;
  end;
  /
4

2 に答える 2

1

試す

BEGIN
  DBMS_OUTPUT.PUT_LINE('The following medicines have expired:');

  FOR aRow IN (SELECT MEDICINE_NAME
                 FROM MEDICINE
                 WHERE EXPIRY_DATE < SYSDATE)
  LOOP
    DBMS_OUTPUT.PUT_LINE(aRow.MEDICINE_NAME);
  END LOOP;
END;

他のテーブルがこのテーブルを参照する必要があり、他の実用的な候補キーが利用できない場合は、このテーブルに人工的な主キーを配置できますが、上記の質問に答える必要はありません。

共有してお楽しみください。

于 2013-07-10T11:14:48.953 に答える