2009-10-06 7 views
0

J'ai le bloc suivant de PLSQL qui réussit lorsque ln_length est 4000 caractères ou moins mais échoue avec "ORA-01460: conversion non implémentée ou déraisonnable demandée" lorsque ln_length est> 4000 caractères.Comment faire pour exécuter la fonction REPLACE dans Oracle9i avec des chaînes supérieures à 4000 caractères

Le bloc est:

DECLARE 
    ls_string VARCHAR2(32767); 
    ls_temp VARCHAR2(32767); 
    ln_length NUMBER := 4000; 
BEGIN 
    ls_string := ''; 
    FOR i IN 1..ln_length LOOP 
     ls_string := ls_string || 'x'; 
    END LOOP; 

    SELECT REPLACE(ls_string,'bob') 
    INTO ls_temp FROM dual; 
END; 

Comment pourrais-je écrire une pièce équivalente de code qui répond à des chaînes jusqu'à 32k en longueur?

Répondre

4

Ne pas avoir 9i à tester avec, mais peut-être cela va contourner:

remplacer:

SELECT REPLACE(ls_string,'bob') 
INTO ls_temp FROM dual; 

avec:

ls_temp := REPLACE(ls_string,'bob'); 

Le moteur SGBDR ne supporte que le haut de VARCHAR2 à 4000 de longueur, tandis que PL/SQL prend en charge jusqu'à 32767. Évitez d'aller à la base de données pour l'opération de remplacement (il est inutile de toute façon) et il semble fonctionner (au moins w/10g).

+0

Oui qui l'a craqué, merci! – darreljnz

Questions connexes