Newsgroup: it.comp.software.database
Titolo: [?] Conversione di 1 Stored Procedure da SQLSERVER a ORACLE 10g

Salve, dovrei convertire una stored procedure creata con sql server 2000 in
Oracle 10g.
il codice è il seguente:
CREATE PROCEDURE sp_Ordina_Figli (@guid VARCHAR(32)) AS
BEGIN
SELECT GUID, GUID_FIGLIO, IDENTITY(INT, 1, 1) AS ROWNUMBER
INTO #TMP1
FROM T_FIGLI
WHERE T_FIGLI.GUID = @guid
ORDER BY ORDINE ASC
UPDATE T_FIGLI
SET T_FIGLI.ORDINE = #TMP1.ROWNUMBER
FROM T_FIGLI, #TMP1
WHERE T_FIGLI.GUID = #TMP1.GUID AND
T_FIGLI.GUID_FIGLIO = #TMP1.GUID_FIGLIO
DROP TABLE #TMP1
END
Ho provato con
 (guid VARCHAR(32)) AS
         BEGIN
           SELECT GUID, GUID_FIGLIO, IDENTITY(INT, 1, 1) AS ROWNUMBER
            INTO #TMP1
           FROM T_FIGLI
            WHERE T_FIGLI.GUID = sp_Ordina_Figli.guid
           ORDER BY ORDINE ASC
            UPDATE T_FIGLI
            SET T_FIGLI.ORDINE = TMP1.ROWNUMBER
            FROM T_FIGLI, #TMP1
            WHERE T_FIGLI.GUID = #TMP1.GUID AND
              T_FIGLI.GUID_FIGLIO = #TMP1.GUID_FIGLIO
            DROP TABLE #TMP1
         END;
Ma Oracle Enterprise Manager Console mi restituisce i seguenti errori...
Qualcuno mi può aiutare?
GRAZIE
Numero di riga:  1 Numero di colonna:  52 Testo errore: PLS-00103: Trovato
il simbolo "(" anziché uno dei seguenti:  := . ) , @    % default character
Il simbolo ":=" è stato sostituito per permettere a "(" di continuare.
Numero di riga:  4 Numero di colonna:  18 Testo errore: PLS-00103: Trovato
il simbolo "#" anziché uno dei seguenti:  mod    <an identifier> <a
double-quoted delimited-identifier>    <a bind variable> current sql execute
forall merge    <a single-quoted SQL string> pipe    <an
alternatively-quoted SQL string> Il simbolo "#" è stato ignorato.
Numero di riga:  8 Numero di colonna:  12 Testo errore: PLS-00103: Trovato
il simbolo "UPDATE" anziché uno dei seguenti:  , ;    for Il simbolo ";" è
stato sostituito per permettere a "UPDATE" di continuare.
Numero di riga:  10 Numero di colonna:  13 Testo errore: PLS-00103: Trovato
il simbolo "FROM" anziché uno dei seguenti:  . ( , *    @ % & - + ; / at mod
remainder rem return returning    <an exponent (**)> where || multiset


Cosa piu' evidente: PL/SQL non accetta DDL come:
DROP TABLE #TMP1
se non attraverso SQL dinamico.
L'errore PLS-00103 e' tipico di questi casi.
Ciao
-- 
Fabrizio Magni
fabrizi...@mycontinent.com
replace mycontinent with europe

Grazie, ho modificato la procedura come segue per evitare un po di errori, 
ma Oracle Enterprise Manager quando compilo mi da questo errore:
Numero di riga:  1 Numero di colonna:  52 Testo errore: PLS-00103: Trovato 
il simbolo "(" anziché uno dei seguenti:  := . ) , @    % default character 
Il simbolo ":=" è stato sostituito per permettere a "(" di continuare.
il codice sql è:
 (guid VARCHAR(32)) AS
         BEGIN
           SELECT GUID, GUID_FIGLIO, IDENTITY(INT, 1, 1) AS ROWNUMBER
            INTO TMP1
           FROM T_FIGLI
            WHERE T_FIGLI.GUID = sp_Ordina_Figli.guid
           ORDER BY ORDINE ASC;
           UPDATE T_FIGLI
               SET T_FIGLI.ORDINE =
                   (SELECT ROWNUMBER FROM TMP1 WHERE GUID = T_FIGLI.GUID AND 
GUID_FIGLIO=T_FIGLI.GUID_FIGLIO)
             WHERE EXISTS
                   (SELECT ROWNUMBER FROM TMP1 WHERE GUID = T_FIGLI.GUID AND 
GUID_FIGLIO=T_FIGLI.GUID_FIGLIO);
             DELETE FROM TMP1;
         END;
Qualche suggerimeto?
GRAZIE 

se metto varchar senza (32) mi compila ma poi mi da errore su IDENTITY...

 
Identity e' per sql server.
Oracle ha il rownum o la sequence.
