J'ai passé des heures à essayer de trouver une solution à ce problème, mais comme je suis incapable de trouver, j'ai décidé de demander ici.Problème lors de la sélection par ROWID dans la procédure
Je suis en train de faire une procédure pour extraire des informations d'une table basée sur ROWID
de la ligne et avec les résultats que je fais une requête personnalisée en utilisant execute immediate
. J'ai réduit le problème aux lignes suivantes, que je suis d'exécution directement dans SQL Developer:
declare
row_id ROWID;
consulta VARCHAR2(1000);
begin
row_id := 'AAAEC5AAFAAAADHAAC';
select 'insert into ' ||
(select TABLA from BITACORA where rowid = row_id) || ' values(' ||
(select VALOR_VIEJO from BITACORA where rowid = row_id) || ')'
into Consulta from dual;
DBMS_OUTPUT.PUT_LINE(Consulta);
--execute immediate Consulta;
end;
Les lignes précédentes ne fonctionne pas comme il est. Lorsque j'imprime le contenu de Consulta
il montre:
insert into values()
mais si j'élimine la variable row_id
et le mettre directement dans les requêtes comme celle-ci, cela fonctionne:
declare
consulta VARCHAR2(1000);
begin
select 'insert into ' ||
(select TABLA from BITACORA where rowid = 'AAAEC5AAFAAAADHAAC') || ' values(' ||
(select VALOR_VIEJO from BITACORA where rowid = 'AAAEC5AAFAAAADHAAC') || ')'
into Consulta from dual;
DBMS_OUTPUT.PUT_LINE(Consulta);
--execute immediate Consulta;
end;
Afficher ce que j'attendais, Quelque chose comme:
insert into MI_TABLA values(1,'Hola','Adios',3,1)
Ceci n'est pas lié au travail, donc il n'y a pas de problèmes de performance/sécurité. Merci pour vos commentaires.
Pouvez-vous essayer de mettre rowid =: row_id? –
Oui, j'ai essayé et il me donne une erreur :(, pense que c'est parce que: est utilisé uniquement pour les variables out –