Oracle Forms 编译器将类型标记为函数
Posted
技术标签:
【中文标题】Oracle Forms 编译器将类型标记为函数【英文标题】:Oracle Forms compiler mark a type as function 【发布时间】:2016-12-21 17:01:03 【问题描述】:我正在 Oracle 表单中创建一个过程,该过程调用插入表(解决方案表)中的回溯。该回溯由项目(bean)的可变数组(ítem_array)提供。问题是编译器说没有函数名。
数据库中的现有对象:
CREATE TYPE item IS object( NUM_OPERACIO NUMBER, TITULS NUMBER);
CREATE TYPE item_array IS VARRAY(1000) OF item;
create table my_table (NUM_OPERACIO NUMBER, TITULS NUMBER);
insert into my_table ( NUM_OPERACIO,TITULS ) values (1,10);
insert into my_table ( NUM_OPERACIO,TITULS ) values (2,20)
insert into my_table ( NUM_OPERACIO,TITULS ) values (3,30)
程序
PROCEDURE solver
IS
arr item_array;
BEGIN
SELECT item( NUM_OPERACIO,TITULS )
BULK COLLECT INTO arr
FROM my_table;
delete from solucion ;
backtra(arr,1,0,30);
END;
我能做些什么来解决这个问题?
【问题讨论】:
这看起来不错,只要一切都在同一个模式中完成(或权限等设置正确),并且类型已成功创建。您得到的完整错误消息堆栈是什么? error591。客户端安装的程序不支持此功能。错误 222. 在此范围内没有函数名称 ítem 。错误 0 。语句忽略。 您在什么架构下创建对象item
、item_array
和my_table
?确保这些对象具有 APPS 的同义词,否则它们对 Oracle Forms 的默认模式 (APPS
) 不可见。
【参考方案1】:
这是一个 PLS 错误号。来自the documentation:
“PLS-00591:客户端程序不支持此功能 原因:在错误的上下文中使用了以下功能之一:pragma AUTONOMOUS_TRANSACTION、动态 SQL 语句(例如 EXECUTE IMMEDIATE)和批量绑定。这些列出的功能只能在服务器端程序中使用,而不能在客户端程序中使用。”
您的代码使用批量绑定,因此该错误适合。表单 PL/SQL 和数据库 PL/SQL 相似,但它们使用不同的引擎,两者支持的功能只是两者中所有功能的子集。解决方案是将数组填充传递到数据库过程中,并根据需要从 Forms 中调用它。
如果不确切知道您要解决什么问题,就很难给出更好的答案。
【讨论】:
以上是关于Oracle Forms 编译器将类型标记为函数的主要内容,如果未能解决你的问题,请参考以下文章
如何将 Forms 10g 中创建/修改的 Form(FMB) 降级为 Oracle Forms 9
将构造函数标记为 __explicitly__ 需要对象类型