2012-02-19 286 views
1

我在pgSQL里的新手,所以我执行不同的SQL赞扬 - 这里是下一个 - 我想最后一个SQL命令来获取受影响的行数:pgAdmin的未能执行SQL语句

delete from "Menu" where "ID" = 0; 
GET DIAGNOSTICS integer_var = ROW_COUNT; 
select integer_var; 

但pgAdmin的说:

ERROR: syntax error at or near "GET" 
LINE 1: GET DIAGNOSTICS integer_var = ROW_COUNT; 

什么,我做错了什么?

+1

我很确定这个命令只能在PL/pgSQL代码的上下文中运行,而不仅仅是在pgAdmin中运行的任意语句。 – 2012-02-19 00:57:26

+0

嗯..那么有没有办法实现使用pgAdmin受影响的行数? – DreadAngel 2012-02-19 00:59:42

+0

那么,至少,你可以创建一个plpqsql存储过程,虽然我的猜测是你必须通过SQL插入语句作为参数执行,并让程序动态地执行它。 – gsteff 2012-02-19 01:05:26

回答

7

从PostgreSQL 9.0开始,你可以使用DO执行匿名代码块

DO $$ 
DECLARE 
    integer_var integer; 
BEGIN 
    delete from "Menu" where "ID" = 0; 
    GET DIAGNOSTICS integer_var = ROW_COUNT; 
    raise notice 'Rows removed: %', integer_var; 
END$$; 

我更换了最后选择了通知,因为我没有完成你想要与选择的结果做知道是什么这是说明DO的最简单方法。

如果这最终将被纳入某些程序中,您可能有可能直接检索受影响的行数。 libpq包含函数PQcmdTuples,它返回受影响的行数。 PHP具有函数pg_affected_rows,而JDBC中的executeUpdate返回受影响的行数。