Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.06.2009, 14:31   #11
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

первый
Код:
insert into your_table
(your_id, f1, f2, .....)
values(null, value1, value2, .....);
второй
Код:
insert into your_table
(f1, f2, .....)
values(value1, value2, .....);
soleil@mmc вне форума Ответить с цитированием
Старый 03.06.2009, 00:00   #12
Andre1723
Пользователь
 
Аватар для Andre1723
 
Регистрация: 17.02.2008
Сообщений: 74
Вопрос Ошибка при создании хран. процедуры

Здравствуйте.
Попытался написать универсальную хранимую процедуру:
Код:
CREATE PROCEDURE SP_STRTYPE
       (STRTYPE_ID     Integer,
       STRTYPENAME     Varchar(10) CHARACTER SET WIN1251,
       STRTYPEFULLNAME Varchar(50) CHARACTER SET WIN1251,
       OPERATION      VARCHAR(1) CHARACTER SET WIN1251)
AS 
DECLARE VARIABLE STRTYPE_ID_INP INTEGER;
BEGIN
  STRTYPE_ID_ITP = :STRTYPE_ID;
  If (OPERATION = "D") THEN
    begin
      DELETE FROM STRTYPE
      WHERE STRTYPE_ID = :STRTYPE_ID;
    end 
    Else
     begin
      If (OPERATION = "I") Then
        begin
         INSERT INTO STRTYPE (STRTYPE_ID, STRTYPENAME,          
                                                                      STRTYPEFULLNAME)
         VALUES (:STRTYPE_ID, :STRTYPENAME, :STRTYPEFULLNAME);
        end
        Else
          begin
            If (OPERATION = "S") Then
              begin
                For
                 SELECT STRTYPE_ID, STRTYPENAME, STRTYPEFULLNAME
                 FROM STRTYPE
                 INTO :STRTYPE_ID, :STRTYPENAME, :STRTYPEFULLNAME
                Do
                  begin
                    SUSPEND;
                  end
              end
              Else
                begin
                  If (OPERATION = "R") Then
                    begin
                      SELECT STRTYPE_ID, STRTYPENAME, STRTYPEFULLNAME
                      FROM STRTYPE
                      WHERE STRTYPE_ID = :STRTYPE_ID_INP
                      INTO :STRTYPE_ID, :STRTYPENAME, :STRTYPEFULLNAME;
                    end
                    Else
                      begin
                        Exit;
                      end
                end
          end
     end
END
При попытке препарировать кго, анализатор SQL ругается:
Цитата:
QueryEditor.Query:
Column does not belong to referenced table.Dynamic SQL Error/.
SQL error code = -206.
Column unknown.
Это что, придется в каждой таблице создавать поле для переменной?
Andre1723 вне форума Ответить с цитированием
Старый 03.06.2009, 00:31   #13
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

для возврата данных из ХП нужно еще писать список полей в RETURNING
и по хорошему инс_апд_дел в одной ХП, а селективные в другой ХП

и зачем каждый раз это писать CHARACTER SET WIN1251 ?
там вроде достаточно было при создании БД, таблицы и в самом коннекте это указать
soleil@mmc вне форума Ответить с цитированием
Старый 03.06.2009, 01:19   #14
Andre1723
Пользователь
 
Аватар для Andre1723
 
Регистрация: 17.02.2008
Сообщений: 74
Вопрос

Немного поправил
Код:
CREATE PROCEDURE SP_STRTYPE_EXEC
        (STRTYPE_ID     Integer,
        STRTYPENAME     Varchar(10),
        STRTYPEFULLNAME Varchar(50),
        OPERATION       VARCHAR(1))
RETURNS (STRTYPE_ID     Integer,
        STRTYPENAME     Varchar(10),
        STRTYPEFULLNAME Varchar(50))       
AS 

BEGIN
  If (OPERATION = "D") THEN
    begin
      DELETE FROM STRTYPE
      WHERE STRTYPE_ID = :STRTYPE_ID;
    end 
    Else
     begin
      If (OPERATION = "I") Then
        begin
         INSERT INTO STRTYPE (STRTYPE_ID, STRTYPENAME, STRTYPEFULLNAME)
         VALUES (:STRTYPE_ID, :STRTYPENAME, :STRTYPEFULLNAME);
        end
        Else
          begin
            If (OPERATION = "U") Then
              begin
               UPDATE STRTYPE
               SET STRTYPE_ID = :STRTYPE_ID,
                   STRTYPENAME = :STRTYPENAME,
                   STRTYPEFULLNAME = :STRTYPEFULLNAME
               WHERE
                   STRTYPE_ID = :STRTYPE_ID;
              end
              Else
                Exit;
          end
        end
END
Все равно ругается
Цитата:
QueryEditor.Query:
Column does not belong to referenced table.Dynamic SQL Error/.
SQL error code = -206.
Column unknown.
Не пойму, какой столбец ему нужно?
Andre1723 вне форума Ответить с цитированием
Старый 03.06.2009, 11:03   #15
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

1) входные и выходные параметры вроде как должны отличаться по именам
можно так обозвать их
входной - iSTRTYPE_ID, выходной - oSTRTYPE_ID

2) но в данном конкретном случае ты же на выход ничего не отдаешь - так что выходные параметры можно убрать

3) не знаю что там делает команда Exit, но имхо лучше все ифы разрулить попроще (понятно, что проверяться будет дольше но хоть читабельнее будет - потом можно будет переправить на оптимальное написание)

Код:
If (OPERATION = "D") THEN begin
...
end
If (OPERATION = "I") Then begin
...
end
If (OPERATION = "U") Then begin
...
end

Последний раз редактировалось soleil@mmc; 03.06.2009 в 11:07.
soleil@mmc вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с хранимой процедурой MargoNik БД в Delphi 13 14.05.2009 20:53
Выполнение команд Vovilnik Свободное общение 14 06.05.2009 19:22
Выполнение функции nikleb JavaScript, Ajax 7 10.08.2008 01:49
Выполнение хранимой процедуры с output параметром Иванчо БД в Delphi 5 26.10.2007 14:59
проблему возможно решить с помощью хранимой процедуры на SQL? yulia БД в Delphi 8 24.05.2007 20:25