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
Xml 如何在ORACLE存储过程中将CLOB作为OUT参数返回_Xml_Oracle_Stored Procedures - Fatal编程技术网

Xml 如何在ORACLE存储过程中将CLOB作为OUT参数返回

Xml 如何在ORACLE存储过程中将CLOB作为OUT参数返回,xml,oracle,stored-procedures,Xml,Oracle,Stored Procedures,我想在OracleSQLDeveloper中为我的存储过程返回一个XML输出,如果有比CLOB更好的方法,我想以CLOBDatatypeSuggest的形式返回它。 我试着用谷歌搜索,但找不到任何有用的资源 提前感谢。这里有一个简单的例子 CREATE TABLE "XML_STUFF" ( "COLUMN1" NUMBER(*,0) NOT NULL ENABLE, "XML_STUFF" "SYS"."XMLTYPE" , CONSTRAINT "XML_

我想在OracleSQLDeveloper中为我的存储过程返回一个XML输出,如果有比CLOB更好的方法,我想以CLOBDatatypeSuggest的形式返回它。 我试着用谷歌搜索,但找不到任何有用的资源


提前感谢。

这里有一个简单的例子

CREATE TABLE "XML_STUFF" 
   (    "COLUMN1" NUMBER(*,0) NOT NULL ENABLE, 
    "XML_STUFF" "SYS"."XMLTYPE" , 
     CONSTRAINT "XML_STUFF_PK" PRIMARY KEY ("COLUMN1")
  USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "USERS"  ENABLE
   ) SEGMENT CREATION IMMEDIATE 
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 
 NOCOMPRESS LOGGING
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "USERS" 
 XMLTYPE COLUMN "XML_STUFF" STORE AS SECUREFILE CLOB (
  TABLESPACE "USERS" ENABLE STORAGE IN ROW CHUNK 8192
  NOCACHE LOGGING  NOCOMPRESS  KEEP_DUPLICATES 
  STORAGE(INITIAL 106496 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)) ;

-- insert some XML/records into your table

CREATE OR REPLACE PROCEDURE OUT_XML 
(
  PARAM1 IN INTEGER 
, PARAM2 OUT CLOB 
) AS 
 xml_bits xmltype;
BEGIN
  select xml_stuff into xml_bits 
  from demo.xml_stuff
  where column1 = param1;

  param2 := xml_bits.getclobval();
  dbms_output.put_line(param2); -- this is just here to make it easier to 'see'
END OUT_XML;

--run it!

DECLARE
  PARAM1 NUMBER;
  PARAM2 CLOB;
BEGIN
  PARAM1 := 1;

  DEMO.OUT_XML(
    PARAM1 => PARAM1,
    PARAM2 => PARAM2
  );
  /* Legacy output: 
DBMS_OUTPUT.PUT_LINE('PARAM2 = ' || PARAM2);
*/ 
  :PARAM2 := PARAM2;
--rollback; 
END;

您的数据究竟是如何存储的?例如,您可以将XML存储为CLOB。OUT参数作为CLOB位相当简单。将数据转换为CLOB也很容易,因为有像getClobValYes这样的函数,我将XML存储为CLOB,并作为OUT参数返回。我对Oracle非常陌生,因此无法理解它。您会发现此资源也很有价值。我想,当我的列datatype存储在表中的XML为clob时,如何处理相同的问题。在您的示例中,XML数据保存在xmltype datatype列中,XML_STUFF.Its为CLOB数据类型抛出一个错误:Error9,10:PL/SQL:ORA-00932:不一致的数据类型:预期数量得到CLOBI如果它只是一个CLOB,则不需要函数调用getclobval。您试图将CLOB传递给数字的原因是什么?相应地进行了修改,并且我更新的存储过程在我的问题中看起来已编辑。请参阅。