我希望有人能够帮助我处理我的代码。
- 如果网站('p01')已经存在,则此代码应检查数据库页面(pname,exit_count(number),entry_count(number))。
- 如果网站确实存在,则代码应返回DBMS消息。
- 如果它不存在,则应添加pname,exit_count = 0,entry_count = 0。
- 问题是,一旦我添加了一个网站// exec add_pages('p01'); //如果我尝试添加另一个// exec add_pages('p02'); //我收到了DBMS消息,而不是将网站添加到Pages数据库。
- 非常感谢任何帮助或建议。
- 代码必须采用以下格式,就像学校项目一样。
set serveroutput on size 1000000 format wrap
create or replace procedure add_pages (
pname in pages.pname%type)
as
page_name number;
begin
select count(*) into page_name from pages
where pages.pname = pname;
if
page_name > 0 then
dbms_output.put_line('This Website Already Exists!');
else
insert into pages values(pname, 0, 0);
end if;
end;
/
答案 0 :(得分:3)
不要提供与表中的列冲突的参数名称。
如果您有查询
select count(*)
into page_name
from pages
where pages.pname = pname;
您可能意味着“将pname
参数中的值与pname
表的pages
列中的值进行比较”。但实际上,= pname
解析为表中的列而不是同名参数。因此,您的查询最终会计算表中pname
不为NULL的所有行。
您可以完全限定参数名称
select count(*)
into page_name
from pages
where pages.pname = add_pages.pname;
但是,大多数人会采用约定来分隔参数名称,变量名称和列名称。就个人而言,我通常使用p_
前缀作为参数,l_
作为局部变量。但是有许多可能的命名约定可以避免错误。
create or replace procedure add_pages (
p_pname in pages.pname%type)
as
l_page_count number;
begin
select count(*)
into l_page_name
from pages
where pages.pname = p_pname;
if l_page_count > 0 then
dbms_output.put_line('This Website Already Exists!');
else
insert into pages values(p_pname, 0, 0);
end if;
end;