Oracle SQL*Plus ACCEPT语句

1 sql database oracle plsql sqlplus

我需要一些SQL*Plus脚本的帮助.有没有什么方法可以让它接受一个变量,检查表是否匹配,如果它发现它退出程序而不继续其余的接受语句?

到目前为止我有这个代码:

ACCEPT p_cname PROMPT 'Enter Customer Name: '
DECLARE
     v_cname CHAR(20);
BEGIN
     SELECT cname INTO v_cname
            FROM customer
     WHERE cname = '&p_cname';

     IF v_name = '&p_cname' THEN
            -- Exit the program
     END IF;
END;
/

-- Other ACCEPT statements if a match was not found.
Run Code Online (Sandbox Code Playgroud)

如果找到匹配项,我不希望它继续使用程序的其余部分.有没有办法做到这一点?

Dav*_*sta 6

您可以通过启用错误检查然后引发错误来完成此操作.

ACCEPT p_cname PROMPT 'Enter Customer Name: '

WHENEVER SQLERROR EXIT SUCCESS ROLLBACK;

DECLARE
     v_count  INTEGER;
BEGIN
     SELECT COUNT(*) INTO v_count
            FROM customer
     WHERE cname = '&p_cname';

     IF v_count > 0 THEN
            raise_application_error( -20100, 'Customer already exists' );
     END IF;

END;
/

-- Issue a new WHENEVER statement here if you want different error-handling for
-- the rest of the script

-- Other ACCEPT statements if a match was not found.
Run Code Online (Sandbox Code Playgroud)

在该WHENEVER命令中,SUCCESS关键字表示SQLPlus将成功代码返回到调用它的shell.您还可以使用FAILURE返回通用故障代码或其他选项来返回特定值.