【发布时间】:2018-08-04 19:23:37
【问题描述】:
我的目标是在 PL/SQL 中编写一个函数或一个存储过程,它返回一个表供用户立即查看。我有几十个历史表,想给自己一个跨所有表的单个用户历史的快照。但我遇到了一个错误,我不确定这是否是最好的方法。
我目前的方法是将表格中的所有信息收集到自定义“汇总表”类型中,然后将其返回。但是,当使用我的自定义“userTable”作为我的输出参数的类型时,我遇到了错误
CREATE OR REPLACE PROCEDURE GetUserSnapShot(myid in Number, numdays in Number,
myTable out userTable)
AS
BEGIN
/*maybe insert a row into the table here?*/
myTable := null;
END;
DECLARE
TYPE userChanges IS RECORD (
historyTable VARCHAR(100),
historyId NUMBER,
changeType VARCHAR(6),
changeDate DATE
);
TYPE userTable IS TABLE OF userChanges INDEX BY BINARY_INTEGER;
myTable userTable;
BEGIN
GetUserSnapShot(5, 7, myTable);
END;
这是我在尝试运行时遇到的错误:必须声明标识符“USERTABLE”,这让我感到困惑,因为我已经声明了 userTable
【问题讨论】:
-
为什么不能简单地返回选择查询的结果?
-
编译器需要能够查找
userTable的定义才能编译过程。它不能只是在您桌面上的某个脚本中。
标签: sql oracle stored-procedures plsql oracle12c