|
Тема
|
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,
така че въпроса става вече чисто принципен.
Благодаря все пак.
| |
|
|
|
|