从Oracle PL / SQL中的另一个包获取记录类型的值

时间:2014-07-25 12:17:02

标签: oracle plsql

packageA Body
MEMBER FUNCTION getValue (indx IN PLS_INTEGER) RETURN VARCHAR2
IS
colData packageB.vldtnR
BEGIN
colData := packageB.getColumnData(indx);
--I want to output the id and name from the specified index
END;

packageB Header
TYPE vldtnR IS RECORD(
id PLS_INTEGER;
name VARCHAR2(50)
)

packageB Body
TYPE vldtnArryT IS TABLE OF vldtnR INDEX BY PLS_INTEGER;
vldtnArry vldnArryT;

FUNCTION getColumnData(indx IN PLS_INTEGER) IS
BEGIN
 IF vldtnArry.EXISTS(indx) = TRUE THEN
    RETURN vldtnArry(indx);
 END IF;
END;

代码概述:

vldtnArry属于vldArryT(PackageB正文)

vldtnArryT属于vldtnR(PackageB body)

vldtnR在PackageB标题

问题:

如何在packageA中输出索引的id和名称?

2 个答案:

答案 0 :(得分:2)

colData您有记录,您可以直接将记录中的字段称为colData.idcolData.name

答案 1 :(得分:1)

正如马克西姆所说,你有一个colData变量是一种记录类型,所以你可以将这些字段称为colData.idcolData.name。您希望根据varchar2返回类型和嵌入式注释将两者都作为单个字符串返回,因此您可以这样做:

CREATE PACKAGE BODY packageA AS
  FUNCTION getValue (indx IN PLS_INTEGER) RETURN VARCHAR2
  IS
  colData packageB.vldtnR;
  BEGIN
    colData := packageB.getColumnData(indx);
    return 'Index ' || indx || ' ID ' || colData.id
      || ' name "' || colData.name || '"';
  END;
END;
/

将返回类似这样的内容,您可以明显修改为所需的输出:

Index 2 ID 13 name "Thirteen"

您发布的代码还有许多其他问题,希望能在此重新输入。 SQL Fiddle demo编译并让您看到几个索引值的结果,基于手动填充的集合。