首先写了一个包,包头声明了个自定义数组类型:TYPE lgn IS TABLE OF NVARCHAR2(20);
在包体里写了存储过程如下
procedure country_languages
  (  
  country_n in NVARCHAR2,
  c_n out NVARCHAR2,
  l_ns out lgn,
  ofls out lgn
    
  ) as
。。现在存储过程编译通过,但是在命令行里调用存储过程时出错:
SQL> declare
  2 -- Local variables here
  3 i integer;
  4 TYPE lgn IS VARRAY(20) OF NVARCHAR2(20); --可变数组
  5 c_n NVARCHAR2(20);
  6 l_ns varray;
  7 ofls varray;
  8 begin
  9 -- Test statements here
 10 traveler_assistance_package.country_languages('巴西', c_n,l_ns, ofls);
 11 end;
 12 /
  l_ns varray;
  *
第 6 行出现错误:
ORA-06550: 第 6 行, 第 13 列:
PLS-00201: 必须声明标识符 'VARRAY'
ORA-06550: 第 6 行, 第 13 列:
PL/SQL: Item ignored
ORA-06550: 第 7 行, 第 13 列:
PLS-00201: 必须声明标识符 'VARRAY'
ORA-06550: 第 7 行, 第 13 列:
PL/SQL: Item ignored
ORA-06550: 第 10 行, 第 61 列:
PLS-00320: 此表达式的类型声明不完整或格式不正确
ORA-06550: 第 10 行, 第 3 列:
PL/SQL: Statement ignored并且在JSP里面调用的话,也会提示出错:
java.sql.SQLException: 无效的名称模式: FOF.lgn明明lgn在包头里面已经声明了,怎么会出错呢?
是不是数组lgn没有初始化呢?我也不知道在哪里初始化大侠救救我们吧

解决方案 »

  1.   

    你包头你声明的type是个局部的变量,你的作用域只存在于你的整个包。只能在你的本包内使用。
    你在写plsql块的时候和你包头你声明的type是两个不同的类型,所以他肯定和你包体里声明的type
    不一致。你可以把包头你的type声明为一个全局的,使用
    create or replace TYPE lgn IS VARRAY(20) OF NVARCHAR2(20); 
    然后在plsql和包里使用同一个type类型就可以了
    good luck!!
      

  2.   


    是一个人?
    --已回复
    http://topic.csdn.net/u/20101226/00/3f6b66bf-cdb8-4abb-b8e7-d37b0a23b9d9.html?78320