Announcement

Collapse
No announcement yet.

Formeln in Prozeduren

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Formeln in Prozeduren

    Hallo! Ich benötige eine Prozedur, wo ich einen Char mit 30 Zeichen und 2 Integer übergebe. Der Char Wert enthält immer eine Formel zb (a>0) and (b>0) und die beiden Integer sollen für a und b verwendet werden. Die Prozedur soll am Ende einfach false oder true zurückgeben. Wichtig ist es, dass egal welche Formel, mit and, or verbunden oder nicht, egal welcher Operator verwendet wird, dass alles "dynamisch" ist. Gibt es dafür im Netz vielleicht einen Algorythmus oder hat jemand einen kleinen Denkanstoß wie man sowas leicht lösen kann? lg und danke im Voraus

  • #2
    Um welche DB geht es denn?

    Bei Oracle könnte man es so machen:

    [highlight=plsql]
    CREATE OR REPLACE FUNCTION MyFunction(operation IN VARCHAR2, a IN INTEGER, b IN INTEGER) RETURN BOOLEAN IS
    cmd VARCHAR2(100) := operation;
    res BOOLEAN;
    BEGIN
    cmd := REGEXP_REPLACE(cmd, 'a', a);
    cmd := REGEXP_REPLACE(cmd, 'b', b);
    EXECUTE IMMEDIATE 'BEGIN :res := '||cmd||'; END;' USING OUT res;
    RETURN res;
    END;
    [/highlight]

    Evtl. ist noch ein wenig Feintuning nötig. Die Funktion so wie sie hier steht ist auch geradezu eine Einladung für SQL-Injection.

    Gruss

    Comment


    • #3
      hy, danke für die schnelle Hilfe! Es handelt sich um eine Firebird Datenbank und ich muss folgende Operatoren abdecken: +, -, <, <= , >, >= . Weiters können zwei Ausdrücke mit and oder or verbunden sein. Die beiden Variablen a und b sind IMMER im Formelstring enthalten, es geht im Prinzip nur darum den String der daherkommt in eine funktionierende Formel zu verwandeln, die beiden Integerwerte einzusetzen und danach prüfen ob der/die Ausdrücke wahr oder falsch sind und den Boolwert zurückzugeben.

      Comment


      • #4
        hier in dem Thread wird genau mein Problem angesprochen, leider fehlen mir Oracle Kenntnisse um es für Firebird umzuschreiben ... https://forums.oracle.com/thread/894430

        Comment


        • #5
          Hab das mal zu Firebird verschoben....
          Christian

          Comment

          Working...
          X