Простой "SELECT" с переменной, но без " INTO"

у меня есть несколько разных запросов SELECT с одинаковыми значениями. Я хочу использовать что-то вроде DECLARE, но когда я пишу простое DECLARE, он говорит, что ожидается "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, и использовать их в обоих запросах select одновременно время.

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

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 ответов


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

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

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


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

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;

или

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;

EDIT: я также должен добавить, что вы также можете объявить выходные Vvariables, которые вы можете использовать в SQL для возврата вывода, чтобы помочь с отладкой и т. д. Так что вы можете сделать что-то вроде:

DECLARE
 out  varchar2(200);

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

 dbms_output.put_line(out);

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


вы используете 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;

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