Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2002.05.20;
Скачать: [xml.tar.bz2];

Вниз

Простой вопрос.   Найти похожие ветки 

 
Termik   (2002-04-23 18:00) [0]

Как выполнить динамический SQL в функции, вызов которой идет из SQL-оператора? Сервер выдает ошибку ORA-06571 и не хочет выполнять функцию. ЧТО ДЕЛАТЬ-ТО ?!
Заранее благодарю.


 
Suntechnic   (2002-04-23 18:04) [1]

О вызове какой ф-ции идёт речь? Извольте выражаться яснее.


 
Termik   (2002-04-23 18:16) [2]

Значит так !
Мной определено несколько функций: FUN1(a NUMBER), FUN2(b NUMBER) и т.д.
Программа на Делфях вызывает функцию FUN1 с параметром.
Функция FUN1 читает определенную запись в таблице (определяет по параметру). В этой записи определен SQL-оператор.
Далее, пользуясь модулем DBMS_SQL выполняем этот оператор.
В операторе записаны вызовы функций FUN2,...FUNn с параметрами, которые, пользуясь входным параметром, читают очередной SQL-оператор из таблицы и вызывают другие функции (или самих себя) через DBMS_SQL. Вот, вкратце, такая система...



 
roottim   (2002-04-24 08:22) [3]

примерно такой вопрос был
http://delphi.mastak.ru/cgi-bin/forum.pl?look=1&id=1019541070&n=1


 
roottim   (2002-04-24 08:23) [4]

ну ты же и писал!... все так и работает!


 
diana   (2002-04-24 09:48) [5]

если Oracle 8i и старше, то в нем есть замечательная возможность работать с динамическим SQL без DBMS_SQL -
EXECUTE IMMEDIATE
Работает так:

SQL_TEXT := "SELECT C.VALIDRANGE_ID "||
"FROM VALIDRANGE P, VALIDRANGE C "||
"WHERE P.VALIDRANGE_ID = :PAR AND C.EXPONENT_ID = :PAR_EXP AND "||DIM_WHERE;

EXECUTE IMMEDIATE SQL_TEXT
INTO CHILD
USING PARENT, R_GROUP.EXPONENT_ID;
Подробнее почитай в Help


 
Termik   (2002-04-24 09:51) [6]

Не работает execute immediate ! Он, почему-то не воспринимает эту команду и приходится пользоваться модулем DBMS_SQL. Как выполнить динамический SQL ?


 
Севостьянов Игорь   (2002-04-24 12:55) [7]

Что значит не реагирует (не воспринимает) EXECUTE IMMEDIATE ???
Такого быть не может ... Какая у тебя версия Oracle ? Какой код ? Напиши свой SQL...


 
Termik   (2002-04-24 13:52) [8]

Значит, функция:
create or replace function TESTFUN(a NUMBER) return number is
Result VARCHAR2(2000);
Fun VARCHAR2(2000);
V_Cursor NUMBER;
V_SQL VARCHAR2(2000);
V_NumRows INTEGER;
begin
SELECT EXPR INTO Fun FROM TEST WHERE ID=a;
V_SQL := "select "|| Fun ||" from dual";
EXECUTE IMMEDIATE V_SQL
V_Cursor := DBMS_SQL.OPEN_CURSOR;
DBMS_SQL.PARSE(V_Cursor, V_SQL, DBMS_SQL.NATIVE);
DBMS_SQL.DEFINE_COLUMN(V_Cursor, 1, Result, 5);
V_NumRows := DBMS_SQL.EXECUTE(V_Cursor);
LOOP
IF DBMS_SQL.FETCH_ROWS(V_cursor) = 0 THEN
EXIT;
END IF;
DBMS_SQL.COLUMN_VALUE(V_Cursor, 1, Result);
END LOOP;
DBMS_SQL.CLOSE_CURSOR(V_Cursor);
return(Result);
end TESTFUN;
В 10-й строчке стоит сабж.
При компилировании выводится: PLS-00103
Работаю с ORACLE 8.01 в PL/SQL Developer версии 4.0.1.399
В ЧЕМ ПРОБЛЕМА, А ?!


 
СЫН   (2002-04-24 14:32) [9]

1) У тебя V_Cursor NUMBER;

Попробуй V_Cursor INTEGER := DBMS_SQL.OPEN_CURSOR;

2) EXECUTE IMMEDIATE появился в 8.1.5, в 8.01 его нету, имхо





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

Форум: "Базы";
Текущий архив: 2002.05.20;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.009 c
7-64844
Shiza
2002-02-18 19:17
2002.05.20
Доступ к прерываниям из дельфи


14-64837
Sky 55
2002-04-11 17:38
2002.05.20
HELP!!! нужно написать несколько прог на дельфи отстающей студент


1-64570
sergeii
2002-05-07 11:38
2002.05.20
Поиск данных в StringGrid


3-64487
a_k
2002-04-22 10:35
2002.05.20
select ... from (select ...)


1-64723
BAHO
2002-05-04 04:20
2002.05.20
Помогите - ListView !!!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский