Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
只能为插入到长列oracle中绑定长值_Oracle - Fatal编程技术网

只能为插入到长列oracle中绑定长值

只能为插入到长列oracle中绑定长值,oracle,Oracle,我可能遗漏了一些非常明显的东西,但我不知道是什么 我得到一个错误,只能为插入到长列中绑定长值 下面是我正在运行的代码。我的表字段的数据类型是VarChar2,不长。我用来转换blob的变量也被声明为VarChar2,那么这里的长度是多少 我想我插入的值可能太长了,但我正在发布我试图插入的dbms输出,它在一个名为FIELD的行上 多谢各位 这是DBMS的输出 LengthOfField 5 字段1004t 这是代码 DROP TABLE ANALYST.NR_DTS_BLOBFIELDS

我可能遗漏了一些非常明显的东西,但我不知道是什么

我得到一个错误,只能为插入到长列中绑定长值

下面是我正在运行的代码。我的表字段的数据类型是VarChar2,不长。我用来转换blob的变量也被声明为VarChar2,那么这里的长度是多少

我想我插入的值可能太长了,但我正在发布我试图插入的dbms输出,它在一个名为FIELD的行上

多谢各位

这是DBMS的输出

LengthOfField 5

字段1004t

这是代码

    DROP TABLE ANALYST.NR_DTS_BLOBFIELDS_VARCHAR;

CREATE TABLE ANALYST.NR_DTS_BLOBFIELDS_VARCHAR(formid NUMBER
                            ,regionId VARCHAR(4000))
RESULT_CACHE (MODE DEFAULT)
STORAGE(BUFFER_POOL DEFAULT
     FLASH_CACHE DEFAULT
     CELL_FLASH_CACHE DEFAULT)
LOGGING
NOCOMPRESS
NOCACHE
NOPARALLEL
NOMONITORING;






DECLARE
     CURSOR c_dts IS
       SELECT Form_ID
         FROM NR_DTS_FORMTABLE
        WHERE   1 = 1
           --AND ROWNUM BETWEEN 501 AND 4500
           AND form_ID > 204815
           --AND ROWNUM < 5000
           AND ROWNUM < 3
           --AND form_id IN (SELECT form_id FROM NR_DTS_BLOB)
           AND Form_Type_ID = 102;
     DTS c_dts%ROWTYPE;
BEGIN
     OPEN c_dts;
     LOOP
       FETCH c_dts INTO DTS;
       EXIT WHEN c_dts%NOTFOUND;
       DECLARE
         v_hold_blob BLOB;
         v_len NUMBER;
         v_raw_chunk RAW(10000);
         v_chr_string VARCHAR2(32767);
         -- v_chr_string CLOB;
         v_position NUMBER;
         c_chunk_len NUMBER := 1;
         Form_ID NUMBER;
       BEGIN
         SELECT form_content
           INTO v_hold_blob
           FROM NR_DTS_FORMTABLE
          WHERE Form_ID = DTS.Form_ID;
         v_len := DBMS_LOB.getlength(v_hold_blob);
         v_position := 1;
         WHILE (v_position <= LEAST(v_len, 32767)) LOOP
              v_raw_chunk := DBMS_LOB.SUBSTR(v_hold_blob, c_chunk_len, v_position);
              v_chr_string := v_chr_string || CHR(hex_to_decimal(RAWTOHEX(v_raw_chunk)));
              v_position := v_position + c_chunk_len;
         END LOOP;

             DBMS_OUTPUT.put_line(   'LengthOfField '
                     || INSTR((SUBSTR(v_chr_string, INSTR(v_chr_string, 'regionIdt') + LENGTH('regionIdt') + 2))
                          ,CHR(116)));
         DBMS_OUTPUT.put_line(   'Field '
                     || SUBSTR(v_chr_string
                           ,INSTR(v_chr_string, 'regionIdt') + LENGTH('regionIdt') + 2
                           ,INSTR((SUBSTR(v_chr_string
                                   ,INSTR(v_chr_string, 'regionIdt') + LENGTH('regionIdt') + 2))
                              ,CHR(116) || CHR(0))));
       --insert into table
               INSERT INTO NR_DTS_BLOBFIELDS_VARCHAR(formid
                                                    ,regionId)
                    SELECT DTS.Form_ID
                          , SUBSTR(v_chr_string
                                             ,INSTR(v_chr_string, 'regionIdt') + LENGTH('regionIdt') + 2
                                             ,INSTR((SUBSTR(v_chr_string
                                                           ,INSTR(v_chr_string, 'regionIdt') + LENGTH('regionIdt') + 2))
                                                   ,CHR(116) || CHR(0)))
                                regionId
                      FROM DUAL;

           END;

       --  DBMS_OUTPUT.put_line(DTS.Form_ID);
       END LOOP;
       CLOSE c_dts;
     END;

对不起,这是个愚蠢的问题。我所要做的就是创建另一个变量并将其声明为VarCharunder4000。然后将其设置为我要插入的字段的值

我贴出了答案,以防有人需要,但请随意删除所有问题。我不知道在这样的情况下,当我发布后再弄清楚时该怎么办


谢谢:

好的,我知道它为什么这样做,但仍然不知道如何解决它。它这样做是因为VarChar32767很长。但是我插入了一小块,为什么我不能这样做呢?我试了一下石膏,但运气不好