2017-07-17 40 views
4

下面是PL/SQL一個簡單的程序問題雖然在PostgreSQL中創建函數「錯誤:在或附近有語法錯誤‘ROWTYPE’」

PROCEDURE emp_get_rec (emp_rec IN OUT NOCOPY emp_content%ROWTYPE) 
    IS 
    v_cnt NUMBER; 
    BEGIN 
    SELECT COUNT(*) 
    INTO v_cnt 
    FROM emp_content 
    WHERE emp_id = emp_rec.emp_id; 
    IF v_cnt = 1 
    THEN 
     SELECT * INTO emp_rec 
     FROM emp_content 
     WHERE emp_id = emp_rec.emp_id; 
    END IF; 
END emp_get_rec; 

我正努力在PostgreSQL的轉換,

Create or replace function emp_get_rec (emp_rec IN OUT emp_content%ROWTYPE) 
AS $BODY$ 
DECLARE 
    v_cnt NUMBER; 
BEGIN 

     SELECT COUNT(*) 
    INTO v_cnt 
    FROM emp_content 
    WHERE emp_id = emp_rec.emp_id; 
    IF v_cnt = 1 
    THEN 
     SELECT * INTO emp_rec 
     FROM emp_content 
     WHERE emp_id = emp_rec.emp_id; 
    END IF; 
END; 
$BODY$ LANGUAGE 'plpgsql'; 

我面臨以下錯誤:

ERROR: syntax error at or near "ROWTYPE"

+0

如果你有錯誤「或接近‘ROWTYPE’」然後就刪除'%ROWTYPE '(包括百分號):o)在PostgreSQL中,表/視圖名稱可以用作類型名稱,不需要添加任何內容。 – Abelisto

+0

Abeslisto,參數是in和out類型。我需要通過其他函數調用這個特定的函數,這個函數傳遞它的完整記錄。因此,必須使用inoder來提供完整的行%ROWTYPE。所以如果你可以分享一些相同的語法。 – Pooja

+1

Abelisto試圖說的是:'%ROWTYPE'在Postgres中不需要**。您可以將表名稱用作「數據類型」並將完整的記錄傳遞給該函數。 –

回答

1

Documentation says

Whenever you create a table, a composite type is also automatically created, with the same name as the table, to represent the table's row type.

所以,你可以使用表名作爲類型名在語法上它意味着一個類型:

create or replace function emp_get_rec (emp_rec IN OUT emp_content) 
相關問題