stored procedure problem

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • stored procedure problem

    Habe ein kleines php frontend erstellt welches via stored procedures daten aus einer oracle 9iR" Datenbank abfragen soll.

    Das Problem ist, ich bekomme einfach keine Daten in PHP ausgegeben.

    Hier mal meine Prozedur

    PHP-Code:
    procedure search(
    spalten_in in varchar2,
    searchtext_in in varchar2,
    machword_in in varchar2,
    searchresult_cv_inout IN OUT searchresultCurTyp)
    is
    searchtext varchar2
    (50);
    begin
    if (machword_in 'wholefield')
    then
    stmt 
    := 1;
    searchtext := searchtext_in;
    open searchresult_cv_inout for
    select myrow from
    (select rownum myrow,spalten_in from xxx order by fund asc)
    where lower(spalten_in) = lower('searchtext');
    elsif (machword_in 'anypartoffield')
    ....
    end if;
    end search
    Denke der Fehler liegt in der Abfrage. Gebe das Ergebnis an einen Refcursor, der wiederrum die Daten in einem type is Record Format ausgibt. Hier die Beiden dinge die zu der Procedur in dem Package erstellt wurden:

    TYPE searchresultCurTyp is REF Cursor return searchresultRecTyp;


    TYPE searchresultRecTyp is Record(
    resultnumbers number(50));

    Kann mir jemand bei sagen wo der Fehler liegt?

    Habe auch schon überall '-Zeichen Hinzugefügt und entfernt. Immer ist die Lösung no rows

    Danke
    Zuletzt geändert von galaxy2; 03.01.2006, 08:02.

  • #2
    Habe das ganze nun mal abgeändert:

    PHP-Code:
    procedure search(
    row_in in varchar2,
    searchtext_in in varchar2,
    searchresult_cv_inout IN OUT searchresultTCurTyp)
    is
    begin
    stmt 
    := 1;
    open searchresult_cv_inout for
    'select myrow from
    (select rownum myrow,'
    ||row_in||' from xxx order by xxx asc)
    where lower('
    ||row_in||') = lower(searchtext_in)';
    end if;
    exception
    end search 
    Das statement soll in dieser einfachen Prozedur dynamisch erzeugt werden, da ich es für spätere Zwecke benötige.
    Mein Problem ist nun, das das dynamische statement nicht mit dem Ref Cursor arbeiten kann. Fehlermeldung: PLS-00455: cursor 'SEARCHresult_CV_INOUT' cannot be used in dynamic
    SQL OPEN statement.

    Wie kann man das denn lösen.

    Es muss also ein zusammenhang von einer stored procedure mit dynamischenm sql zu php hergestellt werden.

    Danke für Tipps

    Kommentar


    • #3
      Hab das ganze nun mal ohne php nur in PL/SQL. Aber auch hier ist die Ausgabe no ros selected. Es muss also ein Problem mit meiner Procedur geben. Beim compilieren gibt es aber keine.

      SQL> select * from testtable;

      ID CAR DOORS
      ----------- ---------
      1 BMW 4
      2 MERCEDES 4
      3 LOTUS 2

      Testprocedur

      procedure car(
      spalten_in in varchar2,
      searchtext_in in varchar2,
      car_cv_inout IN OUT sys_refcursor)
      is
      begin
      stmt := 0;
      open car_cv_inout for
      'select myrow from (select rownum myrow,:s from testtable order by car asc)
      where lower(:s) = lower(:search)' USING in spalten_in,spalten_in,searchtext_in;
      end car;

      In SQLPLUS habe ich eine var cv refcursor kreiert in welche die procedur die Daten schreibt. Folgendermassen habe ich sie ausgeführt:
      exec car('CAR','BMW',:cv);

      Anschliessend stehet in der var cv immer "no rows selected"

      Wenn ich nun aber nur die Query der Procedur starte
      select myrow from (select rownum myrow,CAR from testtable order by car asc)where lower(CAR) = lower('BMW');
      funktioniert es einwandfrei

      Ich kann den Fehler aber nicht finden in der Dynamischen Procedur.

      Hat jemand dafür eine Lösung?????

      Kommentar

      Lädt...
      X