这样他又说什么 DML中不能有 DDL之类的操作select dbo.fcodeinsert('g','g','c','d','e') from dual;

解决方案 »

  1.   

    过程和函数里不能自己用DDL语句,只能用动态SQL语句来实现。
      

  2.   

    fcodeinsert('g','g','c','d','e') 里面有問題,使用動態sql來處理就好了。
    select distinct codeid from dbo.code;也不對,返回結果集合需要使用包(package)
      

  3.   

    无法在查询中执行DML操作这是我的语句:
    select dbo.fcodeinsert('g','g','c','d','e') from dual;下面是我的函数:
    create or replace function dbo.fCodeInsert
    (v_groupname in dbo.code.groupname %type,
     v_codename in  dbo.code.codename %type,v_codevalue in  dbo.code.codevalue %type,
     v_description in  dbo.code.description %type,v_groupnamechn in  dbo.code.groupnamechn %type)
      return integer is
      Result integer;
    begin
      select nvl(max(codeid),0)+1 into Result from dbo.code;
      insert into dbo.code
             (codeid, groupname, codename, codevalue, description, groupnamechn, canedit)
      values
            (Result, v_groupname, v_codename, v_codevalue, v_description, v_groupnamechn, 1);
      --result := v_codeid;
      commit work;
      return(Result); 
    exception
      when others then
      begin
         rollback;
         result := -10005;
         return(Result);
      end;
    end fCodeInsert;
      

  4.   

    declare 
      codeid number;
      begin
      codeid := dbo.fcodeinsert('g','g','c','d','e');
      select distinct codeid from dbo.code;
      dbms_output.put_line(codeid);
    end;
    用这种方式他又说缺少Into子句:
    难道这种方式就不能返回结果值吗?