function什么地方都能直接用,可以在dml里直接调用;
create or replace procedure test as 
begin
insert into testtable values(1);
end;

解决方案 »

  1.   

    补充说明:我这个function是采用sequence来生成一个编号字段值的,形如2003041100008,前面是年月日后加5位的序号。比如我的表mytable(id,name,address,phone),id是用以上规则生成的,在写procedure时调用该function然后将完整的信息insert到mytable,并将id作为procedure的输出参数,如何实现?
      

  2.   

    create or replace procedure test(id string) as 
    begin
    insert into mytable(id,name,address,phone)values(function1(),...);
    end;
      

  3.   

    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;
      

  4.   

    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;对否?请指点
      

  5.   

    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;
      

  6.   

    修正:
    as 
    begin
    o_id :=fuc_get_id();
    insert into mytable(id,name,address,phone) values(o_id,i_name,i_address,i_phone);end;
      

  7.   

    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;
    有什么区别?第一种用法是错误的吗?
      

  8.   

    多余的,function可以直接写在insert语句里面。
      

  9.   

    谢谢 jiezhi(西域浪子) 
    继续问:如何测试存储过程?不知道各位大侠是否用PL/SQL Developer工具
      

  10.   

    如何在sql plus中测试存储过程?
      

  11.   

    sql plus> create procedure xxx as
            >  ....
            >  ....;
            > / 回车
      

  12.   

    to freeit69(freeit69) :
    不是这个意思,是指如何测试它的运行结果?
    意思就是如何执行这个procedure,
    然后我在表中看到它正确执行了,表中多了一条刚刚insert的记录
      

  13.   

    exec 过程名 参数如果有输出参数,先将输出参数置一个值,在程序里面会改写的
      

  14.   

    create or replace procedure testinto
         (
           mkeyid NUMBER, 
           mpsno VARCHAR2, 
           mordid VARCHAR2
         ) 
    isbegin
      insert into tmppsno (keyid,psno,ordid) values (mkeyid,mpsno,mordid);
    end testinto;
      

  15.   

    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;
    有什么区别?第一种用法是错误的吗?
      

  16.   

    等了一下午,终于有人来回答了,sigh……
      

  17.   

    PL/SQL Developer中测试:
    在Developer中左边对存储过程点右键,选Text,则出现测试窗口,窗口下方可以输入参数。
    输入参数后,可点击调试窗口的左上角一个带放大镜的图标,然后这个按钮右边又出现几个按钮,有 执行/进入/单步跟踪等....祝你好运。
      

  18.   

    谢谢POLOM(北岸WUS),可惜我这个帖子已经结了,下次再给你加分吧:)