Oracle SQL

Фильтр по тегу: insert into


простой и элегантный способ вставки записей в таблицу без перечисления полей

Авторский курс. SQL от новичка до профессионала. Бесплатное вводное занятие. Сертификат. Записывайся!
Прокачаю до уровня БОГ!


для демонстрации создадим некоторую таблицу на основе all_objects
 create table s_obj as select * from all_objects where rownum < 5

в данном случае таблица содержит 4 записи
с помощью инструкции PL SQL заполним данную таблицу следующим образом
begin
  for i in (select * from all_objects where rownum < 21) loop 
    i.object_name := 'prefix'||i.owner; --меняем данные перед вставкой
    insert into s_obj values i;
  end loop; 
end;

commit;
проверим
select * from s_obj
SYS	ICOL$ ...
SYS	I_USER1 ...
...
SYS	prefixSYS ...
SYS	prefixSYS ...
...


подобную методику вы сможете применять в своих функциях и процедурах pl sql
добавлено: 13 мар 17 просмотры: 2982, комментарии: 0



Множественный UPDATE

Чалышев М.М www.orasource.ru
мое резюме рассмотрю предложения...

изучаем SQL группа в контакте - присоединяйтесь


Итак, небольшая заметка по операторы UPDATE
предположим что нам необходимо заменить значения в таблице 1 , данными из таблицы 2
можно конечно написать что то вроде
update t1 set t1.f1=select t2.f1 from t2 where t2.key1 = t1.key

но у нас есть более легкий способ произвести подобную операцию
UPDATE
(
SELECT
       t.c1,
       t.c2,
       s.c1 AS c1_new,
       s.c2 AS c2_new
 
FROM table1 t
INNER JOIN table2 s ON s.key=t.key
)
tt
SET tt.c1=tt.c1_new, tt.c2=tt.c2_new


Где table1, table2 это
То есть на основании данных из одной таблицы мы обновляем данные в другой таблице, важно наличие первичного ключа в каждой из представленных таблиц
приведем пример демонстрирующий работу UPDATE с несколькими таблицами

create table PHONES1
(
  PHONENUM VARCHAR2(48) not null primary key,
  NAME VARCHAR2(48)
);

create table PHONES
(
  PHONENUM VARCHAR2(48) not null primary key,
  NAME VARCHAR2(48)
);


заполним данными и выполним UPDATE
INSERT INTO PHONES1(PHONENUM, name) values ('495 1211133','Алексеев1');
INSERT INTO PHONES1(PHONENUM, name) values ('499 3311133','Михайлов1');
INSERT INTO PHONES1(PHONENUM, name) values ('917 12122sd3','Коробочкин1');
INSERT INTO PHONES1(PHONENUM, name) values ('499 33111133','Костин1');

INSERT INTO PHONES(PHONENUM, name) values ('495 1211133','Алексеев');
INSERT INTO PHONES(PHONENUM, name) values ('499 3311133','Михайлов');
INSERT INTO PHONES(PHONENUM, name) values ('917 12122sd3','Коробочкин');
INSERT INTO PHONES(PHONENUM, name) values ('499 33111133','Костин');
INSERT INTO PHONES(phonenum, name) values ('214 331das1133','Докучаев');

UPDATE (SELECT   t.phonenum AS phonenum1,       t.phonenum phonenum2,        s.name AS name1, t.name AS name_new FROM phones1 t
INNER JOIN phones s ON s.phonenum=t.phonenum )  Tt SET tt.name1=tt.name_new

результат - обновление данных в phones из таблицы phones1
добавлено: 08 апр 15 просмотры: 3053, комментарии: 3



Динамический SQL в Oracle - легко и понятно (часть вторая - курсоры FETCH , Close , Open FOR )

Авторский курс. SQL от новичка до профессионала. Бесплатное вводное занятие. Сертификат. Записывайся!
Прокачаю до уровня БОГ!


Использование курсоров в динамическом SQL, команды FETCH и CLOSE
Для работы с динамическим запросом который возвращает несколько строк используются курсоры . Работа с курсорами - это всего три команды: OPEN-FOR , FETCH и CLOSE .

Сначала , вы с помощью команды OPEN, открываете переменную курсора, далее в цикле FOR последовательно считываете результат запроса из нескольких строк запроса. В каждой итерации цикла FOR, вызывается команда FETCH которая считывает из результирующего набора по одной записи. Когда все строки обрабатываются, вы закрываете курсор вызывая метод CLOSE для переменной курсора.
читать дальше...
добавлено: 07 сен 13 просмотры: 32409, комментарии: 2



Использование динамического SQL - легко и понятно (часть первая EXECUTE IMMEDIATE)

Авторский курс. SQL от новичка до профессионала. Бесплатное вводное занятие. Сертификат. Записывайся!
Прокачаю до уровня БОГ!



Динамический SQL. Часть первая
В некоторых задачах требуется использование динамических запросов. Это случается , когда мы заранее не знаем какой нам нужен SQL запрос, какие обьекты будут использоваться для получения данных.

Подобные задачи, иногда возникают при построении сложной банковской, бухгалтерской отчетности, а также в моделях данных - обьект, атрибут , связь, при формировании динамических разнородных списков, в задачах миграции и интеграции .

Так же динамический SQL незаменим в случаях ,когда требуется назначить или изменить для определённого пользователя права или привилегии, или роли, или для изменения параметров сессии

Ключевое отличие динамического sql от статического , в том, что команда динамического SQL строится непосредственно во время выполнения процедуры или функции PL/SQL.

Таким образом, команда динамического SQL - это , построенная во время выполнения программы строка SQL запроса , так же такая строка может быть использована во время выполнения анонимного PLSQL блока.
читать дальше...
добавлено: 06 сен 13 просмотры: 68088, комментарии: 3



Предикаты any , all в SQL запросах

Авторский курс. SQL от новичка до профессионала. Бесплатное вводное занятие. Сертификат. Записывайся!
Прокачаю до уровня БОГ!



-- Использование any , all в запросах , очень похоже на использования предиката exists , но есть некоторые отличия
-- рассмотрим работу данных предикатов на примерах
-- для примера создадим таблицу со следующими полями
-- 1) Название
-- 2) Цвет
-- 3) вес

drop table t1;
create table t1(tid number,tname varchar2(20),tprop varchar2(20), tvalue number);
-- заполним таблицу данными
insert into t1 values(1,'круг','красный', 10);
insert into t1 values(2,'круг','зеленый', 30);
insert into t1 values(3,'круг','зеленый', 30);
insert into t1 values(4,'круг','синий', 20);
insert into t1 values(5,'квадрат','красный', 10);
insert into t1 values(6,'квадрат','синий', 20);
insert into t1 values(7,'квадрат','красный', 20);
insert into t1 values(8,'треугольник','красный', 30);
insert into t1 values(9,'треугольник','синий', 10);

-- передикат ANY является верным , если из всех значений выведенные подзапросом если любой из их удовлетворяет условию для текущей строки внешнего запроса.
-- давайте рассмотрим на примерах:
select * from t1 where tname = 'круг' and tvalue  = any(select tvalue from t1 where tname = 'квадрат' ) 

TID TNAME TPROP TVALUE
1 круг красный 10
4 круг синий 20

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

-- Предикат ALL является верным, если каждое значение выбранное подзапросом удовлетворяет условию в предикате внешнего запроса.
-- рассмортим следющий запрос
читать дальше...
добавлено: 25 янв 13 просмотры: 12632, комментарии: 0