sqlplus使用存储过程更新一行
Sqlplus using stored procedures to update a row
这就是我目前所拥有的。当我输入有效数据和 运行 时,table 会正确更新。当我 运行 它使用我知道 table 中不存在的作者编号时,它仍然 运行s,并且不输出异常语句。有谁知道为什么我的例外似乎不起作用。任何帮助将不胜感激谢谢!
CREATE OR REPLACE PROCEDURE update_authorname
(selected_author_num IN NUMBER,
new_author_first IN CHAR,
new_author_last IN CHAR) AS
BEGIN
UPDATE author
SET author_first = new_author_first, author_last = new_author_last
WHERE author_num = selected_author_num;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
DBMS_OUTPUT.PUT_LINE('No author with this number exists: ' || selected_author_num);
WHEN ROWTYPE_MISMATCH
THEN
DBMS_OUTPUT.PUT_LINE('Error: There was a row type mismatch when updating');
END;
/
这是我以前调用的程序:
BEGIN
update_authorname(6,'Emma','White');
END;
/
当 where
子句不匹配时,update
语句不会抛出异常,它只是默默地失败。相反,您需要检查:
- 尝试更新前的行
exists
或
- 更新改变了一些东西。
1.该行存在
CREATE OR REPLACE PROCEDURE update_authorname
(selected_author_num IN NUMBER,
new_author_first IN CHAR,
new_author_last IN CHAR) AS
BEGIN
IF NOT EXISTS (SELECT 1 FROM author WHERE author_num = selected_author_num;
DBMS_OUTPUT.PUT_LINE('No author with this number exists: ' || selected_author_num);
ELSE
UPDATE author
SET author_first = new_author_first, author_last = new_author_last
WHERE author_num = selected_author_num;
EXCEPTION
WHEN ROWTYPE_MISMATCH
THEN
DBMS_OUTPUT.PUT_LINE('Error: There was a row type mismatch when updating');
END;
/
2。更新进行了更改
CREATE OR REPLACE PROCEDURE update_authorname
(selected_author_num IN NUMBER,
new_author_first IN CHAR,
new_author_last IN CHAR) AS
BEGIN
UPDATE author
SET author_first = new_author_first, author_last = new_author_last
WHERE author_num = selected_author_num;
IF @@ROWCOUNT <= 0
DBMS_OUTPUT.PUT_LINE('No author with this number exists: ' || selected_author_num);
EXCEPTION
WHEN ROWTYPE_MISMATCH
THEN
DBMS_OUTPUT.PUT_LINE('Error: There was a row type mismatch when updating');
END;
/
当然还有其他方法可以达到相同的结果,但这是最常见的两种。
这就是我目前所拥有的。当我输入有效数据和 运行 时,table 会正确更新。当我 运行 它使用我知道 table 中不存在的作者编号时,它仍然 运行s,并且不输出异常语句。有谁知道为什么我的例外似乎不起作用。任何帮助将不胜感激谢谢!
CREATE OR REPLACE PROCEDURE update_authorname
(selected_author_num IN NUMBER,
new_author_first IN CHAR,
new_author_last IN CHAR) AS
BEGIN
UPDATE author
SET author_first = new_author_first, author_last = new_author_last
WHERE author_num = selected_author_num;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
DBMS_OUTPUT.PUT_LINE('No author with this number exists: ' || selected_author_num);
WHEN ROWTYPE_MISMATCH
THEN
DBMS_OUTPUT.PUT_LINE('Error: There was a row type mismatch when updating');
END;
/
这是我以前调用的程序:
BEGIN
update_authorname(6,'Emma','White');
END;
/
当 where
子句不匹配时,update
语句不会抛出异常,它只是默默地失败。相反,您需要检查:
- 尝试更新前的行
exists
或 - 更新改变了一些东西。
1.该行存在
CREATE OR REPLACE PROCEDURE update_authorname
(selected_author_num IN NUMBER,
new_author_first IN CHAR,
new_author_last IN CHAR) AS
BEGIN
IF NOT EXISTS (SELECT 1 FROM author WHERE author_num = selected_author_num;
DBMS_OUTPUT.PUT_LINE('No author with this number exists: ' || selected_author_num);
ELSE
UPDATE author
SET author_first = new_author_first, author_last = new_author_last
WHERE author_num = selected_author_num;
EXCEPTION
WHEN ROWTYPE_MISMATCH
THEN
DBMS_OUTPUT.PUT_LINE('Error: There was a row type mismatch when updating');
END;
/
2。更新进行了更改
CREATE OR REPLACE PROCEDURE update_authorname
(selected_author_num IN NUMBER,
new_author_first IN CHAR,
new_author_last IN CHAR) AS
BEGIN
UPDATE author
SET author_first = new_author_first, author_last = new_author_last
WHERE author_num = selected_author_num;
IF @@ROWCOUNT <= 0
DBMS_OUTPUT.PUT_LINE('No author with this number exists: ' || selected_author_num);
EXCEPTION
WHEN ROWTYPE_MISMATCH
THEN
DBMS_OUTPUT.PUT_LINE('Error: There was a row type mismatch when updating');
END;
/
当然还有其他方法可以达到相同的结果,但这是最常见的两种。