2015-12-22 3 views
9

я иногда встречаются примеры, где SELECT...INTO...FROM DUAL используется для вызова функции - например:Использование `SELECT` для вызова функции

SELECT some_function INTO a_variable FROM DUAL; 

используется вместо

a_variable := some_function; 

Мой взять на это что это не очень хорошая практика, потому что A) он не понимает, что функция вызывается, а B) она неэффективна в том, что она заставляет переход от PL/SQL-движка к движку SQL (возможно, сегодня это проблема).

Может кто-нибудь объяснить, почему это могло быть сделано, например. было ли это необходимо в раннем PL/SQL-кодировании для вызова функции? Код, который я ищу, может быть датирован уже с Oracle 8.

Любые идеи оцениваются.

+1

Я думаю, что очень старые версии Oracle (такие как Oracle 8 и 9) фактически не поддерживали назначение с помощью функции. –

+0

Насколько я помню, второй синтаксис доступен с 10g. Вы уверены, что он побежал на 8i? –

+0

@a_horse_with_no_name - Я знаю, что 9i поддерживает прямое назначение из функций (например, 'a_variable: = some_function;'). Но 8i может и не быть - мне никогда не приходилось работать с ним. Благодаря! –

ответ

3

Эта практика датируется до PLSQL и Oracle 7. Как уже упоминалось, назначение было (и, конечно же, лучшей практикой) в Oracle7.

До Oracle 7 было два широко используемых инструмента, которые необходимо использование Выберите ... в var из dual;

С одной стороны раньше использовался инструмент Oracle под названием RPT, какой-то генератор отчетов. RPT можно использовать для создания пакетных процессов. Он имел два типа макросов, которые можно было бы объединить для достижения того, что мы используем PLSQL на сегодняшний день. Мое первое задание Oracle включало отладку PLSQL, которая была сгенерирована программой, которая принимала пакеты RPT и автоматически преобразовывала их в PLSQL. Я бросил свой единственный справочник RPT когда-то вскоре после 2000 года.

С другой стороны, Oracle Forms 2.x и его компонент меню. Контекстное переключение в меню Oracle часто выполнялось с помощью . Выберите ... из двойного; Я до сих пор помню, насколько я горжусь, когда обнаружил, что неустранимый Bug был вызван в общей сложности записей в таблице Dual.

Прошу прощения, что я не могу подтвердить это, но это время года, чтобы вспомнить старые времена и очень весело иметь ответ.

+0

Спасибо за информацию! BTW - Мне нравится аватарка. Я живу недалеко от Хинкли, штат Огайо, где индейские стервятники (местные называемые «канюки») являются местной иконой (они занимаются воздушными потоками, поднимающимися с хребта Хинкли, который проходит прямо через дорогу от меня), поэтому я вижу этих животных Лот в течение лета, вот почему я мог идентифицировать птицу с картины. Я просто стараюсь двигаться и надеюсь, что они не будут нетерпеливы :-). Кроме того, моя дочь добровольцев в местной организации по спасению птиц, которая лечит некоторых раненых канюков (хотя их лысый орел более впечатляет :-). В любом случае, спасибо за ответ. –

+0

Также - спасибо за указание, что некоторые из моих коллег привычки кодирования еще более атрофированы, чем мои собственные! ;-) –

Смежные вопросы