sql >> Base de Datos >  >> RDS >> Oracle

¿Usando variables de vinculación en SQL Plus con más de una fila devuelta?

Similar al enfoque de @ Glenn, pero puede declarar una variable de vinculación en SQL * Plus y usarla en una consulta SQL simple. Primero declárelo con el var[iable] comando:

variable comment_id number;

Luego configúrelo con exec[ute] comando, que es esencialmente un bloque anónimo:

execute :comment_id := 3052753;

Luego ejecute su consulta original con :comment_id referencias y sin BEGIN o 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);

No creo que haya mucha diferencia funcional entre los dos enfoques más allá de las preferencias personales, y ambos también funcionan en SQL Developer (cuando se ejecutan como un script). Encuentro esto más fácil cuando ejecuto SQL copiado de un archivo Pro*C que ya usa el : formulario de vinculación, simplemente porque no tiene que modificar el código en absoluto.

Por cierto, puedes escribir:

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

sin el extra select , como:

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