Oracle
 sql >> Base de données >  >> RDS >> Oracle

Utilisation de variables de liaison dans SQL Plus avec plusieurs lignes renvoyées ?

Semblable à l'approche de @ Glenn, mais vous pouvez déclarer une variable de liaison dans SQL*Plus et l'utiliser dans une requête SQL simple. Déclarez-le d'abord avec le var[iable] commande :

variable comment_id number;

Ensuite, définissez-le avec le exec[ute] commande, qui est essentiellement un bloc anonyme :

execute :comment_id := 3052753;

Exécutez ensuite votre requête d'origine avec le :comment_id références, et pas de BEGIN ou END :

select e.label as doc_name,
                       e.url,
                       i.item_id,
                       'multi' as form_type
                from cr_items i, cr_extlinks e
                where i.parent_id = :comment_id
                and e.extlink_id = i.item_id
               UNION
                select null as doc_name,
                       utl_raw.cast_to_varchar2(DBMS_LOB.SUBSTR(r.content, 2000, 1))  as url,
                       r.item_id,
                       'single' as form_type
                from cr_revisions r
                where r.revision_id = ( select content_item.get_latest_revision(:comment_id) from dual);

Je ne pense pas qu'il y ait beaucoup de différence fonctionnelle entre les deux approches au-delà de la préférence personnelle, et les deux fonctionnent également dans SQL Developer (lorsqu'elles sont exécutées en tant que script). Je trouve cela plus facile lors de l'exécution de SQL copié à partir d'un fichier Pro*C qui utilise déjà le : formulaire de liaison, simplement parce que vous n'avez pas du tout besoin de modifier le code.

Accessoirement, vous pouvez écrire :

where r.revision_id = ( select content_item.get_latest_revision(:comment_id) from dual)

sans le supplément select , comme :

where r.revision_id = content_item.get_latest_revision(:comment_id)