Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Oracle »

Ora-01747

Estas en el tema de Ora-01747 en el foro de Oracle en Foros del Web. Hola a todos, Estoy intentando de ejecutar esta query desde PHP a una base de datos Oracle: UPDATE "pr_language_texts" SET "language_name"='English',"description"='' WHERE "id_lang" = '2' ...
  #1 (permalink)  
Antiguo 19/08/2010, 05:25
Avatar de OkusPokus  
Fecha de Ingreso: diciembre-2007
Mensajes: 21
Antigüedad: 16 años, 4 meses
Puntos: 0
Ora-01747

Hola a todos,
Estoy intentando de ejecutar esta query desde PHP a una base de datos Oracle:


UPDATE "pr_language_texts" SET "language_name"='English',"description"='' WHERE "id_lang" = '2' AND "id_language" = '2'

Y me aparece este error:

ORA-01747 - especificación no válida de usuario.tabla.columna, tabla.columna o columna


Ejecuto esta query directamente en el gestor de base de datos y funciona correctamente.

Me estoy volviendo un poco loco con este error, porque ni tengo palabras reservadas como columnas (que es lo que indica la poca informacion que hay en la red) y tengo bien puestas las comillas.

Es muy urgente, gracias por adelantado.
  #2 (permalink)  
Antiguo 19/08/2010, 07:14
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Ora-01747

Si funciona perfectamente en oracle, el problema está en como construyes la cadena en php.
Ya he reportado el tema para que sea movido. Mientras lo hacen, cuentanos como tienes la cadena y cual es el codigo php que utilizas para hacer este update.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 20/08/2010, 02:21
Avatar de OkusPokus  
Fecha de Ingreso: diciembre-2007
Mensajes: 21
Antigüedad: 16 años, 4 meses
Puntos: 0
Respuesta: Ora-01747

Por motivos profesionales no puedo postear la funcion con la que monto el update. Solo decir que es una funcion genérica que en funcion de la tabla que se le pase así se monta. ¿Puede repercutir como se monta la cadena si al final del montaje la sentencia está ok?
Por último decir que lo que hago es esto para ejecutarla:
Código PHP:
Ver original
  1. $q = "UPDATE \"pr_language_texts\" SET \"language_name\"='English',"\description\"='' WHERE \"id_lang\" = '2' AND \"id_language\" = '2'";
  2. this->result = oci_parse($this->connection, $q);
  3. oci_execute($this->result);
  #4 (permalink)  
Antiguo 20/08/2010, 07:09
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Ora-01747

Si haces un echo de $q cual es la cadena resultante?

Lo que te devuelva la impresión de la variable ejecutalo directamente en Oracle y mira si te presenta el mismo error.

de ser así, postea lo que imprime la variable $q y te ayudamos a concatenarla bien.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #5 (permalink)  
Antiguo 20/08/2010, 23:39
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 16 años, 5 meses
Puntos: 85
Respuesta: Ora-01747

Ten en mente que si haces la consulta con las tablas y/o columnas entre comillas dobles, el parser interpreta que los nombres son case-sensitive, esto puede darte problemas al momento de ejecutar cualquier código SQL o PL/SQL, por ejemplo

Código:
SQL> create table "MiTabla" (id number(8));

Tabla creada.

SQL> select * from MiTabla;
select * from MiTabla
              *
ERROR en lÝnea 1:
ORA-00942: la tabla o vista no existe


SQL> select * from "MiTabla";

ninguna fila seleccionada

SQL> create table MiTabla2 (id number(8));

Tabla creada.

SQL> select * from mitabla2;

ninguna fila seleccionada

SQL>
En general lo mejor es no utilizar comillas dobles, un diccionario de tablas y columnas en case-sensitive no tiene mucha utilidad.

Saludos
  #6 (permalink)  
Antiguo 23/08/2010, 00:18
Avatar de OkusPokus  
Fecha de Ingreso: diciembre-2007
Mensajes: 21
Antigüedad: 16 años, 4 meses
Puntos: 0
Respuesta: Ora-01747

La cadena resultante al imprimir $q es esta:

UPDATE "pr_language_texts" SET "language_name"='English',"description"='' WHERE "id_lang" = '2' AND "id_language" = '2'

Al ejecutarla en el gestor de BD funciona OK, pero desde PHP me lanza ese error
  #7 (permalink)  
Antiguo 23/08/2010, 07:09
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Ora-01747

El problema es lo que te dice matanga y tiene que ver con el parser de Oracle.
crea la cadena sin utilizar comillas dobles en la definición de los campos. Que la cadena resultante sea.

UPDATE pr_language_texts SET language_name='English',description='' WHERE id_lang = '2' AND id_language = '2'

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:24.