1、确定记录只有3个‘,’号?如果是就用instr()函数分割后变成行,
之后行变列插入DB;或者用分割后的数据分别union之后插入DB。
2、如果不确定逗号个数,建议用存储过程了,挺简单的。
之后行变列插入DB;或者用分割后的数据分别union之后插入DB。
2、如果不确定逗号个数,建议用存储过程了,挺简单的。
解决方案 »
- 求一个简单的关于日期期间的算法
- 怎么安装OracleMTSRecoveryService服务?
- 如何连接到远程的数据库
- oracle导出问题
- vs2005+oracle数据库 select带参数的sql语句出现"非法的变量名/编号”问题
- SQL脚本转换为Oracle脚本,在线急等!!!!!!!!!!
- 利用Oracle之SQLPLUS的spool导出文本文件的数据格式问题
- oracle的列的自动编号
- Oracle9i企业管理器登录问题请教?
- 请问:连接数据库时,出现ORA-12705是怎么回事?
- ORALCE中列的数据类型可以是嵌套表吗?如果是的话,那岂不是违背了数据库设计第一范式(即表属性不可再分性)?
- 公司從國外請來的ocm如是說﹐請各位評評
INSERT INTO ...
(...) (SELECT ...
FROM ...
union
...........
...........
union
SELECT ...
FROM ...
)
写个后台处理吧!很简单。sql实现有点勉为其难了。
PI_str IN VARCHAR2) --输入字符串
RETURN VARCHAR2
IS
v_intPos INTEGER :=0; --字符串截取表示符
v_str VARCHAR2(100):= PI_str; --输入字符赋给变量
v_strSub VARCHAR2(10); --截取的字符串BEGIN
v_intPos:=instr(v_str,','); --取得第一个表示符在字符串中的位置。
WHILE v_intpos>0 LOOP --判断为有效位置进行循环。 v_strsub:=substr(v_str,1,v_intPos-1); --截取第一个字符串
INSERT INTO TABLE_NAME --插入
VALUES(v_strSub);
v_str:=substr(v_str,v_intpos +1); --截取剩余的字符串
v_intPos:=instr(v_str,','); --取得下一个表示符在字符串中的位置。 IF v_intpos = 0 AND v_str <> '' THEN --如果是最后一个字符串并不为空就插入
INSERT INTO TABLE_NAME
VALUES(v_strSub);
END IF; END LOOP;
RETURN('0');
END FUN_Divstr_forInsert;
PI_str),如果是多字段操作或更复杂操作,只要在他的函数基础上每个循环里增加其他逻辑运算或dml操作就可以了
FUN_Divstr_forInsert('a,b,c');
end;
declare
str_ret varchar2(2);
begin
FUN_Divstr_forInsert('a,b,c');
end;
ORA-06550: 第 4 行, 第 2 列:
PLS-00221: 'FUN_DIVSTR_FORINSERT' 不是过程或尚未定义
ORA-06550: 第 4 行, 第 2 列:
PL/SQL: Statement ignored
还是不对呀
declare
str_ret varchar2(2);
begin
str_ret := FUN_Divstr_forInsert('a,b,c');
end;
IF v_intpos = 0 AND v_str <> '' THEN --如果是最后一个字符串并不为空就插入
INSERT INTO TABLE_NAME
VALUES(v_strSub);
END IF;
v_str <> '' 不对,应该是v_str is not null