oracle CSV文件的数据导出-->错误消息PLS-00201:ID 'COL_LIST'

xqk2d5yq  于 2023-04-29  发布在  Oracle
关注(0)|答案(1)|浏览(98)

我对SQL还是个新手,但我想创建一个将完整表导出为CSV的过程。我当前的SQL代码如下所示(Oracle SQL Developer):

CREATE OR REPLACE PROCEDURE DBPW_TEST (
   p_directory VARCHAR2,
   p_tabname   VARCHAR2,
   p_schema    VARCHAR2 DEFAULT USER)
IS
    tab_refcur        SYS_REFCURSOR;
    l_header          VARCHAR2(4000);
    l_zeile           VARCHAR2(4000);
    l_col_list        VARCHAR2(4000);
    l_stmt            VARCHAR2(4000);
    l_file            UTL_FILE.FILE_TYPE;
 BEGIN
    l_file := UTL_FILE.FOPEN(
        location  => UPPER(p_directory),
        filename  => p_tabname||'_'||TO_CHAR(sysdate,'yyyy-mm-dd-hh24-mi')||'.csv',
        open_mode => 'w',
     max_linesize => 32767);
  -- Zusammenstellung der Spaltenliste für die Überschriften-Zeile
    l_header := col_list(
            p_tabname => p_tabname,
             p_schema => p_schema,
              p_delim => ';');
  -- Die Überschriften werden in die Datei geschrieben
     UTL_FILE.PUT_LINE(l_file, l_header);
  -- Zusammenstellung der Spaltenliste für den Select
     l_col_list := col_list(
             p_tabname => p_tabname,
              p_schema => p_schema ,
               p_delim => q'[||';'||]', -- alternativ '||'';''||'
                p_trim => 1);
     l_stmt   := 'SELECT '||l_col_list||' FROM '||p_schema||'.'||p_tabname;
  -- Über den Ref Cursor werden die Spalteninhalte jeder Zeile
  -- als Strings aneinandergehängt
     OPEN tab_refcur FOR l_stmt;
     LOOP
  -- und in die Variable eingelesen
       FETCH tab_refcur INTO l_zeile;
       EXIT WHEN tab_refcur%NOTFOUND;
       -- mit der Prozedur PUT_LINE wird Zeile für Zeile geschrieben
     UTL_FILE.PUT_LINE(l_file, l_zeile);
    END LOOP;
    CLOSE tab_refcur;
   UTL_FILE.FCLOSE(l_file);
EXCEPTION
 WHEN OTHERS THEN
   -- hier sollte natürlich eine vernünftige Fehleraufzeichnung passieren
    DBMS_OUTPUT.PUT_LINE(SQLERRM);
    UTL_FILE.FCLOSE(l_file);
   RAISE;
END DBPW_TEST;

不幸的是,我收到错误消息PLS-00201:ID 'COL_LIST'。我不清楚如何或是否必须定义这一点。
有人能给予我一个提示/解决方案吗?
许多问候
我曾尝试在网上寻找解决方案并调整剧本,但遗憾的是没有成功

qltillow

qltillow1#

在你的代码中有两个“col_list“:

  • 一个是局部变量l_col_list
  • 另一种是函数调用,e.g的。
l_col_list := col_list( 
              --------
              here    
     p_tabname => p_tabname,
     p_schema => p_schema ,
     p_delim => q'[||';'||]', -- alternativ '||'';''||'
     p_trim => 1);

这是第二个似乎是“未知”的。什么是col_list?它是否存在于您的架构中?你有权限访问它吗(如果其他人拥有它)?据我所知,它不是一个内置函数。

相关问题