create or replace procedure test(id string) as begin insert into mytable(id,name,address,phone)values(function1(),...); end;
function和procedure有何区别? function有返回值 procedure没有返回值 如何在procedure里调用function? create or replace procedure test(id string) as begin insert into mytable(id,name,address,phone)values(function1(),...); end;
hi, jiezhi(西域浪子) ,看了你很多的帖子,你是个热心人,请详细一点说明:) 上述代码我觉得应该是这样: create or replace procedure test ( i_name varchar2(20), i_address varchar2(30), i_phone varchar2(20), o_id out varchar2(20) ) as begin insert into mytable(id,name,address,phone) values(fuc_get_id(),i_name,i_address,i_phone); o_id=fuc_get_id(); end;对否?请指点
create or replace procedure test ( i_name varchar2(20), i_address varchar2(30), i_phone varchar2(20), o_id out varchar2(20) ) as begin insert into mytable(id,name,address,phone) values(fuc_get_id(),i_name,i_address,i_phone); o_id :=fuc_get_id(); end; function fuc_get_id return varchar2 is newid varchar2(20); begin newid := ...||to_char(seqname.nextvalue); return newid; end;
修正: as begin o_id :=fuc_get_id(); insert into mytable(id,name,address,phone) values(o_id,i_name,i_address,i_phone);end;
to POLOM(北岸WUS) : as begin insert into mytable(id,name,address,phone) values(fuc_get_id(),i_name,i_address,i_phone); o_id :=fuc_get_id(); end; 和如下 as begin o_id :=fuc_get_id(); insert into mytable(id,name,address,phone) values(o_id,i_name,i_address,i_phone); end; 有什么区别?第一种用法是错误的吗?
to freeit69(freeit69) : 不是这个意思,是指如何测试它的运行结果? 意思就是如何执行这个procedure, 然后我在表中看到它正确执行了,表中多了一条刚刚insert的记录
exec 过程名 参数如果有输出参数,先将输出参数置一个值,在程序里面会改写的
create or replace procedure testinto ( mkeyid NUMBER, mpsno VARCHAR2, mordid VARCHAR2 ) isbegin insert into tmppsno (keyid,psno,ordid) values (mkeyid,mpsno,mordid); end testinto;
to POLOM(北岸WUS) : as begin insert into mytable(id,name,address,phone) values(fuc_get_id --此处得到一个ID(),i_name,i_address,i_phone); o_id :=fuc_get_id(); --此处得到id是一个新的ID,因为每运行一次fuc_get_id都会得到不同的ID end; 和如下 as begin o_id :=fuc_get_id(); insert into mytable(id,name,address,phone) values(o_id,i_name,i_address,i_phone); end; 有什么区别?第一种用法是错误的吗?
begin
insert into mytable(id,name,address,phone)values(function1(),...);
end;
function有返回值
procedure没有返回值
如何在procedure里调用function?
create or replace procedure test(id string) as
begin
insert into mytable(id,name,address,phone)values(function1(),...);
end;
上述代码我觉得应该是这样:
create or replace procedure test
(
i_name varchar2(20),
i_address varchar2(30),
i_phone varchar2(20),
o_id out varchar2(20)
)
as begin
insert into mytable(id,name,address,phone) values(fuc_get_id(),i_name,i_address,i_phone);
o_id=fuc_get_id();
end;对否?请指点
(
i_name varchar2(20),
i_address varchar2(30),
i_phone varchar2(20),
o_id out varchar2(20)
)
as
begin
insert into mytable(id,name,address,phone) values(fuc_get_id(),i_name,i_address,i_phone);
o_id :=fuc_get_id();
end;
function fuc_get_id
return varchar2 is
newid varchar2(20);
begin
newid := ...||to_char(seqname.nextvalue);
return newid;
end;
as
begin
o_id :=fuc_get_id();
insert into mytable(id,name,address,phone) values(o_id,i_name,i_address,i_phone);end;
as
begin
insert into mytable(id,name,address,phone) values(fuc_get_id(),i_name,i_address,i_phone);
o_id :=fuc_get_id();
end;
和如下
as
begin
o_id :=fuc_get_id();
insert into mytable(id,name,address,phone) values(o_id,i_name,i_address,i_phone);
end;
有什么区别?第一种用法是错误的吗?
继续问:如何测试存储过程?不知道各位大侠是否用PL/SQL Developer工具
> ....
> ....;
> / 回车
不是这个意思,是指如何测试它的运行结果?
意思就是如何执行这个procedure,
然后我在表中看到它正确执行了,表中多了一条刚刚insert的记录
(
mkeyid NUMBER,
mpsno VARCHAR2,
mordid VARCHAR2
)
isbegin
insert into tmppsno (keyid,psno,ordid) values (mkeyid,mpsno,mordid);
end testinto;
as
begin
insert into mytable(id,name,address,phone) values(fuc_get_id --此处得到一个ID(),i_name,i_address,i_phone);
o_id :=fuc_get_id(); --此处得到id是一个新的ID,因为每运行一次fuc_get_id都会得到不同的ID
end;
和如下
as
begin
o_id :=fuc_get_id();
insert into mytable(id,name,address,phone) values(o_id,i_name,i_address,i_phone);
end;
有什么区别?第一种用法是错误的吗?
在Developer中左边对存储过程点右键,选Text,则出现测试窗口,窗口下方可以输入参数。
输入参数后,可点击调试窗口的左上角一个带放大镜的图标,然后这个按钮右边又出现几个按钮,有 执行/进入/单步跟踪等....祝你好运。