首页 > Linux操作系统 > Linux操作系统 > 查询时LONG列追加信息
在ITPUB看到一个问题,如何在LONG字段后添加其他内容。
原文来自:http://www.itpub.net/thread-886412-1-1.html
对于LONG列的限制非常多,因此直接在LONG后面通过||添加字符串肯定是行不通的:
SQL> CREATE TABLE T_LONG
2 (ID NUMBER,
3 COL LONG);
Table created.
SQL> INSERT INTO T_LONG
2 VALUES (1, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ');
1 row created.
SQL> COMMIT;
Commit complete.
SQL> SELECT COL || '1234' FROM T_LONG;
SELECT COL || '1234' FROM T_LONG
*
ERROR at line 1:
ORA-00932: inconsistent datatypes: expected NUMBER got LONG
可以通过PL/SQL来实现这个功能,但是PL/SQL只能处理32K以内的LONG。
最简单的方法是通过LOB来过渡,LOB可以解决长度的问题,而且LONG到LOB可以利用TO_LOB进行转化,唯一的问题在于TO_LOB不能直接用在SELECT语句中,因此可以通过自治过程和临时表实现:
SQL> CREATE GLOBAL TEMPORARY TABLE T_LONG_LOB
2 (ID NUMBER,
3 COL CLOB);
Table created.
SQL> CREATE OR REPLACE FUNCTION F_LONG(P_ID IN NUMBER) RETURN CLOB AS
2 PRAGMA AUTONOMOUS_TRANSACTION;
3 V_RESULT CLOB;
4 BEGIN
5 INSERT INTO T_LONG_LOB
6 SELECT ID, TO_LOB(COL)
7 FROM T_LONG
8 WHERE ID = P_ID;
9 SELECT COL || '1234'
10 INTO V_RESULT
11 FROM T_LONG_LOB
12 WHERE ID = P_ID;
13 COMMIT;
14 RETURN V_RESULT;
15 END;
16 /
Function created.
SQL> SELECT F_LONG(ID) FROM T_LONG;
F_LONG(ID)
--------------------------------------------------------------------------------
ABCDEFGHIJKLMNOPQRSTUVWXYZ1234
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/4227/viewspace-665705/ ,如需转载,请注明出处,否则将追究法律责任。