Простой "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;
другими словами, определите две переменные подстановки, назначьте им значения и, наконец, разверните их во всех своих запросах.