解决方案 »

  1.   

    create or replace procedure aaa(aa in scott.emp%rowtype) as
    begin
    dbms_output.put_line(aa.ename);
    end;
    /
    set serveroutput on;declare
    begin
    for c1 in (select * from scott.emp) loop
    aaa(c1);
    end loop;
    end;
    /
      

  2.   

    rowtype类型没办法转化为字符串的吧,使用动态语句调用貌似不行啊正常调用,参考1楼的写法
      

  3.   

    我这边具体是一个包里的多个过程,通过配置,在调度时通过读取配置来执行具体过程。一楼方式适合单一的,不适用批量的调用。
    我想通过 动态的 begin  end 来实现。现在也能实现,就是调用时每个过程传参太多,就是要传个对象,而不是具体的类型。
    不知道dbms_sql里是否可以这么调用
      

  4.   

    execute immediate 可以执行一个代码段的,
    可以连同生成rowtype的代码一起传过来,动态执行传过来的代码段
    execute immediate
    'declare
     a table.column%rowtype;
    begin
     
    end;'
      

  5.   

    里面调过程你测试了吗?我测试后不行才来咨询的。create or replace aaa(aa in scott.emp%rowtype) asbegindbms_output.put_line(aa.ename);end;
    declare
    v_sql varchar2(4000);
    v_row_emp emp%rowtype;
    begin
    v_sql := 'begin aaa(:v1) end';
    execute immediate v_sql using v_row_emp;报参数类型不对
      

  6.   

    我意思是把你整个过程的语句都动态传进来
    execute immediate 
    'declare
    v_row_emp emp%rowtype;
    begin
    aaa(v_row_emp) 
    end;';
    这样传递的参数为varchar2类型,而不是rowtype类型
      

  7.   

    rowtype可以理解为java中的对象,rowtype可以理解为把一个表的每一列做为对象的一个属性。调用的时候也可以使用“.”调用,这一点也是符合对象的属性的调用方式。按照这个方式理解rowtype可能好理解些