PLS-00382:表达式类型错误,PL/SQL:语句被忽略

Posted

技术标签:

【中文标题】PLS-00382:表达式类型错误,PL/SQL:语句被忽略【英文标题】:PLS-00382: expression is of wrong type ,PL/SQL: Statement ignored 【发布时间】:2015-01-20 12:09:33 【问题描述】:

我如何运行这些脚本?

DECLARE
 DBlink varchar2(20);
 type array_t is varray(2) of varchar2(20);
   array array_t := array_t('T', 'RA') ;
   BEGIN
  FOR i in 1..array.count 
  LOOP
  DBlink := array_t(i) ;
      insert into Database_size_2 (DBNAME,date1,Dbsize)values(DBlink,sysdate,11 ) ;
    END LOOP ;
 END ;

第 8 行的错误: ORA-06550:第 8 行,第 13 列: PLS-00382:表达式类型错误 ORA-06550:第 8 行,第 3 列: PL/SQL:语句被忽略

【问题讨论】:

【参考方案1】:

您的 PL/SQL 中有错字。您使用的是实际类型 array_t,而不是您在 DECLARE 块中定义的变量 array

DECLARE
   DBlink varchar2(20);
   type array_t is varray(2) of varchar2(20);
   array array_t := array_t('T', 'RA') ;
BEGIN
   FOR i in 1..array.count 
   LOOP
      DBlink := array(i) ;
      insert into Database_size_2 (DBNAME,date1,Dbsize) values (DBlink,sysdate,11 ) ;
   END LOOP ;
END;

您实际上根本不需要变量DBLink,而是可以直接使用数组条目:

DECLARE
   type array_t is varray(2) of varchar2(20);
   array array_t := array_t('T', 'RA') ;
BEGIN
   FOR i in 1..array.count 
   LOOP
      insert into Database_size_2 (DBNAME,date1,Dbsize) values (array(i),sysdate,11 ) ;
   END LOOP ;
END;

【讨论】:

以上是关于PLS-00382:表达式类型错误,PL/SQL:语句被忽略的主要内容,如果未能解决你的问题,请参考以下文章

ORA-06550:第 1 行,第 13 列:PLS-00382:表达式类型错误 ORA-06550:第 1 行,第 7 列:PL/SQL:语句被忽略

将值插入记录类型表

PLS-00382:表达式类型错误

PLS-00382:表达式的类型错误触发器

PLS-00382:表达式类型错误,无法显示 DBMS_OUTPUT.PUT_LINE

plsql 中的条件字符串,如 sprintf