How to input an array parameter of values to Firebird Stored Procedure?

后端 未结 4 1513
忘了有多久
忘了有多久 2021-02-08 12:23

I would like to input an array parameter of IDs to Firebird Stored Procedure.

:INPUT_LIST_ID = [1, 2, 12, 45, 75, 45]

I\'m need

4条回答
  •  余生分开走
    2021-02-08 12:58

    You could also use something like this:

    SELECT *
    FROM CITY
    WHERE ID_CITY IN (SELECT ID FROM GetIntegerList('1, 2, 12, 45, 75, 45'))
    

    You would have to create a new Firebird Procedure called "GetIntegerList" which would look something like this:

    CREATE OR ALTER PROCEDURE "GETINTEGERLIST"("AINTEGERLIST" VARCHAR(32000))
    returns (
      ID integer
    )
    as
      declare variable IntegerList varchar(32000);
      declare variable CommaPos integer;
      declare variable IntegerVal varchar(10);
    begin
      IntegerList = AIntegerList || ' ';
      CommaPos = Position(',', IntegerList);
    
      while (CommaPos > 0) do
      begin
        IntegerVal = Trim(SubString(IntegerList from 1 for CommaPos - 1));
    
        if (Char_Length(IntegerVal) > 0) then
        begin
          if (IntegerVal similar to '[0-9]*') then
          begin
            ID = Cast(IntegerVal as integer);
            suspend;
          end
        end
    
        if (Char_Length(IntegerList) > CommaPos) then
          IntegerList = SubString(IntegerList from CommaPos + 1);
        else
          IntegerList = '';
    
        CommaPos = Position(',', IntegerList);
      end
    
      IntegerList = Trim(IntegerList);
    
      if (Char_Length(IntegerList) > 0) then
      begin
        if (IntegerList similar to '[0-9]*') then
        begin
          ID = Cast(IntegerList as integer);
          suspend;
        end
      end
    end
    

    Note, this was done in Firebird 2.5.2.

提交回复
热议问题