set @str_sql=' insert into  DS_ACCOUNT '+
             ' (ACCYEAR ,ENTCODE  ,ENTNAME,ACCCODE  ,ACCNAME  )'+
             '  select '+@v_accyear +' ,'''+@v_entcode+''' ,'''+@v_entname+''',kmdm  ,kmmc from '+@v_dbname+'..km '+
             ' order by kmdm '
   EXEC(@str_Sql) 这个是SQLSERVER里的语句。  请问用PL/SQL   应该怎么写?

解决方案 »

  1.   

    create or replace procedure aaaaa1 (
        p_user_id_i  in  varchar2

    as
     x_sql varchar2(2000);
    begin
        x_sql := 'insert into test1(aa,bb) values (''a'','''||p_user_id_i||''')';
        execute immediate x_sql;
    end aaaaa1;
    /
      

  2.   

    create or replace procedure test_pro(p_accyear varchar2,p_entcode varchar2,p_entname varchar2,p_dbname)
    as
    v_sql varchar2(2000);
    begin
    v_sql:='insert into db_account(ACCYEAR ,ENTCODE  ,ENTNAME,ACCCODE  ,ACCNAME)select :1,:2,:3,kmdm,kmmc from :4 order by kmdm';execute immediate v_sql using p_accyear,p_entcod,p_entname,p_dbname;end;
    /
    begin
    test_pro('year','code','name','dname');--此处的4个值,根据实际情况输入
    end;
    /
      

  3.   

    直接写sql可以为
    insert into  DS_ACCOUNT 
                values (ACCYEAR ,ENTCODE  ,ENTNAME,ACCCODE  ,ACCNAME  ) 
        select '&v_accyear' ,'&v_entcode' ,'&v_entname',kmdm  ,kmmc from '&v_dbname as km  order by kmdm 
    写存储过程就像2楼
      

  4.   


    这里面  dbname 是一个变量  是用户的名字  而我要的是  dbname用户下的KM表里的数据  就这个地方我搞不清楚怎么弄直接dbname.km是不好使的。。
      

  5.   

    哦 错了 不是变量  是游标遍历出来的用户名。我这里有上百个用户  每个USER开头的用户名里都有一个叫KM的表。。 我要从这些用户的KM表里取数据
      

  6.   

    declare
       str_sql varchar2(4000);
    begin
       str_sql:=...;
       execute immediate str_sql;
    exception
       when others then
          null;
    end;