update una tabla registros registro modificar into filas eliminar desde consultas cero borrar aprender afectadas sql postgresql sql-update

una - modificar registro sql server



Obtenga el recuento de registros afectados por INSERT o UPDATE en PostgreSQL (4)

El controlador de mi base de datos para PostgreSQL 8/9 no devuelve un conteo de registros afectados al ejecutar INSERT o UPDATE .

PostgreSQL ofrece la sintaxis no estándar " RETURNING " que parece una buena solución. Pero, ¿cuál podría ser la sintaxis? El ejemplo devuelve la ID de un registro, pero necesito un conteo.

INSERT INTO distribuidores (did, dname) VALUES (VALOR PREDETERMINADO, ''XYZ Widgets'') RETURNING did ;



No está claro por tu pregunta cómo llamas la declaración. Suponiendo que está utilizando algo como JDBC, puede llamarlo como una consulta en lugar de una actualización. Desde executeQuery de JDBC:

Ejecuta la instrucción SQL dada, que devuelve un solo objeto ResultSet.

Por lo tanto, esto es apropiado cuando ejecuta una instrucción que devuelve algunos resultados de consulta, como SELECT o INSERT ... RETURNING . Si está realizando una actualización en la base de datos y luego desea saber cuántas tuplas se vieron afectadas, debe usar executeUpdate que devuelve:

bien (1) el recuento de filas para las sentencias del Lenguaje de Manipulación de Datos SQL (DML) o (2) 0 para las declaraciones SQL que no devuelven nada


Puede tomar ROW_COUNT después de la actualización o insertar con este código:

insert into distributors (did, dname) values (DEFAULT, ''XYZ Widgets''); get diagnostics v_cnt = row_count;


Sé que esta pregunta es oooolllllld y mi solución es posiblemente demasiado compleja, ¡pero esa es mi clase de solución favorita!

De todos modos, tuve que hacer lo mismo y lo hice funcionar así:

-- Get count from INSERT WITH rows AS ( INSERT INTO distributors (did, dname) VALUES (DEFAULT, ''XYZ Widgets''), (DEFAULT, ''ABC Widgets'') RETURNING 1 ) SELECT count(*) FROM rows; -- Get count from UPDATE WITH rows AS ( UPDATE distributors SET dname = ''JKL Widgets'' WHERE did <= 10 RETURNING 1 ) SELECT count(*) FROM rows;

Uno de estos días realmente tengo que escribir un soneto de amor para la cláusula WITH de PostgreSQL ...