我想做一个存储过程,实现的功能是:我用的数据库是oracle
select comcode from Company where comname like '%上海%'                //上海是参数
insert into user(id,name,comcode) values('id','name','comcode')        //id,name,comcode都是参数这样的存储过程怎么写啊?今天刚接触如果不建立存储过程,上面的参数可以手动填写,但是要求使用一条sql语句。这样的sql怎么写啊??
知道的话就帮帮忙把?谢谢~! 

解决方案 »

  1.   

    给你参考一下:
    declare
    c Company.comname%type;
    id int;
    name varchar2(20);
    cursor r_c is select comcode from Company where comname like '%上海%';
    begin
    open r_c;
    loop
        fetch r_c
          into c;
        exit when r_c%notfound;
        id = 1;        
        name = 'zyf';  --id,name可改为传值方式.
        insert into user(id,name,comcode) values(id,name,c);
        end loop;
      close r_c;
    end;
      

  2.   

    create or replace procedure XXX(p_id data_type,p_name data_type,p_pos datatype) as
    --p_pos 上海
    v_comcode data_type;
    beginEXECUTE IMMEDIATE 'select comcode from Company where comname like ''%'||p_pos||'%''' into v_comcode;  --要保证只返回一行数据                insert into user(id,name,comcode) values(p_id,p_name,v_comcode);end;差不多就这样了
      

  3.   

    -- TRY IT .. 比如你输入的ID=1,NAME='TEST':
    INSERT INTO USER(ID,NAME,COMCODE)
    SELECT 1 EID, 'TEST' ENAME, COMCODE
      FROM COMPANY
     WHERE COMNAME LIKE '%SHANGHAI%';
      

  4.   

    create or replace procedure p_test
    (iPos in varchar2,
     iId  in varchar2,
     iName in varchar2,
     iComcode in varchar2)
     as
     v_sqlSel varchar2(100);
     v_sqlIns varchar2(100);
     begin
     v_sqlSel := 'select comcode from Company where comname like ''%' ||iPos||'%''';
     --iPos 可以传入"上海"
     v_sqlIns := 'insert into user(id,name,comcode) values(''';
     v_sqlIns := v_sqlIns || iId || ''',''';
     v_sqlIns := v_sqlIns || iName || ''',''';
     v_sqlIns := v_sqlIns || iComcode || ''')';
     ....
     ....
     ....
     end;
    后面就看你要怎么用了
      

  5.   


    create or replace procedure procedure_name
    (
     参数1 in DataType,
     参数2 in DataType,
     参数3 in DataType,
     参数4 in DataType

    as
    begin
    select comcode from Company where comname like 参数1;
    insert into user(id,name,comcode) values(参数2, 参数3, 参数4 );
    commit;
    end;
       
      

  6.   


    楼上的,参数4是通过
    select comcode from Company where comname like 参数1;
    参数1查出来的啊??
      

  7.   


    PROCEDURE CCICDB.TESTB 编译错误错误:PLS-00215: String length constraints must be in range (1 .. 32767)
    行:2
    文本:v_comcode varchar2;错误:PL/SQL: ORA-00913: too many values
    行:7
    文本:INSERT INTO Cc_User (UserCode,UserName,UserEName,Password,错误:PL/SQL: SQL Statement ignored
    行:7
    文本:INSERT INTO Cc_User (UserCode,UserName,UserEName,Password,
      

  8.   

    你把查出来的comcode赋给参数4.
      

  9.   

    引用 7 楼 dahai99007 的回复: 
    SQL code 
    create or replace procedure procedure_name 

    参数1 in DataType, 
    参数2 in DataType, 
    参数3 in DataType, 
    参数4 in DataType 
    ) 
    as 
    begin 
    select comcode from Company where comname like 参数1; 
    insert into user(id,name,comcode) values(参数2, 参数3, 参数4 ); 
    commit; 
    end; 
      那么要把comcode 赋给参数4要怎么写呢??
    insert into user(id,name,comcode) values(参数2, 参数3, comcode);
    是这么写吗?? 
      

  10.   

    给你个例子: CREATE OR REPLACE  PROCEDURE TEST1
     (
     id in number,
     name in varchar2,
     selectid in number
     )
     as
     tem manager.testtable.name%type;
     begin
     select age into tem from manager.testta where id=selectid;
     insert into manager.testtable(id,name,a values (id,name,tem);
     end;
    你可以建立个这样的表尝试下,我这没问题的。