Простой «SELECT» с переменной, но без «INTO» - PullRequest
9 голосов
/ 23 февраля 2012

У меня есть несколько разных запросов SELECT с одинаковыми значениями. Я хочу использовать что-то вроде DECLARE, но когда я пишу простой DECLARE, он говорит, что ожидается "INTO".

Если мне нужен только «ВЫБОР», как я могу использовать эту форму без «INTO»?

Просто у меня есть два (или более) выбора:

SELECT * FROM my_table1 WHERE column1=5 and column2=6;

и

SELECT * FROM my_table2 WHERE col1=5 and col2=6;

Теперь я хочу объявить переменную, такую ​​как var_col1 и var_col2, и использовать их в обоих запросах на выбор одновременно.

Я думал, что это будет работать:

DECLARE
var_col1 number := 5;
var_vol2 number := 6;
BEGIN
SELECT * FROM my_table1 WHERE column1=var_col1 and column2=var_col2;
SELECT * FROM my_table2 WHERE col1=var_col1 and col2=var_col1;
/* and more SELECTs with var_col1 and var_col2 */
END;

Но нет шансов ... Как это можно сделать без процедуры или функции?

Ответы [ 3 ]

6 голосов
/ 23 февраля 2012

Когда вы пишете select * from some_table; в SQL * Plus, SQL*Plus выступает в качестве клиентской программы и выполняет для вас большую работу под прикрытием в отношении данных, возвращаемых из базы данных, форматируя ихи отображаем его.

Как только вы наберете DECLARE, вы начинаете блок PL / SQL.Теперь вы вызываете PL / SQL, а PL / SQL вызывает SQL.В результате вам нужно решить, как обрабатывать данные, возвращаемые из SQL, в PL / SQL.Способ сделать это - через предложение INTO и переменную для получения вывода.Учитывая это, куда пойдут выходные данные из SELECT, если вы не предоставите предложение INTO?Это должно куда-то идти, верно?

Надеюсь, это понятно.

2 голосов
/ 23 февраля 2012

Вы должны выбрать в объявленные переменные, если вы хотите сделать это таким образом или установить столбцы. Например:

DECLARE
var_col1 number := 5;
var_vol2 number := 6;
BEGIN
   SELECT my_table1.var_col into var_col1 
     FROM my_table1 
    WHERE column1=var_col1 
      AND column2=var_col2;
--etc.....
END;

OR

DECLARE
    var_col1 number := 5;
    var_vol2 number := 6;
    BEGIN
       SELECT 5 into var_col1 
         FROM my_table1 
        WHERE column1=var_col1 
          AND column2=var_col2;
    --etc.....
    END;

РЕДАКТИРОВАТЬ: Я также должен добавить, что вы также можете объявить выходные переменные Vvariables, которые вы можете использовать в SQL для возврата вывода, чтобы помочь с отладкой и т. Д. Таким образом, вы можете сделать что-то вроде:

DECLARE
 out  varchar2(200);

И в своем BEGIN заявлении сделайте что-то вроде:

 dbms_output.put_line(out);

Который выводит некоторую потенциально полезную информацию (в зависимости от того, что вы намеревались).

1 голос
/ 23 февраля 2012

Вы используете PLSQL Developer, у которого есть выбор из множества различных типов окон.Если я правильно помню, окно команд - это окно эмулятора SQL * Plus.Таким образом, это должно работать:

var n1 number 
var n2 number 

exec &&n1 := 5
exec &&n2 := 6

SELECT * FROM my_table1 WHERE column1=&&n1 and column2=&&n2 ; 
SELECT * FROM my_table2 WHERE col1&&n1 and col2=&&n2;

Другими словами, определите две переменные подстановки, присвойте им значения и, наконец, разверните их во всех ваших запросах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...