"我想知道我是否可以在函数中使用布尔参数"
是的。 PL/SQL 支持布尔数据类型。如果myOwnType 是这样的PL/SQL 记录...
create or replace package p23 as
type myOwnType is record (
attr1 varchar2(10),
attr2 varchar2(30),
attr3 date,
attr4 date,
attr5 boolean
);
function functionname(
param1 varchar2,
param2 varchar2,
param3 date,
param4 date,
param5 boolean)
return myowntype;
end p23;
/
create or replace package body p23 as
function functionname(
param1 varchar2,
param2 varchar2,
param3 date,
param4 date,
param5 boolean)
return myowntype
is
rv myOwnType;
begin
rv.attr1 := param1;
rv.attr2 := param2;
rv.attr3 := param3;
rv.attr4 := param4;
rv.attr5 := param5;
return rv;
end;
end p23;
/
...没问题:
SQL> declare
2 myOwnTypeVar p23.myowntype;
3 begin
4 myOwnTypeVar := p23.functionName('something', 'some', SYSDATE, SYSDATE, TRUE);
5 end;
6 /
PL/SQL procedure successfully completed.
SQL>
那么导致错误的原因是什么? PLS-00382 是分配失败。你还没有发布myOwnType 的声明,但是如果它是用字符串属性而不是布尔值定义的,像这样......
type myOwnType is record (
attr1 varchar2(10),
attr2 varchar2(30),
attr3 date,
attr4 date,
attr5 varchar2(1)
);
...那么这个赋值会抛出那个错误:
rv.attr5 := param5;
顺便说一句,Oracle SQL 不支持布尔值,即使是类型:
SQL> create or replace type myOwnType as object (
2 attr1 varchar2(10),
3 attr2 varchar2(30),
4 attr3 date,
5 attr4 date,
6 attr5 boolean
7 );
/
Warning: Type created with compilation errors.
SQL> sho err
Errors for TYPE MYOWNTYPE:
LINE/COL ERROR
-------- -----------------------------------------------------------------
6/8 PLS-00530: Illegal type used for object type attribute:
'BOOLEAN'.
SQL>
在这种情况下,functionName() 无法编译,因此无法投掷 PLS-00382 expression is of wrong type。