【问题标题】:Unable to call an Oracle Function无法调用 Oracle 函数
【发布时间】:2013-04-20 12:25:40
【问题描述】:

我有一个包含如下函数的包,它需要一个参数是数组。

create or replace PACKAGE selected_pkg IS

TYPE NUM_ARRAY IS TABLE OF NUMBER;

FUNCTION get_selected_kml(
  in_layer        IN NUMBER,
  in_solm_id      IN NUMBER,
  in_feature_ids  IN NUM_ARRAY, 
  in_lx           IN NUMBER,
  in_ly           IN NUMBER,
  in_ux           IN NUMBER,
  in_uy           IN NUMBER)
RETURN CLOB;

END selected_pkg;

现在我正在尝试从以下匿名块调用该函数:

declare
  result CLOB;
  TYPE NUM_ARRAY1 IS TABLE OF NUMBER;
  myarray NUM_ARRAY1 := NUM_ARRAY1 ();
begin
  myarray.extend(3);
  myarray(1) := 1;
  myarray(2) := 5;
  myarray(3) := 9;
  EXECUTE IMMEDIATE 'truncate table demoresult';
  result:=SELECTED_PKG.get_selected_kml(103, 19, myarray, 4.11, 56.27, 4.59, 56.39);
  insert into demoresult values(result);
  COMMIT;
end;

我遇到错误

PLS-00306:调用“GET_SELECTED_KML”时参数的数量或类型错误

有人可以建议我吗,我做错了什么?

谢谢, 阿兰卡

【问题讨论】:

  • 你基本上是在打this data compatibility restriction;尽管您的集合类型具有相同的元素类型,但它们不被视为等效。因此,您尝试使用与预期类型不同的类型调用该函数。正如贾斯汀的回答所示,您必须使用完全相同的集合类型。

标签: arrays function plsql oracle11g


【解决方案1】:

您需要使用与您的函数所期望的相同的数组类型

declare
  result CLOB;
  myarray selected_pkg.num_array := selected_pkg.num_array();
begin
  myarray.extend(3);
  myarray(1) := 1;
  myarray(2) := 5;
  myarray(3) := 9;
  EXECUTE IMMEDIATE 'truncate table demoresult';
  result:=SELECTED_PKG.get_selected_kml(103, 19, myarray, 4.11, 56.27, 4.59, 56.39);
  insert into demoresult values(result);
  COMMIT;
end;

【讨论】:

  • 如果我使用类似下面的东西,那么我也会得到错误:声明结果 CLOB; myarray selected_pkg.num_array := selected_pkg.num_array();开始 myarray.extend(3);我的数组(1):= 1;我的数组(2):= 5;我的数组(3):= 9; EXECUTE IMMEDIATE '从表中选择 column_value (cast(myarray AS selected_pkg.num_array))';犯罪;结尾;请建议。谢谢,艾伦
猜你喜欢
  • 1970-01-01
  • 2021-01-21
  • 2011-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多