powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / PL SQL, подскажите...
19 сообщений из 19, страница 1 из 1
PL SQL, подскажите...
    #33409221
wild_man
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет всем!
Подскажите пожалуйста, можно ли как то обойти ошибку:
PLS-00642: local collection types not allowed in SQL statements

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
declare 
MY_ROW T1%ROWTYPE;
new_id T1.id%TYPE;

TYPE TYPE_TABLE_OF_ROWS is table of T1%ROWTYPE;
TABLE_OF_ROWS TYPE_TABLE_OF_ROWS:=TYPE_TABLE_OF_ROWS(null);

begin
    select * into MY_ROW from T1 where id= 8363453 ;
    select SQ_PK_T1.NEXTVAL into new_id from dual;
    MY_ROW.id:=new_id;
--тут ещё изменения некоторых значений MY_ROW
-- например:MY_ROW.DATE_STAMP:=CURRENT_TIMESTAMP;

    TABLE_OF_ROWS( 1 ):=MY_ROW;
    DBMS_OUTPUT.put_line(TABLE_OF_ROWS( 1 ).id);

    insert into T1 select * from table(TABLE_OF_ROWS);
end;
т.е смысл этого кода в том, что не зная точную структуру таблицы сделать копию строчки в этой же таблице, но изменяя некоторые данные...
ошибка как раз возникает при запросе
insert into T1 select * from table(TABLE_OF_ROWS);
но неужели нет способа вставить запись как-то подругому...
Заранее спасибо.
...
Рейтинг: 0 / 0
PL SQL, подскажите...
    #33409251
Borux
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wild_manПривет всем!
PLS-00642: local collection types not allowed in SQL statements
ошибка как раз возникает при запросе
insert into T1 select * from table(TABLE_OF_ROWS);
но неужели нет способа вставить запись как-то подругому...
Заранее спасибо.
эта ошибка означает: локальные коллекции нельзя применять в SQL statements
(как statements переводится не знаю, но это все SQL операции:ins,upd,del)
...
Рейтинг: 0 / 0
PL SQL, подскажите...
    #33409274
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Непонятно, зачем тебе таблица TABLE_OF_ROWS когда нужна всего одна строка.

Напиши так:


Код: plaintext
insert into T1 row MY_ROW;
...
Рейтинг: 0 / 0
PL SQL, подскажите...
    #33409279
**************
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а точнее это значит что тип
TYPE TYPE_TABLE_OF_ROWS is table of T1%ROWTYPE;
должен быть объявлен в системе, а не в процедуре
...
Рейтинг: 0 / 0
PL SQL, подскажите...
    #33409286
