任何正文可以帮助我收到以下错误代码。
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;
/
答案 0 :(得分:2)
您正在尝试在输出中连接j
,但j是对游标中行的引用。这是一种不能隐式转换为字符串的类型,因此concat失败。
你可能打算写
dbms_output.put_line('SELECT '|| j.csv || ' FROM ' || i.table_name || ';');
PS。你用连接方式做什么?是用逗号分隔值吗?也许你可以使用LISTAGG, or my custom variant of it。