powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Хранимая процедура
7 сообщений из 7, страница 1 из 1
Хранимая процедура
    #34575012
Фотография lena_ki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На форме есть Edit1 (С++Builder). Пользователь вводит туда строку текста. Мне надо передать эту строку текста в базу данных на удаленном сервере. Там надо обнаружить есть ли в определенной таблице в определенной колонке такая запись и если есть вернуть номер записи из колонки ID.
Наверное, самый правильный способ это написание хранимой процедуры? Если это так, то должно выглядеть примерно так?:

/*Таблица key поля ID и CODE. Анализ по полю CODE:*/

CREATE PROCEDURE Find_Record(Param varchar)
RETURNS (IdFind int4)
AS
BEGIN
SELECT ID FROM key WHERE CODE = Param
INTO : IdFind
IF(IdFind != NULL)
BEGIN
SUSPEND;
EXIT;
END
ELSE
BEGIN
IdFind=0;
SUSPEND;
EXIT;
END

Правильна ли логика и синтаксис? Я для PostgreSQL не делала хранимых процедур. Это синтаксис InterBase. Поправте пожалуйста.
...
Рейтинг: 0 / 0
Хранимая процедура
    #34575088
Serik Akhmetov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Chapter 37. PL/pgSQL - SQL Procedural Language
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
CREATE OR REPLACE FUNCTION Find_Record(text)
  RETURNS int4 AS
$BODY$declare
    param   ALIAS FOR $ 1 ;
    ret       int4;
begin
    SELECT k.ID 
    INTO ret
    FROM key k 
    WHERE k.CODE = param
    limit  1 ;

    if (not Found) then
      ret :=  0 ;
    end if;

   return ret;
end;$BODY$
  LANGUAGE 'plpgsql' VOLATILE;
COMMENT ON FUNCTION Find_Record(text) IS 'Таблица key поля ID и CODE. Анализ по полю CODE';

...
Рейтинг: 0 / 0
Хранимая процедура
    #34575134
Фотография lena_ki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо!
М-да, сложновато для меня...
Пару вопросов, вернее не пару, а много. :)
Почему FUNCTION а не PROCEDURE? Что такое $1? SELECT k.ID а мне писать SELECT key.ID? Что такое limit 1?
Самое главное как из программы это вызвать? Вот положила на форму ADOStoredProc1 при добавлении вашего кода на сервере эта функция появиться в его выпадающем списке?
...
Рейтинг: 0 / 0
Хранимая процедура
    #34575413
Фотография lena_ki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще при попытке добавить эту функцию через pgAdmin получаю ошибку на картинке.
...
Рейтинг: 0 / 0
Хранимая процедура
    #34575456
Фотография lena_ki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Эту ошибку убрала надо было выбрать язык plpgsql. Теперь пишет ошибку символ 56 в районе CREATE. :(
...
Рейтинг: 0 / 0
Хранимая процедура
    #34576626
Serik Akhmetov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lena_kiЭту ошибку убрала надо было выбрать язык plpgsql. Теперь пишет ошибку символ 56 в районе CREATE. :( Где вы это пишете ? Это нужно выполнить просто как скрипт.

lena_kiПочему FUNCTION а не PROCEDURE?Это очень сложно, просто запомните, что в PostgreSQL пишется так.
lena_kiЧто такое $1?Так обозначаются параметры функции.
lena_ki SELECT k.ID а мне писать SELECT key.ID?Если вам не нравится мой запрос, пишите как вам нравится
lena_kiЧто такое limit 1?Я знаю структуру вашей таблицы, и не уверен, что выборка по уникальному ключу, это ограничение "взять из выборки только одну запись"
lena_kiСамое главное как из программы это вызвать?таким запросом
Код: plaintext
select Find_Record('параметр');
или таким
Код: plaintext
select * from Find_Record('параметр');
lena_kiВот положила на форму ADOStoredProc1 при добавлении вашего кода на сервере эта функция появиться в его выпадающем списке?не знаю, проверьте.
...
Рейтинг: 0 / 0
Хранимая процедура
    #34583233
Фотография lena_ki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Большое спасибо за подробный ответ!
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Хранимая процедура
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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