2017-11-23 2 views
0

Ich versuchte mit Online-SQL zu Mysql Convert-Tool, aber es hat mir nicht geholfen. Kann mir jemand helfen, diese Prozedur in mysql-Version zu konvertieren?Umwandlung dieser Oracle SQL-Prozedur in Mysql-Prozedur

create or replace procedure avgmarks is 
    cursor c_iamarks is 
     select greatest(test1, test2) as a 
      ,greatest(test1, test3) as b 
      ,greatest(test3, test2) as c 
     from iamarks 
     where finalia is null 
     for update; 
    c_a number; 
    c_b number; 
    c_c number; 
    c_sm number; 
    c_av number; 
begin 
    open c_iamarks; 
    loop 
     fetch c_iamarks 
     into c_a 
      ,c_b 
      ,c_c; 
     exit when c_iamarks%notfound; 
     --DBMS_OUTPUT.PUT_LINE(C_A || ' ' || C_B || ' ' || C_C); 
     if (c_a != c_b) 
     then 
     c_sm := c_a + c_b; 
     else 
     c_sm := c_a + c_c; 
     end if; 
     c_av := c_sm/2; 
     --DBMS_OUTPUT.PUT_LINE('SUM = '||C_SM); 
     --DBMS_OUTPUT.PUT_LINE('AVERAGE = '||C_AV); 
     update iamarks 
     set finalia = c_av 
     where current of c_iamarks; 
    end loop; 
    close c_iamarks; 
end; 
/

In dieser ich bin Berechnung durchschnittlich besten zwei Marken aus 3 Tests und wenn ich diese Prozedur aufrufen sollte es die Werte in der Tabelle ändern.

Antwort

0

Kann die Prozedur durch eine einzige Aktualisierungsanweisung ersetzt werden?

update iamarks 
    set finalia = (case 
        when greatest(test1, test2) != greatest(test1, test3) then 
        greatest(test1, test2) + greatest(test1, test3) 
        else 
        greatest(test1, test2) + greatest(test3, test2) 
       end)/2 
where finalia is null 

(Ich habe keine Daten, so kann nicht bestätigen, dass die Aussage 100% richtig)

+0

Ja, das getan werden kann. Ich habe das bereits getan, aber ich wollte wissen, wie man das sql zu mysql dats es konvertiert. – Swaroop

+0

Hey, kannst du mir noch eine Sache helfen? Wir verwenden MINUS oder EXCEPT in Oracle, aber ich weiß nicht, was ich in mysql für die folgende Abfrage verwenden soll: ** SELECT E.FNAME, E.LNAME FROM EMPLOYEE E WHERE NICHT VORHANDEN ((SELECT PNO FROM PROJECT WHERE DNO = ' 5 ') MINUS (SELECT PNO VON WORKS_ON WHERE E.SSN = SSN)); ** – Swaroop

+0

Hallo, Da ich nichts über mysql Pakete weiß, entschied ich mich für die SQL-Option. Was auch immer funktioniert, würde ich sagen. Besser als eine neue Frage, um Minus-Operator in MySQL zu simulieren. – Rene