Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.05.23;
Скачать: CL | DM;

Вниз

Функции...Оракл   Найти похожие ветки 

 
}|{yk ©   (2004-04-27 15:20) [0]

Создал объекты
CREATE OR REPLACE
type ttablecolumns is OBJECT
(
COLUMN_NAME varchar2(32),
COLUMN_TYPE varchar2(32)
);

CREATE OR REPLACE
type ttablecolumns_tab is table of TTableColumns;
/

Функцию
CREATE OR REPLACE
FUNCTION get_table_cols(Table_Name in varchar2,Owner_Name in varchar2)
return TTableColumns_Tab
 is
  retval TTableColumns_Tab:=TTableColumns_Tab();
  col_name varchar2(32);
  col_type varchar2(32);
  cursor c_TableCols is
  select a.column_name,a.data_type from all_tab_columns a
    where a.table_name=Table_name
          and a.owner=Owner_Name;
 begin
  open c_TableCols;
  loop
   FETCH c_TableCols into col_name,col_type;
   exit when c_TableCols%NOTFOUND;
   retval.EXTEND;
   retval (retval.LAST):=TTableColumns(col_name,col_type);
  end loop;
  close c_TableCols;
  return retval;
 end;
/
Функция рабочая, запускается по хитрому из SQL Navigatora. Но когда я вызываю ее из запроса
select * from table (cast(GET_TABLE_COLS("CUST1","CES") as TTableCols_Tab));
получаю ошибку ora-22905
Ее решение Use CAST to cast the item to a nested table type.
Но я же и так применяю cast. Что делать?


 
Курдль ©   (2004-04-27 15:26) [1]


> select * from table (cast(GET_TABLE_COLS("CUST1","CES")
> as TTableCols_Tab));

Это круто! :)

Какими компонентами доступаешься?
Если DOA, то могу подсказать. В

TOracleDataset.SQL.Text :=
"begin
 :result := ИМЯ_ФУНКЦИИ;
end;"
Variables/Type := Cursor;

Тогда этот датасет начинает принимать набор данных, выданный функцией.


 
roottim   (2004-04-27 16:10) [2]

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

prompt
prompt Creating package TEST
prompt =====================
prompt
CREATE OR REPLACE PACKAGE TEST IS

TYPE TTESTREC IS  RECORD (
  COLUMN_NAME VARCHAR2(32),
  COLUMN_TYPE VARCHAR2(32)
  );

TYPE TTESTTABLE IS TABLE OF TTESTREC;

FUNCTION GET_TABLE_COLS(P_TABLE_NAME IN VARCHAR2, P_OWNER_NAME IN VARCHAR2) RETURN TTESTTABLE PIPELINED;

END TEST;
/

prompt
prompt Creating package body TEST
prompt ==========================
prompt
CREATE OR REPLACE PACKAGE BODY TEST IS

FUNCTION GET_TABLE_COLS(P_TABLE_NAME IN VARCHAR2, P_OWNER_NAME IN VARCHAR2) RETURN TTESTTABLE PIPELINED
IS
BEGIN
FOR C IN (
 SELECT A.COLUMN_NAME, A.DATA_TYPE FROM ALL_TAB_COLUMNS A
   WHERE A.TABLE_NAME = P_TABLE_NAME
         AND A.OWNER = P_OWNER_NAME
)
LOOP  PIPE ROW (C); END LOOP;        
RETURN;
END;

END TEST;
/

spool off


Ну а дальше например так
slect * from table(test.get_table_cols("address", "addr"))
и еще.. данная штука будет работает в 9,2... не ниже..



Страницы: 1 вся ветка

Текущий архив: 2004.05.23;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.027 c
7-1082388033
I_V_N_I_S_H
2004-04-19 19:20
2004.05.23
Скорость CD-ROM


11-1072285336
SAGE
2003-12-24 20:02
2004.05.23
Компиляция KOL 1.88 под FPC???


6-1080943879
lena19
2004-04-03 02:11
2004.05.23
отключение от сервера


3-1082976172
gleb_b
2004-04-26 14:42
2004.05.23
А где в компонентах DAO транзакции?


7-1081853748
Ded Moroz
2004-04-13 14:55
2004.05.23
USB-WebCam, S-Video