Клубове Дир.бг
powered by diri.bg
търси в Клубове diri.bg Разширено търсене

Вход
Име
Парола

Клубове
Dir.bg
Взаимопомощ
Горещи теми
Компютри и Интернет
Контакти
Култура и изкуство
Мнения
Наука
Политика, Свят
Спорт
Техника
Градове
Религия и мистика
Фен клубове
Хоби, Развлечения
Общества
Я, архивите са живи
Клубове Дирене Регистрация Кой е тук Въпроси Списък Купувам / Продавам 03:25 08.06.24 
Компютри и Интернет
   >> Бази данни
*Кратък преглед

Тема LONG ROW в ORACLE 8  
АвторEмил (Нерегистриран)
Публикувано03.01.03 18:34



Има две таблици в ОРАКЪЛ 8 с идентична структура.
Едно от полетата е LONG RAW. Искам на тригер
(BEFORE DELETE) на едната изтриващия се ред да
го запазя във втората.
Проблема е че за разлика от BLOB типа LONG ROW
почти нищо не може да се прави с него. То има начини, но
те работят до 32К, а моите данни са по 1-5 МБ.
Та накъсо как да копирам ред от едната таблица в другата?



Тема Re: LONG ROW в ORACLE 8нови [re: Eмил]  
Автор Topбaлaн (любопитко)
Публикувано03.01.03 23:50



от оракал не разбирам, но порових в гугъла...
интересно, че нищо не споменават за проблем като твоя...поне аз не намерих
едо съобщение приличаше малко на твоя проблем


хвърли едно око, аком мислиш че може да ти помогне с нещо...



Тема Re: LONG ROW в ORACLE 8нови [re: Eмил]  
Авторbasiliko (Нерегистриран)
Публикувано08.01.03 12:24



Ами LONG ROW е 32К-7, а BLOB до 4G. Не виждам как ще копираш ред от едната таблица в другата. Все едно да искаш да сложиш varchar(100) в varchar(10) и да се чудиш как да го направиш. На теория може да се измисли какво ли не - напр. да разбиеш BLOB-а на малки парчета и прочие , но това е тъпо и е само теория. Защо просто не промениш типа от LONG ROW на BLOB?
Каква база е това? Production or development?

успех



Тема Re: LONG ROW в ORACLE 8нови [re: basiliko]  
АвторEмил (Нерегистриран)
Публикувано09.01.03 10:42



2 basiliko
Това не е точно така. LONG RАW , (а не LONG ROW -
както аз съм го сбъркал в заглавието на първия
ми постинг) не е 32К-7, а може да е до
2 ГБ - когато е колона в таблица . Но ако
в процедура се декларира променлива от този тип
то тя има това ограничение от 32К. Така че една
програма може да запише голям файл (>32КБ ) в
таблица, може и да си го прочете. (Аз ползвам Делфи).
Но!
Наложи ми се да направя тригер и в него да е тази
операция по прехвърлянето на ред от една таблица
в друга. Оказа се че със средствата на PL/SQL
това е невъзможно (вече съм убеден 99%).
В документацията на ОРАКЪЛ пише -
ползвайте BLOB. Аз нямам избор и ще трябва
да го направя. Но въпроса е принципен. Това е да те
накарат да направиш upgrade насила. Получава се
ситуация че има такъв тип, но няма достатъчно
средства за неговата обработка.
Обидно се получава.

Благодаря за отговорите все пак.



Тема Re: LONG ROW в ORACLE 8нови [re: Eмил]  
Автор Topбaлaн (любопитко)
Публикувано10.01.03 08:43



пусни частта от кода, която не ти върви
любопитен съм да видя, дали ще ми доде нещо наум?



Тема Re: LONG ROW в ORACLE 8нови [re: Topбaлaн]  
АвторEмил (Нерегистриран)
Публикувано10.01.03 10:24



>...пусни частта от кода, която не ти върви ...
То проблема е не че част от кода не върви,
а какъв въобще да е кода.

Например прехвърляне от tab1 -> tab2
CREATE OR REPLACE PROCEDURE My_Proc
is
rawdata long raw;
begin
select big_col into rawdata from tab1 where id=1;
INSERT INTO tab2(id, big_col) VALUES (1, rawdata);
end;

Това върви, но само ако данните в колонката
са до 32КБ.



Тема Re: LONG ROW в ORACLE 8нови [re: Eмил]  
Автор Topбaлaн (любопитко)
Публикувано10.01.03 10:39



SELECT INTO can be used to combine data from several tables or views into one table. It can also be used to create a new table containing data selected from a linked server.

нещо такова няма ли?
пуснах филтър да ми показва само Transact SQL та си мсиля че и в оракъла трябва да го има?

няма ли да свърши работа?

при мен това:
SELECT *
INTO newCustomers
FROM Customers
WHERE (Region = 'SP')

работи, но не съм го мъчил с големи обекти, провери, няма причина да не стане...



Тема Re: LONG ROW в ORACLE 8нови [re: Topбaлaн]  
Авторsvircho (Нерегистриран)
Публикувано13.01.03 17:17



Ако колоната във втората таблица е също от тип LONG RAW тогава използвай този INSERT statement в тригера:
INSERT INTO table2(a)
SELECT a FROM table1 WHERE id=some_id;
По този начин ще избегнеш използването на променлива и ще копираш стойността на колоната от едната таблица в другата.
Но не съм сигурен дали ще върви на Oracle8.



Тема Re: LONG ROW в ORACLE 8нови [re: svircho]  
АвторEмил (Нерегистриран)
Публикувано14.01.03 16:10



Благодаря за отговорите, но проблема не
не се решава по този начин. LONG RAW
не може да участва в SELECT за INSERT.
(Пише го в документацията, а и опитите
показват същото).Така че изполването на
променлива е предизвикано от този факт.
Тези неща ми бяха известни преди да пиша
във форума. Надявах се някой който е "по-навътре"
с ОРАКЪЛ да каже твърдо, че това не може да стане
със сигурност или ако може (малко вероятно) да
покаже как става този трик.
За себе си вече реших да премина на BLOB,
така че въпроса става вече чисто принципен.
Благодаря все пак.




*Кратък преглед
Клуб :  


Clubs.dir.bg е форум за дискусии. Dir.bg не носи отговорност за съдържанието и достоверността на публикуваните в дискусиите материали.

Никаква част от съдържанието на тази страница не може да бъде репродуцирана, записвана или предавана под каквато и да е форма или по какъвто и да е повод без писменото съгласие на Dir.bg
За Забележки, коментари и предложения ползвайте формата за Обратна връзка | Мобилна версия | Потребителско споразумение
© 2006-2024 Dir.bg Всички права запазени.