17,090
社区成员
发帖
与我相关
我的任务
分享
这还不简单,如下:
CREATE OR REPLACE FUNCTION GET_SUBSTR(P_STR VARCHAR2, P_POSITION INT)
RETURN VARCHAR2 IS
L_R VARCHAR2(1000);
BEGIN
L_R := TRIM(BOTH ',' FROM P_STR);
L_R := ',' || L_R || ',';
L_R := SUBSTR(L_R,
INSTR(L_R, ',', 1, P_POSITION) + 1,
INSTR(L_R, ',', 1, P_POSITION + 1) -
INSTR(L_R, ',', 1, P_POSITION) - 1);
RETURN(L_R);
END GET_SUBSTR;
/
SELECT ID,
GET_SUBSTR(INFO, 1) S1,
GET_SUBSTR(INFO, 2) S2,
GET_SUBSTR(INFO, 3) S3
FROM (SELECT ID, DBMS_LOB.SUBSTR(INFO, DBMS_LOB.GETLENGTH(INFO), 1) INFO
FROM TEST_CLOB);
输出:
ID S1 S2 S3
1 11 12 13
2 21 22 23
3 31 32 33
至于update,参照楼上。
如果TEST_CLOB1表id列有值的情况下update的方法:
UPDATE TEST_CLOB1
SET (C1, C2, C3) = (SELECT SUBSTR(INFO, 1, INSTR(INFO, ',', 1) - 1) INFO1,
SUBSTR(INFO,
INSTR(INFO, ',', 1, 1) + 1,
INSTR(INFO, ',', 1, 2) -
INSTR(INFO, ',', 1, 1) - 1) INFO2,
SUBSTR(INFO, INSTR(INFO, ',', 1, 2) + 1) INFO3
FROM (SELECT ID,
DBMS_LOB.SUBSTR(INFO,
DBMS_LOB.GETLENGTH(INFO),
1) INFO
FROM TEST_CLOB)
WHERE ID = TEST_CLOB1.ID)
WHERE EXISTS (SELECT NULL FROM TEST_CLOB WHERE ID = TEST_CLOB1.ID);
如果TEST_CLOB1表没有值的方法:
INSERT INTO TEST_CLOB1
SELECT ID,
SUBSTR(INFO, 1, INSTR(INFO, ',', 1) - 1) INFO1,
SUBSTR(INFO,
INSTR(INFO, ',', 1, 1) + 1,
INSTR(INFO, ',', 1, 2) - INSTR(INFO, ',', 1, 1) - 1) INFO2,
SUBSTR(INFO, INSTR(INFO, ',', 1, 2) + 1) INFO3
FROM (SELECT ID, DBMS_LOB.SUBSTR(INFO, DBMS_LOB.GETLENGTH(INFO), 1) INFO
FROM TEST_CLOB);
SELECT ID,
SUBSTR(INFO, 1, INSTR(INFO, ',', 1) - 1) INFO1,
SUBSTR(INFO,
INSTR(INFO, ',', 1, 1) + 1,
INSTR(INFO, ',', 1, 2) - INSTR(INFO, ',', 1, 1) - 1) INFO2,
SUBSTR(INFO, INSTR(INFO, ',', 1, 2) + 1) INFO3
FROM (SELECT ID, DBMS_LOB.SUBSTR(INFO, DBMS_LOB.GETLENGTH(INFO), 1) INFO
FROM TEST_CLOB);
[Quote=引用楼主 Ykang 的帖子:]