Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Usando variáveis ​​de ligação no SQL Plus com mais de uma linha retornada?


Semelhante à abordagem do @Glenn, mas você pode declarar uma variável de ligação no SQL*Plus e usá-la em uma consulta SQL simples. Primeiro declare-o com a var[iable] comando:
variable comment_id number;

Em seguida, defina-o com o exec[ute] comando, que é essencialmente um bloco anônimo:
execute :comment_id := 3052753;

Em seguida, execute sua consulta original com o :comment_id referências e nenhum 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);

Não acho que haja muita diferença funcional entre as duas abordagens além da preferência pessoal, e ambas também funcionam no SQL Developer (quando executadas como script). Acho isso mais fácil ao executar o SQL copiado de um arquivo Pro*C que já usa o : bind, puramente porque você não precisa modificar o código.

Aliás, você pode escrever:
where r.revision_id = ( select content_item.get_latest_revision(:comment_id) from dual)

sem o select extra , Como:
where r.revision_id = content_item.get_latest_revision(:comment_id)