Secuencia en oracle

Buenas. He tenido que cambiar de BBDD, de mysql a oracle.

Tengo el siguiente método:

def gestion_menu
begin
MenusUsuario.transaction do
MenusUsuario.delete_all([‘usuario_id=?’,current_usuario.id])
for m in params[:menu_usuario]
if m[1].to_s==“1”
a = MenusUsuario.new(:usuario_id =>
current_usuario.id,:menu_id
=> m[0] )
a.save!
end
end
end
flash[‘notice’]=“Se han guardado los cambios”
rescue
miLog(“Excepción en gestion_menu”,$!)
flash[‘notice’]=$!
end
redirect_to :action => “irmenu”, :accion => “gestion_menu”
end

En mysql me funciona perfectamente, y si hay un fallo pues hace
rollback.

Ahora con Oracle, cuando lo hago, me sale:

ORA-02289: no existe la secuencia

¿Qué problema puede haber? ¿Es algo de permisos del usuario de la BBDD?
Es
que necesito un acceso muy restringido para este usuario. Si es eso,
¿qué
permisos debería tener este usuario?

Muchas gracias

On May 16, 2007, at 1:15 PM, Luis V. wrote:

        a = MenusUsuario.new(:usuario_id =>  
redirect_to :action => "irmenu", :accion => "gestion_menu"

BBDD? Es que necesito un acceso muy restringido para este usuario.
Si es eso, ¿qué permisos debería tener este usuario?

Nunca he usado Oracle con AR, pero en Oracle la generacion automatica
de IDs corre a cargo de secuencias asociadas a las tablas, estas
secuencias han de crearse en la base de datos. Si la tabla se llama
“users” el adaptador de AR por defecto asume que la secuencia se
llama “users_seq”. Segun leo en el codigo el adaptador define

ActiveRecord::Base.set_sequence_name

para el caso de que la secuencia no se llame de ese modo, que podria
ser que sea lo que sucede. Entiendo que se usaria asi

class User < ActiveRecord::Base
set_sequence_name “nombre_de_la_secuencia_legacy”

end

Sirve?

– fxn

Ante todo gracias por la respuesta, Xavier.

Pues sí que me ha funcionado. Me había creado una secuencia llamada
“rails_sequence” por algo que leí por ahí, y he aprovechado que ya la
tenía
hecha, por lo que he puesto :

class MenusUsuario < ActiveRecord::Base
belongs_to :menu
belongs_to :usuario
set_sequence_name “rails_sequence”
end

Según lo que me dices, tendría que crear una secuencia para cada modelo
y
poner el set_sequence_name “secuenica”. Me parece muy poco DRY.

Por puro capricho y saltándome la máxima de la programación (si
funciona, no
lo toques!!) ¿No habría otra forma de hacerlo?

Gracias de nuevo

On 5/16/07, Xavier N. [email protected] wrote:

On May 16, 2007, at 1:15 PM, Luis V. wrote:

> Buenas. He tenido que cambiar de BBDD, de mysql a oracle.
>
> Tengo el siguiente método:
>
> def  gestion_menu
>     begin
>       MenusUsuario.transaction do
> 

MenusUsuario.delete_all([‘usuario_id=?’,current_usuario.id])
> for m in params[:menu_usuario]
> if m[1].to_s==“1”
> a = MenusUsuario.new(:usuario_id =>
> current_usuario.id,:menu_id => m[0] )
> a.save!
> end
> end
> end
> flash[‘notice’]=“Se han guardado los cambios”
> rescue
> miLog(“Excepción en gestion_menu”,$!)
> flash[‘notice’]=$!
> end
> redirect_to :action => “irmenu”, :accion => “gestion_menu”
> end
>
> En mysql me funciona perfectamente, y si hay un fallo pues hace
> rollback.
>
> Ahora con Oracle, cuando lo hago, me sale:
>
> ORA-02289: no existe la secuencia
>
> ¿Qué problema puede haber? ¿Es algo de permisos del usuario de la
> BBDD? Es que necesito un acceso muy restringido para este usuario.
> Si es eso, ¿qué permisos debería tener este usuario?

Nunca he usado Oracle con AR, pero en Oracle la generacion 

automatica
de IDs corre a cargo de secuencias asociadas a las tablas, estas
secuencias han de crearse en la base de datos. Si la tabla se llama
“users” el adaptador de AR por defecto asume que la secuencia se
llama “users_seq”. Segun leo en el codigo el adaptador define

   ActiveRecord::Base.set_sequence_name

para el caso de que la secuencia no se llame de ese modo, que podria
ser que sea lo que sucede. Entiendo que se usaria asi

   class User < ActiveRecord::Base
     set_sequence_name "nombre_de_la_secuencia_legacy"
     ...
   end

Sirve?

-- fxn

_______________________________________________
Ror-es mailing list
[email protected]
http://lists.simplelogica.net/mailman/listinfo/ror-es

Viendo oracle_adapter.rb, veo

Key generation assumes a “${table_name}_seq” sequence is available
# for all tables; the sequence name can be changed using
# ActiveRecord::Base.set_sequence_name. When using Migrations,
these
# sequences are created automatically.

Así que habrá que crear una secuencia para cada tabla. Y si usase
migraciones, se generarían automáticamente.

Así que rails sigue siendo DRY. Me alegro

On May 16, 2007, at 1:57 PM, Luis V. wrote:

end

Según lo que me dices, tendría que crear una secuencia para cada
modelo y poner el set_sequence_name “secuenica”. Me parece muy poco
DRY.

Por puro capricho y saltándome la máxima de la programación (si
funciona, no lo toques!!) ¿No habría otra forma de hacerlo?

Es poco DRY por parte de Oracle :-), las migrations de AR generan la
secuencia automaticamente sin tener que tocarlas. La misma que genera
campos autoincrementales en MySQL genera la secuencia en Oracle con
ese convenio del sufijo “_seq”.

– fxn

P.D.: Lo se de leer el codigo, no lo he usado nunca espero que sea
correcto.

por favor alguien que este usando el oracle

como configurar el database.yml PARA ORACLE

gracias

por favor alguien que este usando el oracle

como configurar el database.yml PARA ORACLE

Oracle tiene un FAQ bastante extenso al respecto

http://www.oracle.com/technology/pub/articles/saternos-ror-faq.html#3-1

On 5/17/07, JDT [email protected] wrote:

por favor alguien que este usando el oracle

como configurar el database.yml PARA ORACLE

No estoy usando, pero esto no sirve?

http://wiki.rubyonrails.org/rails/pages/Oracle