Oracle 函数中的布尔参数
Posted
技术标签:
【中文标题】Oracle 函数中的布尔参数【英文标题】:Boolean parameter in Oracle function 【发布时间】:2017-05-11 15:57:36 【问题描述】:这是我的 Oracle 函数的签名
FUNCTION functionName(
param1 VARCHAR2,
param2 VARCHAR2,
param3 DATE,
param4 DATE,
param5 BOOLEAN)
RETURN myOwnType;
我用它:
myOwnTypeVar := functionName('something', 'some', SYSDATE, SYSDATE, TRUE);
我有这个错误:
PLS-00382 expression is of wrong type.
所有类型似乎都受到尊重。我想知道我是否可以在函数中使用布尔参数(在程序中使用它没有问题)。
谢谢。
注意:myOwnTypeVar 的声明
myOwnTypeVar myOwnType;
【问题讨论】:
返回类型是否与变量类型匹配? myOwnTypeVar 是如何声明的? 问题不在于布尔参数。显示更多代码 - 特别是在错误消息中提到的行周围。错误消息应该告诉您错误发生的位置(代码中的哪一行)。 如果您需要具体帮助,您需要发布functionname
的代码和myOwntype
的声明。
【参考方案1】:
"我想知道我是否可以在函数中使用布尔参数"
是的。 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
。
【讨论】:
这里的 SQL 类型有什么关系?这是一个 PL/SQL 函数,它只有一个布尔参数,这意味着它不能从 SQL 中调用;但这不应该阻止它被 PL/SQL 调用。 @JeffreyKemp - 你现在就在。最初它在那里是因为达米安的回答(自从删除但你得到了代表)。根源是,OP 没有在他们的原始问题中包含 类型的定义,也没有费心回答我们的问题。 我明白了。很公平。以上是关于Oracle 函数中的布尔参数的主要内容,如果未能解决你的问题,请参考以下文章