sql >> Databáze >  >> RDS >> Oracle

Použití vazebných proměnných v SQL Plus s více než jedním vráceným řádkem?

Podobný přístupu @Glenn, ale můžete deklarovat proměnnou vazby v SQL*Plus a použít ji v prostém dotazu SQL. Nejprve jej deklarujte pomocí var[iable] příkaz:

variable comment_id number;

Poté jej nastavte pomocí exec[ute] příkaz, což je v podstatě anonymní blok:

execute :comment_id := 3052753;

Poté spusťte svůj původní dotaz s :comment_id odkazy a žádné BEGIN nebo 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);

Nemyslím si, že mezi těmito dvěma přístupy existuje velký funkční rozdíl nad rámec osobních preferencí a oba také fungují v SQL Developer (při spuštění jako skript). Považuji to za jednodušší, když spouštím SQL zkopírovaný ze souboru Pro*C, který již používá : bind form, čistě proto, že nemusíte kód vůbec upravovat.

Mimochodem, můžete napsat:

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

bez extra select , jako:

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


  1. Přiřazení skupiny, která může nebo nemusí existovat

  2. Odeslání pole hodnot na dotaz SQL v ruby?

  3. C#/SQL:zálohování a obnova zkopírováním a nahrazením databázových souborů?

  4. PDO_OCI - do pole clob