Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 синтаксис хранимой процедуры  [new]
lancastersap
Member

Откуда:
Сообщений: 6
пытаюсь создать хранимую процедуру:

        CREATE PROCEDURE insip AS
        BEGIN
            insert into pingtable(ip) values("128.2.2.2");
        END;

процедура создаётся но не работает, пытаюсь выполнить

exec insip;

пишет ошибку, что-то вроде нехорошее имя объекта;
при создании процедуры писал что статус её после компиляции - INVALID,
что это за статус с чем его едят, и самое главное как сделать чтобы работало
т.е. ХрПр была правильно создана и как правильно её вызывать?
17 май 06, 15:39    [2674945]     Ответить | Цитировать Сообщить модератору
 Re: синтаксис хранимой процедуры  [new]
Tolmachov Dmitiry
Member

Откуда: Москва, Пенза
Сообщений: 1520
А так?
CREATE PROCEDURE insip AS
        BEGIN
            insert into pingtable(ip) values('128.2.2.2');
        END;
17 май 06, 15:40    [2674957]     Ответить | Цитировать Сообщить модератору
 Re: синтаксис хранимой процедуры  [new]
tru55
Member

Откуда: СПб
Сообщений: 19790
Кавычки не двойные, а одинарные ' ... '
17 май 06, 15:41    [2674960]     Ответить | Цитировать Сообщить модератору
 Re: синтаксис хранимой процедуры  [new]
lancastersap
Member

Откуда:
Сообщений: 6
спасибо Толмачёву и tru55 дело оказалось действительно в кавычках, но только отчасти

создаётся и выполняется нормально с одинарными кавычками в SQL NAVIGATOR,
но вот из моего php кода не работает (т.е. опять создаёт со статусом INVALID)

код на php

...

function ocigo($q){
	
	global $_ociconnect;
	
	echo 'ocigo <h2>'.$q.'</h2>';
	echo 'ocico <h2>'.$_ociconnect.'</h2>';
	
	$p=ociparse($_ociconnect, $q);
	ociexecute($p, OCI_COMMIT_ON_SUCCESS);
}

...

function createDB(){
	
	echo '<h1>Create DB</h1>';

	ocigo('create table pingtable(ip char(16), host char(250), ping number(5))');
	ocigo("
        CREATE PROCEDURE insip3 AS
        BEGIN
            insert into pingtable(ip) values('128.2.2.2');
        END;
	");
	
}

все другие конструкции sql через вызов функции на пхп ocigo("<some pl/sql instruction>"); нормольно работают
17 май 06, 15:54    [2675035]     Ответить | Цитировать Сообщить модератору
 Re: синтаксис хранимой процедуры  [new]
lancastersap
Member

Откуда:
Сообщений: 6
пробую менять кавычки на обратные, т.е.

	ocigo('
        CREATE PROCEDURE insip5 AS
        BEGIN
            insert into pingtable(ip) values("128.2.2.2");
        END;
	');

результат тот же, создаётся ХрПр со статусом INVALID и потом не работает
17 май 06, 16:00    [2675091]     Ответить | Цитировать Сообщить модератору
 Re: синтаксис хранимой процедуры  [new]
AlexOI
Member

Откуда: Санкт-Петербург
Сообщений: 161
Попробуйте в строке с инсертом написать

insert into pingtable(ip) values('''128.2.2.2''');

по три одинарных кавычки
17 май 06, 16:04    [2675121]     Ответить | Цитировать Сообщить модератору
 Re: синтаксис хранимой процедуры  [new]
Jannny
Member

Откуда: Спб
Сообщений: 6424
неужели вы никогда в своем php коде не встречались с кавычками внутри кавычек???
17 май 06, 16:05    [2675122]     Ответить | Цитировать Сообщить модератору
 Re: синтаксис хранимой процедуры  [new]
lancastersap
Member

Откуда:
Сообщений: 6
to Alex: хорошая идея, попробую
to Janny: с точки зрения php всё корректно
17 май 06, 16:21    [2675204]     Ответить | Цитировать Сообщить модератору
 Re: синтаксис хранимой процедуры  [new]
softy
Member

Откуда: from Russia
Сообщений: 5911
Отвлечённый вопрос: а COMMIT кто будет делать?
17 май 06, 16:39    [2675314]     Ответить | Цитировать Сообщить модератору
 Re: синтаксис хранимой процедуры  [new]
tru55
Member

Откуда: СПб
Сообщений: 19790
softbuilder@inbox.ru
Отвлечённый вопрос: а COMMIT кто будет делать?


Дык он же только создает процедуру... :)
17 май 06, 16:44    [2675361]     Ответить | Цитировать Сообщить модератору
 Re: синтаксис хранимой процедуры  [new]
Andrew IF
Member

Откуда: Москва
Сообщений: 741
lancastersap

создаётся и выполняется нормально с одинарными кавычками в SQL NAVIGATOR,
но вот из моего php кода не работает (т.е. опять создаёт со статусом INVALID)
[/src]
все другие конструкции sql через вызов функции на пхп ocigo("<some pl/sql instruction>"); нормольно работают


А чем получающаяся функция инвалидна?

select * from user_errors
where name='INSIP5'
17 май 06, 17:27    [2675727]     Ответить | Цитировать Сообщить модератору
 Re: синтаксис хранимой процедуры  [new]
lancastersap
Member

Откуда:
Сообщений: 6
ответ на отвлечённый вопрос :)
commit делает функция пхп ociexecute($p, OCI_COMMIT_ON_SUCCESS);
см. процедуру ocigo($q);
но, как справедливо заметил tru55 тут он не нужен, ведь изменения данных
не происходит

тройные одинаковые кавычки опять работают в SQL Navigator и не работают из пхп

:) спасибо Андрею ИФ
PLS-00103: Встретился символ "" в то время как ожидалось одно из следующих:

   begin function package pragma procedure subtype type use
   <an identifier> <a double-quoted delimited-identifier> form
   current cursor external language

получается, что пхп перед отправкой запроса oracle транслирует кавычки одинарные на двойные, или на их группу, похоже, что проблема в пхп всё-таки
18 май 06, 06:05    [2676982]     Ответить | Цитировать Сообщить модератору
 Re: синтаксис хранимой процедуры  [new]
softy
Member

Откуда: from Russia
Сообщений: 5911
автор
но, как справедливо заметил tru55 тут он не нужен, ведь изменения данных
не происходит


Слабо понял логику. Но тем не менее, что мешает добавить COMMIT в процедуру? Если предполагается массовый вызвов процедуры, а потом COMMIT, то эффективно ли тогда таким способом строки добавлять? Не правильнее ли будет это сделать из приложения, через связанные переменные.
18 май 06, 10:38    [2677635]     Ответить | Цитировать Сообщить модератору
 Re: синтаксис хранимой процедуры  [new]
lancastersap
Member

Откуда:
Сообщений: 6
commit будет когда будет процедура,
сейчас это просто рыба :)
пусть для начала рыба заработает,
после этого её можно наполнить полноценным pl/sql кодом
18 май 06, 11:04    [2677773]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить