Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
DBMS_XMLQuery并选择进行更新_Xml_Oracle_Plsql - Fatal编程技术网

DBMS_XMLQuery并选择进行更新

DBMS_XMLQuery并选择进行更新,xml,oracle,plsql,Xml,Oracle,Plsql,我有以下PL/SQL代码: qrs := 'CURSOR cur IS SELECT * FROM ' || table|| ' WHERE ' || direction || '=0 AND rownum <= 2000 FOR UPDATE'; v_ctx := DBMS_XMLQuery.newContext(qrs); DBMS_XMLQuery.GetXML(v_ctx); DBMS_XMLQuery.closeContext(v_ctx); 谁能帮帮我吗?

我有以下PL/SQL代码:

qrs := 'CURSOR cur IS SELECT * FROM ' || table|| 
         ' WHERE ' || direction || '=0 AND rownum <= 2000 FOR UPDATE';
v_ctx := DBMS_XMLQuery.newContext(qrs);
DBMS_XMLQuery.GetXML(v_ctx);
DBMS_XMLQuery.closeContext(v_ctx);

谁能帮帮我吗?

我还没有玩过这个XML东西,但是

EXECUTE IMMEDIATE 'UPDATE ' || table || 
        ' SET ' || direction || ' = 4 WHERE CURRENT OF ' || cur;
cur是游标的标识符,而不是局部变量的内容,因此它更有可能与

EXECUTE IMMEDIATE 'UPDATE ' || table || 
        ' SET ' || direction || ' = 4 WHERE CURRENT OF cur';
这假设cur的上下文被保留,我怀疑它不会被保留。首先,“CURRENT”只包含一行,但您最多选择2000行。我认为您需要选择(最多)2000行的标识符,并分别进行更新

更广泛地描述这种情况可能有助于记录11g R2的使用情况

创建表so2in(id号、过程号、描述变量2(20));
插入so2in值(100,0,'desc of 100');
插入so2in值(101,0,'desc of 101');
插入so2in值(102,0,'desc of 102');
插入so2in值(103,0,'desc of 103');
插入so2in值(104,0,'desc of 104');
创建表so2out(r1 clob,r2 xmltype);
声明
qryctx dbms_xmlgen.ctxhandle;
当前系统参考光标;
r1-clob;
r2xmltype;
开始
开放

选择id,desc_u2;from so2in,其中proc=0和rownum非常感谢您的回答。我希望选择行并从中生成xml,然后更新这些行的方向列。我想我不能用DBMS_XMLQuery实现这一点,因为我不能给UPDATE语句提供教程。我试着用别的方法解决我的问题。再见!
EXECUTE IMMEDIATE 'UPDATE ' || table || 
        ' SET ' || direction || ' = 4 WHERE CURRENT OF cur';
create table so2in (id number, proc number, desc_ varchar2(20));

insert into so2in values(100, 0, 'desc of 100');
insert into so2in values(101, 0, 'desc of 101');
insert into so2in values(102, 0, 'desc of 102');
insert into so2in values(103, 0, 'desc of 103');
insert into so2in values(104, 0, 'desc of 104');

create table so2out(r1 clob, r2 xmltype);

declare
  qryctx dbms_xmlgen.ctxhandle;
  cur sys_refcursor;
  r1 clob;
  r2 xmltype;
begin
  open cur for
    select id, desc_ from so2in where proc = 0 and rownum <= 2 for update;

  qryctx := dbms_xmlgen.newcontext(cur);
  dbms_xmlgen.setrowtag(qryctx, 'Description');
  dbms_xmlgen.setrowsettag(qryctx, 'Descriptions');

  r1 := dbms_xmlgen.getxml(qryctx);

  update so2in set proc = 1 where proc = 0 and rownum <= 2;

  dbms_xmlgen.restartquery(qryctx);

  r2 := dbms_xmlgen.getxmltype(qryCtx);

  update so2in set proc = 1 where proc = 0 and rownum <= 2;

  insert into so2out values(r1, r2);

  dbms_xmlgen.closecontext(qryctx);

  commit;
end;
/