此代码有效:
declare
--sql_stmt clob;
p_file_name varchar2(100);
TYPE c_crn IS TABLE OF VARCHAR2(1000);
l_crn_tab c_crn;
begin
p_file_name:='DCO_CRN_TEST.xlsx';
--sql_stmt:='select STRING_VAL bulk collect into l_crn_tab from TABLE( TABLEAU.as_read_xlsx.READ( TABLEAU.as_read_xlsx.file2blob(''EXRATE'','''||p_file_name||''') ) )';
select STRING_VAL bulk collect into l_crn_tab from TABLE( TABLEAU.as_read_xlsx.READ( TABLEAU.as_read_xlsx.file2blob('EXRATE',p_file_name) ) );
--EXECUTE IMMEDIATE stmt;
end;
如果它是动态执行的,它就不起作用:
declare
sql_stmt clob;
p_file_name varchar2(100);
TYPE c_crn IS TABLE OF VARCHAR2(1000);
l_crn_tab c_crn;
begin
p_file_name:='DCO_CRN_TEST.xlsx';
sql_stmt:='select STRING_VAL bulk collect into l_crn_tab from TABLE( TABLEAU.as_read_xlsx.READ( TABLEAU.as_read_xlsx.file2blob(''EXRATE'','||p_file_name||')))';
--select STRING_VAL bulk collect into l_crn_tab from TABLE( TABLEAU.as_read_xlsx.READ( TABLEAU.as_read_xlsx.file2blob('EXRATE',p_file_name) ) );
EXECUTE IMMEDIATE sql_stmt;
end;
错误:错误报告 -
ORA-00904:“DCO_CRN_TEST”。“XLSX”:无效标识符
ORA-06512:在第 10 00904 行
。00000 -“%s:无效标识符”
如何让操作员lob.open看到文件名 DCO_CRN_TEST.XLSX?
sql_stmt:=q'[select STRING_VAL bulk collect into l_crn_tab from TABLE( TABLEAU.as_read_xlsx.READ( TABLEAU.as_read_xlsx.file2blob('EXRATE','||p_file_name||')))]';
ORA-03001:功能未实现
ORA-06512:在线 10
03001. 00000 - “未实现的功能”
*原因:此功能未实现。
这条线上的 ORA-06512 在哪里:
dbms_lob.open( file_lob, dbms_lob.file_readonly );
在动态查询中,必须使用
USING绑定变量传递值。并且为了得到查询的结果,有必要bulk collect into将它从查询文本本身中取出,因为这个表达式在 SQL 中是无效的。看看这个可重现的例子需要改变什么:
结果: