sql >> Base de Datos >  >> RDS >> Oracle

Activar la selección de registros secundarios, multiplicar sus valores y actualizar el registro principal

Tienes varios problemas, pero el más fundamental es que no deberías estar haciendo esto en absoluto. Intentar almacenar, y mantener sincronizado, un valor que siempre se pueda calcular es un defecto de diseño fundamental.

Ahora, al código en sí. Tienes

SELECT SUM(VALUE) into product

El destino de su INTO debe ser una variable declarada. Parece que está tratando de SELECCIONAR .. EN un nombre de columna.

Debe nombrar las variables locales para distinguirlas como nombres de columna. Así, en lugar de

DECLARE
value number;
amount number;
total number;

Deberías tener

DECLARE
v_value number;
v_amount number;
v_total number;

Por el contrario, debe pensar en convenciones de nomenclatura estándar para sus tablas y columnas. Para las columnas, uso y recomiendo nombres en forma de , por lo tanto, ORDER_ID, PRODUCT_NAME, etc. ¿Qué es esto con PRODUCT_ID_PRODUCT, ORDER_ID_ORDER? Repetir el nombre de la tabla en los nombres de las columnas no suele ser beneficioso. Aunque a veces tiene sentido porque todavía sigue el formato adjetivo_sustantivo, como la columna id de la tabla PEDIDOS que se llama ORDER_ID. Piense también en los nombres de las tablas, generalmente hago que los nombres de mis tablas sean un sustantivo plural porque las tablas rastrean múltiples instancias de alguna entidad. Si el nombre de la tabla tiene sentido para un nombre de columna (como ORDER_ID), sería singular, porque una fila individual rastrea una única instancia de la entidad.

Por último, es difícil recomendar la modificación de la codificación sin conocer las tablas. Ha dado una vaga descripción de ellos, pero mejor poner todo sobre la mesa. Consulte minimal-reproducible-example