Sauvegarde et récupération de données CLOB supérieure à 32 KO dans Oracle Apex

Mon but est de récupérer des données CLOB à partir de la base de données dans un textarea dans un Oracle Apex de l'application et ensuite être capable de l'enregistrer dans la base de données à partir de la textarea lui-même en appuyant sur un bouton "Enregistrer". J'ai aussi quelques autres champs de cette page (comme textfields) qui sont non CLOB champs et ils doivent être enregistrés dans la base de données en cliquant sur le bouton.

Pour cela, je suis en utilisant le code suivant sous "HTML-Tête et le Corps de l'Attribut" de la page. Ce est utilisé pour récupérer/sauvegarder CLOB dans le textarea/base de données. Note qu'un simple code PLSQL à l'intérieur de l'Apex point suffira à faire ce que je fais ici, mais seulement si les données CLOB est inférieure à 32k octets. Je suis à l'aide de cette fonction en raison de la 32k limite en plsql dans l'apex (et 4k limite lorsque sql est utilisé).

function clob_set(){  
        var clob_ob = new apex.ajax.clob(  
            function(){  
                var rs = p.readyState  
                if(rs == 1||rs == 2||rs == 3){  
                    $x_Show('AjaxLoading');  
                }else if(rs == 4){  
                    $s('P5075_RESPONSETEXT',p.responseText);  
                    $x_Hide('AjaxLoading');  
                }else{return false;}  
            }  
        );  

        if(!$v_IsEmpty('P5075_STYLESHEET')){clob_ob._set($v('P5075_STYLESHEET'))};  
    }  

    function clob_get(){  
        var clob_ob = new apex.ajax.clob(  
            function(){  
                var rs = p.readyState  
                if(rs == 1||rs == 2||rs == 3){  
                    $x_Show('AjaxLoading');  
                }else if(rs == 4){  
                    $s('P5075_STYLESHEET',p.responseText);  
                    $x_Hide('AjaxLoading');  
                }else{return false;}  
            }  
        );  
        clob_ob._get();  
    }

Je vais appeler une des fonctions de sous "Page HTML du Corps de l'Attribut" comme onload = "javascript:clob_get();"

J'ai un PLSQL après l'en-tête de ce processus.

declare
l_clob clob:= empty_clob();

begin

if apex_collection.collection_exists(p_collection_name=>'CLOB_CONTENT') then
apex_collection.delete_collection(p_collection_name=>'CLOB_CONTENT');
end if;

apex_collection.create_or_truncate_collection(p_collection_name=>'CLOB_CONTENT');
dbms_lob.createtemporary( l_clob, false, dbms_lob.SESSION );

SELECT xslt
INTO l_clob
FROM schematransform
WHERE namn = 'f';

apex_collection.add_member(p_collection_name => 'CLOB_CONTENT',p_clob001 => l_clob);
end;

Cela fonctionne très bien. Maintenant, j'ai un plsql processus qui enregistre les informations saisies dans le CLOB et non CLOB des champs dans la base de données. Mais dès que la page présente, je reçois une "HTTP Bad Request".

Quelqu'un peut-il expliquer pourquoi est-ce qui se passe et comment puis-je résoudre ce problème?

Ce que l'apex version êtes-vous? 4.0? 4.1? Plus bas? Quelle est la taille de la clob vous testez? Avez-vous essayé avec un <32k clob? Ou un <4k? Prendre une lecture de forums.oracle.com/forums/thread.jspa?threadID=723735 et advnettech.net/blog/?p=7 , ceux qui semblent gérer ce genre de problème, et semblent indiquer un problème avec l'apex.ajax.clob et >32k.
J'utilise Apex 4.1. J'ai testé avec CLOB taille de 90 octets, et aussi grand que 50 octets. Je vais avoir le même problème. Je suis de la CLOB dans le textarea correctement. C'est juste que lorsque j'appelle la fonction javascript lors du chargement de la page, puis soumettre la page, j'obtiens cette erreur. Le processus de sauver les objets textfield est de type "PLSQL bloc Anonyme" et le processus est "À la Charge Après l'en-Tête". Ce processus est soumis lorsque je clique sur un bouton nommé "Enregistrer".Le problème que je vois est un conflit entre 'onload de la page d'appel javascript' et 'page ' soumettre' après.
Je ne suis pas sûr si je comprends bien: le chargement de la Page, sur-charge de feux, vous obtenez clob valeurs. Vous effectuez des modifications. Vous cliquez sur un bouton qui envoie la page, et que vous attendez les champs avec clob-de sauvegarder les valeurs de la collection? - Il Correct?
Presque correct. Je ne suis pas d'économie sur les champs CLOB valeurs (pour l'instant). Il y a d'autres domaines comme bien d'ailleurs CLOB (nom, titre), qui sont de type VARCHAR. Sur submit, je veux enregistrer ces valeurs dans la base de données.
Si l'erreur est sur le présenter, il est possible que vous devez d'abord supprimer la valeur de l'élément contenant le rcocl, de sorte qu'il n'est pas soumis avec les autres champs. Vous pouvez le faire par la désactivation de l'élément ou de l'affichage uniquement. Ou vous pourriez rewire votre soumettre le processus de première null cet élément de valeur.

OriginalL'auteur Snow Leopard | 2012-07-09