美好的一天,我有几个表 ITEMS_* 可能有不同的列,但某些列存在并且在所有这些表中都是相同的类型。一个例子:
CREATE TABLE "APT"."ITEMS_AV" (
-- These columns are common for all tables
"ID" NUMBER NOT NULL ENABLE,
"CODE" VARCHAR2(20) NOT NULL ENABLE,
"DESCRIPTION" VARCHAR2(50) NOT NULL ENABLE,
-- Other columns may differ
...,
-- The primary key is the same in all tables
CONSTRAINT "ITEMS_AV_PK" PRIMARY KEY ("ID")
) TABLESPACE "APT" ;
对于每个表,我编写了一个特殊的 PL/SQL 过程来处理表中的数据。每个过程中都声明了一个游标“cur”:
CREATE OR REPLACE
PROCEDURE PROCESS_ITEMS_AV AS
CURSOR cur IS
SELECT ID, CODE, DESCRIPTION, ...
FROM ITEMS_AV;
BEGIN
FOREACH d IN cur LOOP
FIX_DATA(d);
-- Continue processing 'row' data
...
END LOOP
END PROCESS_ITEMS_AV;
在这个过程中,我需要调用过程 FIX_DATA 来修复当前行中的数据。例如从 row.CODE 中删除空格并从 row.DESCRIPTION 中删除无效字符。通常我会为每个表声明这个过程:
CREATE OR REPLACE
PROCEDURE FIX_DATA (r IN OUT ITEMS_AV%ROWTYPE) AS
BEGIN
r.CODE := ...;
r.DESCRIPTION := ...;
END TESTPROC;
但是这个过程对所有表都一样,所以我想只有一个过程 FIX_DATA 将在所有 PROCESS_ITEMS_* 过程中使用。问题是参数'r'声明中的表名:
PROCEDURE FIX_DATA (r IN OUT ITEMS_AV%ROWTYPE) AS ...
有没有办法声明'r'参数,以便我可以将它用于许多只有一些(但总是相同)列相同的游标?
提前谢谢了。沃杰科技