【发布时间】:2017-12-21 20:21:35
【问题描述】:
下面是一个简单的PL/SQL过程
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';
我面临以下错误:
错误:“ROWTYPE”处或附近的语法错误
【问题讨论】:
-
如果你在“ROWTYPE”处或附近有错误,那么只需删除
%ROWTYPE(包括百分号):o)在PostgreSQL表/视图名称可以用作类型名称,没有任何补充。 -
Abeslisto,参数为in和out类型。我需要通过传递其完整记录的其他函数调用此特定函数。因此必须使用 inode 来提供完整的行集 %ROWTYPE。因此,如果您可以共享一些相同的语法。
-
Abelisto 想说的是:
%ROWTYPE在 Postgres 中不需要。您可以将表名用作“数据类型”并将完整记录传递给该函数。
标签: sql postgresql plpgsql