Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.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
Oracle 如何在sql*plus中使用dbms_lob.substr_Oracle_Plsql_Plsqldeveloper_Plsql Package - Fatal编程技术网

Oracle 如何在sql*plus中使用dbms_lob.substr

Oracle 如何在sql*plus中使用dbms_lob.substr,oracle,plsql,plsqldeveloper,plsql-package,Oracle,Plsql,Plsqldeveloper,Plsql Package,给出一张表格: desc SOL_3_ARTIFACTS Name Null Type ---- ---- ------------- DATA BLOB ID VARCHAR2(100) 如果我需要使用SQL*plus将BLOB列的内容读取为VARCHR2,我需要这样的语句: 选择UTL_RAW.CAST_TO_VARCHAR2(dbms_lob.substr(lob_loc,2000,1)) 来自SOL_3_工件,其中ID

给出一张表格:

desc SOL_3_ARTIFACTS
Name Null Type          
---- ---- ------------- 
DATA      BLOB          
ID        VARCHAR2(100) 
如果我需要使用SQL*plus将BLOB列的内容读取为VARCHR2,我需要这样的语句:

选择UTL_RAW.CAST_TO_VARCHAR2(dbms_lob.substr(lob_loc,2000,1))
来自SOL_3_工件,其中ID='RETAILPOOLS'
有谁能告诉我如何获取特定行(ID='RETAILPOOLS')的lob_loc(即数据列的定位器)

根据保护者的建议,我运行了以下操作,但出现了错误:

DECLARE
     fil BFILE; 
     pos INTEGER;
     amt BINARY_INTEGER; 
     buf RAW(40); 
BEGIN 
     SELECT SOL_3_ARTIFACTS.DATA INTO fil from SOL_3_ARTIFACTS where ID = 'RETAILPOOLS';
     dbms_lob.open(fil, dbms_lob.lob_readonly);   
     amt := 40; pos := 1 + dbms_lob.getlength(fil); buf := ''; 
     dbms_lob.read(fil, amt, pos, buf); 
     dbms_output.put_line('Read F1 past EOF: '|| 
          utl_raw.cast_to_varchar2(buf)); 
     dbms_lob.close(fil); 
     exception 
     WHEN no_data_found 
     THEN 
       BEGIN 
         dbms_output.put_line('End of File reached. Closing file'); 
         dbms_lob.fileclose(fil); 
         -- or dbms_lob.filecloseall if appropriate 
       END; 
END; 

Error report -
ORA-06550: line 7, column 13:
PL/SQL: ORA-00932: inconsistent datatypes: expected FILE got BLOB
ORA-06550: line 7, column 6:
PL/SQL: SQL Statement ignored
ORA-06550: line 8, column 25:
PLS-00201: identifier 'DBMS_LOB' must be declared
ORA-06550: line 8, column 6:
PL/SQL: Statement ignored
ORA-06550: line 9, column 28:
PLS-00201: identifier 'DBMS_LOB' must be declared
ORA-06550: line 9, column 17:
PL/SQL: Statement ignored
ORA-06550: line 10, column 6:
PLS-00201: identifier 'DBMS_LOB' must be declared
ORA-06550: line 10, column 6:
PL/SQL: Statement ignored
ORA-06550: line 13, column 6:
PLS-00201: identifier 'DBMS_LOB' must be declared
ORA-06550: line 13, column 6:
PL/SQL: Statement ignored
ORA-06550: line 19, column 10:
PLS-00201: identifier 'DBMS_LOB' must be declared
ORA-06550: line 19, column 10:
PL/SQL: Statement ignored
06550. 00000 -  "line %s, column %s:\n%s"
*Cause:    Usually a PL/SQL compilation error.
*Action:
试着从这里开始

特别是粘贴在下面的这一部分指出,当您选择blob时,它将返回lob定位器

通过定位器访问LOB

选择LOB 对LOB执行选择将返回定位器而不是LOB值。在下面的PL/SQL片段中,为story选择LOB定位器,并将其放置在程序块中定义的PL/SQL定位器变量Image1中。使用PL/SQL DBMS_LOB函数操作LOB值时,使用定位器引用LOB

DECLARE
    Image1       BLOB;
    ImageNum     INTEGER := 101;
BEGIN
    SELECT story INTO Image1 FROM Multimedia_tab
        WHERE clip_id = ImageNum;
    DBMS_OUTPUT.PUT_LINE('Size of the Image is: ' ||
        DBMS_LOB.GETLENGTH(Image1));
    /* more LOB routines */
END;
见开放程序