需要帮助来调试代码

时间:2012-12-01 15:10:22

标签: sql oracle plsql

任何正文可以帮助我收到以下错误代码。

ORA-06550:第20行,第33栏:

PLS-00306:调用“||”

时参数的数量或类型错误

ORA-06550:第20行,第12栏:

PL / SQL:忽略语句

... condition1:如果我在我的参数化游标中明确地放置了值,那么直到第二个FOR循环它才会到达。并在打印'Inside'语句后执行。 条件2。如果我把变量作为参数,那么它就会给出上面提到的错误。

    DECLARE 
/* First cursor */
    CURSOR get_tables IS
     SELECT DISTINCT * FROM src_table_list tbl ;
/* Second cursor  */
    CURSOR get_columns(v_table_name varchar2) IS 
     SELECT SUBSTR (SYS_CONNECT_BY_PATH (column_name, ','), 2) csv 
      FROM (SELECT column_name , ROW_NUMBER () OVER (ORDER BY column_name ) rn,
               COUNT (*) OVER () cnt
          FROM USER_TAB_COLUMNS where table_name = v_table_name)
     WHERE rn = cnt
    -- and col.sn = v_sn
  START WITH rn = 1
  CONNECT BY rn = PRIOR rn + 1;

BEGIN 
 FOR i IN get_tables LOOP
dbms_output.put_line( 'Inside ' );
    FOR j IN get_columns(i.table_name) LOOP
       dbms_output.put_line('SELECT '|| j ||'FROM'||i.table_name||' ;' );
       dbms_output.put_line( ' ' );
    END LOOP;
 END LOOP;
END; 
/

1 个答案:

答案 0 :(得分:2)

您正在尝试在输出中连接j,但j是对游标中行的引用。这是一种不能隐式转换为字符串的类型,因此concat失败。

你可能打算写

dbms_output.put_line('SELECT '|| j.csv || ' FROM ' || i.table_name || ';');

PS。你用连接方式做什么?是用逗号分隔值吗?也许你可以使用LISTAGG, or my custom variant of it