谁能帮助我过这关,立刻汇款100元RMB,表示感谢。
任务马上就到期了,只能这样了,请看:
在dzjc_wfzp表中的LONG RAW中插入照片数据同时也往dzjc_wfzp2表BLOB字段也复制一条照片数据。在触发器中或存储过程中都实现不了,到此求助,先申明,以下语句不行:INSERT INTO dzjc_wfzp2(id,zp)
(SELECT xh, TO_LOB(zp)
FROM dzjc_wfzp);这样的语句只能在SQLPLUS里执行,我希望能找到办法在PL/SQL下执行.于是查到资料是LONG转CLOB数据,的一段代码,是需要DBMS.SQL包实现的。下面是LONG转CLOB存储过程的代码:/* Formatted on 2005/09/21 14:50 (Formatter Plus v4.8.6) */
CREATE OR REPLACE PROCEDURE long2lob (
-- Uses DBMS_SQL to select a LONG column identified by p_LongQuery, and
-- returns it in p_CLob.
p_longquery IN VARCHAR2,
p_clob IN OUT CLOB
)
AS
c_chunksize CONSTANT INTEGER := 100;
v_cursorid INTEGER;
v_rc INTEGER;
v_chunk VARCHAR2 (100);
v_chunklength INTEGER;
v_offset INTEGER := 0;
BEGIN
-- Open the cursor, define, execute, and fetch.
v_cursorid := DBMS_SQL.open_cursor;
DBMS_SQL.parse (v_cursorid, p_longquery, DBMS_SQL.v7);
DBMS_SQL.define_column_long (v_cursorid, 1);
v_rc := DBMS_SQL.execute_and_fetch (v_cursorid); -- Loop over the LONG, fetching c_ChunkSize characters at a time from
-- the LONG and adding them to the LOB.
LOOP
DBMS_SQL.column_value_long (v_cursorid,
1,
c_chunksize,
v_offset,
v_chunk,
v_chunklength
);
DBMS_LOB.WRITE (p_clob, v_chunklength, v_offset + 1, v_chunk); IF v_chunklength < c_chunksize
THEN
EXIT;
ELSE
v_offset := v_offset + v_chunklength;
END IF;
END LOOP; DBMS_SQL.close_cursor (v_cursorid);
EXCEPTION
WHEN OTHERS
THEN
-- Clean up, and reraise the error.
DBMS_SQL.close_cursor (v_cursorid);
RAISE;
END long2lob;但是我现在需要是从LONG RAW转到BLOB的,应该和上面这段很相似,但是我不知道需要改哪段,怎么改。然后我会在触发器做如下调用:
CREATE OR REPLACE TRIGGER dzjc."ZP_ZP2"
AFTER INSERT
ON "DZJC_WFZP"
FOR EACH ROW
DECLARE
v_query VARCHAR2 (200);
b_zp BLOB;
v_xh VARCHAR2 (16);
BEGIN
v_xh := :NEW.xh;
v_query := 'select zp from dzjc_wfzp where xh='||v_xh;-- INSERT INTO dzjc_wfzp2
-- VALUES (v_xh, EMPTY_BLOB ())
-- RETURNING zp
-- INTO b_zp;
--
-- long2lob (v_query, b_zp);
-- COMMIT;
END;
谁能帮我改改,那段存储过程代码,能在触发器把照片复制过去,一定兑现诺言!~
任务马上就到期了,只能这样了,请看:
在dzjc_wfzp表中的LONG RAW中插入照片数据同时也往dzjc_wfzp2表BLOB字段也复制一条照片数据。在触发器中或存储过程中都实现不了,到此求助,先申明,以下语句不行:INSERT INTO dzjc_wfzp2(id,zp)
(SELECT xh, TO_LOB(zp)
FROM dzjc_wfzp);这样的语句只能在SQLPLUS里执行,我希望能找到办法在PL/SQL下执行.于是查到资料是LONG转CLOB数据,的一段代码,是需要DBMS.SQL包实现的。下面是LONG转CLOB存储过程的代码:/* Formatted on 2005/09/21 14:50 (Formatter Plus v4.8.6) */
CREATE OR REPLACE PROCEDURE long2lob (
-- Uses DBMS_SQL to select a LONG column identified by p_LongQuery, and
-- returns it in p_CLob.
p_longquery IN VARCHAR2,
p_clob IN OUT CLOB
)
AS
c_chunksize CONSTANT INTEGER := 100;
v_cursorid INTEGER;
v_rc INTEGER;
v_chunk VARCHAR2 (100);
v_chunklength INTEGER;
v_offset INTEGER := 0;
BEGIN
-- Open the cursor, define, execute, and fetch.
v_cursorid := DBMS_SQL.open_cursor;
DBMS_SQL.parse (v_cursorid, p_longquery, DBMS_SQL.v7);
DBMS_SQL.define_column_long (v_cursorid, 1);
v_rc := DBMS_SQL.execute_and_fetch (v_cursorid); -- Loop over the LONG, fetching c_ChunkSize characters at a time from
-- the LONG and adding them to the LOB.
LOOP
DBMS_SQL.column_value_long (v_cursorid,
1,
c_chunksize,
v_offset,
v_chunk,
v_chunklength
);
DBMS_LOB.WRITE (p_clob, v_chunklength, v_offset + 1, v_chunk); IF v_chunklength < c_chunksize
THEN
EXIT;
ELSE
v_offset := v_offset + v_chunklength;
END IF;
END LOOP; DBMS_SQL.close_cursor (v_cursorid);
EXCEPTION
WHEN OTHERS
THEN
-- Clean up, and reraise the error.
DBMS_SQL.close_cursor (v_cursorid);
RAISE;
END long2lob;但是我现在需要是从LONG RAW转到BLOB的,应该和上面这段很相似,但是我不知道需要改哪段,怎么改。然后我会在触发器做如下调用:
CREATE OR REPLACE TRIGGER dzjc."ZP_ZP2"
AFTER INSERT
ON "DZJC_WFZP"
FOR EACH ROW
DECLARE
v_query VARCHAR2 (200);
b_zp BLOB;
v_xh VARCHAR2 (16);
BEGIN
v_xh := :NEW.xh;
v_query := 'select zp from dzjc_wfzp where xh='||v_xh;-- INSERT INTO dzjc_wfzp2
-- VALUES (v_xh, EMPTY_BLOB ())
-- RETURNING zp
-- INTO b_zp;
--
-- long2lob (v_query, b_zp);
-- COMMIT;
END;
谁能帮我改改,那段存储过程代码,能在触发器把照片复制过去,一定兑现诺言!~
解决方案 »
- oracle 查询条件文题
- 一个非常简单的存储过程,我不会用,帮帮忙。
- 查詢兩個資料庫的DATA ???
- rman 备份变慢
- 一个比较困难的查询统计,高手请进
- 关于TRUNCATE操作的一点疑问
- 新手提问,rm为什么不会变,谢谢大家
- 问一个初学者的问题?
- 请问Oracle库最大容量,单个表最大容量,单个表在最大容量下查询所有记录所用时间 和查询时的服务器配置(急)?
- OMS服务启动不了,说什么Windows内部错误,急啊!
- 在oracle 中如何 把 long 型的数据 通过函数转化为 varchar2 或者 char 型啊
- 请问高手:sql server下实现的存储过程有没有办法直接导入到oracle?
PL/SQL不能解释long raw数据
将照片存入BLOb还是比较简单的事
(SELECT xh, TO_LOB(zp)
FROM dzjc_wfzp);
把上边的改成三句INSERT INTO dzjc_wfzp2(id)
SELECT xh
FROM dzjc_wfzp;
单独调用那个转换函数先放到中间变量过渡一下
update dzjc_wfzp2 set zp=照片BLOB
where xh=参数;