如何使用提示更新记录。(如果null不更新)

时间:2015-05-07 23:33:56

标签: sql oracle sql-update sqlplus nvl

我正在创建一个脚本,如果我输入内容,我需要提示要求更新记录,如果我将其保留为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;

0 个答案:

没有答案