sql >> Database >  >> RDS >> Oracle

Bindvariabelen gebruiken in SQL Plus met meer dan één geretourneerde rij?

Vergelijkbaar met de aanpak van @Glenn, maar u kunt een bindvariabele declareren in SQL*Plus en deze gebruiken in een gewone SQL-query. Declareer het eerst met de var[iable] commando:

variable comment_id number;

Stel het vervolgens in met de exec[ute] commando, dat in wezen een anoniem blok is:

execute :comment_id := 3052753;

Voer vervolgens uw oorspronkelijke zoekopdracht uit met de :comment_id referenties, en geen BEGIN of 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);

Ik denk niet dat er veel functioneel verschil is tussen de twee benaderingen buiten persoonlijke voorkeur, en beide werken ook in SQL Developer (wanneer ze als een script worden uitgevoerd). Ik vind dit gemakkelijker bij het uitvoeren van SQL die is gekopieerd uit een Pro*C-bestand dat al de : . gebruikt bind-formulier, puur omdat je de code helemaal niet hoeft te wijzigen.

Overigens kun je schrijven:

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

zonder de extra select , als:

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


  1. Ophalen en weergeven van gegevens uit de Oracle-database

  2. Deadlock-puzzel:het slachtoffer bezit geen enkele bron, die wordt gebruikt om te doden om de impasse op te lossen

  3. SQL LIKE % binnen array

  4. MySQL:eenvoudige manier om een ​​waarde van een int-veld te wisselen