Oracle 将记录类型作为参数传递有什么不对
我有以下代码片段:Oracle 将记录类型作为参数传递有什么不对,oracle,plsql,Oracle,Plsql,我有以下代码片段: CREATE OR REPLACE PACKAGE pkg_test1 IS TYPE t_rec1 is RECORD(c1 number); FUNCTION f1(p1 t_rec1 ) RETURN VARCHAR2; END pkg_test1; CREATE OR REPLACE PACKAGE BODY pkg_test1 IS FUNCTION f1 (p1 t_rec1) return varchar2 is BEGIN RETU
CREATE OR REPLACE PACKAGE pkg_test1 IS
TYPE t_rec1 is RECORD(c1 number);
FUNCTION f1(p1 t_rec1 ) RETURN VARCHAR2;
END pkg_test1;
CREATE OR REPLACE PACKAGE BODY pkg_test1 IS
FUNCTION f1 (p1 t_rec1) return varchar2 is
BEGIN
RETURN 'a';
END f1;
END pkg_test1;
DECLARE
TYPE t_rec IS RECORD (c1 NUMBER);
v_rec t_rec;
v_var VARCHAR2(15);
BEGIN
v_rec.c1 := 1;
v_var := pkg_test1.f1 (v_rec);
END;
当我执行匿名代码时,我收到以下错误:
PLS-00306:调用“F1”时参数的数量或类型错误
有人能帮我看看我犯的错误吗?您在匿名块中声明的类型在您看来是相同的,但在Oracle看来,它是一个完全独立且不兼容的类型 : 包规范中定义的记录类型与相同定义的本地记录类型不兼容 但是你不需要它;只需使用包类型:
DECLARE
-- don't create a new type....
--TYPE t_rec IS RECORD (c1 NUMBER);
--v_rec t_rec;
-- use the package type instead
v_rec pkg_test1.t_rec1;
v_var VARCHAR2(15);
BEGIN
v_rec.c1 := 1;
v_var := pkg_test1.f1 (v_rec);
END;