0

我正在创建一个脚本,如果我输入一些内容,我需要一个提示来要求更新记录,如果我将其保留为空,我不想更新。无论如何,我认为这与 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;

但是我根本无法得到提示。我是否应该以某种方式将 select 和 update 语句合并在一起?

编辑: 好的,我一直在胡闹。我想我可能更接近了,因为至少我得到了提示,但是我得到了更新部分的缺失表达式错误。由于它将存储在 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;
4

0 回答 0