【发布时间】:2013-06-26 11:28:54
【问题描述】:
我正在写下面的代码。将过程 IN 参数与光标值进行比较。
create or replace procedure dashboard_addtion(customer_name IN varchar2)
IS
num number:=0;
CURSOR cname_cur
IS Select customername from customer_master;
cname varchar2(300);
begin
for cname in cname_cur loop
if upper(cname.customername)!=upper(customer_name) then
num:=num+1;
end if;
end loop;
if num != 0 then
insert into customer_master select max(customerid) + 1, customer_name
from customer_master;
end if;
end;
一直在执行 INSERT 语句。
【问题讨论】:
-
标题似乎与问题无关,但我不完全确定问题是什么。您正在遍历所有现有记录并计算与您的参数不匹配的记录;如果 any 不匹配,那么您将插入一条新记录。您是否真的仅在不存在与参数匹配的记录时才尝试插入新记录?你不需要一个光标。
-
@AlexPoole:是的,Alex 我正在尝试插入新记录,只有当它已经不存在时。
-
@AlexPoole:是的,我知道不使用光标是可能的。但我只是想清楚地了解光标的工作原理,请建议 TY :)
-
其中有很多变量名称混淆,过程名称拼写错误——所有这些都会让你和同事在真实的开发环境中发疯。将您的 PL/SQL 变量命名为与它们等效的数据库列相同,并在 SQL 语句中使用它们时使用 PL/SQL 块名称命名它们(例如,“customer_master.customer_name = dashboard_addition.customer_name”)。
标签: plsql oracle11g oracle10g plsqldeveloper