create table questionType(
 qid int primary key,
 typename varchar2(200) not null
)
求助添加的一个存储过程,我从前台传一个字符串值过来,要添加到这个表里面去,是js和存储过程直接交互的值:"1|'组织'|"我不知道在存储过程中怎么去切割字符串.

解决方案 »

  1.   

    用 substr() 截取下 
      

  2.   

    用instr 和substr结合起来
    用instr的到分隔符的位置,然后用substr截取
      

  3.   

    create or replace procedure test(str in varchar2)
    as
    qid int;
    typename varchar2(100);
    vsql varchar2(400);
    beginqid:=substr(str,1,1);
    typename:=substr(str,2,len(str)-1);
    vsql:='insert into questionType(qid,typename) select '||qid||','''||typename|''' from dual';execute immediate vsql;
    end test
      

  4.   

    只用substr不行的呀,假如他传进来的是"23231|'3434组织'|",字符长度不固定怎么办?还是和instr结合起来吧,楼上的
      

  5.   


    此楼的方法报错啊?说没有len()
      

  6.   

    不好意思,length()才是ORACLE的,len是SQL SERVER的。
    不过你的字符串到底是什么内容,如果是用'|'来分隔的话,那我的写法就不对了。
      

  7.   

    CREATE OR REPLACE PROCEDURE testvv(i_str VARCHAR2) IS
      vi      NUMBER;
      varID   VARCHAR2(200);
      varName VARCHAR2(200);
    BEGIN
      vi := instr(i_str, '|', 1, 1);  varID   := substr(i_str, 1, vi - 1);
      varName := substr(i_str, vi + 1);  INSERT INTO questionType
        SELECT varID, varName FROM dual;
      COMMIT;
    END;
      

  8.   

    with tmp as (
    select '1|02|003' val from dual
    union all
    select '01|002|0003' val from dual)

    select substr(val,1,(instr(val,'|',1,1)-1)) val_One
           ,substr(val,(instr(val,'|',1,1)+1),((instr(val,'|',1,2)) - (instr(val,'|',1,1)) -1)) val_Two
     ,substr( val, (instr(val,'|',1,2)+1) , ((instr(val,'|',-1,1)) -1)  ) val_Three
      from tmp;