Stored procedures 如何在PL/SQL中调用以rowtype文本作为参数的过程?
假设我有一个表和一个过程,它接受tables行类型的一个参数: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”时参数的数量或类型错误 这不是一个最优的解决方
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;