2015-05-23 39 views
0

我想在PostgreSQL的到併發執行兩個事務,這就是我的本錢如何在Postgresql中同時執行兩個事務?

--The first transaction should modify the age of Paul 
BEGIN; 
DECLARE newage INTEGER; 
--the original age of Paul is 32 
newage := Select age FROM COMPANY WHERE name = Paul; 
newage := newage+10; 
update company set age := Sage where name = Paul; 
commit; 


--The second Transaction shows all information about Paul including his age 
Begin 
select * from company where name = 'Paul'; 
commit; 

兩個部分寫在同一個SQL編輯器。我的第一個問題是它不能編譯,我得到的消息

ERROR: syntax error at or near "INTEGER" 
LINE 2: DECLARE newage INTEGER; 

我該如何改進我的代碼來執行它?誰能幫我?謝謝!

+0

它看起來像你的混合PLPGSQL和SQL。您的第一個事務不是有效的SQL,但它看起來像plpgsql。但它只是看起來像,它也不是有效的plpgsql。你在找什麼? –

+0

@FrankHeikens我正在使用PgAdmin,我想同時運行2個事務。除了聲明變量的語法失敗之外。如果我在相同的SQL編輯器窗口上執行它們,它是正確的嗎?我的意思是「開始; ......提交」;爲第1筆交易和「開始......提交」第二筆交易? – GniruT

回答

0
  1. 在PostgreSQL你不能在SQL聲明變量,但你可以在pl/pgsql
  2. DECLARE關鍵字做它創建了一個光標,而不是一個變量。
  3. 使用SELECT INTO設定值到newage
  4. 使用DO執行PL/pgSQL的。它將在單個交易中執行。

所以結果查詢看起來像:

DO $$ DECLARE 
    newage INTEGER; 
BEGIN 
    SELECT age INTO newage FROM companey WHERE name = 'Paul'; 
    newage := newage+10; 
    UPDATE company SET age = newage where name = 'Paul'; 
END $$: 
相關問題