谁能帮助我过这关,立刻汇款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;
谁能帮我改改,那段存储过程代码,能在触发器把照片复制过去,一定兑现诺言!~