oracle 雕用object  方法问题   创建了一个 type 
Create Or Replace Type Tp_Tb1_Object As Object
(
Sk Varchar2(20),
Sv Varchar2(20), Member Function Tb1_Delete Return Varchar2
)Create Or Replace Type Body Tp_Tb1_Object Is Member Function Tb1_Delete Return Varchar2 Is
S1 Varchar2(200);
Begin
  S1 := '';
           S1 := 'delete tb1 Where k=''100''';           Execute Immediate S1;
  Commit;
  Return '000';
Exception When Others Then
  Return '001';
End;End;//=============外部调用 object 方法  通过测试Begin
Declare
   m2 TP_TB1_OBJECT;
   s1 Varchar(500);
Begin
  m2 := TP_TB1_OBJECT('100','YYY');
  s1:=m2.tb1_Delete;  dbms_output.put_line(s1);
End;
End;
//=========问题代码 测试出异常
  Function Generate_DYH ( sRoleCode Varchar2 ) Return Varchar2 Is
  s1 Varchar2(50);
  m1 Tp_Tb1_Object;
  Begin
    s1:=sRoleCode;
    m1 := Tp_Tb1_Object('100','AAA');
    s1:= m1.Tb1_Delete;
    Return s1 ;  
  End; 执行:
 Select Generate_DYH('aaa') From dual  
请教各位
谢谢

解决方案 »

  1.   

    其实我是不知你所云的问题到底是什么问题但有一点值得商榷:S1 := 'delete tb1 Where k=''100''';Execute Immediate S1;
    Commit;这几句, 应该改成
    S1 := 'delete tb1 Where k=''100'';Commit;';Execute Immediate S1;
      

  2.   

    create table tb1( k varchar2(100));
    /
    Create Or Replace Type Tp_Tb1_Object As Object
    (
    Sk Varchar2(20),
    Sv Varchar2(20),Member Function Tb1_Delete Return Varchar2
    )
    /
    Create Or Replace Type Body Tp_Tb1_Object IsMember Function Tb1_Delete Return Varchar2 Is
    S1 Varchar2(200);
    Begin
      S1 := '';
               S1 := 'delete tb1 Where k=''100''';           Execute Immediate S1;
      Commit;
      Return '000';
    Exception When Others Then
      Return '001';
    End;End;/
    Declare
       m2 TP_TB1_OBJECT;
       s1 Varchar(500);
    Begin
      m2 := TP_TB1_OBJECT('100','YYY');
      s1:=m2.tb1_Delete;  dbms_output.put_line(s1);
    End;
    /create or replace Function Generate_DYH ( sRoleCode Varchar2 ) Return Varchar2 Is
      s1 Varchar2(50);
      m1 Tp_Tb1_Object;
      Begin
        s1:=sRoleCode;
        m1 := Tp_Tb1_Object('100','AAA');
        s1:= m1.Tb1_Delete;
        Return s1 ;  
      End;/
    --执行查询 
      Select Generate_DYH('aaa') From dual
    --执行结果001
      

  3.   

    oracle 9.2.0.1.0版本测试没有发现问题