Se me ocurre una nimiedad, pero me pregunto si no será parte del problema...
Lo que me ha sucedido en otros DBMS es que la sentencia SELECT 
debe ser la última..., así que yo probaría:    
Código SQL:
Ver original- PROCEDURE pa_insertaproducto(parametros , param_salida IN OUT t_cursor_salida)  
- IS 
-     contarProdServ INTEGER; 
-   BEGIN 
-     SELECT COUNT(*) 
-       INTO contarProdServ 
-   
-       FROM tabla 
-      WHERE cod_comercio = param_cod_comercio 
-        AND sku_producto = param_sku_producto; 
-     IF (contarProdServ = 0) THEN 
-       INSERT INTO tabla 
-         campos 
-       VALUES 
-         parametros 
-       OPEN param_salida FOR 
-         SELECT 1 FROM dual; 
-      
-     ELSE 
-       UPDATE tabla 
-          SET campos = parametros 
-        WHERE cod_comercio = param_cod_comercio 
-          AND sku_producto = param_sku_producto; 
-      
-       OPEN param_salida FOR 
-         SELECT 2 FROM dual; 
-     END IF; 
-    
-   EXCEPTION 
-     WHEN OTHERS THEN 
-       ROLLBACK; 
-       OPEN param_salida FOR 
-         SELECT -1 FROM dual; 
-   END;