【问题标题】:SQL stored Procedure With Cursor to update a tableSQL存储过程带游标更新表
【发布时间】:2011-04-01 09:23:13
【问题描述】:

我正在尝试使用存储过程更新一个表,但是它给出了一个错误,请解释是什么原因。这是代码。

CREATE OR REPLACE Procedure UpdateItem
   ( ITEM_TYPE_NAME IN varchar2 )
IS
    V_TABLE_NAME    VARCHAR2(100);
    V_R_TABLE_NAME  VARCHAR2(100);
    V_SQL_STMT     VARCHAR2(1000);

   cursor c1 is
    select C.RTARGETITEMID ||'#'||C.VERSIONID||'#'||trim(p.CREATEUSERID)||'#bsacm#CBR.CLLCT001# #/icmrm/ICMResourceManager#727665642020202020202020#2509.000000#9080#1#ICMNLSDB# #201#1#' as ITEM_REF, C.ITEMID as ITEM_ID 
    from  V_TABLE_NAME  C, V_R_TABLE_NAME R 
    where C.TIEFLAG = 0 and C.ITEMID=R.ITEMID;


BEGIN

select TABLE_NAME into V_TABLE_NAME 
from user_indexes 
where INDEX_NAME = (SELECT distinct c.INDEXNAME
                    FROM ICMSTNLSKEYWORDS k, ICMSTCOMPDEFS d, ICMSTTEXTINDEXES c
                    WHERE k.KEYWORDCLASS = 2 AND k.KEYWORDCODE = d.ITEMTYPEID AND d.COMPONENTTYPEID = c.COMPONENTTYPEID AND k.KEYWORDNAME = ITEM_TYPE_NAME);

select TABLE_NAME into V_R_TABLE_NAME 
from user_constraints 
where CONSTRAINT_NAME in (select distinct R_CONSTRAINT_NAME 
                          from user_constraints 
                          where TABLE_NAME in (select TABLE_NAME 
                                              from user_indexes 
                                              where INDEX_NAME = (SELECT distinct c.INDEXNAME
                                                                  FROM ICMSTNLSKEYWORDS k, ICMSTCOMPDEFS d, ICMSTTEXTINDEXES c
                                                                  WHERE k.KEYWORDCLASS = 2 AND k.KEYWORDCODE = d.ITEMTYPEID AND d.COMPONENTTYPEID = c.COMPONENTTYPEID AND k.KEYWORDNAME=ITEM_TYPE_NAME)));

open c1;
fetch c1 into V_SQL_STMT;
EXECUTE IMMEDIATE 'UPDATE V_TABLE_NAME set TIEFLAG = ''1'',TIEREF = c1.ITEM_REF WHERE ITEMID = ITEM.ITEM_ID';

commit;

close c1;

EXCEPTION
WHEN OTHERS THEN
      raise_application_error(-20001,'An error was encountered - '||SQLCODE||' -ERROR- '||SQLERRM);
END;

这是错误:

错误(9,5):PL/SQL:SQL 语句 忽略错误(10,28):PL/SQL: ORA-00942: 表或视图没有 存在

【问题讨论】:

  • 如果您发布代码或 XML,在文本编辑器中突出显示这些行,然后单击编辑器工具栏上的“代码示例”按钮 ( { } ) 以很好地格式化语法高亮!
  • 代码应该做什么?光标 c1 应该是什么?

标签: sql oracle oracle10g cursor ora-00942


【解决方案1】:

由于 V_TABLE_NAME 是一个变量,您需要在字符串中连接该变量。您这样做的方式假设您的系统中有一个名为 *V_TABLE_NAME* 的表。

据我所知,您需要换行:

EXECUTE IMMEDIATE 'UPDATE V_TABLE_NAME set TIEFLAG = ''1'',TIEREF = c1.ITEM_REF WHERE ITEMID = ITEM.ITEM_ID';

立即执行'更新'||V_TABLE_NAME||'设置 TIEFLAG = ''1'',TIEREF = c1.ITEM_REF WHERE ITEMID = ITEM.ITEM_ID';

【讨论】:

  • 感谢您的回答,更新代码后我得到以下错误错误(9,5):PL/SQL:SQL 语句被忽略错误(10,28):PL/SQL:ORA- 00942: 表或视图不存在
猜你喜欢
  • 2015-07-03
  • 1970-01-01
  • 2018-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多