2015-01-16 94 views
0

我有一個腳本,我只需將其粘貼到POSTGRES 9.1中的SQL查詢窗口中並運行即可。即閱讀第1部分如何控制postgres腳本執行

DO 
    $$ 
    BEGIN 
    CREATE SEQUENCE base_listing_id_seq 
     INCREMENT 1 
     MINVALUE 1 
     MAXVALUE 9223372036854775807 
     START 1 
     CACHE 1; 
    ALTER TABLE base_listing_id_seq 
     OWNER TO postgres; 
    EXCEPTION 
     WHEN duplicate_table THEN RAISE NOTICE 'sequence base_listing_id_seq already exists'; 
    END 
    $$ LANGUAGE plpgsql; 

    -- Part 2 

    CREATE TABLE IF NOT EXISTS aes_fba_details 
    (
     id serial NOT NULL, 
     product_id integer NOT NULL, 
     shippingprice numeric DEFAULT 0, 
     fbadatetime date NOT NULL, 
     currency text, 
     CONSTRAINT aes_fba_details_pkey PRIMARY KEY (id) 
    ) 
    WITH (
     OIDS=FALSE 
    ); 
    ALTER TABLE aes_fba_details 
     OWNER TO postgres; 

    -- End Scripts 

我想要做的是取決於值第1部分或第2部分(版本字符串,如果你喜歡)運行 -

如 - 開始腳本 從一張桌子裏。

myVariable = SELECT version-string FROM versionTable; 

    ... 
    DO PART 1 
    ... 

    If myVariable > 1 then 
     ... 
     DO PART 2 
     ... 
    End if 

這甚至可能嗎?如果我混淆了術語,我很抱歉。

回答

1

這是可能的,但是您需要在DO塊內使用IF條件來決定要做什麼來完成所有DDL。

不能在普通SQL中使用變量或IF語句,只能在PL/PgSQL中使用。

+0

謝謝,一個大的DO與我很好。你能幫助我想要實現什麼大綱? – err1

+0

@ Sai-LeungLee我真的不知道你需要什麼。你幾乎寫了你想要的代碼。你知道如何使用PL/PgSQL'DO'塊,就像你的例子中有一個塊一樣。因此,只需將它包含在具有適當的「IF ... THEN」條件的「DO」塊中即可。有關如何使用「IF」語句,請參見PL/PgSQL控制結構手冊。 –

+0

謝謝你,但我有點不確定如何使用從SQL語句返回的數據初始化變量:myVariable = SELECT version-string FROM versionTable;一旦我有這個工作,我相信我能夠將腳本一起破解。我不知道有關代碼的多少位(除了我能夠從Google搜索中拼湊出來的代碼外)。 SQL和函數我很好(一點),但後來我很困惑如何將它們都綁在一起。 – err1