Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Firebird, Interbase > задание переменной в процедуре


Автор: EvoEvo 15.3.2008, 18:30
Никак не могу понять, как в процедуре  задать переменной значение записи из таблицы, при этом нужно еще и выбрать нужную запись из этой таблицы.  И нигде не найти примеров на эту тему smile 
Я думал примерно так, но не работает:

ID = Clients.id_c
    WHERE Clients.N_PLAT = :n_plat_chet;

Автор: Akella 15.3.2008, 19:33
Код

select name from table1 where id = 10 into :var_name


Добавлено через 2 минуты и 37 секунд
Код

  for select id from treklama into :NEW_VAR do begin
    update treklama SET treklama.ID_NAPR = treklama.ID_NAPR where treklama.id = :NEW_VAR;




Код

CREATE OR ALTER PROCEDURE ISP_1 
AS
DECLARE VARIABLE NEW_VAR BIGINT;
begin

  for select id from treklama into :NEW_VAR do begin
    update treklama SET treklama.ID_NAPR = treklama.ID_NAPR where treklama.id = :NEW_VAR;

  end
end


Добавлено через 3 минуты и 11 секунд
Код

CREATE OR ALTER PROCEDURE SP_SET_ID2 (
    IN_ID BIGINT,
    IN_ID2 BIGINT)
AS
begin
  update treklama t set t.id2 = :in_id2 where t.id = :in_id;
end


Добавлено через 3 минуты и 32 секунды
Код

CREATE OR ALTER PROCEDURE TVID_IU (
    ID BIGINT,
    NAME VARCHAR(30),
    OLD1_NAME VARCHAR(30),
    SO_EXP INTEGER)
AS
BEGIN
  IF (EXISTS(SELECT ID FROM TVID WHERE (ID = :ID))) THEN
    UPDATE TVID
    SET NAME = :NAME,
        OLD1_NAME = :OLD1_NAME,
        SO_EXP = :SO_EXP
    WHERE (ID = :ID);
  ELSE
    INSERT INTO TVID (
        ID,
        NAME,
        OLD1_NAME,
        SO_EXP)
    VALUES (
        :ID,
        :NAME,
        :OLD1_NAME,
        :SO_EXP);
END


Добавлено через 4 минуты и 44 секунды
Код

  select id_c from Clients where N_PLAT = :n_plat_chet into :ID


Добавлено через 5 минут и 32 секунды
Код

   for select id, name from treklama into :v_in, :v_name do begin ...


Добавлено через 13 минут и 23 секунды
Код

--вот чуть сложнее пример

CREATE OR ALTER PROCEDURE SP_PROTO_PM 
RETURNS (
    V_NAME_OUT CHAR(30),
    V_DELIM_OUT VARCHAR(30),
    V_COUNT_OUT INTEGER)
AS
DECLARE VARIABLE V_TR_COUNT INTEGER = 0;
DECLARE VARIABLE V_NAME VARCHAR(30) CHARACTER SET WIN1251 = '';
DECLARE VARIABLE V_TVID BIGINT;
DECLARE VARIABLE V_ID BIGINT;
begin
   for select tv.id, tv.name from tvid tv INTO :v_tvid, :V_NAME do begin
     V_COUNT_out = 0;
     for select tr.id from treklama tr
     WHERE
       (tr.id_vid = :v_tvid) AND
       (tr.id in (select pm.id from TREKLAMA_EXPORT pm))
     into :v_id do begin

       select result from SP_GET_LEN_ALLTEXT(:v_id) INTO :V_TR_COUNT;
       V_COUNT_out = V_COUNT_out + V_TR_COUNT;

     end--for select CHAR_LENGTH(tr.text) from treklama tr WHERE tr.id_vid = :v_tvid into :V_TR_COUNT do begin
     V_NAME_out  = V_NAME;
     v_delim_out = ' = ';
     suspend;
   end--for select tv.id from tvid tv INTO :v_tvid do begin
end

Автор: EvoEvo 15.3.2008, 21:15
ок! все получилось! спасибо!!!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)