如何在PL/SQL中使用行类型文字作为参数来调用过程



假设我有一个表和一个接受表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;

我仍然对更好的解决方案感兴趣。

最新更新