sql >> Databasteknik >  >> RDS >> Oracle

Använder du bindningsvariabler i SQL Plus med mer än en rad returnerad?

Liknar @Glenns tillvägagångssätt, men du kan deklarera en bindningsvariabel i SQL*Plus och använda den i en vanlig SQL-fråga. Deklarera det först med var[iable] kommando:

variable comment_id number;

Ställ sedan in den med exec[ute] kommando, som i huvudsak är ett anonymt block:

execute :comment_id := 3052753;

Kör sedan din ursprungliga fråga med :comment_id referenser och ingen BEGIN eller 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);

Jag tror inte att det är mycket funktionell skillnad mellan de två tillvägagångssätten utöver personliga preferenser, och båda fungerar också i SQL Developer (när de körs som ett skript). Jag tycker det är lättare när jag kör SQL kopierad från en Pro*C-fil som redan använder : bind form, enbart för att du inte behöver ändra koden alls.

Du kan för övrigt skriva:

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

utan den extra select , som:

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


  1. Array of Enum i Postgres med SQLAlchemy

  2. Doktrin - underfråga i från

  3. Uppgradera MySQL till MariaDB 10 (Del 1 – Installera MariaDB 5.5)

  4. ÅLDER [1, 2, 3] kontra ÅLDER MELLAN 1 OCH 3