假设我有一个表和一个接受表rowtype的一个参数的过程:
CREATE TABLE t (a NUMBER, b NUMBER);
CREATE PROCEDURE p (x t%ROWTYPE) IS
BEGIN
NULL;
END;
我可以使用rowtype文字来调用该过程吗?也就是说,不显式创建rowtype变量(或者至少不显式列出并分配它的每个字段)?以下两种方法都会产生以下错误:
p(1, 2);
p((1, 2));
PLS-00306:调用"p"时参数的数量或类型错误
您也可以从游标循环中构造记录:
for r in (
select 1, 2 from dual
)
loop
p(r);
end loop;
不幸的是,PL/SQL记录只是简单的结构,并不像对象类型那样带有构造函数
这不是一个最佳解决方案,因为它(a)需要创建一个变量,而(b)不是很漂亮。但至少它有效:
DECLARE
x t%ROWTYPE;
BEGIN
SELECT 1, 2 INTO x FROM dual;
p(x);
END;
我仍然对更好的解决方案感兴趣。