Stored procedures 如何在PL/SQL中调用以rowtype文本作为参数的过程?

Stored procedures 如何在PL/SQL中调用以rowtype文本作为参数的过程?,stored-procedures,plsql,rowtype,Stored Procedures,Plsql,Rowtype,假设我有一个表和一个过程,它接受tables行类型的一个参数: CREATE TABLE t (a NUMBER, b NUMBER); CREATE PROCEDURE p (x t%ROWTYPE) IS BEGIN NULL; END; 我是否可以使用rowtype文本调用该过程,即不显式地创建rowtype变量(或者至少不显式地列出并分配它的每个字段)?以下两种方法都会产生以下错误: p(1, 2); PLS-00306:调用“p”时参数的数量或类型错误 这不是一个最优的解决方

假设我有一个表和一个过程,它接受tables行类型的一个参数:

CREATE TABLE t (a NUMBER, b NUMBER);

CREATE PROCEDURE p (x t%ROWTYPE) IS
BEGIN
  NULL;
END;
我是否可以使用rowtype文本调用该过程,即不显式地创建rowtype变量(或者至少不显式地列出并分配它的每个字段)?以下两种方法都会产生以下错误:

p(1, 2);
PLS-00306:调用“p”时参数的数量或类型错误


这不是一个最优的解决方案,因为它(a)需要创建一个变量,(b)不是很漂亮。但至少它是有效的:

DECLARE
  x t%ROWTYPE;
BEGIN
  SELECT 1, 2 INTO x FROM dual;
  p(x);
END;

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

您也可以从游标循环构造记录:

for r in (
    select 1, 2 from dual
)
loop
    p(r);
end loop;

不幸的是,PL/SQL记录只是简单的结构,不像对象类型那样带有构造函数。(我希望他们这样做。)

谢谢!它可以工作,并且不需要声明变量。仍然不是很漂亮,但我觉得我可能不得不放弃这个要求。或者,编写自己的构造函数,即一个名为“new_where”的函数,其中“where”是记录类型,它返回该类型的记录。
for r in (
    select 1, 2 from dual
)
loop
    p(r);
end loop;