Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Помогите с PL/SQL плиз / 4 сообщений из 4, страница 1 из 1
29.03.2003, 16:54
    #32129598
KZ
KZ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с PL/SQL плиз
в кратце примерно такая ситуация
oracle'ом занимаюсь недавно

CREATE OR REPLACE PROCEDURE DB.PROC_TMP
AS
--внутренние таблицы для обработки данных
type Tnumber is table of number index by binary_integer;
vStationDeviceId Tnumber;
begin
SELECT SCD.STATION_DEVICE_ID
BULK COLLECT INTO vStationDeviceId
FROM
TECH.SERVICE_CENTER SC,
TECH.SERVICE_CENTER_DEVICE SCD
WHERE
SC.SERVICE_CENTER_TYPE_ID IN (SELECT COMMON_TYPE_ID
FROM DB.REPORT_SETUP
WHERE ID=165); --настройка: ТИП СЕРВИС-ЦЕНТРА

INSERT INTO DB.M_QUALITY
(
LOW_DEVICE,
HIGH_DEVICE
)
SELECT
STD.LOW_DEVICE,
STD.HIGH_DEVICE
FROM
TECH.STATION_DEVICE STD
WHERE
STD.ID IN (vStationDeviceId); -- вот эту конструкцию не пропускает

COMMIT;
END;
/

Выдает ошибку
ERROR
-----------------------------------------------------------------
PL/SQL: SQL Statement ignored
PLS-00383: type mismatch found at 'STD.ID' inside an IN
or NOT IN clause

В чем ошибка
Таких INSERT'ов в общем случае будет куча.
подскажите или все-таки подселект будет быстрее
STD.ID(подселект)
...
Рейтинг: 0 / 0
29.03.2003, 18:03
    #32129623
oracal
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с PL/SQL плиз
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
SELECT SCD.STATION_DEVICE_ID 
BULK COLLECT INTO vStationDeviceId 
FROM 
TECH.SERVICE_CENTER SC, 
TECH.SERVICE_CENTER_DEVICE SCD 
WHERE 
SC.SERVICE_CENTER_TYPE_ID IN (SELECT COMMON_TYPE_ID 
FROM DB.REPORT_SETUP 
WHERE ID= 165 ); 

Ты указываешь во FROM две таблицы, но не делаешь соединения между ними.
В данном случае выбор SCD.STATION_DEVICE_ID абсолютно бессмысленен.

Во втором типы не совпадают.

А что такое BULK COLLECT - это новшество из 9i?
...
Рейтинг: 0 / 0
30.03.2003, 10:19
    #32129696
Oracle X-pert
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с PL/SQL плиз
Insert neobhodimo delat' in Loop or in BULK, t.k. "vStationDeviceId " eto ne prostaya
peremennaya, a stack.
...
Рейтинг: 0 / 0
30.03.2003, 13:01
    #32129714
Mergen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с PL/SQL плиз
to KZ
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
CREATE OR REPLACE PROCEDURE DB.PROC_TMP 
AS 
 --внутренние таблицы для обработки данных 
 
type Tnumber is table of number index by binary_integer; 
vStationDeviceId Tnumber; 
begin 
SELECT SCD.STATION_DEVICE_ID 
BULK COLLECT INTO vStationDeviceId 
FROM 
TECH.SERVICE_CENTER SC, 
TECH.SERVICE_CENTER_DEVICE SCD 
WHERE 
SC.SERVICE_CENTER_TYPE_ID IN (SELECT COMMON_TYPE_ID 
FROM DB.REPORT_SETUP 
WHERE ID= 165 );  --настройка: ТИП СЕРВИС-ЦЕНТРА 
 

FORALL i IN vStationDeviceId.First.. vStationDeviceId.Last
INSERT INTO DB.M_QUALITY 
( 
LOW_DEVICE, 
HIGH_DEVICE 
) 
SELECT 
STD.LOW_DEVICE, 
STD.HIGH_DEVICE 
FROM 
TECH.STATION_DEVICE STD 
WHERE 
STD.ID=vStationDeviceId(i); 

COMMIT; 
END; 
/ 



to Oracle
BULK COLLECT уже есть в Oracle8i
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Помогите с PL/SQL плиз / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]