何かを入力した場合にレコードを更新するように求めるプロンプトが表示される必要があるスクリプトを作成しています。null のままにしておくと、更新したくありません。とにかく、CASEまたはNVLと関係があると思います。
最初の部分は番号を要求します。番号を入力すると、STR_NUM に関する情報が表示されます。次に、名前(STR_NAME)を変更するかどうかを尋ねる別のプロンプト(助けが必要な部分)が表示されるはずです。プロンプトを空白のままにすると何も変わりませんが、何かを入力するとSTR_NAMEが変更されるはずです。
ACCEPT v_str_num NUMBER FORMAT 999 PROMPT 'Enter store number:'
SELECT
'Store Name: ' || '' || STR_Name || '' || CHR(13) || CHR(10) ||
'Quantity: ' || '' || STR_QTY || ''
FROM STR
WHERE STR_NUM = &v_STR_NUM;
UPDATE STR
SET STR_NAME = NVL((PROMPT ACCEPT CHAR v_str_name), STR_NAME)
WHERE STR_NUM = &v_str_num;
ただし、プロンプトがまったく表示されません。どういうわけか、選択ステートメントと更新ステートメントを一緒に組み込むことになっていますか?
編集: わかりました、私はただいじっていました。少なくともプロンプトが表示されたので、もっと近いと思いますが、更新部分の式が欠落しているというエラーが表示されます.v_str_nameに保存されるため、そこに電話をかければ可能かもしれませんまだ新しいです)。
ACCEPT v_str_name CHAR FORMAT A20 Prompt 'Enter something '
SELECT
'Update NAME' || '' ||
(UPDATE STR
SET STR_NAME = NVL('&v_str_name',STR_NAME)
WHERE STR_NUM = &v_str_num) || ''
FROM STR;
編集2:わかりました。思ったより簡単です。
ACCEPT v_str_name CHAR FORMAT A20 Prompt 'TYPE NEW NAME OR LEAVE BLANK TO KEEP CURRENT'
UPDATE STR
SET STR_NAME = (SELECT NVL('&v_str_name', STR_NAME)
FROM STR
WHERE STR_NUM = &v_str_num)
WHERE STR_NUM = &v_str_num;