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 ;
Estoy de acuerdo con Milen, su conductor debería hacer esto por usted. ¿Qué driver estás usando y para qué idioma? Pero si usa plpgsql, puede usar GET DIAGNOSTICS my_var = ROW_COUNT;
http://www.postgresql.org/docs/current/static/plpgsql-statements.html
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 ...