Results 1 to 4 of 4

Thread: eigen procedure gebruiken in select

  1. #1

    eigen procedure gebruiken in select

    Hallo allemaal,

    Ik gebruik firebird 2.1 en ik heb daar zelf een procedure gemaakt die een Hex(string) getal omzet naar een decimaal getal
    wanneer ik deze op de volgende manier aanroep wertk alles prima
    Code:
     
     select * from Hex2Int('05F43')
    echter ik wil deze op de volgende manier gebruiken
    Code:
    select hex2int(EPC_Code) from EPC_PIJPNRS
    where pijpnr = 22707
    Het veld EPC_Code is een char(5) veld met daarin een hexadecimaal getal

    Wanneer ik deze sql uitvoer krijg ik de foutmelding unknown function Hex2Int

    Moet ik mijn procedure eerst nog ergens registreren wanneer ik het op deze manier wil gebruiken

    Code:
    BEGIN
      /* Procedure body */
      
      Counter =1;
      LENGTE = CHAR_LENGTH(TRIM(HEXCODE));
      INTVALUE=0;
      while (counter <= LENGTE) DO
      BEGIN
       VALSTR = SUBSTRING(HEXCODE from COUNTER for 1);
       VAL=0;
       if (VALSTR = '0') THEN VAL=0;
       if (VALSTR = '1') THEN VAL=1;
       if (VALSTR = '2') THEN VAL=2;
       if (VALSTR = '3') THEN VAL=3;   
       if (VALSTR = '4') THEN VAL=4;
       if (VALSTR = '5') THEN VAL=5;
       if (VALSTR = '6') THEN VAL=6;
       if (VALSTR = '7') THEN VAL=7;   
       if (VALSTR = '8') THEN VAL=8;
       if (VALSTR = '9') THEN VAL=9;
       if (VALSTR = 'A') THEN VAL=10;
       if (VALSTR = 'B') THEN VAL=11;   
       if (VALSTR = 'C') THEN VAL=12;
       if (VALSTR = 'D') THEN VAL=13;
       if (VALSTR = 'E') THEN VAL=14;
       if (VALSTR = 'F') THEN VAL=15;   
       INTVALUE=INTVALUE + (VAL*POWER(16,LENGTE-COUNTER));
       COUNTER=COUNTER+1;
                
      END
      
      SUSPEND;
    END

  2. #2
    Gevonden!!

    Je kan blijkbaar ook select statements in de select gebruiken

    Code:
    select iif(EPCCODE is NULL,0, (select * from hex2int(SUBSTR(EPCcode,20,24))) )  Refurb_PijpNr from EPC_PIJPNRS
    where pijpnr = 22707

  3. #3
    Quote Originally Posted by cpri View Post
    Moet ik mijn procedure eerst nog ergens registreren wanneer ik het op deze manier wil gebruiken
    Ik neem aan dat die procedure er wat completer uitziet met DECLARE variabele en RETURNS e.d.

    Maar als je een stored procedure wilt gebruiken in een select moet je dat met een join doen.

    Zoiets:

    SQL Code:
    1. SELECT *
    2. FROM EPC_PIJPNRS
    3. LEFT JOIN HEX2INT(EPC_CODE) ON 1=1
    4. WHERE PIJPNR = 22707

    Zie https://www.firebirdfaq.org/faq143/

    Edit: Ja, een subselect kan ook hoewel ik een LEFT JOIN zou gebruiken.
    (staat wat netter in de SELECT velden )

  4. #4
    Top bedankt voor tip.

    Uiteraard is de complete ddl code van de functie uitgebreider

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •