Pl/sql Error: Identifier 'Record' must be declared

Pl/sql Error: Identifier 'Record' must be declared

我是 pl/sql 的新手。我需要根据给定的行 ID 检索行。为此,我写了一个 returns 行的函数。这是我写的函数。

CREATE OR REPLACE FUNCTION CHECKROW(ROW_ID_ IN VARCHAR2) 
RETURN TBL_SPT%ROWTYPE 
IS
  VAR_TEMP_ TBL_SPT%ROWTYPE;
  CURSOR GET_ROW IS
    SELECT *
    FROM TBL_SPT 
    WHERE ROWID = ROW_ID_;
BEGIN
    OPEN GET_ROW; 
    FETCH GET_ROW
    INTO VAR_TEMP_;
    --Here I wrote the print statement to get the id only. 
    DBMS_OUTPUT.PUT_LINE(VAR_TEMP_.s_id);
    RETURN VAR_TEMP_;
    CLOSE GET_ROW;
END CHECKROW;

但是当我测试这个函数时,它给出了下面的错误。我的第一个问题是为什么这个函数会给出这个错误?我在这里使用了光标。这是错的吗?我应该使用记录吗? 另一个问题是,如果我想打印记录,是否应该对所有字段使用 'VAR_TEMP_.id' 类型?还有其他方法吗?

这是我的 table 定义。

Name        Type   
----------- ------ 
S_ID        NUMBER                           
P_ID        NUMBER                           
PR_ID       NUMBER                           
QUANTITY    NUMBER                           
ROW_VERSION DATE 

这里是测试时产生的调用函数。 row_id_ 是一个字符串。

declare
  -- Non-scalar parameters require additional processing 
  result record;
begin
  -- Call the function
  result := checkrow(row_id_ => :row_id_);
end;

错误来自您调用函数的匿名块,而不是函数本身;它并没有真正进行调用。

声明:

  result record;

应该是:

  result TBL_SPT%ROWTYPE;

以匹配函数的 return 类型。看起来样板代码使用了一个通用的 'record',它希望您定义或替换它。正如它在评论中所说,“非标量参数需要额外处理”。

这并不意味着您的功能没有问题,如评论中所述;但这些不会导致此错误。