Hola lista

Sobre este tema no hay comentarios? Lo estoy haciendo mal o interpretando
erróneamente? Escucho al menos sus críticas

El 10 ago. 2017 2:49 PM, "Hellmuth Vargas" <hiv...@gmail.com> escribió:

>
>
> Un caso adicional
>
> test=# begin transaction;
> BEGIN
> test=# insert into padre(id,texto)
> test-# select a.dato,chr(dato) from generate_series(33,255,1) as a(dato);
> INSERT 0 223
> test=# with elimina as (
> test(# delete from padre where id%2=0 returning id,texto
> test(# )select * from padre; -- trae todos
>  id  | texto
> -----+--------
>   33 | !
>   34 | "
>   35 | #
>   36 | $
>   37 | %
>   38 | &
>   39 | '
>   40 | (
>   41 | )
>   42 | *
>   43 | +
>   44 | ,
>   45 | -
>   46 | .
>   47 | /
>   48 | 0
>   49 | 1
>   50 | 2
>   51 | 3
>   52 | 4
>   53 | 5
>   54 | 6
>   55 | 7
>   56 | 8
>
>
> test=# select * from padre;  -- trae solo los impares
>  id  | texto
> -----+--------
>   33 | !
>   35 | #
>   37 | %
>   39 | '
>   41 | )
>   43 | +
>   45 | -
>   47 | /
>   49 | 1
>   51 | 3
>   53 | 5
>   55 | 7
>   57 | 9
>   59 | ;
>   61 | =
>   63 | ?
>   65 | A
>   67 | C
>   69 | E
>   71 | G
>   73 | I
>   75 | K
>   77 | M
>   79 | O
> test=# rollback;
> ROLLBACK
> test=#
>
> 2017-08-10 14:33 GMT-05:00 Hellmuth Vargas <hiv...@gmail.com>:
>
>>
>> Hola Lista
>>
>> Estaba revisando porque unas sentencias se ejecutaban y otras no con WITH
>> y prepare este script para que ustedes me ayuden a entender:
>>
>> test=# create table padre(id int primary key, texto text);
>> CREATE TABLE
>> test=# create table hijo(id int primary key, texto text, padre_id int
>> references padre(id));
>> CREATE TABLE
>> test=# begin transaction;
>> BEGIN
>> test=# with base as(
>> test(# insert into padre(id,texto)
>> test(# select a.dato,chr(dato) from generate_series(33,255,1) as a(dato)
>> returning id,texto
>> test(# ),hijos as (
>> test(# insert into hijo(id, texto, padre_id)
>> test(# select -a.id,'el char de ' || a.id || 'es: ' || texto,a.id from
>> base as a
>> test(# )
>> test-# select * from
>> test-# padre as a
>> test-# join hijo as b on a.id=b.padre_id;
>>  id | texto | id | texto | padre_id
>> ----+-------+----+-------+----------
>> (0 rows)
>>
>> no sale nada pero si en la misma transacción ejecuto nuevamente el ultimo
>> select:
>>
>>
>> test=# select * from
>> test-# padre as a
>> test-# join hijo as b on a.id=b.padre_id;
>>  id  | texto  |  id  |          texto           | padre_id
>> -----+--------+------+--------------------------+----------
>>   33 | !      |  -33 | el char de 33es: !       |       33
>>   34 | "      |  -34 | el char de 34es: "       |       34
>>   35 | #      |  -35 | el char de 35es: #       |       35
>>   36 | $      |  -36 | el char de 36es: $       |       36
>>   37 | %      |  -37 | el char de 37es: %       |       37
>>   38 | &      |  -38 | el char de 38es: &       |       38
>>   39 | '      |  -39 | el char de 39es: '       |       39
>>   40 | (      |  -40 | el char de 40es: (       |       40
>>   41 | )      |  -41 | el char de 41es: )       |       41
>>   42 | *      |  -42 | el char de 42es: *       |       42
>>   43 | +      |  -43 | el char de 43es: +       |       43
>>   44 | ,      |  -44 | el char de 44es: ,       |       44
>>   45 | -      |  -45 | el char de 45es: -       |       45
>>   46 | .      |  -46 | el char de 46es: .       |       46
>>   47 | /      |  -47 | el char de 47es: /       |       47
>>   48 | 0      |  -48 | el char de 48es: 0       |       48
>>   49 | 1      |  -49 | el char de 49es: 1       |       49
>>   50 | 2      |  -50 | el char de 50es: 2       |       50
>>   51 | 3      |  -51 | el char de 51es: 3       |       51
>>   52 | 4      |  -52 | el char de 52es: 4       |       52
>>   53 | 5      |  -53 | el char de 53es: 5       |       53
>>   54 | 6      |  -54 | el char de 54es: 6       |       54
>>   55 | 7      |  -55 | el char de 55es: 7       |       55
>>   56 | 8      |  -56 | el char de 56es: 8       |       56
>> test=# rollback;
>> ROLLBACK
>>
>> ------------------------------------------------------------
>> -----------------------
>> ------------------------------------------------------------
>> -----------------------
>>
>> test=# begin transaction;
>> BEGIN
>> test=# with base as(
>> test(# insert into padre(id,texto)
>> test(# select a.dato,chr(dato) from generate_series(33,255,1) as a(dato)
>> returning id,texto
>> test(# ),hijos as (
>> test(# insert into hijo(id, texto, padre_id)
>> test(# select -a.id,'el char de ' || a.id || 'es: ' || texto,a.id from
>> padre as a    ---no inserta
>> test(# )
>> test-# select * from
>> test-# padre as a
>> test-# join hijo as b on a.id=b.padre_id;
>>  id | texto | id | texto | padre_id
>> ----+-------+----+-------+----------
>> (0 rows)
>>
>> No inserto en el hijo.
>>
>> test=# select * from
>> test-# padre as a
>> test-# join hijo as b on a.id=b.padre_id;
>>  id | texto | id | texto | padre_id
>> ----+-------+----+-------+----------
>> (0 rows)
>>
>> test=# select * from padre;
>>  id  | texto
>> -----+--------
>>   33 | !
>>   34 | "
>>   35 | #
>>   36 | $
>>   37 | %
>>   38 | &
>>   39 | '
>>   40 | (
>>   41 | )
>>   42 | *
>>   43 | +
>>   44 | ,
>>   45 | -
>>   46 | .
>>   47 | /
>>   48 | 0
>>   49 | 1
>>   50 | 2
>>   51 | 3
>>   52 | 4
>>   53 | 5
>>   54 | 6
>>   55 | 7
>>   56 | 8
>> test=# select * from hijo;
>>  id | texto | padre_id
>> ----+-------+----------
>> (0 rows)
>>
>> test=# rollback;
>> ROLLBACK
>>
>> ------------------------------------------------------------
>> -----------------------
>> ------------------------------------------------------------
>> -----------------------
>>
>> test=# begin transaction;
>> BEGIN
>> test=# insert into padre(id,texto)
>> test-# select a.dato,chr(dato) from generate_series(33,255,1) as a(dato);
>> INSERT 0 223
>> test=#
>> test=# with elimina as (
>> test(# delete from padre where id%2=0 returning id,texto
>> test(# ),hijos as (
>> test(# insert into hijo(id, texto, padre_id)
>> test(# select -a.id,'el char de ' || a.id || 'es: ' || a.texto,a.id from
>> padre as a returning id, texto, padre_id
>> test(# )
>> test-# select * from
>> test-# hijos as b;
>> ERROR:  insert or update on table "hijo" violates foreign key constraint
>> "hijo_padre_id_fkey"
>> DETAIL:  Key (padre_id)=(34) is not present in table "padre".
>>
>>
>> ok aunque en hijos emplee la tabla padre.
>>
>>
>> test=#
>> test=# rollback;
>> ROLLBACK
>>
>> ------------------------------------------------------------
>> -----------------------
>> ------------------------------------------------------------
>> -----------------------
>>
>> test=# begin transaction;
>> BEGIN
>> test=# with base as(
>> test(# insert into padre(id,texto)
>> test(# select a.dato,chr(dato) from generate_series(33,255,1) as a(dato)
>> returning id,texto
>> test(# ),hijos as (
>> test(# insert into hijo(id, texto, padre_id)
>> test(# select -a.id,'el char de ' || a.id || 'es: ' || texto,a.id from
>> padre as a    ---no inserta
>> test(# )
>> test-# select * from
>> test-# padre as a
>> test-# join hijo as b on a.id=b.padre_id;
>>  id | texto | id | texto | padre_id
>> ----+-------+----+-------+----------
>> (0 rows)
>>
>> aquí no ve los registros de la tabla padre que se habían insertado en
>> base.....
>>
>>
>> test=# select * from hijo;
>>  id | texto | padre_id
>> ----+-------+----------
>> (0 rows)
>>
>> test=# select * from padre;
>>  id  | texto
>> -----+--------
>>   33 | !
>>   34 | "
>>   35 | #
>>   36 | $
>>   37 | %
>>   38 | &
>>   39 | '
>>   40 | (
>>   41 | )
>>   42 | *
>>   43 | +
>>   44 | ,
>>   45 | -
>>   46 | .
>>   47 | /
>>   48 | 0
>>   49 | 1
>>   50 | 2
>>   51 | 3
>>   52 | 4
>>   53 | 5
>>   54 | 6
>>   55 | 7
>>   56 | 8
>> test=#
>>
>> test=# rollback;
>> ROLLBACK
>> --
>> Cordialmente,
>>
>> Ing. Hellmuth I. Vargas S.
>> Esp. Telemática y Negocios por Internet
>>
>>
>
>
> --
> Cordialmente,
>
> Ing. Hellmuth I. Vargas S.
> Esp. Telemática y Negocios por Internet
> Oracle Database 10g Administrator Certified Associate
> EnterpriseDB Certified PostgreSQL 9.3 Associate
>
>

Reply via email to