Oracle
 sql >> база данни >  >> RDS >> Oracle

Използване на променливи за свързване в SQL Plus с повече от един върнат ред?

Подобно на подхода на @Glenn, но можете да декларирате свързваща променлива в SQL*Plus и да я използвате в обикновена SQL заявка. Първо го декларирайте с var[iable] команда:

variable comment_id number;

След това го задайте с exec[ute] команда, която по същество е анонимен блок:

execute :comment_id := 3052753;

След това изпълнете оригиналната си заявка с :comment_id препратки и без BEGIN или КРАЙ :

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);

Не мисля, че има голяма функционална разлика между двата подхода извън личните предпочитания и и двата работят и в SQL Developer (когато се изпълняват като скрипт). Намирам това за по-лесно, когато изпълнявам SQL, копиран от Pro*C файл, който вече използва : форма за обвързване, просто защото изобщо не трябва да променяте кода.

Между другото можете да напишете:

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

без допълнителния избор , като:

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. IOException:Мрежовият адаптер не можа да установи връзката

  2. Защо получавам следната функция за грешка LISTAGG:„резултатът от конкатенацията на низ е твърде дълъг?*

  3. Разлика между класовете драйвери на Oracle jdbc?

  4. Виждайки ORA-01858:намерен е нецифров знак, където се очаква число

  5. Oracle 10g/11g за Mac