sql >> データベース >  >> RDS >> Oracle

191行目のエラー:ORA-01489:文字列連結の結果が長すぎます

    VARCHAR2は4000バイトに制限されています。このエラーが発生した場合

    次に、連結が4000バイトを超えることはかなり明らかです。

    今何をしますか?

    代わりにCLOBを使用する最初の解決策は正しいです。

    select TO_CLOB(a)|| TO_CLOB(b)|| TO_CLOB(c) || TO_CLOB(d) 
    

    あなたの本当の問題はファイルへの保存にあるようです

    結果のCLOBをファイルに保存する方法を投稿していませんが、正しく行っていないと思います。 VARCHAR2で行ったのと同じ方法でファイルに保存しようとすると、間違った方法で保存されます。

    最初にdbms_lob.readを使用する必要があります データベースからclobを読み取るには、utl_file.put_rawを使用します。 ファイルに書き込む。

    DECLARE
        position NUMBER := 1;
        byte_length NUMBER := 32760;
        length NUMBER;
        vblob BLOB;
        rawlob RAW(32760);
        temp NUMBER;
        output utl_file.file_type;
    BEGIN
        -- Last parameter is maximum number of bytes returned.
        -- wb stands for write byte mode
        output := utl_file.fopen('DIR', 'filename', 'wb', 32760);
    
        position := 1;
        select dbms_lob.getlength(yourLob)
        into len
        from somewhere
        where something;
    
        temp := length;
    
        select yourLob
        into vlob
        from somewhere
        where something;
    
        IF len < 32760 THEN
            utl_file.put_raw(output, vblob);
            -- Don't forget to flush
            utl_file.fflush(output);
        ELSE -- write part by part
            WHILE position < len AND byte_length > 0
            LOOP
               dbms_lob.read(vblob, byte_length, position, rawlob);
    
               utl_file.put_raw(output,rawlob);
    
               -- You must admit, you would have forgot to flush.
               utl_file.fflush(output); 
    
               position := position + byte_length;
    
               -- set the end position if less than 32000 bytes
               temp := temp - bytelen;
               IF temp < 32760 THEN
                   byte_length := temp;
               END IF;
        END IF;
    END;
    


    1. SQLの逆LIKE'%value%'

    2. 列のタイムスタンプがデフォルトのcurrent_dateでmysqlテーブルを作成するにはどうすればよいですか?

    3. JPA 2@SequenceGenerator@GeneratedValueが一意の制約違反を生成する

    4. pg_dumpを使用せずにPostgreSQLDBからデータを抽出します