wild_man
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
>insert into T1 row MY_ROW;
PL/SQL: ORA-00926: missing VALUES keyword
:(

>а точнее это значит что тип
>TYPE TYPE_TABLE_OF_ROWS is table of T1%ROWTYPE;
>должен быть объявлен в системе, а не в процедуре
а разве можно в глобальных типах объявлять ROWTYPE
???
...
Рейтинг: 0 / 0
PL SQL, подскажите...
    #33409291
JuraCZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если выражение
Код: plaintext
select * into MY_ROW from T1 where id= 8363453 ;
возвращает одну строчку то тебе хватит recorda.
Код: plaintext
new_id T1.id%TYPE;

А если хочется таблицы то будь temporary table или user type as table
...
Рейтинг: 0 / 0
PL SQL, подскажите...
    #33409293
tru55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. для того, чтобы работать с nested table с пом. SQL, она должна быть определена в базе данных (тип создан в базе)
2. вообще не понял, причем здесь таблица, если фактически использ. record
...
Рейтинг: 0 / 0
PL SQL, подскажите...
    #33409294
Borux
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wild_manа разве можно в глобальных типах объявлять ROWTYPE???
нельзя имхо
...
Рейтинг: 0 / 0
PL SQL, подскажите...
    #33409295
**************
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а точнее это значит что тип
TYPE TYPE_TABLE_OF_ROWS is table of T1%ROWTYPE;
должен быть объявлен в системе, а не в процедуре
...
Рейтинг: 0 / 0
PL SQL, подскажите...
    #33409297
JuraCZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Опередили блин
...
Рейтинг: 0 / 0
PL SQL, подскажите...
    #33409325
wild_man
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mcureenabНепонятно, зачем тебе таблица TABLE_OF_ROWS когда нужна всего одна строка.

Напиши так:


Код: plaintext
insert into T1 row MY_ROW;

не в этом суть, да я использую только 1 строчу, но как изменнённые значения обратно в таблицу впихнуть без перечисления полей...
если глобальный тип основанный на ROWTYPE я объявить не могу...
...
Рейтинг: 0 / 0
PL SQL, подскажите...
    #33409327
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
select * from ane_test_tab;

        ID        VAL
---------- ----------
          1            2 

declare
  myRow ane_test_tab%ROWTYPE;
begin
  select * into myRow from ane_test_tab where rownum= 1 ;
  myRow.id := 5 ;
  insert into ane_test_tab values myRow;
end;
/
PL/SQL procedure successfully completed

select * from ane_test_tab;

        ID        VAL
---------- ----------
          1            2 
          5            2 
...
Рейтинг: 0 / 0
PL SQL, подскажите...
    #33409328
tru55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mcureenabНепонятно, зачем тебе таблица TABLE_OF_ROWS когда нужна всего одна строка.

Напиши так:


Код: plaintext
insert into T1 row MY_ROW;


Ну положим не row, а VALUES

---------------------------------
PL/SQL
User’s Guide and Reference

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
DECLARE
dept_info dept%ROWTYPE;
BEGIN
-- deptno, dname, and loc are the table columns.
-- The record picks up these names from the %ROWTYPE.
dept_info.deptno :=  70 ;
dept_info.dname := ’PERSONNEL’;
dept_info.loc := ’DALLAS’;
-- Using the %ROWTYPE means we can leave out the column list
-- (deptno, dname, loc) from the INSERT statement.
INSERT INTO dept VALUES dept_info;
END;
...
Рейтинг: 0 / 0
PL SQL, подскажите...
    #33409332
JuraCZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Никак, придется перечислять.
...
Рейтинг: 0 / 0
PL SQL, подскажите...
    #33409336
wild_man
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrey_anonymous
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
select * from ane_test_tab;

        ID        VAL
---------- ----------
          1            2 

declare
  myRow ane_test_tab%ROWTYPE;
begin
  select * into myRow from ane_test_tab where rownum= 1 ;
  myRow.id := 5 ;
  insert into ane_test_tab values myRow;
end;
/
PL/SQL procedure successfully completed

select * from ane_test_tab;

        ID        VAL
---------- ----------
          1            2 
          5            2 

СПАСИБО!
а лачик то просто открывался
...
Рейтинг: 0 / 0
PL SQL, подскажите...
    #33409341
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JuraCZНикак, придется перечислять.Не вводите народ в заблуждение.
"...иногда лучше жевать..." (с) ;)
...
Рейтинг: 0 / 0
PL SQL, подскажите...
    #33409353
JuraCZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Звиняюсь, не в том топике ответил.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
PL SQL, подскажите...
    #39309818
pixela
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Интересно, а чем обосновано, что "local collection types not allowed in SQL"?
А если хочется использовать локально-то? В чем трудности то были сделать и локально тоже?

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
declare 
 type nt_t is table of number;
 t_nt nt_t := nt_t(3,2,1);
begin
  for rec in (select * from table(t_nt))
  loop
    dbms_output.put_line(to_char(rec.column_value));
  end loop;
end;

--create type nt_t is table of number;
...
Рейтинг: 0 / 0
PL SQL, подскажите...
    #39309827
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pixelaА если хочется использовать локально-то?STFF More PL/SQL-Only Data Types Can Cross PL/SQL-to-SQL Interface
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / PL SQL, подскажите...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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