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

Actualizar variable mediante SET en cursor implicito

Estas en el tema de Actualizar variable mediante SET en cursor implicito en el foro de Oracle en Foros del Web. Hola buenos días, Estoy haciendo un ejercicio de PL/SQL para actualizar un campo de una tabla según el valor de otro campo pasado por parámetro. ...
  #1 (permalink)  
Antiguo 08/05/2019, 05:28
 
Fecha de Ingreso: enero-2014
Ubicación: Málaga
Mensajes: 13
Antigüedad: 10 años, 11 meses
Puntos: 0
Actualizar variable mediante SET en cursor implicito

Hola buenos días,

Estoy haciendo un ejercicio de PL/SQL para actualizar un campo de una tabla según el valor de otro campo pasado por parámetro. Este seria el código:

Código:
create or replace procedure ver_bono(p_cod_cliente CHAR)AS

v_ImporteTotal NUMBER(4,2);
v_valorBono NUMBER(4,0);

BEGIN
    SELECT SUM(http://dp.total_linea) INTO v_ImporteTotal FROM detalle_pedido DP JOIN pedido P ON p.num_ped=http://dp.num_pedido WHERE P.cliente=p_cod_cliente;
    SELECT BONO_CANJEABLE INTO v_valorBono FROM cliente WHERE cod_cli = p_cod_cliente;

    http://DBMS_OUTPUT.PUT_LINE('Valor del bono antes de actualizar es: ' || v_valorbono);

    if (v_ImporteTotal>=50) then
        UPDATE cliente SET BONO_CANJEABLE=v_valorBono+15 where http://cliente.cod_cli='p_cod_cliente';
        http://DBMS_OUTPUT.PUT_LINE('genera bono de canje +15');

    elsif v_ImporteTotal>30 AND v_ImporteTotal<50 then
        UPDATE cliente SET BONO_CANJEABLE=v_valorBono+10 where http://cliente.cod_cli='p_cod_cliente';
        http://DBMS_OUTPUT.PUT_LINE('genera bono de canje +10');

    elsif v_ImporteTotal>10  AND v_ImporteTotal<=30 then
        UPDATE cliente SET BONO_CANJEABLE=v_valorBono+5 where http://cliente.cod_cli='p_cod_cliente';
        http://DBMS_OUTPUT.PUT_LINE('genera bono de canje +5');

    else
        http://DBMS_OUTPUT.PUT_LINE('no genera bono de canje');

    END IF;

        http://DBMS_OUTPUT.PUT_LINE('El importe total de los pedidos del cliente es de: ' || v_importetotal);

END ver_bono;

Según el nº de cliente que pasamos por parámetro, se mira cuento es el total de su pedidos y en base al importe se incrementa su "bono" en 15,10 o 5€

El problema es que no me actualiza el valor bono_canjeable con el nuevo valor. He estado mirando por internet y en los apuntes, pero no veo el fallo.

Alguna ayuda ?

Gracias

Última edición por durdi; 08/05/2019 a las 23:33
  #2 (permalink)  
Antiguo 21/08/2020, 14:43
Avatar de vicram10  
Fecha de Ingreso: enero-2009
Ubicación: Asuncion
Mensajes: 326
Antigüedad: 15 años, 10 meses
Puntos: 27
Respuesta: Actualizar variable mediante SET en cursor implicito

Dejo la respuesta aunque sea muy viejo el tema

---------------------------------------------------

En el where no hace falta que le coloques con comilla simple a tu variable, el oracle automaticamente interpretará de acuerdo a tu type de variable si es o no string.

Código SQL:
Ver original
  1. UPDATE cliente SET BONO_CANJEABLE=v_valorBono+15 WHERE cliente.cod_cli=p_cod_cliente;

Asi debes dejar en cada uno de tus updates y ya te deberia de funcionar.

No lo actualiza por que lo que hace es buscar un codigo de cliente que su valor sea "p_cod_cliente" (no el valor de la variable sino toma el nombre de la variable como el valor por estar dentro de la comilla simple)
__________________
Asunción Paraguay
Licenciado - Desarrollador Web - Lider de Proyecto/Desarrollador Banco Local
Espacio Geek - Comunidad Tecnologica

Etiquetas: cursor, date, mediante, set, variable
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 10:15.