我正在创建一个脚本,如果我输入内容,我需要提示要求更新记录,如果我将其保留为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中,所以如果我在那里调用它可能我可以这样做(idk I还是新的。
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;