Update Cursor


Problem 1
circuit_city > Modify the circuit_city.sql file to create the table ord_det_copy as shown. Then, write a SQL command to copy the rows from the ord_det table to the ord_det_copy by combining the SELECT and INSERT verbs; first use INSERT and replace the VALUES part of the INSERT with a SELECT. Using: (a) Oracle. (b) Microsoft SQL Server.
Modifique el archivo circuit_city.sql para crear la tabla ord_det_copy como se muestra. Entonces, escriba un comando SQL para copiar todos los renglones de la tabla ord_det a la tabla ord_det_copy combinando los verbos SELECT e INSERT; primero use INSERT y reemplace la parte VALUES del INSERT con un SELECT. Usando: (a) Oracle. (b) Microsoft SQL Server.

circuit_city.sql
CREATE TABLE ord_det_copy
(
     order_id INT NOT NULL REFERENCES orderx(order_id),
     item_id INT NOT NULL REFERENCES item(item_id),
     item_count INT NOT NULL,
     PRIMARY KEY (order_id, item_id)
);

MSDOS: cmd.exe
SQL> SELECT order_id,
  2  item_id,
  3  item_count
  4  FROM ord_det_copy;

  ORDER_ID    ITEM_ID ITEM_COUNT
---------- ---------- ----------
      2000        100          4
      2000        104          5
      2001        105          1
      2001        106          3
      2001        109          2
      2002        103          2
      2002        102          5
      2002        110          4
      2002        111         12
      2003        107          5
      2004        103          2
      2004        104          2
      2005        102          2

13 rows selected.

Microsoft SQL Server
SELECT order_id,
item_id,
item_count
FROM ord_det_copy;

micro_orddet

Tip
BEGIN TRANSACTION (SAVEPOINT in Oracle) is used when a transaction with several steps (more than one step and these steps modify the database by means of INSERT, DELETE or UPDATE) is executed, and it is necessary to undo the transaction when any of the steps goes wrong. If something goes wrong, ROLLBACK (ROLLBACK TO in Oracle) is used to undo all the steps executed since beginning of the transaction until the point of error. At the end of the transaction, COMMIT TRANSACTION (COMMIT in Oracle) is used to make the transaction permanent.
BEGIN TRANSACTION (SAVEPOINT en Oracle) se usa cuando se ejecuta una transacción de varios pasos (más de un paso y estos pasos modifican la base de datos usando INSERT, DELETE o UPDATE) y se necesita deshacer la transacción cuando cualquiera de los pasos sale mal. Si algo sale mal se usa ROLLBACK (ROLLBACK TO para deshacer todos los pasos desde que inició la transacción hasta el punto de error. Al final de la transacción se usa COMMIT TRANSACTION (Commit en Oracle) para hacer los cambios de la transacción permanentes.

Problem 2
circuit_city > Create a stored procedure called p_close_month to move permanently the rows from the ord_det table to the ord_det_copy table (first, empty the ord_det_copy table, then move the data from table to the other). Use the commands BEGIN TRANSACTION, ROLLBACK, COMMIT TRANSACTION, and the @@ROWCOUNT variable. Use Microsoft SQL Server.

Observe that this store procedure requires to use the BEGIN TRANSACTION command because it has two steps:
  1. Copy from ord_det table to the ord_det_copy
  2. Delete from ord_det

Cree un procedimiento almacenado llamado p_close_month para mover en forma permanente los renglones de la tabla ord_det a la tabla ord_det_copy (primero, remueva todos los renglones de la tabla ord_det_copy, entonces mueve los datos). Use los comandos: BEGIN TRANSACTION, ROLLBACK, COMMIT TRANSACTION y la variable @@ROWCOUNT. Use Microsoft SQL Server.

Observe que en este procedimiento almacenado se necesita usar el comando BEGIN TRANSACTION porque este tiene dos pasos:
  1. Copia desde la tabla ord_det a la tabla ord_det_copy
  2. Borrar de la tabla ord_det

Microsoft SQL Server
SELECT order_id,
item_id,
item_count
FROM ord_det;

micro_close_month_before_ord_det

Microsoft SQL Server
USE circuit_city;
DELETE FROM ord_det_copy;
EXECUTE p_close_month;
SELECT order_id,
item_id,
item_count
FROM ord_det;

micro_close_month_after_ord_det

Microsoft SQL Server
SELECT order_id,
item_id,
item_count
FROM ord_det_copy;

micro_close_month_ord_det_copy

Problem 3
circuit_city > The owner of the store has decided to give a free item of the same type for those orders which have more than four of those items. Test the p_gratis stored procedure in Oracle.
El propietario de Circuit City ha decidido dar un artículo gratis en aquellas órdenes que tengan más de 4 artículos del mismo tipo. El artículo de regalo debe ser de este último tipo. Pruebe el procedimiento almacenado p_gratis en Oracle.

UpdateCursor

MSDOS: cmd.exe
SQL> EXECUTE p_gratis;

PL/SQL procedure successfully completed.

SQL> SELECT order_id,
  2  item_id,
  3  item_count
  4  FROM ord_det_copy;

  ORDER_ID    ITEM_ID ITEM_COUNT
---------- ---------- ----------
      2000        100          4
      2000        104          6
      2001        105          1
      2001        106          3
      2001        109          2
      2002        103          2
      2002        102          6
      2002        110          4
      2002        111         13
      2003        107          6
      2004        103          2
      2004        104          2
      2005        102          2

13 rows selected.


Problem 4
circuit_city > Repeat the previous problem using Microsoft SQL Server, do not forget to remove the READ_ONLY property from the CURSOR.
Repita el problema anterior usando Microsoft SQL Server, no se olvide de remover la propiedad READ_ONLY del CURSOR.

Microsoft SQL Server
USE circuit_city;
EXECUTE p_gratis;

Microsoft SQL Server
SELECT order_id,
item_id,
item_count
FROM ord_det_copy;

micro_gratis

© Copyright 2000-2019 Wintempla selo. All Rights Reserved. Sep 05 2019. Home